このトピックでは、NVIDIA Triton Inference Server にデプロイされたモデルを Flink ジョブで登録する方法について説明します。
背景情報
Realtime Compute for Apache Flink は、VVR エンジンバージョン 11.7 以降、CREATE MODEL ステートメントを使用してNVIDIA Triton Inference Server にデプロイされたモデルの登録をサポートします。その後、SQL ジョブで ML_PREDICT を使用して、リアルタイムデータストリームでモデル推論を実行できます。
NVIDIA Triton Inference Server は、NVIDIA が提供する高性能なオープンソースの推論サービスで、TensorFlow、PyTorch、ONNX、TensorRT などの複数のモデルフレームワークをサポートします。セルフマネージドの Triton サービスを使用するか、Platform for AI (PAI) の Elastic Algorithm Service (EAS) を使用してデプロイできます。PAI-EAS に Triton サービスをデプロイする方法の詳細については、「Triton Inference Server イメージを使用したサービスのデプロイ」をご参照ください。
注意事項
この機能は、VVR エンジンバージョン 11.7 以降でのみサポートされます。
外部にデプロイされた NVIDIA Triton Inference Server へのリクエストは、パブリックインターネット経由で送信されるため、パブリックネットワークアクセスが必要です。
NVIDIA 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' = '<endpoint>',
'auth-token' = '<authentication_token>',
'model-name' = '<model_name>',
'model-version' = '<model_version>'
);WITH パラメーター
一般的なパラメーター
パラメーター | 説明 | タイプ | 必須 | デフォルト | 注意 |
provider | モデルサービスのタイプ。 | String | はい | なし | 値は |
endpoint | Triton サーバーの HTTP エンドポイント。 | String | はい | なし | Realtime Compute for Apache Flink のワークスペースと Triton サービス間のネットワーク接続を確保する必要があります。詳細については、「ネットワーク接続オプション」をご参照ください。PAI-EAS を使用して Triton サービスをデプロイする場合、PAI コンソールのモデル推論サービスページのサービス呼び出し情報からエンドポイントを取得できます。 |
model-name | Triton サーバー上のモデルの名前。 | String | はい | なし | この名前は、Triton モデルリポジトリ内のモデル名と一致する必要があります。 |
model-version | Triton モデルのバージョン。 | String | いいえ | latest |
|
timeout | HTTP リクエストのタイムアウト。 | Duration | いいえ | 30s | このタイムアウトは、接続、読み取り、書き込み操作に適用されます。値は |
flatten-batch-dim | 配列入力のバッチ次元をフラット化するかどうか。 | Boolean | いいえ | false | デフォルトでは、配列入力のシェイプは |
priority | リクエストの優先度。 | Integer | いいえ | なし | 値の有効範囲は |
compression | リクエストボディの圧縮アルゴリズム。 | String | いいえ | なし | 現在、 |
auth-token | Triton モデルの認証トークン。 | String | いいえ | なし | このパラメーターを設定すると、リクエストに |
custom-headers | カスタム HTTP リクエストヘッダー。 | Map | いいえ | なし | 例:'X-Trace-Id:abc,Authorization:token'。 |
ステートフルモデルのパラメーター
以下のパラメーターは、RNN や LSTM など、複数のリクエストにまたがって状態を維持する必要がある Triton のステートフルモデルに適用されます。
パラメーター | 説明 | タイプ | 必須 | デフォルト | 注意 |
sequence-id | シーケンス ID。 | String | いいえ | なし | Triton は、同じシーケンス ID を持つリクエストを同じモデルインスタンスにルーティングします。 |
sequence-start | 現在のリクエストをシーケンスの開始としてマークするかどうかを指定します。 | Boolean | いいえ | false |
|
sequence-end | 現在のリクエストをシーケンスの終了としてマークするかどうかを指定します。 | Boolean | いいえ | false |
|
型マッピング
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> | 要素の型 | 1 次元配列のみサポートされます。 |
シェイプルール:
スカラー入力のシェイプは
[1]です。ARRAY<T>入力のデフォルトのシェイプは[1, N]です。ここで、Nは配列の長さです。Triton モデルが[N]のシェイプを想定している場合は、'flatten-batch-dim' = 'true' を設定してください。
よくある質問
PAI-EAS のエンドポイントとトークンの検索
Platform for AI (PAI) コンソールにログインします。
ナビゲーションペインで、 > [Inference Service] を選択し、対象のサービス名をクリックして [Overview] ページを開きます。
[Basic Information] セクションで、[View Invocation Information] をクリックします。
[Invocation Information] パネルで、エンドポイントとトークンをコピーします。
シェイプの不一致エラーの解決
Flink の入力列の型が、Triton サーバー上のモデルの config.pbtxt ファイルで指定されている dims と一致していることを確認してください。ARRAY<T> 入力の場合、Flink はデフォルトで [1, N] のシェイプを送信します。モデル設定が [N] のシェイプを想定している場合は、次のパラメーターを設定してください:
'flatten-batch-dim' = 'true'
入れ子配列はサポートされません。モデルが高次元のテンソルを想定している場合は、テンソルを 1 次元の ARRAY<T> にフラット化し、モデル側でそのシェイプを復元することを推奨します。
複数入力または複数出力のサポート
この機能は、単一の入力列と単一の出力列のみをサポートします。複数の入力を持つモデルの場合は、複数の数値特徴量を単一の ARRAY<T> にパックするか、複雑な構造を JSON 文字列にシリアル化し、モデル側で解析することができます。複数の出力を持つモデルの場合は、それらを単一の出力テンソルまたは JSON 文字列にモデル側でマージしてください。