GPUを使った推論サーバー(TorchServeやTriton)は、設定次第でパフォーマンスが大きく変わります。ここでは「GPUを効率的に動かすための実践テクニック」をわかりやすくまとめます。
TorchServeとは?
PyTorch公式が提供する モデルサービングフレームワーク。学習済みモデルをREST APIやgRPCとして簡単に公開でき、スケールさせやすいのが特徴です。特にPyTorchユーザーが「すぐに推論APIを立てたい」ときに便利です。
TorchServe編:ワーカー数を上手に調整しよう
なぜ大事?
- デフォルトだと GPU使用率が低く、スループットが伸びない。
- ワーカー数が少なすぎると重いモデルが他の処理をブロック。
- 前処理・後処理のCPUスレッド不足も見落としがち。
よくある落とし穴
「ワーカー数は多ければ速いでしょ?」 → 実は逆効果のことも!
- GPUメモリ不足でOOM(Out of Memory)が発生
- コンテキスト切り替えで遅延が増える
解決策
nvidia-smi
でGPUメモリ使用状況を観察- TorchServeのレイテンシ統計と合わせて 最適なワーカー数を見つける
サンプル設定(config.properties)
# サービス全体設定
inference_address=http://0.0.0.0:8080
# モデルごとのワーカー数調整
model_store=/models
load_models=resnet50.mar
models={ "resnet50": { "workers": 4, "gpu": true } }
Tritonとは?
NVIDIAが提供する 高性能な推論サーバー。TensorFlow、PyTorch、ONNXなど複数フレームワークをサポートし、バッチ推論・マルチモデル管理・GPU最適化などが強力です。クラウドや大規模環境でよく使われています。
Triton編:MIGでGPUを分割して効率UP
なぜ大事?
- 大きなGPUを丸ごと1モデルに使うと 軽量モデルがリソースを占有してムダ。
- MIG(Multi‑Instance GPU)を使えば、1枚のGPUを複数インスタンスに分割できる。
- Tritonなら
instance_group
で どのMIGに割り当てるか指定可能。
よくある落とし穴
「MIGを有効化すればTritonが勝手にやってくれる」 → 自動検出しないこともある。
解決策
instance_group.gpus
に MIGデバイスIDを明示指定- 実際に動かして割り当てを確認する
サンプル設定(config.pbtxt)
instance_group [
{ kind: KIND_GPU
count: 1
gpus: [ "MIG-GPU-12345678/1/0" ]
}
]
dynamic_batching { preferred_batch_size: [4,8] }
まとめ
- TorchServe → ワーカー数を調整してGPUとCPUのバランスを取る
- Triton → MIGを活用してマルチモデル運用を効率化
そして何より大事なのは: 👉 「数値を最大にする」のではなく、実測しながら最適化すること!
キーワード
- TorchServe workers GPU
- Triton MIG instance_group