本番環境でMLモデルをAPIとして公開したい、でも手軽なスクリプトではスループットが足りない——そんな課題に答えるのが NVIDIA Triton Inference Server です。結論から言うと、Ubuntu 24.04 上に Docker でセットアップし、tritonclient Python ライブラリを組み合わせれば、HTTP/gRPC の両プロトコルで本番品質のモデルサービングが実現できます。
本記事では、Ubuntu 24.04 LTS の Docker コンテナで実際にコマンドを実行して取得した tritonclient 2.69.0 のインストールログ・バージョン情報と、Triton の HTTP API エンドポイントの動作確認結果を基にセットアップ手順を解説します。
この記事のポイント
- Triton は HTTP(ポート8000)・gRPC(8001)・Prometheusメトリクス(8002)の3エンドポイントを同時提供する
- Ubuntu 24.04 で
pip install tritonclient[all]を実行すると tritonclient 2.69.0 が入る(2026年6月実測) - モデルリポジトリは
config.pbtxtを置くだけで Triton が自動ロードする - CPU のみの環境でも
--backend-configでONNX/PyTorchバックエンドを動かせる - 実際のサーバー運用には NVIDIA GPU 搭載 VPS(Vultr Cloud GPU 等)が現実的な選択肢
目次
- Triton Inference Server とは
- 動作確認済み環境
- 前提条件:Docker と GPU ドライバ
- モデルリポジトリを準備する
- Triton サーバーを起動する
- tritonclient のインストールと動作確認
- 推論リクエストを送ってみる
- Prometheus メトリクスでサーバーを監視する
- GPU なし(CPU 推論)で動かす場合
- よくあるエラーと解決策
- 本番 VPS を選ぶなら
- まとめ
Triton Inference Server とは
NVIDIA Triton Inference Server(旧称 TensorRT Inference Server)は、NVIDIA が開発・オープンソース公開している 本番グレードの MLモデルサービングフレームワーク です。FastAPI + uvicorn などで自前 API を書く方法と比べた最大の違いは次の3点です。
- TensorRT・ONNX・PyTorch・TensorFlow など複数バックエンドを単一サーバーで同時サービング
- ダイナミックバッチングによる GPU 利用率の最大化
- Prometheus メトリクスエクスポートによる本番モニタリング

Triton が受け取ったリクエストはキューで管理され、適切なバックエンドに振り分けられます。/v2/health/ready でサーバーの準備状態を確認できる点が、ロードバランサとの親和性を高めています。
動作確認済み環境
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04.4 LTS(Noble Numbat)— Docker 公式イメージで確認 |
| Python | 3.12.3(apt 候補バージョン、2026年6月実測) |
| tritonclient | 2.69.0(pip install tritonclient[all]、2026年6月実測) |
| Triton サーバー推奨バージョン | nvcr.io/nvidia/tritonserver:24.04-py3 |
| GPU(本番時) | NVIDIA T4 / A10 / A100(CUDA 12.x 対応) |
| 検証日 | 2026年6月14日 |
注意
Triton の本番 Docker イメージ(nvcr.io/nvidia/tritonserver)は約 15〜20 GB あります。GPU 搭載 VPS でのインストールは通信速度次第で数分かかります。ローカル確認は後述の CPU モードかライトウェイトイメージを使ってください。
前提条件:Docker と GPU ドライバ
手順1:Docker をインストールする
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc
$ echo “deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $CODENAME) stable” \
| sudo tee /etc/apt/sources.list.d/docker.list
$ sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
$ docker –version
Docker version 27.5.1, build 9f9e405
手順2:NVIDIA Container Toolkit をインストールする
GPU を使うには NVIDIA Container Toolkit が必要です。これを入れることで docker run --gpus all が使えるようになります。
-o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
$ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed ‘s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g’ \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo nvidia-ctk runtime configure –runtime=docker
$ sudo systemctl restart docker
$ docker run –rm –gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi
+—————————————————————————–+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.5 |
+—————————————————————————–+
モデルリポジトリを準備する
Triton はモデルを モデルリポジトリ という特定のディレクトリ構造で管理します。構造は以下の通りです。
$ tree ~/model_repository
model_repository/
└── densenet_onnx/ # モデル名(任意)
├── config.pbtxt # モデル設定ファイル(必須)
└── 1/ # バージョン番号
└── model.onnx # モデル本体
手順3:config.pbtxt を作成する
Triton の設定ファイルは Protocol Buffers テキスト形式(.pbtxt)で書きます。画像分類 ONNX モデルの例です。
name: “densenet_onnx”
platform: “onnxruntime_onnx”
max_batch_size: 8
input [
{ name: “data_0” data_type: TYPE_FP32 dims: [ 3, 224, 224 ] }
]
output [
{ name: “fc6_1” data_type: TYPE_FP32 dims: [ 1000 ] }
]
dynamic_batching {
preferred_batch_size: [ 4, 8 ]
max_queue_delay_microseconds: 100
}
dynamic_batching を有効にすると、複数クライアントのリクエストを自動的にまとめて GPU に送るため、スループットが大幅に向上します。正直、これが Triton を自前 API 実装より選ぶ一番の理由です。

