Недавно мы писали про сложности разработки и развертывания 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 в корне папки. Этот файл является единственным источником истины о том, как модель может быть загружена и использована.
Рассмотрим пример файла 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. О том, какие новые фичи разработчики Databricks обещают в релизе Mlflow 2.0, читайте в нашей новой статье.
Узнайте, как внедрить лучшие практики MLOps с Apache Spark и другими инструментов аналитики больших данных, на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
· Разработка и внедрение ML-решений
· Машинное обучение в Apache Spark
1. https://medium.com/swlh/productionizing—machine—learning—models—bb7f018f8122
2. https://santiagof.medium.com/effortless—models—deployment—with—MLFlow-2b1b443ff157