Поделиться через


Использование пользовательского контейнера для развертывания модели в сетевой конечной точке

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

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

При использовании настраиваемого развертывания можно:

  • Используйте различные инструменты и технологии, такие как TensorFlow Service (TF Service), TorchServe, Triton Inference Server, пакет Plumber R и минимальное изображение машинного обучения Azure.
  • По-прежнему используются встроенные функции мониторинга, масштабирования, оповещения и проверки подлинности, предлагаемые машинным обучением Azure.

В этой статье показано, как использовать образ службы TF для обслуживания модели TensorFlow.

Prerequisites

  • Рабочая область Машинного обучения Azure. Инструкции по созданию рабочей области см. в разделе "Создание рабочей области".

  • Интерфейс командной строки Azure и расширение ml или Python SDK v2 для Azure Machine Learning:

    Чтобы установить Azure CLI и расширение, см. статью ml".

    Примеры в этой статье предполагают, что вы используете оболочку Bash или совместимую с ней. Например, можно использовать оболочку в системе Linux или подсистеме Windows для Linux.

  • Группа ресурсов Azure, содержащая вашу рабочую область и к которой вы или ваш главный объект службы имеете доступ с правами участника. Если вы используете действия, описанные в разделе "Создание рабочей области " для настройки рабочей области, вы соответствуете этому требованию.

  • Docker Engine, installed and running locally. This prerequisite is highly recommended. Вам потребуется развернуть модель локально, и это полезно для отладки.

Deployment examples

The following table lists deployment examples that use custom containers and take advantage of various tools and technologies.

Example Скрипт Azure CLI Description
minimal/multimodel deploy-custom-container-minimal-multimodel Развёртывает несколько моделей в рамках одного процесса развертывания, расширяя минимальный образ для вывода с помощью средств машинного обучения Azure.
minimal/single-model deploy-custom-container-minimal-single-model Развертывает одну модель, расширяя минимальный образ для инференции в Azure Machine Learning.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Разворачивает две модели MLFlow с различными требованиями Python для двух отдельных развертываний, которые находятся за единой конечной точкой. Использует минимальное изображение для вывода в системе машинного обучения Azure.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Развертывает три модели регрессии в одну конечную точку. Использует пакет Plumber R.
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two Развертывает модель Half Plus Two с помощью настраиваемого контейнера TF Serving. Использует стандартный процесс регистрации модели.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated Развертывает модель Half Plus Two, используя пользовательский контейнер TF Serving с моделью, интегрированной в образ.
torchserve/densenet deploy-custom-container-torchserve-densenet Развертывает одну модель с помощью пользовательского контейнера TorchServe.
triton/single-model deploy-custom-container-triton-single-model Развертывает модель Triton с помощью пользовательского контейнера.

В этой статье показано, как использовать пример tfserving/half-plus-two.

Warning

Группы поддержки Майкрософт могут не помочь устранить неполадки, вызванные пользовательским изображением. При возникновении проблем может потребоваться использовать образ по умолчанию или один из образов, которые корпорация Майкрософт предоставляет, чтобы узнать, относится ли проблема к изображению.

Скачивание исходного кода

The steps in this article use code samples from the azureml-examples repository. Чтобы клонировать репозиторий, используйте следующие команды:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Инициализация переменных среды

Чтобы использовать модель TensorFlow, вам потребуется несколько переменных среды. Выполните следующие команды, чтобы определить эти переменные:

BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1

Загрузите модель TensorFlow.

Скачайте и распакуйте модель, разделяющую входное значение на два и добавляя два в результат:

wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH

Тестируйте образ TF Serving локально

Используйте Docker для локального запуска образа для тестирования:

docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
 -e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
 --name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10

Отправка запросов на проверку активности и оценки изображения

Отправьте запрос активности, чтобы проверить, выполняется ли процесс внутри контейнера. Вы должны получить код состояния ответа 200 OK.

curl -v http://localhost:8501/v1/models/$MODEL_NAME

Отправьте запрос на оценивание, чтобы проверить, можно ли получить прогнозы о неразмеченных данных.

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

Остановка образа

После локального тестирования остановите изображение:

docker stop tfserving-test

Развертывание сетевой конечной точки в Azure

Чтобы развернуть конечную точку в Интернете в Azure, выполните действия, описанные в следующих разделах.

Создание файлов YAML для конечной точки и развертывания

Вы можете настроить облачное развертывание с помощью YAML. Например, чтобы настроить конечную точку, можно создать файл YAML с именем tfserving-endpoint.yml, содержащий следующие строки:

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

Чтобы настроить развертывание, можно создать ФАЙЛ YAML с именем tfserving-deployment.yml, содержащий следующие строки:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: <model-version>
  path: ./half_plus_two
environment_variables:
  MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/<model-version>
  MODEL_NAME: half_plus_two
environment:
  #name: tfserving
  #version: 1
  image: docker.io/tensorflow/serving:latest
  inference_config:
    liveness_route:
      port: 8501
      path: /v1/models/half_plus_two
    readiness_route:
      port: 8501
      path: /v1/models/half_plus_two
    scoring_route:
      port: 8501
      path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1

В следующих разделах рассматриваются важные понятия параметров YAML и Python.

Base image

environment В разделе YAML или Environment конструкторе в Python необходимо указать базовый образ в качестве параметра. Этот пример использует docker.io/tensorflow/serving:latest как значение image.

