Triton Inference Serverによる高性能サービング
モデルリポジトリ、model config.pbtxt、モデルインスタンスの並行実行、動的バッチ処理について学習します。
「Triton Inference Serverによる高性能サービング」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
Tritonとは
NVIDIA Triton Inference Serverは、CPUとGPUにまたがって複数のモデルを同時にホストできる、本番環境向けのサービングシステムです。複数のバックエンド(TensorRT、ONNX、PyTorch、TensorFlow、Python)を1つのHTTP/gRPC APIの背後で利用でき、バッチ処理と並行性の機能も組み込まれています。
モデルリポジトリ
Tritonはモデルリポジトリからモデルを読み込みます。モデルごとのフォルダー、その中の数値名のバージョンサブフォルダー、そしてconfig.pbtxtを含むディレクトリです。
model_repository/
resnet50/
config.pbtxt
1/
model.onnx
bert/
config.pbtxt
1/
model.ptconfig.pbtxt:backend
config.pbtxtファイルは、Tritonがモデルを実行する方法を記述します。backend(またはplatform)は、Tritonが使用するランタイムを指定します。
name: "resnet50"
backend: "onnxruntime"
max_batch_size: 32入出力テンソル
各入力と出力について、名前、データ型、テンソルのdims(形状)を宣言します。形状はモデルが想定するものと一致していなければなりません。先頭のバッチ次元はmax_batch_sizeによって暗黙的に指定されます。
input [
{
name: "input"
data_type: TYPE_FP32
dims: [ 3, 224, 224 ]
}
]
output [
{
name: "output"
data_type: TYPE_FP32
dims: [ 1000 ]
}
]データ型
Tritonでは、クライアントとモデルがバイト配置について合意できるよう、テンソルのデータ型を明示的に指定します。
TYPE_FP32:32ビット浮動小数点(画像で一般的)TYPE_FP16:半精度(GPUで高速)TYPE_INT64:NLPのトークンIDTYPE_INT8:量子化モデル
動的バッチ処理の考え方
動的バッチ処理を使うと、Tritonは複数の受信リクエストを1つの大きなバッチにまとめてからモデルを実行できます。GPUは大きなバッチで大幅に効率が向上するため、クライアントコードを変更せずにスループットを大きく高められます。
動的バッチ処理を設定する
設定で動的バッチ処理を有効にし、Tritonがリクエストを集めるために待機する時間を指定します。max_queue_delay_microsecondsに小さな値を設定すると、レイテンシを少し増やす代わりにスループットを大幅に高められます。
dynamic_batching {
preferred_batch_size: [ 8, 16 ]
max_queue_delay_microseconds: 1000
}モデルインスタンスの同時実行
デフォルトでは、Tritonはモデルを1つのコピー(インスタンス)として実行します。instance_groupを使うと、1つ以上のGPU上で複数のインスタンスを並列実行できます。これにより、独立したリクエストを同時に処理し、リソース使用率を高められます。
instance_group [
{
count: 2
kind: KIND_GPU
gpus: [ 0 ]
}
]バッチ処理と同時実行の違い
この2つは異なる問題を解決します。
- 動的バッチ処理:リクエストを1回のモデル呼び出しにまとめます(呼び出しあたりのスループット)
- 同時実行インスタンス:複数のモデル呼び出しを同時に実行します(並列性)
両者は相補的な機能であり、本番環境の設定では両方を使うことがよくあります。
perf_analyzer
perf_analyzerは、合成リクエストを使ってサーバーに負荷をかけ、スループット(推論数/秒)とレイテンシのパーセンタイルを報告するTritonのツールです。レイテンシの予算内でスループットを最大化できるバッチサイズと同時実行数を見つけるために使用します。
perf_analyzer -m resnet50 \
--concurrency-range 1:8 \
--percentile 95perf_analyzer の出力を読む
このツールは同時実行数を変えながら測定し、それぞれのスループットとレイテンシを出力します。曲線のひざ(knee)を探します。これは、同時実行数を増やしてもスループットが向上しなくなる、またはP95レイテンシが上限を超えるポイントです。
# Concurrency: 4, throughput: 1820 infer/sec, p95 latency: 9.1 ms
# Concurrency: 8, throughput: 1905 infer/sec, p95 latency: 17.4 ms理解度チェック
Tritonについての理解度を確認しましょう。
まとめ
Tritonを使った高性能サービングについて学びました。
- モデルリポジトリ:モデルごとのフォルダーに、バージョンサブディレクトリと
config.pbtxtを配置します config.pbtxtで、backend、入出力テンソルの形状、データ型を宣言します- 動的バッチ処理でスループットを高め、同時実行インスタンスで並列性を追加します
- perf_analyzerでスループットとレイテンシを測定し、設定を調整します
よくある質問
「Triton Inference Serverによる高性能サービング」レッスンは無料ですか?
はい。「Triton Inference Serverによる高性能サービング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「Triton Inference Serverによる高性能サービング」で何を学びますか?
モデルリポジトリ、model config.pbtxt、モデルインスタンスの並行実行、動的バッチ処理について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Triton Inference Serverによる高性能サービング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DockerによるMLモデルのコンテナ化
- クラウドデプロイメント:AWS SageMaker
- Triton Inference Serverによる高性能サービング
- モデルエンドポイントのスケーリングとオートスケーリング