本文為您介紹如何在Flink作業中註冊NVIDIA Triton Inference Server上部署的模型。
背景說明
Realtime Compute 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 | 是 | 無 | 您應確保Realtime Compute 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 字串。