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