Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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
Предположим, что файл 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.
Можно при необходимости настроить параметр 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, но в пути подключения, который вы указываете:
Создание конечной точки и развертывания
После создания ФАЙЛА 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