Рекомендации по развертыванию моделей MLflow
ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)
В этой статье вы узнаете о развертывании моделей MLflow для Машинное обучение Azure как для вывода в режиме реального времени, так и для пакетного вывода. Узнайте также о различных средствах, которые можно использовать для управления развертыванием.
Развертывание моделей MLflow и пользовательских моделей
В отличие от развертывания пользовательской модели в Машинное обучение Azure при развертывании моделей MLflow для Машинное обучение Azure, вам не нужно предоставлять скрипт оценки или среду для развертывания. Вместо этого Машинное обучение Azure автоматически создает скрипт оценки и среду для вас. Эта функция называется развертыванием без кода.
Для развертывания без кода Машинное обучение Azure:
- Убедитесь, что все зависимости пакета, указанные в модели MLflow, удовлетворены.
- Предоставляет базовый образ MLflow или курированную среду, содержащую следующие элементы:
- Пакеты, необходимые для выполнения вывода Машинное обучение Azure, включая
mlflow-skinny
. - Скрипт оценки для выполнения вывода.
- Пакеты, необходимые для выполнения вывода Машинное обучение Azure, включая
Совет
Рабочие области без доступа к общедоступной сети. Перед развертыванием моделей MLflow в сетевых конечных точках без подключения к исходящим данным необходимо упаковать модели (предварительная версия). Используя упаковку моделей, можно избежать необходимости подключения к Интернету, Машинное обучение Azure в противном случае потребуется динамически установить необходимые пакеты Python для моделей MLflow.
Пакеты и зависимости Python
Машинное обучение Azure автоматически создает среды для выполнения вывода в моделях MLflow. Чтобы создать среды, Машинное обучение Azure считывает зависимости conda, указанные в модели MLflow, и добавляет все пакеты, необходимые для запуска сервера вывода. Эти дополнительные пакеты зависят от типа развертывания.
В следующем файле conda.yaml показан пример зависимостей conda, указанных в модели MLflow.
conda.yaml
channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
- mlflow==2.7.1
- cloudpickle==1.6.0
- dataclasses==0.6
- lz4==4.0.0
- numpy==1.23.5
- packaging==23.0
- psutil==5.9.0
- pyyaml==6.0
- scikit-learn==1.1.2
- scipy==1.10.1
- uuid==1.30
name: mlflow-env
Предупреждение
MLflow автоматически обнаруживает пакеты при ведении журнала модели и закрепляет версии пакетов в зависимости conda модели. Однако это автоматическое обнаружение пакетов может не всегда отражать ваши намерения или требования. В таких случаях рассмотрим модели ведения журнала с помощью пользовательского определения зависимостей conda.
Последствия использования моделей с сигнатурами
Модели MLflow могут включать сигнатуру, которая указывает ожидаемые входные данные и их типы. При развертывании таких моделей в сетевых или пакетных конечных точках Машинное обучение Azure применяется, что число и типы входных данных соответствуют сигнатуре. Если входные данные не могут быть проанализированы должным образом, вызов модели завершится ошибкой.
Сигнатуру модели MLflow можно проверить, открыв файл MLmodel, связанный с моделью. Дополнительные сведения о том, как подписи работают в MLflow, см. в разделе "Подписи" в MLflow.
В следующем файле показан файл MLmodel, связанный с моделью MLflow.
MLmodel
artifact_path: model
flavors:
python_function:
env:
conda: conda.yaml
virtualenv: python_env.yaml
loader_module: mlflow.sklearn
model_path: model.pkl
predict_fn: predict
python_version: 3.10.11
sklearn:
code: null
pickled_model: model.pkl
serialization_format: cloudpickle
sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
{"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
"s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
"double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
{"name": "s6", "type": "double"}]'
outputs: '[{"type": "double"}]'
Совет
Подписи в моделях MLflow являются необязательными, но настоятельно рекомендуется, так как они предоставляют удобный способ обнаружения проблем совместимости данных рано. Дополнительные сведения о том, как регистрировать модели с сигнатурами, см. в разделе "Модели ведения журнала" с помощью настраиваемой подписи, среды или примеров.
Модели, развернутые в Машинное обучение Azure и моделях, развернутых на встроенном сервере MLflow
MLflow включает встроенные средства развертывания, которые разработчики модели могут использовать для локального тестирования моделей. Например, можно запустить локальный экземпляр модели, зарегистрированной в реестре сервера MLflow, с помощью или с помощью mlflow models serve -m my_model
интерфейса командной строки mlflow models predict
MLflow.
Вывод с помощью пакетных и сетевых конечных точек
Машинное обучение Azure поддерживает развертывание моделей как в сети, так и в пакетных конечных точках. Эти конечные точки выполняют различные технологии вывода, которые могут иметь различные функции.
Сетевые конечные точки похожи на встроенный сервер MLflow, который предоставляет масштабируемый, синхронный и упрощенный способ выполнения моделей для вывода.
С другой стороны, конечные точки пакетной службы могут выполнять асинхронное вывод над длительными процессами вывода, которые могут масштабироваться до больших объемов данных. В настоящее время сервер MLflow не имеет этой возможности, хотя аналогичная возможность может быть достигнута с помощью заданий Spark. Дополнительные сведения о конечных точках пакетной службы и моделях MLflow см. в статье Об использовании моделей MLflow в пакетных развертываниях.
В следующих разделах подробно описаны модели MLflow, развернутые для Машинное обучение Azure сетевых конечных точек.
Форматы входных данных
Тип Ввода | Встроенный сервер MLflow | Машинное обучение Azure сетевые конечные точки |
---|---|---|
Кадры данных pandas, сериализованные в формате JSON, в ориентации разделения | ✓ | ✓ |
Кадры данных pandas, сериализованные в формате JSON, в ориентации записей | Устарело | |
Кадры данных pandas, сериализованные в формате CSV | ✓ | Использование пакета1 |
Формат входного тензора в виде сериализованных в формате JSON списков (тензоров) и словаря списков (именованных тензоров) | ✓ | ✓ |
Входные данные Tensor, отформатированные как в API обслуживания TF | ✓ |
1 Рассмотрите возможность использования пакетного вывода для обработки файлов. Дополнительные сведения см. в статье "Развертывание моделей MLflow в конечных точках пакетной службы".
Входная структура
Независимо от используемого типа ввода, Машинное обучение Azure требует предоставления входных данных в полезные данные JSON в ключе input_data
словаря. Так как этот ключ не требуется при использовании команды mlflow models serve
для обслуживания моделей, полезные данные нельзя использовать взаимозаменяемо для Машинное обучение Azure сетевых конечных точек и встроенного сервера MLflow.
Важно!
Рекомендации MLflow 2.0. Обратите внимание, что структура полезных данных изменилась в MLflow 2.0.
В этом разделе показаны различные примеры полезных данных и различия для модели, развернутой на встроенном сервере MLflow, и на сервере вывода Машинное обучение Azure.
Пример полезных данных для кадра данных, сериализованного в ФОРМАТЕ JSON, в разделенной ориентации
{
"input_data": {
"columns": [
"age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
],
"index": [1],
"data": [
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
}
Пример полезных данных для входного тензора
{
"input_data": [
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
[1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
[1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
]
}
Пример полезных данных для именованного входного тензора
{
"input_data": {
"tokens": [
[0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
],
"mask": [
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
}
}
Дополнительные сведения о встроенных средствах развертывания MLflow см . в документации по MLflow встроенным средствам развертывания.
Настройка вывода при развертывании моделей MLflow
Вы можете использовать для разработки скриптов оценки, чтобы настроить способ выполнения вывода для пользовательских моделей. Однако при развертывании моделей MLflow для Машинное обучение Azure решение о том, как следует выполнять вывод, выполняется построителем моделей (человеком, который создал модель), а не инженером DevOps (человеком, который пытается развернуть его). Каждая платформа модели может автоматически применять определенные подпрограммы вывода.
В любой момент, если вам нужно изменить способ выполнения вывода модели MLflow, можно выполнить одно из двух действий:
- Измените способ входа модели в подпрограмму обучения.
- Настройте вывод с помощью скрипта оценки во время развертывания.
Изменение способа ведения журнала модели во время обучения
При регистрации модели с помощью или , используемого для модели, определяет mlflow.autolog
mlflow.<flavor>.log_model
, как следует выполнять вывод и какие результаты возвращает модель. MLflow не применяет какое-либо конкретное поведение для того, как predict()
функция создает результаты.
Однако в некоторых случаях может потребоваться выполнить предварительную обработку или после выполнения модели. В других случаях может потребоваться изменить возвращаемое значение (например, вероятности и классы). Одним из решений является реализация конвейеров машинного обучения, которые переходят от входных данных к выходным данным напрямую. Например, sklearn.pipeline.Pipeline
или pyspark.ml.Pipeline
являются популярными способами реализации конвейеров и иногда рекомендуется учитывать производительность. Другой альтернативой является настройка способа вывода модели с помощью пользовательского вкуса модели.
Настройка вывода с помощью скрипта оценки
Хотя для моделей MLflow не требуется скрипт оценки, при необходимости его можно предоставить. Скрипт оценки можно использовать для настройки способа выполнения вывода для моделей MLflow. Дополнительные сведения о настройке вывода см. в разделе "Настройка развертываний моделей MLflow ( сетевых конечных точек) и настройка развертываний моделей MLflow (пакетные конечные точки)".
Важно!
Если вы решили указать скрипт оценки для развертывания модели MLflow, необходимо также предоставить среду для развертывания.
Средства развертывания
Машинное обучение Azure предлагает множество способов развертывания моделей MLflow в сетевых и пакетных конечных точках. Вы можете развернуть модели с помощью следующих средств:
- Пакет SDK для MLflow
- Интерфейс командной строки службы "Машинное обучение Azure"
- Пакет SDK для Машинного обучения Azure для Python
- Студия машинного обучения Azure
Каждый рабочий процесс обладает разными возможностями, особенно в отношении целевого типа вычислений. В следующей таблице показаны различные возможности.
Сценарий | Пакет SDK для MLflow | Машинное обучение Azure CLI/SDK | Студия машинного обучения Azure |
---|---|---|---|
Развертывание в управляемых сетевых конечных точках | См. пример1 | См. пример1 | См. пример1 |
Развертывание в управляемых сетевых конечных точках (с помощью скрипта оценки) | Не поддерживается3 | Ознакомьтесь с примером ниже | Ознакомьтесь с примером ниже |
Развертывание в конечных точках пакетной службы | Не поддерживается3 | Ознакомьтесь с примером ниже | Ознакомьтесь с примером ниже |
Развертывание в конечных точках пакетной службы (с помощью скрипта оценки) | Не поддерживается3 | Ознакомьтесь с примером ниже | Ознакомьтесь с примером ниже |
Развертывание в веб-службах (ACI/AKS) | Устаревшая поддержка2 | Не поддерживается2 | Не поддерживается2 |
Развертывание в веб-службах (ACI/AKS — с помощью скрипта оценки) | Не поддерживается3 | Устаревшая поддержка2 | Устаревшая поддержка2 |
1 Развертывание в сетевых конечных точках, которые находятся в рабочих областях с включенным приватным каналом, требует пакет моделей перед развертыванием (предварительная версия).
2 . Вместо этого рекомендуется переключиться на управляемые сетевые конечные точки.
3 MLflow (OSS) не имеет концепции скрипта оценки и не поддерживает пакетное выполнение в настоящее время.
Какое средство развертывания следует использовать?
Используйте пакет SDK MLflow, если оба из этих условий применяются:
- Вы знакомы с MLflow или используете платформу, которая поддерживает MLflow в собственном коде (например, Azure Databricks).
- Вы хотите продолжать использовать тот же набор методов из MLflow.
Используйте интерфейс командной строки Машинное обучение Azure версии 2, если применяются следующие условия:
- Вы более знакомы с Машинное обучение Azure CLI версии 2.
- Вы хотите автоматизировать развертывания с помощью конвейеров автоматизации.
- Вы хотите сохранить конфигурацию развертывания в репозитории Git.
Используйте развертывание пользовательского интерфейса Студия машинного обучения Azure, если вы хотите быстро развернуть и протестировать модели, обученные с помощью MLflow.