Развертывание моделей MLflow в качестве веб-служб Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python azureml версии 1

В этой статье рассказывается, как развернуть модель MLflow в качестве веб-службы Azure, чтобы использовать и применять функции управления моделями и обнаружения смещения данных Машинного обучения Azure в рабочих моделях. Дополнительные сведения об интеграции функций MLflow и Машинного обучения Azure см. в статье MLflow и Машинное обучение Azure.

Машинное обучение Azure предлагает конфигурации развертывания для следующих сред.

  • Экземпляр контейнера Azure (ACI) — подходит для быстрого развертывания среды разработки и тестирования.
  • Служба Azure Kubernetes (AKS) — рекомендуется для масштабируемых рабочих развертываний.

Примечание

Конечные точки Машинного обучения Azure (версия 2) предоставляют улучшенные и простые возможности развертывания. Они поддерживают сценарии развертывания как в режиме реального времени, так и при использовании пакетного вывода. Конечные точки служат единым интерфейсом для вызова развертывания моделей и управления ими в вычислительных ресурсах разных типов. См. статью Что такое конечные точки Машинного обучения Azure?

Совет

Сведения в этом документе предназначены главным образом для специалистов по обработке и анализу данных и разработчиков, желающих развернуть свою модель MLflow в конечной точке веб-службы Машинного обучения Azure. Если вы являетесь администратором, который заинтересован в наблюдении из Машинного обучения Azure за использованием ресурсов и событиями, такими как квоты, завершенные обучающие запуски или завершенные развертывания моделей, ознакомьтесь с разделом Мониторинг Машинного обучения Azure.

Развертывание MLflow с Машинным обучением Azure

MLflow — это библиотека с открытым кодом для управления жизненным циклом экспериментов машинного обучения. Ее интеграция с Машинным обучением Azure позволяет расширить возможности управления за рамки обучения моделей до этапа развертывания рабочей модели.

На следующей схеме показано, как с помощью API развертывания MLflow и Машинного обучения Azure можно развертывать модели, созданные с помощью популярных платформ, таких как PyTorch, Tensorflow, Scikit-learn и т. п., в качестве веб-служб Azure и управлять ими в рабочей области.

Развертывание моделей MLflow с помощью Машинного обучения Azure

Предварительные требования

Развертывание в экземпляре контейнера Azure (ACI)

Чтобы развернуть модель MLflow в качестве веб-службы Машинного обучения Azure, необходимо настроить в модели URI отслеживания MLflow для подключения к Машинному обучению Azure.

Чтобы выполнить развертывание в ACI, настраивать конфигурацию развертывания не требуется: если конфигурация не указана, по умолчанию служба использует развертывание ACI. Затем зарегистрируйте и разверните модель в одном шаге с помощью метода deploy MLflow для Машинного обучения Azure.

from mlflow.deployments import get_deploy_client

# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# set the model path 
model_path = "model"

# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below 
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))

Настройка конфигурации развертывания

Если вы не хотите использовать значения по умолчанию, можно настроить конфигурацию развертывания с помощью JSON-файла, в котором в качестве основы используются параметры метода deploy_configuration().

Для JSON-файла конфигурации развертывания каждый из параметров конфигурации должен быть определен в виде словаря. Пример. Узнайте больше о том, что может содержать JSON-файл конфигурации развертывания.

Схема конфигурации для развертывания экземпляра контейнера Azure

{"computeType": "aci",
 "containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
 "location": "eastus2"
}

Затем вы можете использовать этот JSON-файл для создания развертывания.

# set the deployment config
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
                         config=test_config,
                         name="mlflow-test-aci")                                       

Развертывание в службе Azure Kubernetes (AKS)

Чтобы развернуть модель MLflow в качестве веб-службы Машинного обучения Azure, необходимо настроить в модели URI отслеживания MLflow для подключения к Машинному обучению Azure.

Чтобы выполнить развертывание в AKS, сначала создайте кластер AKS. Создайте кластер AKS с помощью метода ComputeTarget.create(). Создание нового кластера может занять 20–25 минут.

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()

aks_name = 'aks-mlflow'

# Create the cluster
aks_target = ComputeTarget.create(workspace=ws, 
                                  name=aks_name, 
                                  provisioning_configuration=prov_config)

aks_target.wait_for_completion(show_output = True)

print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)

Создайте JSON-файл конфигурации развертывания, взяв за основу значения метода deploy_configuration(). Каждый из параметров конфигурации развертывания просто необходимо определить как словарь. Пример приведен ниже.

{"computeType": "aks", "computeTargetName": "aks-mlflow"}

Затем зарегистрируйте и разверните модель за один шаг с помощью клиента развертывания MLflow.

from mlflow.deployments import get_deploy_client

# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())

# set the model path 
model_path = "model"

# set the deployment config
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}

# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below 
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
                         config=test_config,
                         name="mlflow-test-aci")

Развертывание службы может занять несколько минут.

Очистка ресурсов

Если вы не планируете использовать развернутую веб-службу, удалите ее из записной книжки с помощью service.delete(). Дополнительные сведения см. в документации метода Webservice.delete().

Примеры записных книжек

В примере MLflow с записными книжками Машинного обучения Azure демонстрируются и поясняются основные понятия, представленные в этой статье.

Примечание

Репозиторий примеров использования MLflow, поддерживаемый сообществом, можно найти здесь: https://github.com/Azure/azureml-examples.

Дальнейшие действия