今月も Triton Inference Server のリリース内容について、概要をお届けします。「Triton Inference Server って何?」という方は、以下の記事などをご確認ください。
What’s New in 2.25.0 (NGC 22.08)
リリース ノート本体は https://github.com/triton-inference-server/server/releases/tag/v2.25.0 です。今月のリリースには以下の機能や改善などが含まれています。
- モデル リポジトリの接続先クラウド サービスへの認証情報を集約できるようになります (ベータ)
- ひとつの JSON ファイルにまとめて書くことが可能に
- 設定の自動補完が実装されているカスタム バックエンドのモデルで、ファイル名が
<model_name>.<backend_name>
の形式のものは、config.pbtxt
なしでもロード可能になります - モデル ロード時の GPU メモリ最大値として、新しく
--model-load-gpu-limit
オプションが導入されました- GPU 全体に対するメモリ制限であり、個々のモデルに対するメモリ制限ではない点に注意
- 新しいドキュメントとして、パフォーマンス チューニング ガイドが追加されました
- TensorFlow バックエンドのデフォルト バージョンが、正式に 2.x になりました
- 以後、1.x も引き続き利用可能ですが、手動での指定が必要になります
- PyTorch バックエンドの性能改善: GPU 利用時、モデル インスタンスごとに別の CUDA Stream を利用するようになりました
- Model Analyzer の analyze サブコマンドが非推奨化され、profile サブコマンドに統合されました
今月は細かい更新に加え、TensorFlow バックエンドのデフォルト バージョンが 2.x にアップグレードされた点と、PyTorch バックエンドの性能改善まわりが大きな変更でしょうか。また加えて、パフォーマンス チューニングのためのドキュメントが追加された点も大きなポイントです。
特に PyTorch バックエンドの性能改善については、バージョンアップによる恩恵が比較的見えやすいものとなっています。前提条件として、デバイスごとのモデルのインスタンス数が 1 より大きいことが必要ではありますが、その場合、前バージョン (=2.24.0) と比較して 20-30% 程度の性能差が出ることがあります。たとえば ResNet50 のモデルをインスタンス数 8 でデプロイする場合、前バージョンの 2.24.0 と、現バージョンの 2.25.0 を比較すると、
max_batch_size=1
かつdynamic_batching
なし、16 並列リクエスト: x1.206 fastermax_batch_size=2
かつdynamic_batching
あり、32 並列リクエスト: x1.318 faster
というような結果になります。もちろんモデルや使用する GPU/CPU などに応じて改善幅は変化しますが、現状 PyTorch バックエンドを利用されている場合は、バージョン アップするだけで相当程度の改善が見込めるのではないでしょうか。
What’s New 以外のアップデート
今月の、What’s New で言及されていない更新点は以下の通りです。
- モデル ロード時のスレッド プール サイズに関するオプション
--model-load-thread-count
のドキュメントが、正式に追加されました (PR#4677)- このオプション自体は、先月の v2.24.0 (22.07) で導入されたものです
- クライアント ライブラリで bfloat16 がサポートされました (PR – client#135)
後者の bfloat16 サポートについては少し注意が必要です。サーバー側のモデルで bfloat16 対応している場合に、クライアントからデータを bfloat16 フォーマットで送れるようになる対応ですが、もろもろの都合からか、少しトリッキーな実装が必要になります。具体的には、
- クライアント ライブラリに入力として与える
numpy.ndarray
の型を FP32 にする必要がある
(e.g.,data = np.array([...], dtype=np.float32)
など) InferInput
生成時の第三引数datatype
には、“BF16”
を渡す必要があるが、tritonclient.utils.np_to_triton_dtype()
での変換ができないため、固定値を渡すよう個別対応が必要- レスポンスとしてクライアント ライブラリから返ってくる array も、FP32 で戻されるため、後続の処理で bfloat16 として扱うには手動での変換が必要
というものです。詳細については、この機能に関連するコミット (Support bfloat16 in client (#4705) – d3e9df168da033d670a6df5d8d98a8d291f3424f) をご確認ください。
まとめ
今月はデフォルト動作に影響するようなバージョン アップに加え、性能面の改善や対応データ フォーマットの追加、パフォーマンス チューニングのヒントとなるドキュメントの追加など、細かいながらも重要な更新が多かったように思われます。すでにお使いの方も、これから試そうという方にも有益だと思いますので、ぜひ一度チェックしていただければ。