本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Triton Inference Server 部署模型
Triton Inference Server
SageMaker AI Triton 容器可帮助你在 A SageMaker I 托管平台上部署 Triton 推理服务器,以便在生产环境中为经过训练的模型提供服务。它支持 A SageMaker I 的不同运行模式。有关 SageMaker 人工智能上可用的 Triton 推理服务器容器的列表,请参阅 NVIDIA Triton 推理容器(仅支持 SM)
对于 end-to-end笔记本示例,我们建议您查看amazon-sagemaker-examples 存储库
托管模式
Triton 容器支持以下 SageMaker AI 托管模式:
-
单模型端点
-
这是 SageMaker AI 的默认操作模式。在此模式下,Triton 容器可以加载单个模型或单个组合模型。
-
模型名称必须作为容器环境的属性传递,容器环境是
CreateModel
SageMaker AI API 调用的一部分。用于传入模型名称的环境变量是SAGEMAKER_TRITON_DEFAULT_MODEL_NAME
。
-
-
带组合的单模型端点
-
Triton Inference Server 支持模型的组合,即管道或 DAG(Directed Acyclic Graph,有向无环图)。虽然从技术上讲,一个集合由多个模型组成,但在默认的单模型端点模式下, SageMaker AI 可以将集合(代表管道的元模型)视为要加载的主模型,然后可以加载关联的模型。
-
必须使用组合正本的模型名称来加载模型。它必须作为容器环境的属性传递,容器环境是
CreateModel
SageMaker API 调用的一部分。用于传入模型名称的环境变量是SAGEMAKER_TRITON_DEFAULT_MODEL_NAME
。
-
-
多模型端点
-
在此模式下, SageMaker AI 可以在单个端点上为多个模型提供服务。您可以通过将环境变量指定
‘MultiModel’: true
为容器环境的属性来使用此模式,这是CreateModel
SageMaker API 调用的一部分。 -
默认情况下,实例启动时不会加载任何模型。要对特定模型运行推理请求,请指定相应模型
*.tar.gz
的文件作为InvokeEndpoint
SageMaker API 调用TargetModel
属性的参数。
-
-
带组合的多模型端点
-
在此模式下, SageMaker AI 的功能如多模型端点所述。但是, SageMaker AI Triton 容器可以加载多个集合模型,这意味着多个模型管道可以在同一个实例上运行。 SageMaker AI 将每个集合视为一个模型,通过将相应的
*.tar.gz
存档指定为,可以调用每个模型的整体本身TargetModel
。 为了在动态内存
LOAD
和UNLOAD
期间更好地管理内存,建议您使用较小的集合大小。
-
推理负载类型
Triton 支持两种通过网络发送推理负载的方法 – json
和 binary+json
(即二进制编码的 json)。这两种情况下的 JSON 负载都包括数据类型、形状和实际的推理请求张量。请求张量必须是二进制张量。
使用 binary+json
格式,您必须在标头中指定请求元数据的长度,以允许 Triton 正确解析二进制负载。在 SageMaker AI Triton 容器中,这是使用自定义Content-Type
标题完成的:application/vnd.sagemaker-triton.binary+json;json-header-size={}
。这与在独立的 Triton 推理服务器上使用Inference-Header-Content-Length
标头不同,因为 AI 中 SageMaker 不允许使用自定义标头。
使用 config.pbtxt 来设置模型配置
对于 SageMaker AI 上的 Triton 推理服务器,每个模型都必须包含一个至少指定模型以下配置的config.pbtxt
文件:
-
name
:虽然这对于在 SageMaker AI 之外运行的模型是可选的,但我们建议您始终为要在 Triton on SageMaker AI 中运行的模型提供一个名称。 -
platform
和/或backend
:设置后端对于指定模型类型至关重要。一些后端还会进一步分类,例如 tensorflow_savedmodel
或tensorflow_graphdef
。除了platform
键之外,此类选项还可以指定为backend
键的一部分。最常见的后端是tensorrt
、onnxruntime
、tensorflow
、pytorch
、python
、dali
、fil
和openvino
。 -
input
:为输入指定三个属性:name
、data_type
和dims
(形状)。 -
output
:为输出指定三个属性:name
、data_type
和dims
(形状)。 -
max_batch_size
:将批次大小设置为大于或等于 1 的值,以指示 Triton 应在模型中使用的最大批次大小。
有关配置的更多详细信息config.pbtxt
,请参阅 Triton 的 GitHub 存储库
-
instance_groups
:实例组有助于指定给定模型的数量和位置。它们具有属性 count
、kind
和gpus
(在kind
为KIND_GPU
时使用)。count
属性等于工作线程数。对于常规模型服务,每个工作线程都有自己的模型副本。同样,在 Triton 中,count
指定每个设备的模型副本数。例如,如果instance_group
类型为KIND_CPU
,则 CPU 有count
个模型副本。注意
在 GPU 实例上,
instance_group
配置对每个 GPU 设备应用。例如,除非您明确指定应使用哪些 GPU 设备加载模型,否则将在每个 GPU 设备上放置count
个模型副本。 -
dynamic_batching
和 sequence_batching
:动态批处理用于无状态模型,序列批处理用于有状态模型(您希望每次都将请求路由到同一个模型实例)。批处理调度程序启用各个模型的队列,根据批处理配置,这有助于提高吞吐量。 -
ensemble
:组合模型表示一个或多个模型的管道以及这些模型之间输入和输出张量的连接。可以通过将 platform
指定为ensemble
来进行配置。组合配置只是模型管道的表示形式。在 SageMaker AI 上,集合下的所有模型都被视为集合模型的依赖对象,并被视为 SageMaker 人工智能指标的单个模型,例如。LoadedModelCount
将默认 Triton 指标发布到亚马逊 CloudWatch
NVIDIA Triton 推理容器在 8002 端口(可配置)公开不同模型的指标,这些指标在 Triton 推理服务器中使用。 GPUs 有关可用默认指标的完整详细信息,请参阅 Triton 推理服务器
从 v23.07 版本开始, SageMaker AI Triton 容器支持 CloudWatch 通过指定一些环境变量将这些指标发布到亚马逊。为了获取 Prometheus 的指标, SageMaker AI Triton 容器利用了亚马逊代理。 CloudWatch
收集指标时所要指定的必需环境变量如下所示:
环境变量 | 描述 | 示例值 |
---|---|---|
|
指定此选项可允许 Triton 将指标发布到其 Prometheus 端点。 |
"true" |
|
指定此选项可开始向Amazon CloudWatch 发布指标所需的预先检查。 |
"true" |
|
指定此选项以指向指标所写入的日志组。 |
"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" |
|
指定此选项以指向要在其中查看和绘制指标的指标命名空间。 |
"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" |
|
将此项指定为 8002 或任何其他端口。如果 SageMaker AI 未屏蔽指定端口,则使用该端口。否则,将自动选择另一个未屏蔽端口。 |
"8002" |
在 SageMaker AI 上使用 Triton 发布指标时,请记住以下限制:
虽然您可以通过 C-API 和 Python 后端(v23.05 及更高版本)生成自定义指标,但目前不支持将这些指标发布到亚马逊。 CloudWatch
在 SageMaker AI 多模型端点 (MME) 模式下,Triton 在需要启用模型命名空间的环境中运行,因为每个模型(集合模型除外)都被视为在自己的模型存储库中。目前,这会对指标造成限制。启用模型命名空间后,Triton 不会区分属于不同组合的两个同名模型的指标。要解决这个问题,请确保所部署的每个模型都有一个唯一的名称。这也使得在中查找指标变得更加容易 CloudWatch。
环境变量
下表列出了 SageMaker AI 上的 Triton 支持的环境变量。
环境变量 | 描述 | 类型 | 可能的值 |
---|---|---|---|
|
允许 Triton 在 SageMaker AI 多模型端点模式下运行。 |
布尔值 |
|
|
指定要在 SageMaker AI 单一模型(默认)模式下加载的模型。对于组合模式,请指定组合正本的名称。 |
字符串 |
|
|
|
字符串 |
|
|
在 SageMaker AI Triton 容器中, |
布尔值 |
|
|
在 SageMaker AI 上,默认端口为 8080。在多容器场景中,您可以将该端口自定义为其他端口。 |
字符串 |
|
|
这是由 SageMaker AI 平台在使用多容器模式时设置的。 |
字符串 |
|
|
虽然 SageMaker 人工智能目前不支持 GRPC,但如果你在自定义反向代理前使用 Triton,你可以选择启用 GRPC。 |
布尔值 |
|
|
GRPC 的默认端口是 8001,不过您可以进行更改。 |
字符串 |
|
|
您可以设置默认 HTTP 请求处理程序线程的数量。 |
字符串 |
|
|
|
布尔值 |
|
|
|
布尔值 |
|
|
|
布尔值 |
|
|
|
布尔值 |
|
|
指定 Python 后端的 shm 大小,以字节为单位。默认值为 16 MB,但可以增加。 |
字符串 |
|
|
指定 Python 后端的 shm 增长大小,以字节为单位。默认值为 1 MB,但可以增加以提供更大的增量。 |
字符串 |
|
|
默认值为 |
字符串 |
|
|
限制模型加载所能使用的最大 GPU 内存百分比,以便让其余部分可用于推理请求。 |
字符串 |
|
|
|
布尔值 |
|
|
默认端口为 8002。 |
字符串 |
|
|
|
布尔值 |
|
|
如果您已启用向发布指标的功能,则为必填项 CloudWatch。 |
字符串 |
|
|
如果您已启用向发布指标的功能,则为必填项 CloudWatch。 |
字符串 |
|
|
在启动 Triton 服务器时附上任何其他参数。 |
字符串 |
|