Пошаговая практика кодирования
Когда мы настраиваем параметры модели машинного обучения, нам может потребоваться обучить ее несколько раз, чтобы выбрать лучшую модель. Если тренировок будет слишком много, у нас могут возникнуть две проблемы.
- Как мы отслеживаем параметры и показатели каждой модели? Записывать их вручную в файл 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.