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