Triton Inference Server
SageMaker Triton 容器可协助您在 SageMaker 托管平台上部署 Triton Inference Server,用于在生产环境中提供经过训练的模型。它支持 SageMaker 的不同运行模式。有关 SageMaker 上可用的 Triton Inference Server 容器列表,请参阅 NVIDIA Triton 推理容器(仅限 SM 支持的容器)
对于端到端笔记本示例,我们建议您查看 amazon-sagemaker-examples 存储库
托管模式
Triton 容器支持以下 SageMaker 托管模式:
-
单模型端点
-
这是 SageMaker 的默认操作模式。在此模式下,Triton 容器可以加载单个模型或单个组合模型。
-
模型名称必须作为容器环境的属性传递,该属性包括在
CreateModel
SageMaker API 调用中。用于传入模型名称的环境变量是SAGEMAKER_TRITON_DEFAULT_MODEL_NAME
。
-
-
带组合的单模型端点
-
Triton Inference Server 支持模型的组合,即管道或 DAG(Directed Acyclic Graph,有向无环图)。虽然从技术上讲,一个组合由多个模型组成,但在默认的单模型端点模式下,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 Server 上使用 Inference-Header-Content-Length
标头不同,因为 SageMaker 中不允许使用自定义标头。
使用 config.pbtxt 来设置模型配置
对于 SageMaker 上的 Triton Inference Server,每个模型都必须包含一个 config.pbtxt
文件,至少指定模型的以下配置:
-
name
:虽然此项对于在 SageMaker 之外运行的模型为可选,但建议您始终为要在 SageMaker 上的 Triton 中运行的模型提供一个名称。 -
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
。
向 Amazon CloudWatch 发布默认 Triton 指标
NVIDIA Triton 推理容器在端口 8002(可配置)上公开不同模型以及 Triton Inference Server 中使用 GPU 的指标。有关可用默认指标的完整详细信息,请参阅 Triton Inference Server
从版本 v23.07 开始,SageMaker Triton 容器支持通过指定一些环境变量将这些指标发布到 Amazon CloudWatch。为了抓取 Prometheus 指标,SageMaker Triton 容器利用 Amazon CloudWatch 代理。
收集指标时所要指定的必需环境变量如下所示:
环境变量 | 描述 | 示例值 |
---|---|---|
|
指定此选项可允许 Triton 将指标发布到其 Prometheus 端点。 |
"true" |
|
指定此选项可开始进行必要的预检查,以便向 Amazon CloudWatch 发布指标。 |
"true" |
|
指定此选项以指向指标所写入的日志组。 |
"/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" |
|
指定此选项以指向要在其中查看和绘制指标的指标命名空间。 |
"/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" |
|
将此项指定为 8002 或任何其他端口。如果 SageMaker 没有屏蔽指定端口,则使用该端口。否则,将自动选择另一个未屏蔽端口。 |
"8002" |
在 SageMaker 上使用 Triton 发布指标时,请记住以下限制:
虽然您可以通过 C-API 和 Python 后端(v23.05 及更高版本)生成自定义指标,但目前不支持将这些指标发布到 Amazon CloudWatch。
在 SageMaker 多模型端点 (MME) 模式下,Triton 在需要启用模型命名空间的环境中运行,因为每个模型(组合模型除外)都被视为在自己的模型存储库中。目前,这会对指标造成限制。启用模型命名空间后,Triton 不会区分属于不同组合的两个同名模型的指标。要解决这个问题,请确保所部署的每个模型都有一个唯一的名称。这样做还可以更轻松地在 CloudWatch 中查找您的指标。
环境变量
下表列出了 SageMaker 上的 Triton 支持的环境变量。
环境变量 | 描述 | 类型 | 可能的值 |
---|---|---|---|
|
允许 Triton 在 SageMaker 多模型端点模式下运行。 |
布尔值 |
|
|
指定要在 SageMaker 单模型(默认)模式下加载的模型。对于组合模式,请指定组合正本的名称。 |
String |
|
|
|
String |
|
|
在 SageMaker Triton 容器中,此项默认设置为 |
布尔值 |
|
|
在 SageMaker 上,默认端口为 8080。在多容器场景中,您可以将该端口自定义为其他端口。 |
String |
|
|
此项由 SageMaker 平台在使用多容器模式时设置。 |
String |
|
|
虽然 SageMaker 目前不支持 GRPC,但如果您在自定义反向代理前使用 Triton,则可以选择启用 GRPC。 |
布尔值 |
|
|
GRPC 的默认端口是 8001,不过您可以进行更改。 |
String |
|
|
您可以设置默认 HTTP 请求处理程序线程的数量。 |
String |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
指定 Python 后端的 shm 大小,以字节为单位。默认值为 16 MB,但可以增加。 |
String |
|
|
指定 Python 后端的 shm 增长大小,以字节为单位。默认值为 1 MB,但可以增加以提供更大的增量。 |
String |
|
|
默认值为 |
String |
|
|
限制模型加载所能使用的最大 GPU 内存百分比,以便让其余部分可用于推理请求。 |
String |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
默认端口为 8002。 |
String |
|
|
在 SageMaker 上默认为 |
布尔值 |
|
|
如果您已启用向 CloudWatch 发布指标,则此项必需。 |
String |
|
|
如果您已启用向 CloudWatch 发布指标,则此项必需。 |
String |
|
|
在启动 Triton 服务器时附上任何其他参数。 |
String |
|