Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение Azure CLI для машинного обучения версии 2 (текущее)
В этой статье вы узнаете о развертывании моделей MLflow в Azure Machine Learning для вывода в режиме реального времени и пакетной обработки, а также о различных средствах, которые можно использовать для управления развертываниями.
Развертывание без кода
При развертывании моделей MLflow в Машинное обучение Azure, в отличие от развертывания пользовательской модели, вам не нужно предоставлять скрипт оценки или среду. Машинное обучение Azure автоматически создает скрипт оценки и среду для вас. Эта функция называется развертыванием без кода.
Для развертывания без кода Машинное обучение Azure:
- Убедитесь, что все зависимости пакета, указанные в модели MLflow, удовлетворены.
- Предоставляет базовый образ MLflow или курированную среду, содержащую следующие элементы:
- Пакеты, необходимые для выполнения вывода с использованием Azure Machine Learning, включая
mlflow-skinny
. - Скрипт оценки для выполнения вывода.
- Пакеты, необходимые для выполнения вывода с использованием Azure Machine Learning, включая
Совет
В рабочих областях без доступа к общедоступной сети перед развертыванием моделей MLflow в сетевых конечных точках без исходящего подключения необходимо упаковать модели. Возможность упаковки модели доступна в предварительной версии. При упаковке модели можно избежать необходимости подключения к Интернету, который в противном случае требуется Azure Machine Learning для динамической установки необходимых пакетов Python для моделей MLflow.
Пакеты и зависимости
Машинное обучение Azure автоматически создает среды для выполнения вывода в моделях MLflow. Чтобы создать вычислительные среды, Машинное обучение Azure анализирует зависимости conda, указанные в модели MLflow, и добавляет все пакеты, необходимые для запуска сервера инференса. Эти дополнительные пакеты зависят от типа развертывания.
В следующем примере файла conda.yaml показаны зависимости conda, указанные в модели MLflow.
channels:
- conda-forge
dependencies:
- python=3.12.3
- pip<=23.1.2
- pip:
- mlflow
- scikit-learn==1.6.1
- psutil==5.9.4
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.12.3
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 Machine Learning
Разработчики моделей могут использовать встроенные средства развертывания MLflow для локального тестирования моделей. Например, можно запустить локальный экземпляр модели, зарегистрированной в реестре серверов MLflow, с помощью mlflow models serve
или интерфейса командной строки mlflow models predict
MLflow. Для получения дополнительной информации о встроенных средствах развертывания MLflow смотрите Встроенные средства развертывания в документации по MLflow.
Машинное обучение Azure также поддерживает развертывание моделей в сетевых и пакетных конечных точках. Эти конечные точки выполняют различные технологии вывода, которые могут иметь различные функции.
Машинное обучение Azure сетевые конечные точки, аналогичные встроенному серверу MLflow, предоставляют масштабируемый, синхронный и упрощенный способ выполнения моделей для вывода.
Конечные точки пакетной обработки в Azure Machine Learning могут выполнять асинхронную инференцию по длительным процессам, которые могут масштабироваться до больших объёмов данных. Сервер MLflow не имеет этой возможности, хотя вы можете достичь аналогичной возможности с помощью заданий Spark. Дополнительные сведения о конечных точках пакетной службы и моделях MLflow см. в статье Об использовании моделей MLflow в пакетных развертываниях.
Форматы входных данных
В следующей таблице показаны типы входных данных, поддерживаемые встроенным сервером MLflow, и Машинное обучение Azure сетевые конечные точки.
Тип Ввода | Встроенный сервер MLflow | Машинное обучение Azure конечная точка в Сети |
---|---|---|
Кадры данных pandas, сериализованные в формате JSON, в ориентации разделения | ✓ | ✓ |
Panda DataFrames, сериализованные в формате JSON, с ориентацией на записи. | Устарело | |
Кадры данных pandas, сериализованные в формате CSV | ✓ | Используйте пакетную инференцию. Дополнительные сведения см. в статье "Развертывание моделей MLflow в конечных точках пакетной службы". |
Входные данные TensorFlow в виде сериализованных списков в формате JSON (тензоры) и словаря списков (именованные тензоры) | ✓ | ✓ |
Входные данные TensorFlow с использованием API TensorFlow Serving | ✓ |
В следующих разделах рассматриваются модели MLflow, развернутые в Машинное обучение Azure сетевых конечных точек.
Входная структура
Независимо от типа входных данных, Машинное обучение Azure требует предоставления входных данных в формате JSON в ключе input_data
словаря. Этот ключ не требуется при использовании команды mlflow models serve
, чтобы обслуживать модели, поэтому полезные нагрузки нельзя использовать взаимозаменяемо для онлайн-синофных точек Azure Machine Learning и встроенного сервера MLflow.
Внимание
Структура полезных данных изменилась в MLflow 2.0.
В следующих примерах полезных данных показаны различия между моделью, развернутой на встроенном сервере MLflow, и сервером инференса Azure Machine Learning.
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]
]
}
}
Входные данные тензора
{
"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.