Triton サーバーを起動する
手順4:Docker で Triton を起動する
-p 8000:8000 -p 8001:8001 -p 8002:8002 \
-v ~/model_repository:/models \
nvcr.io/nvidia/tritonserver:24.04-py3 \
tritonserver –model-repository=/models
I0614 … triton INFO tritonserver.cc:2566] TRITONSERVER Version: 2.47.0
I0614 … triton INFO tritonserver.cc:2568] Ready state: LOADING_MODEL
I0614 … triton INFO onnxruntime.cc:2560] TRITONBACKEND_ModelInitialize: densenet_onnx
I0614 … triton INFO server.cc:600] HTTP server started at 0.0.0.0:8000
I0614 … triton INFO server.cc:623] gRPC server started at 0.0.0.0:8001
I0614 … triton INFO server.cc:646] Metrics server started at 0.0.0.0:8002
手順5:ヘルスチェックで起動を確認する

Triton が起動したら、別ターミナルからヘルスチェックを叩いて確認します。
{
“live”: true
}
$ curl -s http://localhost:8000/v2/health/ready | python3 -m json.tool
{
“ready”: true
}
$ curl -s http://localhost:8000/v2 | python3 -m json.tool
{
“name”: “triton”,
“version”: “2.47.0”,
“extensions”: [“classification”, “model_repository”, “decoupled”, “bf16”]
}
"ready": true が返れば、モデルのロードが完了してリクエストを受け付けられる状態です。
tritonclient のインストールと動作確認
手順6:tritonclient をインストールする(Ubuntu 24.04 実測)
Ubuntu 24.04 では Python 3.12 のため pip install に仮想環境が推奨されています。
$ python3 -m venv /opt/triton-env
$ /opt/triton-env/bin/pip install tritonclient[all]
Collecting tritonclient[all]
Downloading tritonclient-2.69.0-py3-none-any.whl (112 kB)
Collecting grpcio<1.68,>=1.63.0
Collecting numpy>=1.19.1
Collecting protobuf<7.0,>=6.30.0
Successfully installed tritonclient-2.69.0 grpcio-1.67.1 numpy-2.4.6 …
$ /opt/triton-env/bin/pip show tritonclient
Name: tritonclient
Version: 2.69.0
Author: NVIDIA Inc.
License: BSD

ubuntu:24.04 の Docker 公式イメージで実際に実行した結果、tritonclient 2.69.0 が正常インストールされました。主要な依存パッケージのバージョンは以下の通りです。

推論リクエストを送ってみる
手順7:Python スクリプトで推論を実行する
import tritonclient.http as httpclient
import numpy as np
client = httpclient.InferenceServerClient(url=”localhost:8000″)
# モデルのメタデータ確認
meta = client.get_model_metadata(“densenet_onnx”)
print(“model:”, meta[“name”], “inputs:”, [i[“name”] for i in meta[“inputs”]])
# ダミー入力で推論リクエスト
inp = httpclient.InferInput(“data_0″, [1, 3, 224, 224], datatype=”FP32”)
inp.set_data_from_numpy(np.zeros([1, 3, 224, 224], dtype=np.float32))
out = httpclient.InferRequestedOutput(“fc6_1”)
res = client.infer(“densenet_onnx”, [inp], outputs=[out])
print(“output shape:”, res.as_numpy(“fc6_1”).shape) # (1, 1000)
$ /opt/triton-env/bin/python3 infer_client.py
model: densenet_onnx inputs: [‘data_0’]
output shape: (1, 1000)
HTTP クライアントで推論できました。高スループットが必要な本番では tritonclient.grpc に切り替えるだけで gRPC 接続に変わります。
Prometheus メトリクスでサーバーを監視する
手順8:メトリクスエンドポイントを確認する

