使用 Triton Inference Server 部署模型 - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Triton Inference Server 部署模型

Triton Inference Server 是一款开源推理服务软件,可简化 AI 推理操作。使用 Triton,你可以部署任何使用多个深度学习和机器学习框架构建的模型,包括 Tensorrt、、、ONNX、OpenVino TensorFlow PyTorch、Python、RAPIDS FIL 等。

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

    • 为了在动态内存 LOADUNLOAD 期间更好地管理内存,建议您使用较小的集合大小。

推理负载类型

Triton 支持两种通过网络发送推理负载的方法 – jsonbinary+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 键的一部分。最常见的后端是 tensorrtonnxruntimetensorflowpytorchpythondalifilopenvino

  • input:为输入指定三个属性:namedata_typedims(形状)。

  • output:为输出指定三个属性:namedata_typedims(形状)。

  • max_batch_size:将批次大小设置为大于或等于 1 的值,以指示 Triton 应在模型中使用的最大批次大小。

有关配置的更多详细信息config.pbtxt,请参阅 Triton 的 GitHub 存储库。Triton 提供了几种配置用于调整模型行为。一些最常见和最重要的配置选项包括:

  • instance_groups:实例组有助于指定给定模型的数量和位置。它们具有属性 countkindgpus(在 kindKIND_GPU 时使用)。count 属性等于工作线程数。对于常规模型服务,每个工作线程都有自己的模型副本。同样,在 Triton 中,count 指定每个设备的模型副本数。例如,如果 instance_group 类型为 KIND_CPU,则 CPU 有 count 个模型副本。

    注意

    在 GPU 实例上,instance_group 配置对每个 GPU 设备应用。例如,除非您明确指定应使用哪些 GPU 设备加载模型,否则将在每个 GPU 设备上放置 count 个模型副本。

  • dynamic_batchingsequence_batching:动态批处理用于无状态模型,序列批处理用于有状态模型(您希望每次都将请求路由到同一个模型实例)。批处理调度程序启用各个模型的队列,根据批处理配置,这有助于提高吞吐量。

  • ensemble:组合模型表示一个或多个模型的管道以及这些模型之间输入和输出张量的连接。可以通过将 platform 指定为 ensemble 来进行配置。组合配置只是模型管道的表示形式。在 SageMaker AI 上,集合下的所有模型都被视为集合模型的依赖对象,并被视为 SageMaker 人工智能指标的单个模型,例如。LoadedModelCount

将默认 Triton 指标发布到亚马逊 CloudWatch

NVIDIA Triton 推理容器在 8002 端口(可配置)公开不同模型的指标,这些指标在 Triton 推理服务器中使用。 GPUs 有关可用默认指标的完整详细信息,请参阅 Triton 推理服务器指标 GitHub 页面。这些指标采用 Prometheus 格式,可以使用 Prometheus 抓取程序配置进行抓取。

从 v23.07 版本开始, SageMaker AI Triton 容器支持 CloudWatch 通过指定一些环境变量将这些指标发布到亚马逊。为了获取 Prometheus 的指标, SageMaker AI Triton 容器利用了亚马逊代理。 CloudWatch

收集指标时所要指定的必需环境变量如下所示:

环境变量 描述 示例值

SAGEMAKER_TRITON_ALLOW_METRICS

指定此选项可允许 Triton 将指标发布到其 Prometheus 端点。

"true"

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

指定此选项可开始向Amazon CloudWatch 发布指标所需的预先检查。

"true"

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

指定此选项以指向指标所写入的日志组。

"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest"

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

指定此选项以指向要在其中查看和绘制指标的指标命名空间。

"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest"

SAGEMAKER_TRITON_METRICS_PORT

将此项指定为 8002 或任何其他端口。如果 SageMaker AI 未屏蔽指定端口,则使用该端口。否则,将自动选择另一个未屏蔽端口。

"8002"

在 SageMaker AI 上使用 Triton 发布指标时,请记住以下限制:

  • 虽然您可以通过 C-API 和 Python 后端(v23.05 及更高版本)生成自定义指标,但目前不支持将这些指标发布到亚马逊。 CloudWatch

  • 在 SageMaker AI 多模型端点 (MME) 模式下,Triton 在需要启用模型命名空间的环境中运行,因为每个模型(集合模型除外)都被视为在自己的模型存储库中。目前,这会对指标造成限制。启用模型命名空间后,Triton 不会区分属于不同组合的两个同名模型的指标。要解决这个问题,请确保所部署的每个模型都有一个唯一的名称。这也使得在中查找指标变得更加容易 CloudWatch。

环境变量

下表列出了 SageMaker AI 上的 Triton 支持的环境变量。

环境变量 描述 类型 可能的值

SAGEMAKER_MULTI_MODEL

允许 Triton 在 SageMaker AI 多模型端点模式下运行。

布尔值

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

指定要在 SageMaker AI 单一模型(默认)模式下加载的模型。对于组合模式,请指定组合正本的名称。

字符串

<model_name>如 config.pbtxt 中所述

SAGEMAKER_TRITON_PING_MODE

'ready'是 SageMaker AI 单模型模式下的默认模式,'live'也是 SageMaker AI 多模型端点模式下的默认模式。

字符串

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

在 SageMaker AI Triton 容器中,true默认设置为。

布尔值

true, false

SAGEMAKER_BIND_TO_PORT

在 SageMaker AI 上,默认端口为 8080。在多容器场景中,您可以将该端口自定义为其他端口。

字符串

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

这是由 SageMaker AI 平台在使用多容器模式时设置的。

字符串

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

虽然 SageMaker 人工智能目前不支持 GRPC,但如果你在自定义反向代理前使用 Triton,你可以选择启用 GRPC。

布尔值

true, false

SAGEMAKER_TRITON_GRPC_PORT

GRPC 的默认端口是 8001,不过您可以进行更改。

字符串

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

您可以设置默认 HTTP 请求处理程序线程的数量。

字符串

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true默认情况下,在 SageMaker AI 上,但您可以有选择地关闭此选项。

布尔值

true, false

SAGEMAKER_TRITON_LOG_INFO

false默认情况下,在 SageMaker AI 上。

布尔值

true, false

SAGEMAKER_TRITON_LOG_WARNING

false默认情况下,在 SageMaker AI 上。

布尔值

true, false

SAGEMAKER_TRITON_LOG_ERROR

false默认情况下,在 SageMaker AI 上。

布尔值

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

指定 Python 后端的 shm 大小,以字节为单位。默认值为 16 MB,但可以增加。

字符串

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

指定 Python 后端的 shm 增长大小,以字节为单位。默认值为 1 MB,但可以增加以提供更大的增量。

字符串

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

默认值为 2。Triton 不再支持 Triton v23.04 中的 Tensorflow 2。您可以为以前的版本配置此变量。

字符串

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

限制模型加载所能使用的最大 GPU 内存百分比,以便让其余部分可用于推理请求。

字符串

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false默认情况下,在 SageMaker AI 上。

布尔值

true, false

SAGEMAKER_TRITON_METRICS_PORT

默认端口为 8002。

字符串

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false默认情况下,在 SageMaker AI 上。将此变量设置为,允许true将 Triton 的默认指标推送到亚马逊 CloudWatch。如果启用此选项,则在向您的账户发布指标时,您需要承担 CloudWatch 费用。

布尔值

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

如果您已启用向发布指标的功能,则为必填项 CloudWatch。

字符串

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

如果您已启用向发布指标的功能,则为必填项 CloudWatch。

字符串

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

在启动 Triton 服务器时附上任何其他参数。

字符串

<additional_args>