Data Science

Triton Inference Server 2022 年 8 月のリリース概要

Reading Time: < 1 minute

今月も 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 です。今月のリリースには以下の機能や改善などが含まれています。

今月は細かい更新に加え、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 faster
  • max_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 フォーマットで送れるようになる対応ですが、もろもろの都合からか、少しトリッキーな実装が必要になります。具体的には、

  1. クライアント ライブラリに入力として与える numpy.ndarray の型を FP32 にする必要がある
    (e.g., data = np.array([...], dtype=np.float32) など)
  2. InferInput 生成時の第三引数 datatype には、 “BF16” を渡す必要があるが、tritonclient.utils.np_to_triton_dtype() での変換ができないため、固定値を渡すよう個別対応が必要
  3. レスポンスとしてクライアント ライブラリから返ってくる array も、FP32 で戻されるため、後続の処理で bfloat16 として扱うには手動での変換が必要

というものです。詳細については、この機能に関連するコミット (Support bfloat16 in client (#4705) – d3e9df168da033d670a6df5d8d98a8d291f3424f) をご確認ください。

まとめ

今月はデフォルト動作に影響するようなバージョン アップに加え、性能面の改善や対応データ フォーマットの追加、パフォーマンス チューニングのヒントとなるドキュメントの追加など、細かいながらも重要な更新が多かったように思われます。すでにお使いの方も、これから試そうという方にも有益だと思いますので、ぜひ一度チェックしていただければ。

Tags