コンテンツにスキップ

Ultralytics YOLO26とTriton Inference Server

Triton Server(旧称:TensorRT Server)は、NVIDIA開発したオープンソースのソフトウェアソリューションです。NVIDIA 最適化されたクラウド推論ソリューションを提供します。Triton 、本番環境におけるAIモデルの大規模な導入をTriton 。Ultralytics Triton Serverと統合することで、スケーラブルかつ高性能なディープラーニング推論ワークロードを展開することが可能になります。このガイドでは、統合の設定とテストの手順を説明します。



見る: NVIDIA Triton Inference Serverの利用開始。

Triton Inference Serverとは何ですか?

Triton Serverは、さまざまなAIモデルを本番環境にデプロイするために設計されています。以下のフレームワークを含む、幅広いディープラーニングおよび機械学習フレームワークをサポートしています。 PyTorchTensorFlowONNX, OpenVINO, TensorRT など、その他多数。主なユースケースは以下の通りです:

  • 単一のサーバーインスタンスから複数のモデルを提供
  • サーバーを再起動せずにモデルを動的にロードおよびアンロード
  • アンサンブル推論。複数のモデルを組み合わせて使用​​して結果を達成できるようにします
  • A/Bテストとローリングアップデートのためのモデルのバージョン管理

Triton Inference Serverの主な利点

Triton ServerをUltralytics と併用することで、次のようなメリットが得られます:

  • 自動バッチ処理: 複数のAIリクエストをまとめて処理することで、レイテンシーを削減し、推論速度を向上させます。
  • Kubernetes統合: クラウドネイティブな設計により、AIアプリケーションの管理とスケーリングのためにKubernetesとシームレスに連携します。
  • ハードウェア固有の最適化: NVIDIA GPU を最大限に活用して、最高のパフォーマンスを実現します。
  • フレームワークの柔軟性:以下のAIフレームワークを含む複数のフレームワークに対応しています PyTorchTensorFlowONNX, OpenVINO および TensorRT
  • オープンソースでカスタマイズ可能: 特定のニーズに合わせて変更でき、さまざまなAIアプリケーションに柔軟に対応できます。

前提条件

先に進む前に、以下の前提条件を満たしていることを確認してください。

  • お使いのマシンにDockerまたはPodmanがインストールされている
  • インストール ultralytics:
    pip install ultralytics
    
  • インストール tritonclient:
    pip install tritonclient[all]
    

Triton Server の設定

このセットアップブロック全体を実行して、Ultralytics ONNXにエクスポートし、Triton リポジトリをビルドし、Triton Serverを起動します:

以下を使用します runtime スクリプト内のスイッチで、使用するコンテナエンジンを選択してください:

  • セット runtime = "docker" Docker用
  • セット runtime = "podman" Podman用
import contextlib
import subprocess
import time
from pathlib import Path

from tritonclient.http import InferenceServerClient

from ultralytics import YOLO

runtime = "docker"  # set to "podman" to use Podman

# 1) Exporting YOLO26 to ONNX Format

# 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)


# 2) Setting Up Triton Model Repository

# 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)

# 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)

# 3) Running Triton Inference Server

# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:26.02-py3"  # 16.17 GB (Compressed Size)

subprocess.call(f"{runtime} pull {tag}", shell=True)

# GPU flags differ between Docker and Podman
gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus all"

container_name = "triton_server"

# Note: The :z flag on the volume mount is necessary for systems with SELinux (like Fedora/RHEL)
subprocess.call(
    f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models",
    shell=True,
)

