Re Reference AI

インフラ

Triton Inference Serverとは

Triton

NVIDIAが提供する、複数のフレームワークで学習したモデルを統一的にデプロイ・実行できるオープンソースの推論サーバー

推論サーバーデプロイ

ひとことで言うと

違う仕組みで作られたAIモデルたちを、まとめて同じサーバーで動かして配れるようにする道具。

概要

Triton Inference Serverは、NVIDIAが提供するオープンソースの推論サーバー。 PyTorch・TensorFlow・ONNXTensorRTなど異なるフレームワークで学習された複数のモデルを、統一されたAPI(HTTP/gRPC)を通じて同時にデプロイ・実行できるようにする。 複数のリクエストをまとめて処理する動的バッチング、複数のモデルやモデルバージョンを同一サーバー上で並行稼働させるマルチモデル管理、GPUリソースの利用効率を高めるモデル同時実行など、大規模な推論基盤の運用に必要な機能を備える。 モデルの実装フレームワークを問わず共通のインターフェースでサービングできるため、複数チームが異なるフレームワークで開発したモデルを混在させて運用する企業のMLインフラで広く採用されている。 LLM向けにはvLLMTensorRT-LLMといった専用の推論エンジンをバックエンドとして組み込むことも可能で、汎用的な推論サービング基盤としての役割を担っている。

背景

機械学習モデルの運用では、フレームワークごとに異なる実行環境やAPIを用意する必要があり、モデルの種類が増えるほど運用の複雑さが増していた。 Triton Inference Serverは、フレームワークを問わない共通のサービング基盤を提供することで、この運用上の複雑さを解消する目的で開発された。

歴史

2018年: NVIDIAが「TensorRT Inference Server」として最初のバージョンを公開。 2019年: 複数フレームワーク対応を強化し「Triton Inference Server」へ改称。 2020年代: LLM向け推論エンジン(TensorRT-LLM等)との統合が進み、大規模言語モデルのサービング基盤としても採用が拡大。

コード例

Pythonクライアントによる推論リクエスト例

import tritonclient.http as httpclient
import numpy as np

client = httpclient.InferenceServerClient(url="localhost:8000")
inputs = [httpclient.InferInput("INPUT0", [1, 16], "FP32")]
inputs[0].set_data_from_numpy(np.random.rand(1, 16).astype(np.float32))
response = client.infer(model_name="my_model", inputs=inputs)

利点

  • PyTorch・TensorFlow・ONNXTensorRTなど、異なるフレームワークのモデルを共通のAPIでサービングできる
  • 動的バッチングやマルチGPU対応など、大規模な推論トラフィックを効率よく処理する機能が組み込まれている
  • モデルのバージョン管理やA/Bテストのための複数バージョン同時稼働など、本番運用に必要な機能を備える

欠点

  • 設定項目が多く、モデルごとの最適な構成(バッチサイズやインスタンス数など)を見極めるための学習コストがかかる
  • 小規模でシンプルな用途では、Triton単体の運用負荷がオーバースペックになることがある
  • GPUを前提とした機能が多く、CPUのみの環境ではメリットを十分に活かしにくい

比較

  • vLLMvLLMがLLM推論に特化した専用エンジンであるのに対し、Tritonは複数フレームワーク・複数モデル種別を横断的にサービングする汎用基盤
  • TensorRTTensorRTで最適化したモデルを、TritonはAPIを通じて配信するサービング層として組み合わせて使われることが多い
  • ONNXONNX形式でエクスポートしたモデルも、TritonのONNX Runtimeバックエンドを通じてそのままサービングできる

関連用語

vLLMTensorRTONNXバッチ推論

よくある質問

TritonとvLLMはどちらを使うべき?

LLMの高速な推論・サービングに特化したいならvLLM、画像認識・音声処理などLLM以外も含めた複数種類のモデルを同一基盤でまとめて運用したいならTritonが向いている。両者を組み合わせ、TritonのバックエンドとしてvLLMを使う構成も可能。

Tritonの動的バッチングとは?

個別に届く複数の推論リクエストを、一定時間内であれば自動的にまとめて1回のGPU処理として実行する機能。GPUの利用効率とスループットを高められる。

参考文献

関連Zenn記事