この記事は、先日まで Medium 上の NVIDIA Japan オフィシャル アカウントで更新していた Triton Inference Server のリリース概要紹介が、技術ブログに移行したものとなります。そもそも「Triton Inference Server って何?」という方は、まずは以下の記事などをご確認ください。
What’s New in 2.19.0 (NGC 22.02)
リリース ノート本体は https://github.com/triton-inference-server/server/releases/tag/v2.19.0 です。2 月のリリースには以下の機能や改善などが含まれています。
- C++ クライアント ライブラリで HTTP を利用する場合も SSL がサポートされるようになりました
- Prometheus 向けの metrics にキャッシュ関連のエントリーが追加されました
- PyTorch バックエンドで、入力テンソルとして dict が使えるようになりました (後述の制限事項あり)
今月もあまり大きなアップデートはありませんが、PyTorch バックエンド利用時に複数のテンソルを束ねた辞書オブジェクトが利用可能になっています。
もともと、PyTorch バックエンドを利用するためには TorchScript が必要とされているのですが、その仕様から、入出力テンソルに明示的な名称を割り当てることができませんでした。一方 Triton Inference Server では、リクエスト送信時にテンソルの名称を必須としているため、PyTorch バックエンドを利用する際は入出力テンソルの名称が自動付与されていました。詳細は Special Conventions for PyTorch Backend – Naming Convention に記述されていますが、ざっくり言うと、INPUT__0
、INPUT__1
、… および OUTPUT__0
、OUTPUT__1
、… という形式で連番が割り当てられます。
これでは不便だということが理由かは定かではありませんが、今回のリリースで、元のモデルが入力として辞書オブジェクトを受け取るように実装されていると、Triton 側ではそのキー文字列を入力テンソル名として扱う、という対応が入っています。これが「入力テンソルとして dict が使えるように」の内容です。
これだけだとちょっとわかりにくいので、実装例を見ていきます。例えば以下のようにモデルが実装されている場合、
class PseudoModel(nn.Module):
def __init__(self):
super().__init__()
def forward(self, inputs):
x = inputs["x"]
y = inputs["y"]
x = 2 * x
y = y / 2
return torch.cat((x, y), 1)
Triton 側の設定を以下のように記述できるようになります。
input [
{
name: "x"
data_type: TYPE_FP32
dims: [ 10 ]
},
{
name: "y"
data_type: TYPE_FP32
dims: [ 10 ]
}
]
これはつまり、クライアントからは INPUT__0
および INPUT__1
という名前ではなく、x
と y
という名前で入力を扱えるようになるということを意味します。なお少なくとも現時点では、辞書オブジェクトを入力として利用する場合、入力パラメーターが一つだけで、かつキーが文字列で、値がテンソルの辞書のみがサポートされます。複数入力や、文字列以外のキー、テンソル以外の値を利用するようなケースはサポートされません。
What’s New に言及されていないアップデート
そのほか、以下の内容が公開されています。
- Trace 機能を制御する endpoint が追加されました
- PyTorch 1.2.0 およびそれ以前のバージョンでエクスポートされたモデルを PyTorch バックエンドから利用する場合、再エクスポートが必要になります
Trace 機能自体は以前から導入されていた、Triton 内部での処理時間の内訳をファイル出力する機構ですが、これを操作するための API として /v2[/models/${MODEL_NAME}]/trace/setting
が追加されました。これにより、動作中の Triton に対して Trace の設定を変更したりできるようになるようです。
二つ目の、以前の PyTorch で生成したモデルの継続利用に再エクスポートを必要とする件は、内部モジュールのバージョンアップに伴う対応のようです。再エクスポートしない場合、エラーを吐く可能性があるようです。
まとめ
今月も比較的小さなアップデートが多かったかと思いますが、PyTorch バックエンド利用時に入力テンソルの名称を制御できるようになったのは、ちょっと便利な改善ではないでしょうか。先日の GTC でもさまざまな発表がありましたが、Triton の開発も引き続き継続していきますので、ご要望などある方は、Github に issue を上げていただければと思います。
その他、疑問点や問題点がある場合や、日本語で要望を書きたいという方など、自由にコメントなどいただければ幸いです!