Рекомендации по развертыванию моделей MLflow
ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения Azure CLI версии 2 (текущее)
В этой статье вы узнаете о развертывании моделей MLflow для Машинное обучение Azure для вывода в режиме реального времени и пакетной обработки, а также о различных средствах, которые можно использовать для управления развертываниями.
Развертывание без кода
При развертывании моделей MLflow в Машинное обучение Azure, в отличие от развертывания пользовательской модели, вам не нужно предоставлять скрипт оценки или среду. Машинное обучение Azure автоматически создает скрипт оценки и среду для вас. Эта функция называется развертыванием без кода.
Для развертывания без кода Машинное обучение Azure:
- Убедитесь, что все зависимости пакета, указанные в модели MLflow, удовлетворены.
- Предоставляет базовый образ MLflow или курированную среду, содержащую следующие элементы:
- Пакеты, необходимые для выполнения вывода Машинное обучение Azure, включая
mlflow-skinny
. - Скрипт оценки для выполнения вывода.
- Пакеты, необходимые для выполнения вывода Машинное обучение Azure, включая
Совет
Рабочие области без доступа к общедоступной сети. Перед развертыванием моделей MLflow в сетевых конечных точках без подключения к исходящим данным необходимо упаковать модели (предварительная версия). Используя упаковку моделей, можно избежать необходимости подключения к Интернету, Машинное обучение Azure в противном случае потребуется динамически установить необходимые пакеты Python для моделей MLflow.
Пакеты и зависимости
Машинное обучение Azure автоматически создает среды для выполнения вывода в моделях MLflow. Чтобы создать среды, Машинное обучение Azure считывает зависимости conda, указанные в модели MLflow, и добавляет все пакеты, необходимые для запуска сервера вывода. Эти дополнительные пакеты зависят от типа развертывания.
В следующем примере файла conda.yaml показаны зависимости conda, указанные в модели MLflow.
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 модели. Это автоматическое обнаружение пакетов может не отражать ваши намерения или требования. Кроме того, можно записывать модели с помощью пользовательской подписи, среды или примеров.
Модели с сигнатурами
Модели MLflow могут включать сигнатуру, которая указывает ожидаемые входные данные и их типы. При развертывании таких моделей в сетевых или пакетных конечных точках Машинное обучение Azure гарантирует, что количество и типы входных данных соответствуют сигнатуре. Если входные данные не могут быть проанализированы должным образом, вызов модели завершается сбоем.
Сигнатуру модели MLflow можно проверить, открыв файл MLmodel. Дополнительные сведения о том, как подписи работают в MLflow, см. в разделе "Подписи" в MLflow.
В следующем примере MLmodel-файл выделяется signature
.
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 рекомендуется использовать, так как они предоставляют удобный способ обнаружения проблем совместимости данных. Дополнительные сведения о том, как регистрировать модели с сигнатурами, см. в разделе "Модели ведения журнала" с помощью настраиваемой подписи, среды или примеров.
Развертывание на встроенном сервере MLflow и развертывании в Машинное обучение Azure сервере вывода
Разработчики моделей могут использовать встроенные средства развертывания MLflow для локального тестирования моделей. Например, можно запустить локальный экземпляр модели, зарегистрированной в реестре серверов MLflow, с помощью mlflow models serve
или интерфейса командной строки mlflow models predict
MLflow. Дополнительные сведения о встроенных средствах развертывания MLflow см . в документации по MLflow встроенным средствам развертывания.
Машинное обучение Azure также поддерживает развертывание моделей в сетевых и пакетных конечных точках. Эти конечные точки выполняют различные технологии вывода, которые могут иметь различные функции.
Машинное обучение Azure сетевые конечные точки, аналогичные встроенному серверу MLflow, предоставляют масштабируемый, синхронный и упрощенный способ выполнения моделей для вывода.
Машинное обучение Azure конечные точки пакетной службы могут выполнять асинхронное выводение по длительным процессам вывода, которые могут масштабироваться до больших объемов данных. Сервер MLflow не имеет этой возможности, хотя вы можете достичь аналогичной возможности с помощью заданий Spark. Дополнительные сведения о конечных точках пакетной службы и моделях MLflow см. в статье Об использовании моделей MLflow в пакетных развертываниях.
Форматы входных данных
В следующей таблице показаны типы входных данных, поддерживаемые встроенным сервером MLflow, и Машинное обучение Azure сетевые конечные точки.
Тип Ввода | Встроенный сервер MLflow | Машинное обучение Azure конечная точка в Сети |
---|---|---|
Кадры данных pandas, сериализованные в формате JSON, в ориентации разделения | ✓ | ✓ |
Кадры данных pandas, сериализованные в формате JSON, в ориентации записей | Устарело | |
Кадры данных pandas, сериализованные в формате CSV | ✓ | Используйте пакетное выводение. Дополнительные сведения см. в статье "Развертывание моделей MLflow в конечных точках пакетной службы". |
Входные данные TensorFlow в виде сериализованных в формате JSON (tensors) и словаря списков (именованных тензоров) | ✓ | ✓ |
Входные данные TensorFlow с помощью API обслуживания TensorFlow | ✓ |
В следующих разделах рассматриваются модели MLflow, развернутые в Машинное обучение Azure сетевых конечных точек.
Входная структура
Независимо от типа входных данных, Машинное обучение Azure требует предоставления входных данных в полезные данные JSON в ключе input_data
словаря. Этот ключ не требуется при использовании команды mlflow models serve
для обслуживания моделей, поэтому полезные нагрузки нельзя использовать взаимозаменяемо для Машинное обучение Azure сетевых конечных точек и встроенного сервера MLflow.
Внимание
Структура полезных данных изменилась в MLflow 2.0.
В следующих примерах полезных данных показаны различия между моделью, развернутой на встроенном сервере MLflow, и сервером вывода Машинное обучение Azure.
Json-сериализованные pandas DataFrame в разделенной ориентации
{
"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]
]
}
}
Входные данные Tensor
{
"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.autolog
одного или или того же mlflow.<flavor>.log_model
вкуса, используемого для модели, определяется способ выполнения вывода и возвращаемых результатов. MLflow не применяет какое-либо конкретное поведение для того, как predict()
функция создает результаты.
В некоторых случаях может потребоваться выполнить предварительную обработку или после выполнения модели. Или вы можете изменить возвращаемое значение; например, вероятности вместо классов. Одним из решений является реализация конвейеров машинного обучения, которые переходят от входных данных к выходным данным напрямую.
Например, sklearn.pipeline.Pipeline
или pyspark.ml.Pipeline
являются популярными способами реализации конвейеров и иногда рекомендуется по соображениям производительности. Вы также можете настроить способ вывода модели путем ведения журнала пользовательских моделей.
Настройка вывода с помощью скрипта оценки
Хотя для моделей MLflow не требуется скрипт оценки, при необходимости можно настроить выполнение вывода для моделей MLflow. Дополнительные сведения о настройке вывода см. в статье "Настройка развертываний модели MLflow для сетевых конечных точек" или "Настройка развертывания модели" с помощью скрипта оценки для конечных точек пакетной службы.
Внимание
Если вы решили указать скрипт оценки для развертывания модели MLflow, необходимо также предоставить среду для развертывания.
Средства развертывания
Машинное обучение Azure предлагает следующие средства для развертывания моделей MLflow в сетевых и пакетных конечных точках:
- Пакет SDK для MLflow
- Машинное обучение Azure CLI версии 2
- Пакет SDK службы "Машинное обучение Azure" для Python
- Студия машинного обучения Azure
Каждый инструмент имеет различные возможности, особенно для того, какой тип вычислений он может использовать. В следующей таблице показана поддержка различных сценариев развертывания MLflow.
Сценарий | Пакет SDK для MLflow | Машинное обучение Azure CLI/SDK или studio |
---|---|---|
Развертывание в управляемых сетевых конечных точках1 | Поддерживается. См. прогрессивное развертывание моделей MLflow в сетевых конечных точках | Поддерживается. См. статью "Развертывание моделей MLflow в сетевых конечных точках" |
Развертывание в управляемых сетевых конечных точках с помощью скрипта оценки | Не поддерживается3 | Поддерживается. См. статью "Настройка развертываний модели MLflow" |
Развертывание в конечных точках пакетной службы | Не поддерживается3 | Поддерживается. См. сведения об использовании моделей MLflow в пакетных развертываниях |
Развертывание в конечных точках пакетной службы с помощью скрипта оценки | Не поддерживается3 | Поддерживается. См. раздел "Настройка развертывания модели с помощью скрипта оценки" |
Развертывание в веб-службах, таких как Экземпляры контейнеров Azure или Служба Azure Kubernetes (AKS) | Устаревшая поддержка2 | Не поддерживается2 |
Развертывание в веб-службах, таких как Экземпляры контейнеров или AKS с помощью скрипта оценки | Не поддерживается3 | Устаревшая поддержка2 |
1 Развертывание в сетевых конечных точках, которые находятся в рабочих областях с включенным приватным каналом, требует пакет моделей перед развертыванием (предварительная версия).
2 Переключитесь на управляемые сетевые конечные точки, если это возможно.
3 MLflow с открытым кодом не имеет концепции скрипта оценки и не поддерживает пакетное выполнение.
Выбор средства развертывания
Используйте пакет SDK MLflow, если:
- Вы знакомы с MLflow и хотите продолжать использовать те же методы, и
- Вы используете платформу, например Azure Databricks, которая поддерживает MLflow в собственном коде.
Используйте Машинное обучение Azure CLI версии 2 или пакет SDK для Python, если:
- Вы знакомы с ними или
- Вы хотите автоматизировать развертывание с помощью конвейеров или
- Вы хотите сохранить конфигурацию развертывания в репозитории Git.
Используйте пользовательский интерфейс Студия машинного обучения Azure, если вы хотите быстро развернуть и протестировать модели, обученные с помощью MLflow.