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

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

使用 Triton 推理服务器进行模型部署

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

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

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

推理负载类型

Triton 支持两种通过网络发送推理负载的方法 – jsonbinary+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 键的一部分。最常见的后端是 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,集合下的所有模型都被视为集合模型的依赖对象,并被视为单个 SageMaker 指标模型,例如。LoadedModelCount

向亚马逊发布默认 Triton 指标 CloudWatch

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

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

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

环境变量 描述 示例值

SAGEMAKER_TRITON_ALLOW_METRICS

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

"true"

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

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

"true"

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

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

“/aws/ /Endpoints/SageMaker/TritonMetrics” SageMakerTwoEnsemblesTest

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

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

“/aws/ /Endpoints/SageMaker/TritonMetrics” SageMakerTwoEnsemblesPublicTest

SAGEMAKER_TRITON_METRICS_PORT

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

"8002"

在 Triton 开启的情况下发布指标时 SageMaker,请记住以下限制:

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

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

环境变量

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

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

SAGEMAKER_MULTI_MODEL

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

布尔值

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

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

String

<model_name> 如 config.pbtxt 中所述

SAGEMAKER_TRITON_PING_MODE

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

String

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

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

布尔值

true, false

SAGEMAKER_BIND_TO_PORT

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

String

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

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

String

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

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

布尔值

true, false

SAGEMAKER_TRITON_GRPC_PORT

的默认端口GRPC为 8001,但您可以对其进行更改。

String

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

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

String

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true默认情况下处于启用状态 SageMaker,但您可以有选择地关闭此选项。

布尔值

true, false

SAGEMAKER_TRITON_LOG_INFO

false默认为开启 SageMaker。

布尔值

true, false

SAGEMAKER_TRITON_LOG_WARNING

false默认为开启 SageMaker。

布尔值

true, false

SAGEMAKER_TRITON_LOG_ERROR

false默认为开启 SageMaker。

布尔值

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

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

String

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

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

String

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

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

String

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

限制用于加载模型的最大GPU内存百分比,允许剩余部分用于推理请求。

String

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false默认为开启 SageMaker。

布尔值

true, false

SAGEMAKER_TRITON_METRICS_PORT

默认端口为 8002。

String

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

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

布尔值

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

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

String

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

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

String

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

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

String

<additional_args>