# Wait for the Triton server to start
triton_client = InferenceServerClient(url="127.0.0.1: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 モデルを使用して推論を実行します:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

コンテナをクリーンアップする (runtime および container_name (これらは上記のセットアップブロックで定義されています):

import subprocess

runtime = "docker"  # set to "podman" to use Podman
container_name = "triton_server"  # Kill the named container
subprocess.call(f"{runtime} kill {container_name}", shell=True)

TensorRTの最適化(オプション)

さらに高いパフォーマンスを得るには、TensorRTと Triton Inference Server を組み合わせて使用できます。TensorRT は、NVIDIA GPU 向けに特別に構築された高性能な深層学習オプティマイザであり、推論速度を大幅に向上させることができます。

TensorRTを使用する主な利点 TensorRTTriton と組み合わせてTensorRTを使用する主な利点には、Triton :

  • 最適化されていないモデルと比較して最大36倍高速な推論
  • GPUを最大限に活用するためのハードウェア固有の最適化
  • 精度を維持しながら、低精度フォーマット(INT8、FP16)をサポート
  • 計算オーバーヘッドを削減するためのレイヤー融合

TensorRT 使用するには、Ultralytics モデルを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 ServerUltralytics 効率的にデプロイおよび実行でき、ディープラーニング推論タスク向けにスケーラブルかつ高性能なソリューションを提供できます。問題が発生した場合やさらに質問がある場合は、 Triton を参照するか、Ultralytics にサポートを依頼してください。

よくある質問

NVIDIA Triton Inference ServerでUltralytics YOLO26をセットアップするにはどうすればよいですか?

Ultralytics YOLO26NVIDIA Triton Inference Serverでセットアップするには、いくつかの重要な手順が必要です。

  1. 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)
    
  2. 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()
    
  3. 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:26.02-py3"
    
    runtime = "docker"  # set to "podman" to use Podman
    subprocess.call(f"{runtime} pull {tag}", shell=True)
    
    # GPU flags differ between Docker and Podman
    gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus all"
    
    container_name = "triton_server"
    subprocess.call(
        f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models",
        shell=True,
    )
    
    triton_client = InferenceServerClient(url="127.0.0.1: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)
    

この構成により、Triton ServerUltralytics を大規模かつ効率的にデプロイし、高性能なAIモデル推論を実現できます。

NVIDIA Triton Inference ServerでUltralytics YOLO26を使用することにはどのような利点がありますか?

Ultralytics NVIDIA Triton Serverと統合することで、次のようなメリットが得られます:

  • スケーラブルなAI推論: Tritonを使用すると、単一のサーバーインスタンスから複数のモデルを提供でき、動的なモデルのロードとアンロードをサポートするため、多様なAIワークロードに対して高いスケーラビリティを発揮します。
  • ハイパフォーマンス: NVIDIA GPU向けに最適化されたTriton Inference Serverは、高速な推論処理を保証し、物体検出などのリアルタイムアプリケーションに最適です。
  • アンサンブルとモデルのバージョニング: Tritonのアンサンブルモードを使用すると、複数のモデルを組み合わせて結果を改善でき、モデルのバージョニングはA/Bテストとローリングアップデートをサポートします。
  • 自動バッチ処理: Tritonは、複数の推論リクエストを自動的にグループ化し、スループットを大幅に向上させ、レイテンシーを削減します。
  • デプロイメントの簡素化: システム全体を刷新することなく、AIワークフローを段階的に最適化できるため、効率的な拡張が容易になります。

Ultralytics Triton で設定および実行する方法の詳細については、「Triton の設定と 推論の実行」を参照してください。

Triton Inference Serverを使用する前に、YOLO26モデルをONNXフォーマットにエクスポートする必要があるのはなぜですか?

Ultralytics モデルをNVIDIA Triton Serverにデプロイする前に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 Server上でUltralytics モデルを使用して推論を実行できます。Triton Repositoryにモデルを設定し、サーバーが稼働している状態であれば、以下の手順でモデルを読み込んで推論を実行できます:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

このアプローチにより、使い慣れたUltralytics YOLO を利用しながら、Triton最適化機能を活用することができます。

デプロイに関して、Ultralytics YOLO26はTensorFlowおよびPyTorchモデルと比較してどうですか?

デプロイに関して、Ultralytics YOLO26TensorFlowおよびPyTorchモデルと比較して、いくつかの独自の利点を提供します。

  • リアルタイム性能:リアルタイムの物体検出タスク向けに最適化Ultralytics 、最先端の精度と速度を実現しており、ライブ映像解析を必要とするアプリケーションに最適です。
  • 使いやすさ: Ultralytics Triton Serverとシームレスに連携し、多様なエクスポート形式に対応しています(ONNXTensorRT)に対応しており、さまざまな導入シナリオに柔軟に対応できます。
  • 高度な機能Ultralytics 、スケーラブルで信頼性の高いAI導入に不可欠な、動的なモデル読み込み、モデルバージョン管理、アンサンブル推論などの機能が搭載されています。
  • APIの簡素化: Ultralytics APIは、さまざまなデプロイメントターゲットにわたって一貫したインターフェースを提供し、学習コストと開発時間を削減します。
  • エッジ最適化Ultralytics 、エッジ展開を念頭に置いて設計されており、リソースが限られたデバイスでも優れたパフォーマンスを発揮します。

詳細については、モデルエクスポートガイドでデプロイメントオプションを比較してください。



📅 2年前に作成 ✏️ 5日前に更新
glenn-jocherY-T-GonuralpszrUltralyticsAssistantleonnil

コメント