AI

MLモデルサービング比較:BentoML vs Triton vs Ray Serve で推論APIを構築する

オープンソースラボ編集部2026年6月14日

MLモデルサービング比較:BentoML vs Triton vs Ray Serve で推論APIを構築する

🤖 学習済みMLモデルをAPIとして本番に提供するサービングフレームワーク。BentoML・NVIDIA Triton・Ray Serveの特徴を比較します。

MLモデルサービングとは

学習済みモデルをREST APIやgRPCとして公開し、リアルタイム推論を提供するインフラです。スループット・レイテンシー・GPUリソース効率の最適化が主な課題です。

主要ツール比較表

項目BentoMLTriton Inference ServerRay Serve
ライセンスApache 2.0BSD 3-ClauseApache 2.0
開発元BentoML Inc.NVIDIAAnyscale
GPU対応
動的バッチ
マルチモデル
Docker化◎(Bento)
A/Bテスト
セットアップ難度

各ツールの特徴

BentoML

Pythonフレーストに最も統合されたMLサービングフレームワーク。モデルの定義からDockerイメージのビルド・クラウドデプロイまで一貫して扱えます。

主な特徴:

  • PyTorch・TensorFlow・scikit-learn・HuggingFace等に対応
  • bentoml buildでDockerイメージを自動生成(Bento)
  • 動的バッチングで単一GPU効率を最大化
  • Yatai(Kubernetes対応サービングプラットフォーム)と統合
# service.py
import bentoml
from bentoml.io import JSON, NumpyNdarray

# モデルの保存
import numpy as np
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)

bentoml.sklearn.save_model("iris_classifier", model)

# サービス定義
iris_clf_runner = bentoml.sklearn.get("iris_classifier:latest").to_runner()

svc = bentoml.Service("iris_classifier_service", runners=[iris_clf_runner])

@svc.api(input=NumpyNdarray(), output=NumpyNdarray())
async def classify(input_data: np.ndarray) -> np.ndarray:
    return await iris_clf_runner.predict.async_run(input_data)
# サービス起動
bentoml serve service:svc

# Dockerイメージ生成
bentoml build
bentoml containerize iris_classifier_service:latest

# Kubernetes デプロイ
docker push your-registry/iris-classifier:latest
kubectl apply -f bento-deployment.yaml

向いているケース: Pythonエコシステム・手軽なデプロイ・スタートアップ

NVIDIA Triton Inference Server

NVIDIA製の本格的な推論エンジン。GPU最適化・動的バッチング・マルチモデル同時サービングで最高のスループットを実現します。

主な特徴:

  • TensorRT・ONNX・TensorFlow・PyTorchをネイティブサポート
  • アンサンブルモデル(複数モデルのパイプライン)
  • 並列GPU推論(複数インスタンス)
  • Prometheus/Grafanaとのネイティブ統合
# Tritonサーバー起動
docker run --gpus=all -it --rm   -p 8000:8000   -p 8001:8001   -p 8002:8002   -v /path/to/models:/models   nvcr.io/nvidia/tritonserver:24.01-py3   tritonserver --model-repository=/models
# モデルリポジトリ構造
models/
  bert-base/
    config.pbtxt
    1/
      model.onnx
  resnet50/
    config.pbtxt
    1/
      model.plan  # TensorRT
# Tritonクライアント(Python)
import tritonclient.http as httpclient
import numpy as np

client = httpclient.InferenceServerClient(url="localhost:8000")

input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
inputs = [httpclient.InferInput("input", [1, 3, 224, 224], "FP32")]
inputs[0].set_data_from_numpy(input_data)

outputs = [httpclient.InferRequestedOutput("output")]
result = client.infer("resnet50", inputs, outputs=outputs)
print(result.as_numpy("output"))

向いているケース: GPU最大活用・高スループット・NVIDIA環境

Ray Serve

Rayの分散計算基盤上で動くMLサービング。A/Bテスト・Canaryデプロイ・モデルコンポジションが特に強力です。

主な特徴:

  • Rayの分散スケジューリングを活用
  • HTTP/gRPC両対応
  • TrafficPolicyでA/Bテスト・Canaryを設定
  • LLMサービングに最適(vLLMとの統合)
# Ray Serve でモデルをサービング
from ray import serve
from transformers import pipeline

@serve.deployment(
    num_replicas=2,
    ray_actor_options={"num_gpus": 0.5},  # 各レプリカが0.5 GPU
    autoscaling_config={"min_replicas": 1, "max_replicas": 10}
)
class SentimentAnalyzer:
    def __init__(self):
        self.model = pipeline("sentiment-analysis")

    async def __call__(self, request):
        text = await request.json()
        result = self.model(text["text"])
        return {"sentiment": result[0]["label"], "score": result[0]["score"]}

# A/Bテスト設定
@serve.deployment
class Router:
    def __init__(self, model_v1, model_v2):
        self.model_v1 = model_v1
        self.model_v2 = model_v2

    async def __call__(self, request):
        import random
        if random.random() < 0.8:
            return await self.model_v1.remote(request)
        else:
            return await self.model_v2.remote(request)

# デプロイ
serve.run(SentimentAnalyzer.bind())

向いているケース: LLMサービング・A/Bテスト・分散スケーリング

選択ガイド

状況推奨
Python中心・シンプルデプロイBentoML
GPU最大活用・高スループットTriton
LLMサービング・A/BテストRay Serve

内部リンク

外部リソース

FAQ

Q. vLLMとの違いは何ですか?

vLLMはLLM(GPT等)の推論に特化した高速サービングエンジンです。Ray Serveはvllmをバックエンドに使いながら、スケーリングとルーティングを管理するオーケストレーション層として使えます。

Q. バッチ推論とリアルタイム推論はどう使い分けますか?

バッチ推論(Airflow/Spark等)はスループット重視・レイテンシー許容のケース。リアルタイム推論(BentoML等)はレイテンシー重視のAPIに使います。

Q. ONNX形式に変換するとどんなメリットがありますか?

フレームワーク非依存になり、Triton等の最適化エンジンが使えます。TensorRT変換でGPUスループットが大幅向上するケースも多いです。

Q. BentoMLはLLMのサービングにも使えますか?

はい。OpenLLM(BentoML製)はLLM特化のサービングツールで、Llama・Mistral・Gemma等をBentoMLで簡単にサービングできます。

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。