Triton推理服务调用

更新时间:
复制为 MD 格式

本文为您介绍如何在Flink作业中注册NVIDIA Triton Inference Server上部署的模型。

背景说明

实时计算 Flink 版从 VVR 引擎 11.7 起支持通过 CREATE MODEL 注册 NVIDIA Triton Inference Server 上部署的模型,并在 SQL 作业中通过 ML_PREDICT 对实时数据流进行模型推理。

Triton Inference Server 是 NVIDIA 开源的高性能推理服务,支持 TensorFlow、PyTorch、ONNX、TensorRT 等多种模型框架。您可以使用自建 Triton 服务,也可以通过人工智能平台 PAI 的模型在线服务 EAS 部署 Triton 服务。PAI-EAS 上的 Triton 部署方法请参见 Triton Inference Server镜像部署

使用须知

  • 仅实时计算引擎 VVR 11.7 及以上版本支持。

  • 调用外部部署的 NVIDIA Triton Inference Server 时,请求通过公网传输,需提前开通公网访问

  • 若 Triton Inference Server 部署在 PAI 平台,请求通过私网传输,无需开通公网,详情请参见常见问题获取接入地址。

  • 模型推理吞吐受 Triton 服务端资源、网络链路和模型本身性能影响。当 Triton 服务过载或限流时,Flink 作业会表现出以该算子为瓶颈的反压现象。在限流情况严重时,可能会触发相关算子的超时报错及作业重启。

语法

CREATE MODEL [catalog_name.][db_name.]model_name
INPUT (
  input_column input_type
)
OUTPUT (
  output_column output_type
)
WITH (
  'provider' = 'triton',
  'endpoint' = '<接入地址>',
  'auth-token' = '<鉴权token>'
  'model-name' = '<模型名称>',
  'model-version' = '<模型版本>'
);

WITH 参数

通用参数

参数

说明

数据类型

是否必填

默认值

备注

provider

模型服务类型。

String

使用 Triton 时固定为 triton。

endpoint

Triton Inference Server 的 HTTP 接入地址。

String

您应确保实时计算 Flink 版工作空间与 Triton 服务网络互通,详情请参见网络连接选型。如果您通过 PAI-EAS 部署 Triton 服务,可在 PAI 控制台的模型在线服务页面查看服务调用信息,获取接入地址。

model-name

Triton 上要调用的模型名称。

String

需与 Triton 模型仓库中的模型名称一致。

model-version

Triton 模型版本。

String

latest

可填写具体版本号,例如 1。

timeout

单次 HTTP 请求超时时间。

Duration

30s

同时作用于连接、读和写超时。可填写 10s、30000ms 等 Duration 格式。

flatten-batch-dim

是否展平数组输入的 batch 维度。

Boolean

false

默认数组输入 shape 为 [1, N];设为 true 后为 [N]。当 Triton 模型期望一维输入时使用。

priority

请求优先级。

Integer

取值范围为 0 到 255。值越大表示优先级越高,透传到 Triton 请求参数。

compression

请求体压缩算法。

String

当前支持 gzip。

auth-token

Triton 模型鉴权 Token。

String

配置后请求会增加 Authorization: Bearer <auth-token> 请求头。如果您通过 PAI-EAS 部署 Triton 服务,可在 PAI 控制台的模型在线服务页面查看服务调用信息,获取 Token。

custom-headers

自定义 HTTP 请求头。

Map

格式示例:'X-Trace-Id:abc,Authorization:token'。

Stateful 模型参数

以下参数适用于 RNN/LSTM 等需要在多次请求之间维持状态的 Triton Stateful Models。

参数

说明

数据类型

是否必填

默认值

备注

sequence-id

序列 ID。

String

同一序列的请求会被 Triton 路由到同一模型实例。

sequence-start

是否标记当前请求为序列起始。

Boolean

false

设为 true 时,Triton 会在处理本请求前初始化模型状态。

sequence-end

是否标记当前请求为序列结束。

Boolean

false

设为 true 时,Triton 会在处理本请求后释放模型状态。

类型映射

Flink 输入/输出列类型必须与 Triton 模型 config.pbtxt 中声明的 data_type 匹配。

Flink 类型

Triton dtype

说明

BOOLEAN

BOOL

布尔类型。

TINYINT

INT8

8 位有符号整数。

SMALLINT

INT16

16 位有符号整数。

INT

INT32

32 位有符号整数。

BIGINT

INT64

64 位有符号整数。

FLOAT

FP32

32 位浮点数。

DOUBLE

FP64

64 位浮点数。

STRING / VARCHAR

BYTES

文本类型。

ARRAY<T>

与元素类型 T 对应

仅支持一维数组,T 必须为上述标量类型之一。

Shape 规则:

  • 标量输入的 shape 为 [1]。

  • ARRAY<T> 输入的默认 shape 为 [1, N],其中 N 为数组长度;如果 Triton 模型期望 [N],可设置 'flatten-batch-dim' = 'true'。

常见问题

我的 Triton 服务部署在人工智能平台 PAI,如何获取接入地址和 token?

  1. 登录人工智能平台PAI控制台

  2. 在左侧导航栏选择模型在线服务(EAS) > 推理服务,单击目标服务名称进入概览页面。

  3. 基本信息区域,单击查看调用信息

  4. 调用信息面板,复制调用地址和Token。

报 shape mismatch 应如何处理?

请检查 Flink 输入列类型与 Triton config.pbtxt 中的 dims 是否匹配。对于 ARRAY<T> 输入,Flink 默认发送 shape [1, N]。如果模型配置中期望 [N],请设置:

'flatten-batch-dim' = 'true'

当前不支持嵌套 ARRAY。如果模型期望高维张量,建议将张量展平成一维 ARRAY<T>,并在模型侧还原 shape。

是否支持多输入或多输出模型?

模型仅支持一个输入列和一个输出列。对于多输入模型,可将多个数值特征打包为一个 ARRAY<T>,或将复杂结构序列化为 JSON STRING 后在 Triton 模型侧解析。对于多输出模型,建议在模型侧合并为一个输出张量或一个 JSON 字符串。