Высокопроизводительное обслуживание с помощью сервера вывода Triton (предварительная версия)

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

Область применения: Пакет SDK для Python azure-ai-ml версии 2 (предварительная версия)

Важно!

Пакет SDK версии 2 сейчас находится в общедоступной предварительной версии. Предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

Узнайте, как использовать сервер вывода NVIDIA Triton в Машинном обучении Azure с сетевыми конечными точками.

Triton — это мультиплатформенное программное обеспечение с открытым исходным кодом, оптимизированное для вывода. Оно поддерживает популярные платформы машинного обучения, такие как TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT и многие другие. Его можно использовать для рабочих нагрузок ЦП или GPU. Развертывание без кода для моделей Triton поддерживается как в управляемых сетевых конечных точках, так и в сетевых конечных точках Kubernetes.

В этой статье вы узнаете, как развернуть Triton и модель в управляемой сетевой конечной точке. Сведения предоставляются с помощью интерфейса командной строки (командной строки), пакета SDK для Python версии 2 и Студия машинного обучения Azure.

Примечание

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

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

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

  • Рабочая среда Python 3.8 (или более поздней версии).

  • Для оценки необходимо установить дополнительные пакеты Python и установить их с помощью приведенного ниже кода. В их число входят следующие:

    • Numpy — библиотека массивов и числовых вычислений
    • Клиент сервера вывода Triton — упрощает запросы к серверу вывода Triton
    • Подушка — библиотека для операций с изображением
    • Gevent — сетевая библиотека, используемая при подключении к серверу Triton
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Доступ к виртуальным машинам серии NCv3 для подписки Azure.

    Важно!

    Возможно, потребуется запросить увеличение квоты для подписки, прежде чем можно будет использовать эту серию виртуальных машин. Подробные сведения см. в разделе о серии NCv3.

Для сервера вывода NVIDIA Triton требуется особая структура репозитория модели, где в версиях модели для каждой модели и подкаталогов используются отдельные каталоги. Содержимое подкаталога каждой версии модели определяется типом модели и требованиями серверной части, поддерживающей модель. Просмотр всей структуры репозитория модели https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

Сведения в этом документе основаны на использовании модели, хранящейся в формате ONNX, поэтому структура каталогов репозитория модели — <model-repository>/<model-name>/1/model.onnx. В частности, эта модель выполняет идентификацию изображений.

Сведения в этой статье основаны на примерах кода, имеющихся в репозитории azureml-examples. Чтобы выполнять команды локально без копирования и вставки YAML и других файлов, необходимо клонировать репозиторий, а затем заменить каталоги на каталог cli в репозитории:

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

Если вы еще не задали параметры по умолчанию для Azure CLI, сохраните их. Чтобы не указывать значения для подписки, рабочей области и группы ресурсов несколько раз, используйте следующие команды. Замените следующие параметры значениями для конкретной конфигурации:

  • Замените <subscription> идентификатором своей подписки Azure.
  • Заменить <workspace> рабочей областью машинного обучения Azure.
  • Замените <resource-group> группой ресурсов Azure, содержащей вашу рабочую область.
  • Замените <location> регионом Azure, содержащим вашу рабочую область.

Совет

Для просмотра текущих значений по умолчанию используйте команду az configure -l.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Определите конфигурацию развертывания

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

В этом разделе показано, как развернуть в управляемой сетевой конечной точке с помощью Azure CLI с расширением Машинного обучения (версия 2).

Важно!

В развертывании Triton без кода в настоящее время не поддерживается тестирование через локальные конечные точки.

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

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Используйте следующую команду, чтобы задать имя конечной точки, которая будет создана. В этом примере для конечной точки создано случайное имя:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Создайте файл конфигурации YAML для конечной точки. В следующем примере настраивается имя и режим проверки подлинности конечной точки. Файл, используемый в следующих командах, находится по пути /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml в репозитории azureml-examples, клонированном ранее:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Создайте файл конфигурации YAML для развертывания. В следующем примере выполняется настройка развертывания синим цветом для конечной точки, определенной на предыдущем шаге. Файл, используемый в следующих командах, находится по пути /cli/endpoints/online/triton/single-model/create-managed-deployment.yml в репозитории azureml-examples, клонированном ранее:

    Важно!

    Для развертывания без кода (NCD) с помощью Triton необходимо присвоить параметру type значение triton_model​: type: triton_model​. Дополнительные сведения см. в статье схема YAML для модели CLI (v2).

    В этом развертывании используется виртуальная машина Standard_NC6s_v3. Возможно, потребуется запросить увеличение квоты для подписки, прежде чем можно будет использовать эту виртуальную машину. Подробные сведения см. в разделе о серии NCv3.

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-endpoint
    model:
      name: sample-densenet-onnx-model
      version: 1
      path: ./models
      type: triton_model
    instance_count: 1
    instance_type: Standard_NC6s_v3
    

Развернуть в Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

  1. Чтобы создать новую конечную точку с помощью конфигурации YAML, используйте следующую команду:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Чтобы создать развертывание с помощью конфигурации YAML, используйте следующую команду:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

Тестирование конечной точки

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

После завершения развертывания используйте следующую команду, чтобы выполнить запрос оценки к развернутой конечной точке.

Совет

Файл /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py в репозитории azureml-examples используется для оценки. Изображение, переданное в конечную точку, должно пройти предварительную обработку, чтобы соответствовать требованиям к размеру, типу и формату, а также к последующую обработку для отображения прогнозируемой метки. Компонент triton_densenet_scoring.py использует библиотеку tritonclient.http для обмена данными с сервером вывода Triton.

  1. Чтобы получить URI оценки конечной точки, используйте следующую команду:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Чтобы получить ключ проверки подлинности, используйте следующую команду:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Чтобы оценить данные с помощью конечной точки, используйте следующую команду. Она отправляет изображение павлина (https://aka.ms/peacock-pic) в конечную точку:

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    В результате выполнения скрипта должен отобразиться примерно следующий текст:

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)

  1. После завершения работы с конечной точкой используйте следующую команду, чтобы удалить ее:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Чтобы архивировать модель, используйте следующую команду:

    az ml model archive --name $MODEL_NAME --version $MODEL_VERSION
    

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

Дополнительные сведения см. в статьях ниже: