MLOps-конвейер с MLFlow: CI/CD для модели машинного обучения

Автор Категория ,
MLOps-конвейер с MLFlow: CI/CD для модели машинного обучения

Недавно мы писали про сложности разработки и развертывания ML-систем и способы их решения с помощью концепции MLOps. Продолжая эту тему, важную для обучения специалистов по Data Science, аналитиков и инженеров данных, сегодня рассмотрим основные некоторые преимущества фреймворка MLFlow для создания надежных конвейеров CI/CD в системах машинного обучения.

CI/CD в MLOps

В традиционных программных системах непрерывная интеграция и доставка (CI/CD) — это DevOps-подход, который обеспечивает автоматизацию, качество и дисциплину для создания надежного, предсказуемого и воспроизводимого процесса выпуска ПО в производство. В случае ML-систем CI/CD усложняется тем, что изменения в модели машинного обучения и обучающие данные также должны управляться вместе с кодом.

Таким образом, в отличие от традиционного DevOps, MLOps имеет еще 2 шага при каждом запуске CI/CD. Непрерывная интеграция в машинное обучение означает перезапуск ML-конвейера каждый раз при обновлении кода или данных, что запускает новые процессы сборки и тестирования. Если все тесты пройдены успешно, начинается непрерывное развертывание, которое внедряет изменения в промышленную среду. Так в MLOps появляется этап CT (Continuous Training), который относится к автоматизации самого обучения.

Для этого есть специализированные MLOps-инструменты: Gradient, dat, DVC, gitLFS и MLFlow, который сегодня весьма стал весьма популярным. Есть разные подходы к внедрению моделей машинного обучения в производственные среды, о чем мы поговорим в следующий раз. Выбор стратегии развертывания зависит от бизнес-требований и от особенностей использования результатов ML-моделирования. MLFlow позволяет сохранять модели машинного обучения в формате с открытым исходным кодом, чтобы облегчить последующее развертывание. Как он работает, мы рассмотрим далее.

Что такое MLFlow и как это работает

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

Кроме того, в MLFlow есть возможность введения автономной спецификации MLModel для моделей, поддерживающих любую современную среду Machine Learning. Преимущество этой спецификации в том, что она не только позволяет сохранять модели в стандартном формате с открытым исходным кодом, но и позволяет легко развертывать их в контейнерах. Это позволит снизить долю проектов, которые не попадают в производство: сейчас почти 90% создаваемых моделей машинного обучения не выходят в production. Очень часто это случается из-за проблем с переходом от среды разработки к промышленной.

MLFlow не зависит от фреймворка, т.е. может работать с несколькими библиотеками машинного обучения: FastAI, TensorFlow Keras, Scikit-Learn и пр. Модели регистрируются на сервере отслеживания MLFlow для конкретного запуска и сохраняется  в реестре моделей с использованием спецификации MLModel. MLFlow поддерживает модели ведения журнала в fastai, gluon, pyspark, pytorch, tensorflow, xgboost, catboost, h2o, keras, lightgbm, mleap, onnx, Prophet, Spacy, Spark и StatsModels.

MLFlow имеет особый способ упаковки моделей спецификации MLModel. Они сохраняются в папках, а не в отдельных файлах. Папка содержит произвольное количество файлов вместе с особым файлом под названием MLModel в корне папки. Этот файл является единственным источником истины о том, как модель может быть загружена и использована.

MLModel MLFlow
Упаковка ML-моделей спецификации MLModel

Рассмотрим пример файла MLFlow-спецификации для модели бинарной классификации, созданной с использованием библиотеки глубокого обучения FastAI:

artifact_path: classifier
flavors:
fastai:
data: model.fastai
fastai_version: 2.4.1

python_function:
data: model.fastai
env: conda.yaml
loader_module: MLFlow.fastai
python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537

signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, -1, -1, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
utc_time_created: '2022-02-24 21:56:17.489543'

В этой спецификации указаны следующие характеристики:

  • artifact_path — путь, по которому модель была сохранена внутри прогона;
  • flavors — способы вызова модели, которые позволяют MLFlow понимать любую модель, созданную с помощью поддерживаемых ими платформ машинного обучения. Например, fastai и python_function. fastai — это вариант, который позволяет загружать модель с помощью FastAI API. Вариант fastai указывает на некоторые другие поля, в том числе данные — место, где размещена модель, и fastai_version — что означает версию используемой библиотеки fastai.
  • model_uuid — уникальный идентификатор модели;
  • run_id —идентификатор запуска или запуска эксперимента, пробной версии и пр., который сгенерировал эту модель;
  • utc_time_created – метка времени создания этой модели;
  • signature – подпись, указывает, какие ожидаемые входные данные для этой модели и какие ожидаемые выходные данные. Подписи моделей — важная часть спецификации модели, поскольку они служат контрактом данных между моделью и сервером, на котором выполняются модели. Это особенно важно, с учетом автоматического анализа данных в MLFlow. К примеру, проверка типов и их преобразование будут происходить при отправке данных в модель.

Папка MLModel также содержит файл conda.yml, который указывает, как создать среду conda вместе со всеми необходимыми зависимостями для запуска модели. Это нужно для обеспечения воспроизводимости и совместимости, чтобы запускать ML-модели в производстве так же, как они были созданы их разработчиком, т.е. специалистом по Data Science.

Узнайте, как внедрить лучшие практики MLOps с Apache Spark и другими инструментов аналитики больших данных, на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

·       Разработка и внедрение ML-решений

·       Машинное обучение в Apache Spark

Источники

1.       https://medium.com/swlh/productionizingmachinelearningmodelsbb7f018f8122

2.       https://santiagof.medium.com/effortlessmodelsdeploymentwithMLFlow-2b1b443ff157