利用 Triton Inference Server 实现的高性能服务

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

了解如何通过联机终结点在 Azure 机器学习中使用 NVIDIA Triton 推理服务器

Triton 是针对推理进行了优化的多框架开放源软件。 它支持 TensorFlow、ONNX 运行时、PyTorch、NVIDIA TensorRT 等常用的机器学习框架。 它可用于 CPU 工作负载或 GPU 工作负载。

将 Triton 模型部署到联机终结点时,主要可以采用两种方法来利用 Triton 模型:无代码部署或完整代码(自带容器)部署。

  • Triton 模型的无代码部署是一种简单的部署方式,因为你只需提供 Triton 模型进行部署即可。
  • Triton 模型的完整代码部署(自带容器)是更高级的部署方式,因为你可以完全控制如何自定义可用于 Triton 推理服务器的配置。

对于这两个选项,Triton 推理服务器都将基于 NVIDIA 定义的 Triton 模型执行推理。 例如,系综模型可用于更高级的方案。

托管联机终结点和 Kubernetes 联机终结点都支持 Triton。

本文介绍如何使用 Triton 的无代码部署将模型部署到托管联机终结点。 本文提供有关使用 CLI(命令行)、Python SDK v2 和 Azure 机器学习工作室的信息。 若要使用 Triton 推理服务器的配置进一步自定义,请参阅使用自定义容器部署模型和适用于 Triton 的 BYOC 示例(部署定义端到端脚本)。

注意

对 NVIDIA Triton Inference Server 容器的使用受到 NVIDIA AI Enterprise 软件许可协议的约束,并且可在没有企业产品订阅的情况下使用 90 天。 有关详细信息,请参阅 Azure 机器学习的 NVIDIA AI Enterprise

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

  • 正常工作的 Python 3.8(或更高版本)环境。

  • 必须安装其他 Python 包才能进行评分,可以使用以下代码安装它们。 它们包括:

    • Numpy - 数组和数值计算库
    • Triton 推理服务器客户端 - 促进对 Triton 推理服务器的请求
    • Pillow - 用于图像操作的库
    • Gevent - 连接到 Triton 服务器时使用的网络库
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • 访问 Azure 订阅的 NCv3 系列虚拟机。

    重要

    可能需要为订阅请求增加配额,然后才能使用此系列虚拟机。 有关详细信息,请参阅 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 订阅 ID。
  • <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 ml 扩展 v2(当前)

本节演示如何使用 Azure CLI 和机器学习扩展 (v2) 部署到托管联机终结点。

重要

对于 Triton 无代码部署,目前不支持 通过本地终结点进行测试

  1. 要避免在多个命令中键入路径,请使用以下命令设置 BASE_PATH 环境变量。 此变量指向模型和关联的 YAML 配置文件所在的目录:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. 使用以下命令设置要创建的终结点的名称。 在此示例中,将为终结点创建一个随机名称:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
    
  3. 为终结点创建 YAML 配置文件。 以下示例配置终结点的名称和身份验证模式。 以下命令中使用的配置文件位于之前克隆的 azureml-examples 存储库的 /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml 中:

    create-managed-endpoint.yaml

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: aml_token
  1. 为部署创建 YAML 配置文件。 以下示例将配置名为 blue 的部署,并将其部署到在上一步中定义的终结点。 以下命令中使用的配置文件位于之前克隆的 azureml-examples 存储库的 /cli/endpoints/online/triton/single-model/create-managed-deployment.yml 中:

    重要

    要使 Triton 无代码部署 (NCD) 正常工作,需要将 type 设置为 triton_model​type: triton_model​。 有关详细信息,请参阅 CLI (v2) 模型 YAML 架构

    此部署使用 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 ml 扩展 v2(当前)

  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 ml 扩展 v2(当前)

部署完成后,使用以下命令向部署的终结点发出评分请求。

提示

azureml-examples 存储库中的 /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py 文件用于评分。 传递到终结点的图像需要经过预处理以满足大小、类型和格式要求,还需要经过后处理以显示预测的标签。 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 ml 扩展 v2(当前)

  1. 使用完终结点后,使用以下命令将其删除:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
    
  2. 使用以下命令存档模型:

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

后续步骤

若要了解更多信息,请查看下列文章: