Ultralytics YOLO26とTriton Inference Server
Triton Inference Server(旧称 TensorRT Inference Server)は、NVIDIAが開発したオープンソースのソフトウェアソリューションです。NVIDIA GPUに最適化されたクラウド推論ソリューションを提供します。Tritonは、本番環境でのAIモデルの大規模なデプロイを簡素化します。Ultralytics YOLO26とTriton Inference Serverを統合することで、スケーラブルで高性能なディープラーニング推論ワークロードをデプロイできます。このガイドでは、統合のセットアップとテストの手順を説明します。
見る: NVIDIA Triton Inference Serverの利用開始。
Triton Inference Serverとは何ですか?
Triton Inference Serverは、さまざまなAIモデルを本番環境にデプロイするために設計されています。TensorFlow、PyTorch、ONNX Runtimeをはじめとする、幅広い深層学習および機械学習フレームワークをサポートしています。主なユースケースは以下のとおりです。
- 単一のサーバーインスタンスから複数のモデルを提供
- サーバーを再起動せずにモデルを動的にロードおよびアンロード
- アンサンブル推論。複数のモデルを組み合わせて使用して結果を達成できるようにします
- A/Bテストとローリングアップデートのためのモデルのバージョン管理
Triton Inference Serverの主な利点
Ultralytics YOLO26でTriton Inference Serverを使用することには、いくつかの利点があります。
- 自動バッチ処理: 複数のAIリクエストをまとめて処理することで、レイテンシーを削減し、推論速度を向上させます。
- Kubernetes統合: クラウドネイティブな設計により、AIアプリケーションの管理とスケーリングのためにKubernetesとシームレスに連携します。
- ハードウェア固有の最適化: NVIDIA GPU を最大限に活用して、最高のパフォーマンスを実現します。
- フレームワークの柔軟性: TensorFlow、PyTorch、ONNX、TensorRTを含む複数のAIフレームワークをサポートします
- オープンソースでカスタマイズ可能: 特定のニーズに合わせて変更でき、さまざまなAIアプリケーションに柔軟に対応できます。
前提条件
先に進む前に、以下の前提条件を満たしていることを確認してください。
- マシンにDockerがインストールされていること
- インストール
tritonclient:pip install tritonclient[all]
YOLO26をONNXフォーマットにエクスポートする
Tritonにモデルをデプロイする前に、ONNX形式にエクスポートする必要があります。ONNX(Open Neural Network Exchange)は、異なる深層学習フレームワーク間でモデルを転送できる形式です。以下のコマンドを使用します。 export の機能: YOLO クラス:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
# Retrieve metadata during export. Metadata needs to be added to config.pbtxt. See next section.
metadata = []
def export_cb(exporter):
metadata.append(exporter.metadata)
model.add_callback("on_export_end", export_cb)
# Export the model
onnx_file = model.export(format="onnx", dynamic=True)
Triton モデルリポジトリのセットアップ
Tritonモデルリポジトリは、Tritonがモデルにアクセスしてロードできるストレージの場所です。
必要なディレクトリ構造を作成します。
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True)エクスポートされたONNXモデルをTritonリポジトリに移動します:
from pathlib import Path # Move ONNX model to Triton Model path Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") # Create config file (triton_model_path / "config.pbtxt").touch() data = """ # Add metadata parameters { key: "metadata" value { string_value: "%s" } } # (Optional) Enable TensorRT for GPU inference # First run will be slow due to TensorRT engine conversion optimization { execution_accelerators { gpu_execution_accelerator { name: "tensorrt" parameters { key: "precision_mode" value: "FP16" } parameters { key: "max_workspace_size_bytes" value: "3221225472" } parameters { key: "trt_engine_cache_enable" value: "1" } parameters { key: "trt_engine_cache_path" value: "/models/yolo/1" } } } } """ % metadata[0] # noqa with open(triton_model_path / "config.pbtxt", "w") as f: f.write(data)
Triton Inference Serverの実行
Docker を使用して Triton 推論サーバーを実行:
import contextlib
import subprocess
import time
from tritonclient.http import InferenceServerClient
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:24.09-py3" # 8.57 GB
# Pull the image
subprocess.call(f"docker pull {tag}", shell=True)
# Run the Triton server and capture the container ID
container_id = (
subprocess.check_output(
f"docker run -d --rm --runtime=nvidia --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
shell=True,
)
.decode("utf-8")
.strip()
)
# Wait for the Triton server to start
triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False)
# Wait until model is ready
for _ in range(10):
with contextlib.suppress(Exception):
assert triton_client.is_model_ready(model_name)
break
time.sleep(1)
次に、Triton Serverモデルを使用して推論を実行します。
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
コンテナのクリーンアップ:
# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)
TensorRTの最適化(オプション)
さらに高いパフォーマンスを得るには、TensorRTと Triton Inference Server を組み合わせて使用できます。TensorRT は、NVIDIA GPU 向けに特別に構築された高性能な深層学習オプティマイザであり、推論速度を大幅に向上させることができます。
TensorRTをTritonで使用する主な利点は次のとおりです。
- 最適化されていないモデルと比較して最大36倍高速な推論
- GPUを最大限に活用するためのハードウェア固有の最適化
- 精度を維持しながら、低精度フォーマット(INT8、FP16)をサポート
- 計算オーバーヘッドを削減するためのレイヤー融合
TensorRTを直接使用するには、YOLO26モデルをTensorRTフォーマットにエクスポートできます。
from ultralytics import YOLO
# Load the YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'
TensorRT の最適化に関する詳細については、TensorRT 統合ガイドをご覧ください。
上記の手順に従うことで、Triton Inference Server上でUltralytics YOLO26モデルを効率的にデプロイおよび実行でき、ディープラーニング推論タスク向けのスケーラブルで高性能なソリューションを提供します。問題が発生した場合やさらに質問がある場合は、公式のTritonドキュメントを参照するか、Ultralyticsコミュニティにサポートを求めてください。
よくある質問
NVIDIA Triton Inference ServerでUltralytics YOLO26をセットアップするにはどうすればよいですか?
Ultralytics YOLO26をNVIDIA Triton Inference Serverでセットアップするには、いくつかの重要な手順が必要です。
YOLO26をONNXフォーマットにエクスポート:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load an official model # Export the model to ONNX format onnx_file = model.export(format="onnx", dynamic=True)Triton モデルリポジトリをセットアップ:
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True) Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") (triton_model_path / "config.pbtxt").touch()Tritonサーバーの実行:
import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:24.09-py3" subprocess.call(f"docker pull {tag}", shell=True) container_id = ( subprocess.check_output( f"docker run -d --rm --runtime=nvidia --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ) .decode("utf-8") .strip() ) triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False) for _ in range(10): with contextlib.suppress(Exception): assert triton_client.is_model_ready(model_name) break time.sleep(1)
このセットアップにより、高性能なAIモデル推論のために、Triton Inference Server上でYOLO26モデルを大規模に効率的にデプロイできます。
NVIDIA Triton Inference ServerでUltralytics YOLO26を使用することにはどのような利点がありますか?
Ultralytics YOLO26とNVIDIA Triton Inference Serverを統合することには、いくつかの利点があります。
- スケーラブルなAI推論: Tritonを使用すると、単一のサーバーインスタンスから複数のモデルを提供でき、動的なモデルのロードとアンロードをサポートするため、多様なAIワークロードに対して高いスケーラビリティを発揮します。
- ハイパフォーマンス: NVIDIA GPU向けに最適化されたTriton Inference Serverは、高速な推論処理を保証し、物体検出などのリアルタイムアプリケーションに最適です。
- アンサンブルとモデルのバージョニング: Tritonのアンサンブルモードを使用すると、複数のモデルを組み合わせて結果を改善でき、モデルのバージョニングはA/Bテストとローリングアップデートをサポートします。
- 自動バッチ処理: Tritonは、複数の推論リクエストを自動的にグループ化し、スループットを大幅に向上させ、レイテンシーを削減します。
- デプロイメントの簡素化: システム全体を刷新することなく、AIワークフローを段階的に最適化できるため、効率的な拡張が容易になります。
TritonでYOLO26をセットアップおよび実行するための詳細な手順については、セットアップガイドを参照してください。
Triton Inference Serverを使用する前に、YOLO26モデルをONNXフォーマットにエクスポートする必要があるのはなぜですか?
NVIDIA Triton Inference Serverにデプロイする前に、Ultralytics YOLO26モデルにONNX (Open Neural Network Exchange) フォーマットを使用することには、いくつかの重要な利点があります。
- 相互運用性:ONNX形式は、異なる深層学習フレームワーク(PyTorch、TensorFlowなど)間の転送をサポートし、より広範な互換性を保証します。
- 最適化: Tritonを含む多くのデプロイ環境はONNX向けに最適化されており、より高速な推論とより優れたパフォーマンスを可能にします。
- デプロイの容易さ: ONNXは、フレームワークやプラットフォーム間で広くサポートされており、さまざまなオペレーティングシステムやハードウェア構成でのデプロイプロセスを簡素化します。
- フレームワークからの独立性: ONNXに変換されると、モデルは元のフレームワークに縛られなくなり、移植性が向上します。
- 標準化: ONNXは、異なるAIフレームワーク間の互換性の問題を克服するのに役立つ標準化された表現を提供します。
モデルをエクスポートするには、以下を使用します。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
onnx_file = model.export(format="onnx", dynamic=True)
プロセスを完了するには、ONNX統合ガイドの手順に従ってください。
Triton Inference ServerでUltralytics YOLO26モデルを使用して推論を実行できますか?
はい、NVIDIA Triton Inference ServerでUltralytics YOLO26モデルを使用して推論を実行できます。モデルがTritonモデルリポジトリに設定され、サーバーが稼働している場合、以下のようにモデルをロードして推論を実行できます。
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
このアプローチにより、使い慣れたUltralytics YOLOインターフェースを使用しながら、Tritonの最適化を活用できます。YOLO26でTriton Serverを設定および実行するための詳細なガイドについては、running triton inference serverセクションを参照してください。
デプロイに関して、Ultralytics YOLO26はTensorFlowおよびPyTorchモデルと比較してどうですか?
デプロイに関して、Ultralytics YOLO26はTensorFlowおよびPyTorchモデルと比較して、いくつかの独自の利点を提供します。
- リアルタイムパフォーマンス:リアルタイムの物体detectタスクに最適化されたYOLO26は、最先端の精度と速度を提供し、ライブビデオ分析を必要とするアプリケーションに最適です。
- 使いやすさ:YOLO26はTriton Inference Serverとシームレスに統合され、多様なエクスポートフォーマット(ONNX、TensorRT、CoreML)をサポートするため、さまざまなデプロイシナリオに柔軟に対応できます。
- 高度な機能:YOLO26には、動的なモデルロード、モデルバージョニング、アンサンブル推論などの機能が含まれており、スケーラブルで信頼性の高いAIデプロイにとって不可欠です。
- APIの簡素化: Ultralytics APIは、さまざまなデプロイメントターゲットにわたって一貫したインターフェースを提供し、学習コストと開発時間を削減します。
- エッジ最適化: YOLO26モデルはエッジデプロイメントを念頭に設計されており、リソースが限られたデバイスでも優れたパフォーマンスを発揮します。
詳細については、モデルエクスポートガイドでデプロイメントオプションを比較してください。