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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

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

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

Существует в основном два подхода, которые можно использовать для использования моделей Triton при развертывании их в онлайн-конечной точке: развертывание без кода или полное развертывание (перенос собственного контейнера).

  • Развертывание без кода для моделей Triton — это простой способ их развертывания, так как для развертывания необходимо использовать только модели Triton.
  • Развертывание с полным кодом (перенос собственного контейнера) для моделей Triton является более сложным способом их развертывания, так как у вас есть полный контроль над настройкой конфигураций, доступных для сервера вывода Triton.

Для обоих вариантов сервер вывода Triton выполнит вывод на основе модели Triton, определенной NVIDIA. Например, модели ансамбля можно использовать для более сложных сценариев.

Triton поддерживается как в управляемых сетевых конечных точках, так и в сетевых конечных точках Kubernetes.

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

Примечание.

Использование контейнера сервера вывода NVIDIA Triton регулируется лицензионным соглашением NVIDIA AI Enterprise Software и может использоваться в течение 90 дней без подписки на корпоративный продукт. Дополнительные сведения см. в разделе NVIDIA AI Enterprise на Машинное обучение Azure.

Необходимые компоненты

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

  • Рабочая среда 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>

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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 (версия 2).

    В этом развертывании используется виртуальная машина 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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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
    

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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
    

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

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

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

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

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

Следующие шаги

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