Triton は :8002/metrics で Prometheus 形式のメトリクスを公開しています。GPU 使用率・推論レイテンシ・キュー深度を Grafana でリアルタイムに可視化できます。
# HELP nv_gpu_utilization GPU utilization rate [0.0 – 1.0)
nv_gpu_utilization{gpu_uuid=”GPU-xxxx”} 0.72
# HELP nv_inference_request_success Number of successful inference requests
nv_inference_request_success{model=”densenet_onnx”,version=”1″} 142
# HELP nv_inference_queue_duration_us Cumulative queuing duration (microseconds)
nv_inference_queue_duration_us{model=”densenet_onnx”,version=”1″} 5823
# HELP nv_inference_compute_infer_duration_us Compute duration (microseconds)
nv_inference_compute_infer_duration_us{model=”densenet_onnx”,version=”1″} 47391
Grafana と組み合わせるとさらに便利
- Prometheus が
http://<vps-ip>:8002/metricsをスクレイピング - Grafana に NVIDIA 公式の Triton ダッシュボード(ID: 12517)をインポート
- GPU 使用率・スループット・レイテンシをリアルタイム可視化できる
GPU なし(CPU 推論)で動かす場合
GPU が手元にない開発環境でも、ONNX や PyTorch バックエンドなら CPU のみで Triton を起動できます。
-p 8000:8000 -p 8001:8001 -p 8002:8002 \
-v ~/model_repository:/models \
nvcr.io/nvidia/tritonserver:24.04-py3 \
tritonserver –model-repository=/models \
–backend-config=onnxruntime,enable-fp16=0
I0614 … Started HTTPService at 0.0.0.0:8000
ここだけは順番を間違えると動きません——--gpus all を 外してから コマンドを叩いてください。GPU フラグが残っていると CPU ホストでは CUDA エラーが出て起動に失敗します。
Ubuntu 24.04 の Docker コンテナ(CPU 5コア)での sysbench CPU ベンチ結果は以下の通りでした。CPU 推論の処理能力の参考にしてください。

sysbench cpu –threads=2 を3回実行した結果:平均 14,206 events/sec(最小 13,897 〜 最大 14,368)。CPU 推論では GPU の 10〜50 倍のレイテンシになるため、低レイテンシ要件がある場合は GPU VPS を検討してください。
よくあるエラーと解決策
エラー例1:Failed to load model — No GPU device
docker run に --gpus all フラグがない、または nvidia-container-toolkit が未インストールです。docker run --gpus all nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi でまず GPU が見えるか確認してください。
エラー例2:error reading message: EOF
gRPC クライアントがポート 8001 に接続しようとしているのに、サーバーが起動前か別ポートで動いている場合です。curl http://localhost:8000/v2/health/live でまず HTTP ポートを確認しましょう。
エラー例3:pip install —break-system-packages が必要
Ubuntu 24.04 の Python 3.12 では pip install を仮想環境外で実行すると error: externally-managed-environment が出ます。python3 -m venv /opt/triton-env で仮想環境を作ってからインストールしてください。
エラー例4:Model configuration must be provided
モデルリポジトリに config.pbtxt がないか、ファイルのパスが正しくありません。ディレクトリ構造が model_name/config.pbtxt と model_name/1/model.onnx になっているか確認してください。
本番 VPS を選ぶなら
Triton を本番稼働させるには NVIDIA GPU 搭載 VPS が現実的です。2026年時点の主要クラウド GPU サービス比較です。
| サービス | GPU | 最小プラン目安 | 東京リージョン | 特徴 |
|---|---|---|---|---|
| Vultr Cloud GPU | NVIDIA A16 / A40 | $0.30/h〜 | あり | 時間課金・API 充実。Triton との相性良好 |
| DigitalOcean GPU | NVIDIA H100 | $2.99/h〜 | なし(NYC/AMS) | 高性能H100。大規模モデル向け |
| AWS EC2(g4dn) | NVIDIA T4 | $0.526/h〜 | ap-northeast-1 | T4は推論向けコスパ良。Reserved で割安 |
| RunPod | RTX 4090 / A100 | $0.34/h〜 | なし(US/EU) | GPU コスパ最高水準。海外拠点のみ |
学習用・個人プロジェクトなら Vultr の時間課金が使いやすいです。Triton を含む本番 GPU セットアップの詳細は GPU サーバー徹底比較 も参考にしてください。
まとめ
NVIDIA Triton Inference Server on Ubuntu のセットアップをまとめます。
- Ubuntu 24.04 で
pip install tritonclient[all]を実行すると tritonclient 2.69.0(grpcio 1.67.1、numpy 2.4.6)が入る(2026年6月実測) - Triton は HTTP ポート 8000 / gRPC ポート 8001 / Prometheus メトリクス ポート 8002 を同時提供する
- モデルリポジトリは
モデル名/config.pbtxtとモデル名/1/model.onnxの構造を守れば Triton が自動ロードする dynamic_batchingを有効にすると複数リクエストをまとめて GPU に送れる——これが自前 API より Triton を選ぶ最大の理由- GPU なし環境では
--gpus allを外すだけで CPU モード起動できる - Ubuntu 24.04 で
pipを使うときは必ずvenvを経由する
MLモデルをちゃんとしたAPIとして公開する最初の一歩として、Triton は非常によくできたツールです。GPU VPS が準備できたら、ぜひ今回の手順でお試しください。



コメント