共用方式為

利用 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 Inference Server 基于 NVIDIA 定义的 Triton 模型执行推理。 例如,系综模型可用于更高级的方案。

Azure Machine Learning在管理联机终结点和 Kubernetes 联机终结点都支持 Triton。

本文介绍如何使用无代码部署方法通过 Triton 将模型部署到 托管联机终结点。 它提供有关使用 Azure CLI、Python SDK v2 和Azure Machine Learning studio的信息。 若要使用 Triton Inference Server 的配置进一步自定义,请参阅 使用自定义容器部署模型以及 Triton 的 BYOC 示例(部署定义end-to-end script)。

注意

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

先决条件

  • Azure CLIml Azure CLI 的扩展,已安装并配置。 有关详细信息,请参阅安装和设置 CLI (v2)。

  • Bash shell 或其他兼容的 shell,例如 Linux 系统中的 shell 或 Windows 的 Linux 子系统。 本文中的 Azure CLI 示例假定你使用这种类型的 shell。

  • Azure 机器学习工作区。 有关创建工作区的说明,请参阅 “设置”。

  • 一个可运行的 Python 3.10 及以上版本的环境。

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

    • NumPy。 数组和数值计算库。
    • Triton 推理服务器客户端。 简化对 Triton 推理服务器的请求。
    • 枕头。 用于图像操作的库。
    • 格文特 用于连接到 Triton 服务器的网络库。
    pip install numpy
    pip install tritonclient[http]
    pip install pillow
    pip install gevent
    
  • 在您的 Azure 订阅中获得使用 NCasT4_v3 系列 VM 的权限。

    重要

    在您能够使用这一系列的虚拟机之前,您可能需要为您的订阅请求增加配额。 有关详细信息,请参阅 NCasT4_v3系列

  • NVIDIA Triton 推理服务器要求特定的模型存储库结构,其中每个模型都有一个目录,以及用于模型版本的子目录。 每个模型版本子目录的内容由模型的类型以及支持模型的后端的要求决定。 有关所有模型的结构的信息,请参阅 模型文件

    本文档中的信息基于使用以 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 配置文件。 以下示例配置终结点的名称和身份验证模式。 以下命令中使用的文件位于 /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml 前面克隆的 azureml 示例存储库中:

    create-managed-endpoint.yaml

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

    重要

    为了让 Triton 的零代码部署功能正常工作,请将 type 设置为 triton_model​: type: triton_model​。 有关详细信息,请参阅 CLI (v2) 模型 YAML 架构

    此部署使用Standard_NC4as_T4_v3 VM。 您可能需要为您的订阅请求增加配额,才能使用此虚拟机。 有关详细信息,请参阅 NCasT4_v3系列

$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. 使用以下命令通过终结点对数据进行评分。 它将 孔雀 的图像提交到终结点:

    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 sample-densenet-onnx-model --version 1
    

后续步骤

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