Как инженер по машинному обучению, когда мне нужно работать над новой проблемой, я начинаю с создания записной книжки Jupyter и начинаю писать код, но после некоторой итерации структура проекта начинает выглядеть так.

Каждая записная книжка может содержать другую конфигурацию модели вместе с метриками. Проводя эксперименты таким образом, нам нужно сравнивать вручную, что не является хорошим решением. Чтобы решить эту проблему, мы начали изучать инструменты, которые помогают нам на каждом этапе жизненного цикла машинного обучения. К счастью, я нашел MLflow. В этом блоге я напишу, как вы можете настроить MLflow на своей машине и упростить себе путь к ML.

Давайте установим пакет

pip install tensorflow mlflow tensorflow_datasets

Теперь, когда мы установили необходимые пакеты, давайте их импортируем.

import tensorflow as tf
import tensorflow_datasets as tfds
import mlflow.tensorflow 
import logging

Для инициализации необходимых логгеров

logging.basicConfig(level=logging.WARN)
logger = logging.getLogger(__name__)
mlflow.tensorflow.autolog(every_n_iter=1)

Здесь мы будем использовать пакет tensorflow_dataset для загрузки набора данных mnist.

(ds_train, ds_test), ds_info = tfds.load(
    'mnist',
    split=['train', 'test'],
    shuffle_files=True,
    as_supervised=True,
    with_info=True,
)

Теперь готовим наборы данных для обучения с помощью пакета tesnsorflow_dataset.

def normalize_img(image, label):
  """Normalizes images: `uint8` -> `float32`."""
  return tf.cast(image, tf.float32) / 255., label
ds_train = ds_train.map(
    normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)
ds_train = ds_train.batch(128)
ds_train = ds_train.prefetch(tf.data.experimental.AUTOTUNE)

Давайте просто инициализируем mlflow и позволим библиотеке позаботиться о том, что нужно регистрировать.

with mlflow.start_run():
    ds_test = ds_test.map(
        normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
    ds_test = ds_test.batch(128)
    ds_test = ds_test.cache()
    ds_test = ds_test.prefetch(tf.data.experimental.AUTOTUNE)

    model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(input_shape=(28, 28)),
        tf.keras.layers.Dense(128, activation='relu'),
        tf.keras.layers.Dense(10)
    ])

    lr = 0.001
    metric = tf.keras.metrics.SparseCategoricalAccuracy()

    model.compile(
        optimizer=tf.keras.optimizers.Adam(0.001),
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        metrics=[metric],
    )

    summary = model.fit(
        ds_train,
        epochs=6,
        validation_data=ds_test,
    )

После выполнения вышеуказанного кода создается новая папка с именем «mlruns». Внутри mlruns он содержит необходимый файл и конфигурацию для пользовательского интерфейса MLFlow. Чтобы запустить пользовательский интерфейс, вам необходимо выполнить следующую команду в своем терминале.

mlflow ui

По умолчанию он использует порт 5000, а при переходе на 127.0.0.1:500. Вы увидите красивый пользовательский интерфейс, который содержит подробную информацию о каждом вашем выполнении. Вы можете поиграть с ним, чтобы узнать больше о том, что он дает.