Использование пользовательского контейнера для развертывания модели в сетевой конечной точке
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)
Узнайте, как использовать пользовательский контейнер для развертывания модели в веб-конечной точке в Машинное обучение Azure.
В пользовательских развертываниях контейнеров могут применяться веб-серверы, отличные от сервера Python Flask по умолчанию, используемого в Машинном обучении Azure. В этих развертываниях по-прежнему можно пользоваться преимуществами мониторинга, масштабирования, оповещения и проверки подлинности Машинного обучения Azure.
В следующей таблице перечислены различные примеры развертывания, использующие настраиваемые контейнеры, такие как TensorFlow Service, TorchServe, Triton Inference Server, пакет Plumber R и Машинное обучение Azure минимальное изображение вывода.
Пример | Скрипт (CLI) | Description |
---|---|---|
минимальное или многомодельное | deploy-custom-container-min-multimodel | Разверните несколько моделей в одном развертывании, расширив Машинное обучение Azure минимальное изображение вывода. |
минимальная/одна модель | deploy-custom-container-min-single-model | Разверните одну модель, расширив Машинное обучение Azure минимальное изображение вывода. |
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 с помощью настраиваемого контейнера TensorFlow, используя стандартный процесс регистрации модели. |
tfserving/half-plus-two-integrated | deploy-custom-container-tfserving-half-plus-two-integrated | Разверните модель Half Plus Two с помощью настраиваемого контейнера TensorFlow Для обслуживания с моделью, интегрированной в образ. |
torchserve/densenet | deploy-custom-container-torchserve-densenet | Разверните одну модель с помощью пользовательского контейнера TorchServe. |
triton/single-model | deploy-custom-container-triton-single-model | Развертывание модели Triton с помощью пользовательского контейнера |
В этой статье рассматривается обслуживание модели TensorFlow с помощью TensorFlow (TF).
Предупреждение
Возможно, корпорация Майкрософт не сможет устранить неполадки, вызванные пользовательским изображением. Если возникают проблемы, может потребоваться использовать образ по умолчанию или один из образов Майкрософт, чтобы узнать, относится ли проблема к изображению.
Необходимые компоненты
Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:
Рабочая область Машинного обучения Azure. Если у вас ее нет, создайте ее по инструкциям, приведенным в кратком руководстве по созданию ресурсов рабочей области.
Azure CLI и
ml
расширение или пакет SDK для Python версии 2 Машинное обучение Azure:Чтобы установить Azure CLI и расширение, см. статью "Установка,настройка" и использование интерфейса командной строки (версии 2).
Внимание
В примерах CLI в этой статье предполагается, что вы используете оболочку Bash (или совместимый вариант). Например, из системы Linux или подсистемы Windows для Linux.
Чтобы установить пакет SDK для Python версии 2, используйте следующую команду:
pip install azure-ai-ml azure-identity
Чтобы обновить существующую установку пакета SDK до последней версии, выполните следующую команду:
pip install --upgrade azure-ai-ml azure-identity
Дополнительные сведения см. в статье "Установка пакета SDK для Python версии 2 для Машинное обучение Azure".
Вы или субъект-служба, который вы используете, должны иметь доступ участника к группе ресурсов Azure, содержащей рабочую область. У вас есть такая группа ресурсов, если вы настроили рабочую область с помощью статьи краткого руководства.
Для локального развертывания необходимо, чтобы подсистема Docker запускалась локально. Настоятельно рекомендуется выполнить этот этап. Это помогает отлаживать проблемы.
Скачивание исходного кода
Чтобы следовать этому руководству, клонируйте исходный код из GitHub.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Инициализация переменных среды
Определение переменных среды:
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.
Загрузите и распакуйте модель, которая делит входные данные на два и добавляет 2 к результату:
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 (ОК)".
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
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 есть несколько важных понятий:
Базовый образ
Базовый образ указывается в качестве параметра в среде и docker.io/tensorflow/serving:latest
используется в этом примере. При проверке контейнера можно найти, что этот сервер используется ENTRYPOINT
для запуска скрипта точки входа, который принимает переменные среды, такие как иMODEL_NAME
, и предоставляет такие порты, как MODEL_BASE_PATH
8501
. Эти сведения являются всеми конкретными сведениями для выбранного сервера. Это понимание сервера можно использовать для определения развертывания. Например, если вы задаете переменные среды для MODEL_BASE_PATH
определения развертывания и MODEL_NAME
в определении развертывания, сервер (в данном случае служба TF) принимает значения для запуска сервера. Аналогичным образом, если вы задаете порт для маршрутов, которые будут находиться 8501
в определении развертывания, запрос пользователя к таким маршрутам будет правильно перенаправлен на сервер обслуживания TF.
Обратите внимание, что этот конкретный пример основан на случае обслуживания TF, но вы можете использовать все контейнеры, которые будут оставаться и отвечать на запросы, поступающие к жизни, готовности и оценки маршрутов. Вы можете ссылаться на другие примеры и узнать, как формируется dockerfile (например, с помощью CMD
вместо ENTRYPOINT
) для создания контейнеров.
Конфигурация вывода
Конфигурация вывода — это параметр в среде, и он задает порт и путь для 3 типов маршрута: динамизм, готовность и маршрут оценки. Настройка вывода требуется, если вы хотите запустить собственный контейнер с управляемой сетевой конечной точкой.
Маршрут готовности и маршрут активности
Сервер API, который вы выбираете, может предоставить способ проверки состояния сервера. Существует два типа маршрута, которые можно указать: живость и готовность. С помощью маршрут активности проверяют, работает ли сервер. С помощью маршрута готовности проверяют, готов ли сервер к выполнению работы. В контексте вывода машинного обучения сервер может ответить 200 OK на запрос активности перед загрузкой модели, и сервер может ответить 200 OK на запрос готовности только после загрузки модели в память.
Дополнительные сведения о пробах активности и готовности в целом см. в документации Kubernetes.
Маршруты активности и готовности определяются выбранным сервером API, так как вы определили при тестировании контейнера локально на предыдущем шаге. Обратите внимание, что в примере развертывания в этой статье используется одинаковый путь как для активности, так и для готовности, так как служба TF определяет только маршрут активности. Ознакомьтесь с другими примерами различных шаблонов, чтобы определить маршруты.
Маршрут оценки
Сервер API, на который вы выбрали, предоставит способ получения полезных данных для работы. В контексте вывода машинного обучения сервер получит входные данные через определенный маршрут. Определите этот маршрут для сервера API при локальном тестировании контейнера на предыдущем шаге и укажите его при определении развертывания для создания.
Обратите внимание, что успешное создание развертывания обновит параметр scoring_uri конечной точки, с помощью которого можно проверить az ml online-endpoint show -n <name> --query scoring_uri
.
Определение местоположения подключенной модели
При развертывании модели в качестве подключенной конечной точки Машинное обучение Azure подключает эту модель к конечной точке. Подключение модели позволяет развертывать новые версии модели, не создавая новый образ Docker. По умолчанию модель, зарегистрированная с именем foo и версией 1 , будет находиться по следующему пути внутри развернутого контейнера: /var/azureml-app/azureml-models/foo/1
Например, если у вас есть структура каталога /azureml-examples/cli/endpoints/online/custom-container на локальном компьютере, где модель называется half_plus_two:
И tfserving-deployment.yml содержит следующее:
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
Затем модель будет находиться в разделе /var/azureml-app/azureml-models/tfserving-deployment/1 в развертывании:
При необходимости можно настроить model_mount_path
. Он позволяет изменить путь, в котором подключена модель.
Внимание
model_mount_path
должен быть допустимым абсолютным путем в Linux (ОС образа контейнера).
Например, можно иметь параметр model_mount_path
в tfserving-deployment.yml:
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
name: tfserving-mounted
version: 1
path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
.....
Затем модель находится в папке /var/tfserving-model-mount/tfserving-deployment/1 в развертывании. Обратите внимание, что он больше не находится в azureml-app/azureml-models, но в указанном пути подключения:
Создание конечной точки и развертывания
Теперь, когда вы узнаете, как был создан YAML, создайте конечную точку.
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml
Создание развертывания может занять несколько минут.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/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