При проверке контейнера вы увидите, что этот сервер использует ENTRYPOINT команды для запуска скрипта точки входа. Этот скрипт принимает такие переменные среды, как MODEL_BASE_PATH и MODEL_NAME, и предоставляет такие порты, как 8501. Эти сведения относятся к этому серверу, и вы можете использовать эту информацию для определения способа развертывания. Например, если в определении развертывания указаны переменные среды MODEL_BASE_PATH и MODEL_NAME, служба TF использует эти значения для запуска сервера. Аналогичным образом, если в определении развертывания задать порт для каждого маршрута как 8501, пользовательские запросы к этим маршрутам правильно направляются на сервер TF Serving.

Этот пример основан на примере TF Serving. Но вы можете использовать любой контейнер, который остаётся в сети и отвечает на запросы, поступающие по маршрутам проверки активности, готовности и оценки. Чтобы узнать, как сформировать Dockerfile для создания контейнера, см. другие примеры. Некоторые серверы используют CMD инструкции вместо инструкций ENTRYPOINT .

Параметр inference_config

В разделе environment или в классе Environment элемент inference_config является параметром. Он задает порт и путь для трех типов маршрутов: проверки активности, готовности и оценки состояния. Этот inference_config параметр необходим, если требуется запустить собственный контейнер с управляемой сетевой конечной точкой.

Маршруты готовности и маршруты активности

Некоторые серверы API предоставляют способ проверки состояния сервера. Существует два типа маршрутов, которые можно указать для проверки состояния:

  • Liveness routes: To check whether a server is running, you use a liveness route.
  • Readiness routes: To check whether a server is ready to do work, you use a readiness route.

В контексте вывода машинного обучения сервер может ответить с кодом состояния 200 OK на запрос динамической активности перед загрузкой модели. Сервер может ответить с кодом состояния 200 OK к запросу готовности только после загрузки модели в память.

Дополнительные сведения об исследованиях на живучесть, готовность и запуск см. в разделе Настройка живучести, готовности и стартовых проб.

Сервер API, который вы выбираете, определяет маршруты активности и готовности. Этот сервер определяется на предыдущем шаге при локальном тестировании контейнера. В этой статье пример развертывания использует тот же путь для маршрутов проверки работоспособности и готовности, потому что TF Serving определяет только маршрут проверки работоспособности. Другие способы определения маршрутов см. в других примерах.

Scoring routes

Используемый сервер API предоставляет способ получения полезной нагрузки для работы. В контексте вывода машинного обучения сервер получает входные данные через определенный маршрут. Определите этот маршрут для сервера API при локальном тестировании контейнера на предыдущем шаге. Укажите этот маршрут в качестве маршрута оценки при определении развертывания, которое нужно создать.

Успешное создание развертывания также обновляет параметр scoring_uri конечной точки. Этот факт можно проверить, выполнив следующую команду: az ml online-endpoint show -n <endpoint-name> --query scoring_uri

Определите местоположение установленной модели

When you deploy a model as an online endpoint, Azure Machine Learning mounts your model to your endpoint. При установке модели можно развернуть новые версии модели, не создавая новый Docker-образ. By default, a model registered with the name my-model and version 1 is located on the following path inside your deployed container: /var/azureml-app/azureml-models/my-model/1.

Например, рассмотрим следующую настройку:

  • Структура каталогов на вашем локальном компьютере в /azureml-examples/cli/endpoints/online/custom-container
  • модель под названием half_plus_two

Снимок экрана, показывающий дерево структуры локального каталога. Отображаемый путь — /azureml-examples/cli/endpoints/online/custom-container.

Предположим, что файл tfserving-deployment.yml содержит следующие строки в своем model разделе. В этом разделе значение name относится к имени, используемому для регистрации модели в Azure Machine Learning.

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

В этом случае при создании развертывания ваша модель находится в следующей папке: /var/azureml-app/azureml-models/tfserving-mounted/1.

Снимок экрана, показывающий дерево структуры каталога развертывания. Видимый путь: var/azureml-app/azureml-models/tfserving-mounted/1.

Можно при необходимости настроить параметр model_mount_path. Изменив этот параметр, можно изменить путь, в котором подключена модель.

Important

Значение model_mount_path должно быть допустимым абсолютным путем в Linux (в гостевой ОС образа контейнера).

Important

model_mount_path доступен только в сценарии BYOC (Перенос собственного контейнера). В сценарии BYOC среда, которая использует сетевое развертывание, должна иметь inference_config настроенный параметр . Вы можете использовать Azure ML CLI или пакет SDK Python для указания inference_config параметра при создании среды. В настоящее время пользовательский интерфейс Studio не поддерживает указание этого параметра.

При изменении значения model_mount_pathтакже необходимо обновить MODEL_BASE_PATH переменную среды. Установите для MODEL_BASE_PATH то же значение, что и для model_mount_path, чтобы избежать неудачного развертывания из-за ошибки о ненайденном базовом пути.

Например, можно добавить параметр model_mount_path в файл tfserving-deployment.yml. Можно также обновить MODEL_BASE_PATH значение в этом файле:

name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: 1
  path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
  MODEL_BASE_PATH: /var/tfserving-model-mount
...

В вашем развертывании ваша модель находится в папке /var/tfserving-model-mount/tfserving-mounted/1. Он больше не находится в azureml-app/azureml-models, но в пути подключения, который вы указываете:

Снимок экрана: представление дерева структуры каталога развертывания. Видимый путь /var/tfserving-model-mount/tfserving-mount/1.

Создание конечной точки и развертывания

После создания ФАЙЛА YAML используйте следующую команду, чтобы создать конечную точку:

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml

Чтобы создать развертывание, используйте следующую команду. Этот шаг может выполняться в течение нескольких минут.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic

Вызов конечной точки

После завершения развертывания выполните запрос на оценку к развернутой конечной точке.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

Удаление конечной точки

Если конечная точка больше не нужна, выполните следующую команду, чтобы удалить ее:

az ml online-endpoint delete --name tfserving-endpoint