本文为您介绍如何在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镜像部署。
使用须知
语法
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?
登录人工智能平台PAI控制台。
在左侧导航栏选择,单击目标服务名称进入概览页面。
在基本信息区域,单击查看调用信息。
在调用信息面板,复制调用地址和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 字符串。