Пошаговая практика кодирования

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

  • Как мы отслеживаем параметры и показатели каждой модели? Записывать их вручную в файл Excel? Это было бы утомительно и чревато ошибками.
  • Как мы обновляем каждую модель? Сохранить их на диск с разными именами для каждого? Было бы сложно вспомнить, какая модель по каким параметрам пришла.

MLFlow - то, что нам нужно для решения этих проблем. Это мощный инструмент MLOps для отслеживания моделей машинного обучения, управления версиями, упаковки и т. Д. В этом блоге мы сосредоточимся на отслеживании и управлении версиями. Что касается отслеживания, MLFlow может отслеживать параметры, показатели и модели. Что касается управления версиями, MLFlow хранит модели в реестре моделей, после чего пользователи могут легко выбрать конкретную версию.

MLFlow можно запускать локально или из контейнера докеров, а также можно развернуть в кубернетах. У него есть API на Python, Java, R и REST.

В этом блоге мы продемонстрируем, как использовать mlflow для отслеживания и версии моделей классификации mnist. Сначала мы запустим пример MNIST с tenorflow, а затем расширим код для интеграции mlflow.

Пример MNIST

Сначала создайте виртуальную среду и pip установите tensorflow и mlflow.

# my version is 2.6.0
pip install tensorflow
# my version is 4.4.0
pip install tensorflow_datasets
# my version is 1.9.1
pip install mlflow

Ниже приведен код для запуска классификации mnist с использованием тензорного потока.

Запустите код, и вы должны увидеть журнал, как показано ниже. Он также сохраняет модели в папке моделей.

Отслеживание MLFlow

Теперь давайте проследим за параметрами, показателями, а также артефактами (моделями). См. Код ниже (также см. Полный код внизу). Во-первых, нам нужно назвать пробег. Мы даже можем назвать эксперимент (более высокий уровень прогонов), если захотим. Затем мы используем функции log_param, log_metric и log_artifacts для регистрации параметров, показателей и артефактов.

import mlflow
with mlflow.start_run(run_name=run_name):
  mlflow.log_param("batch_size", batch_size)
  mlflow.log_param("learning_rate", learning_rate)
  mlflow.log_param("epochs", epochs)
  mlflow.log_metric("train_loss", train_loss)
  mlflow.log_metric("train_accuracy", train_acc)
  mlflow.log_metric("val_loss", val_loss)
  mlflow.log_metric("val_accuracy", val_acc)
  mlflow.log_artifacts("./model")

После запуска кода mlflow мы видим, что на нашем диске появилась новая папка с именем mlruns . Это место, где параметры, метрики и артефакты хранятся локально.

Затем мы можем настроить некоторые параметры, например, изменить batch_size и learning_rate. Каждый запуск будет регистрироваться в mlflow.

Теперь давайте рассмотрим все запуски в пользовательском интерфейсе mlflow. В виртуальной среде введите:

mlflow ui

Затем перейдите по адресу http: // localhost: 5000 /. Мы видим, что там регистрируются все прогоны. Параметры, метрики и названия прогонов четко видны на одной странице.

Если мы щелкнем по запуску, мы сможем увидеть более подробную информацию об этом запуске. Помимо параметров и показателей, в разделе Артефактов в нижнем левом углу показаны наши артефакты (модели).

URL-адрес каждого запуска имеет следующий формат. Идентификаторы запуска в каждом эксперименте уникальны.

http://localhost:5000/#/experiments/<experiment id>/runs/<run id>

Управление версиями модели MLFlow

Реестр моделей MLflow - это центральное место для хранения и версии моделей. С его помощью модель имеет итеративную версию от (например) v1, v2,… до v10. Для каждой модели и версии мы можем написать описание уценки (например, подробные параметры) вместе с ним, чтобы позже мы знали, что представляет собой модель. Кроме того, мы можем пометить версию с помощью Staging, Production или Archived.

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

import mlflow.tensorflow
from tensorflow.python.saved_model import signature_constants
tag=[tf.saved_model.tag_constants.SERVING]
key=signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY
mlflow.tensorflow.log_model(tf_saved_model_dir="./model",
                            tf_meta_graph_tags=tag,
                            tf_signature_def_key=key,
                            artifact_path="model",
                            registered_model_name="mnist")

В заключение, MLFlow - это мощный инструмент MLOps для отслеживания и версии моделей машинного обучения. Он поддерживает API-интерфейсы на python, java, R и т. Д. Благодаря приятному пользовательскому интерфейсу мы можем четко отслеживать, хранить и сравнивать различные версии моделей. MLFlow стал популярным инструментом MLOps во многих проектах ML.

Ниже приведен полный код для классификации mnist в тензорном потоке с отслеживанием mlflow.