コンテンツへスキップ

Triton 推論サーバーUltralytics YOLO11

Triton Inference Server(旧称TensorRT Inference Server)は、NVIDIA によって開発されたオープンソースのソフトウェアソリューションである。NVIDIA GPU 向けに最適化されたクラウド推論ソリューションを提供します。Triton は、本番環境における AI モデルの大規模展開を簡素化します。Ultralytics YOLO11 をTriton Inference Server と統合することで、スケーラブルで高性能な深層学習推論ワークロードを展開することができます。このガイドでは、統合のセットアップとテストの手順を説明します。



見るんだ: NVIDIA Triton Inference Serverを使い始める。

Triton 推論サーバーとは?

Triton Inference Serverは、さまざまなAIモデルを本番環境で展開するために設計されている。ディープラーニングや機械学習フレームワークを幅広くサポートしており、TensorFlow 、 PyTorchONNX Runtime、その他多数。主なユースケースは以下の通り:

  • 単一のサーバーインスタンスから複数のモデルを提供する
  • サーバーを再起動することなく、モデルの動的なロードとアンロードが可能
  • アンサンブル推論:複数のモデルを同時に使用して結果を得ることができる。
  • A/Bテストとローリングアップデートのためのモデルのバージョニング

Triton 推論サーバーの主な利点

Triton Inference ServerとUltralytics YOLO11 併用することで、いくつかの利点が得られます:

  • 自動バッチ処理:複数のAIリクエストをグループ化してから処理するため、待ち時間が短縮され、推論速度が向上します。
  • Kubernetesとの統合:クラウドネイティブデザインは、AIアプリケーションの管理とスケーリングのためにKubernetesとシームレスに動作します。
  • ハードウェア固有の最適化:NVIDIA GPUを最大限に活用してパフォーマンスを最大化
  • フレームワークの柔軟性:TensorFlow、PyTorch、ONNX、TensorRT含む複数のAIフレームワークをサポートします。
  • オープンソースでカスタマイズ可能:特定のニーズに合わせて変更できるため、さまざまなAIアプリケーションに柔軟に対応できる。

前提条件

先に進む前に、以下の前提条件が揃っていることを確認してください:

  • マシンにインストールされたDocker
  • インストール tritonclient:
    pip install tritonclient[all]
    

YOLO11 からONNX 形式へのエクスポート

モデルをTriton にデプロイする前に、ONNX フォーマットにエクスポートする必要がある。ONNX (Open Neural Network Exchange)は、異なるディープラーニング・フレームワーク間でモデルを転送できるフォーマットです。を使用する。 export 関数から YOLO クラスである:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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 がモデルにアクセスし、ロードできる保存場所です。

  1. 必要なディレクトリ構造を作成する:

    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)
    
  2. エクスポートした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 推論サーバーの実行

Docker を使ってTriton Inference Server を実行する:

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 --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 直接使用するには、YOLO11 モデルをTensorRT 形式にエクスポートします:

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo11n.engine'

TensorRT 最適化の詳細については、TensorRT 統合ガイドを参照してください。


上記のステップに従うことで、Ultralytics YOLO11 モデルをTriton Inference Server 上で効率的にデプロイして実行することができ、ディープラーニングの推論タスクにスケーラブルで高性能なソリューションを提供することができます。何か問題に直面したり、さらに質問がある場合は、 Triton 公式ドキュメントを参照するか、Ultralytics コミュニティにサポートを求めてください。

よくあるご質問

Ultralytics YOLO11 をNVIDIA Triton 推論サーバーに設定するには?

設定 Ultralytics YOLO11NVIDIA Triton Inference Serverでは、いくつかの重要なステップがある:

  1. YOLO11 をONNX フォーマットにエクスポート

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo11n.pt")  # load an official model
    
    # Export the model to ONNX format
    onnx_file = model.export(format="onnx", dynamic=True)
    
  2. Triton Model Repositoryをセットアップする

    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:24.09-py3"
    
    subprocess.call(f"docker pull {tag}", shell=True)
    
    container_id = (
        subprocess.check_output(
            f"docker run -d --rm --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)
    

このセットアップにより、YOLO11 モデルをTriton Inference Server 上で効率的にスケール展開し、高性能なAIモデル推論を行うことができます。

Ultralytics YOLO11 をNVIDIA Triton Inference Server と一緒に使うと、どのような利点がありますか?

Ultralytics YOLO11 NVIDIA Triton Inference Serverを統合することで、いくつかの利点が得られます:

  • スケーラブルなAI推論:Triton は、単一のサーバー・インスタンスから複数のモデルを提供することができ、モデルの動的なロードとアンロードをサポートするため、多様なAIワークロードに対して高いスケーラビリティを実現します。
  • 高性能:NVIDIA GPU用に最適化されたTriton Inference Serverは、高速推論オペレーションを保証し、物体検出などのリアルタイムアプリケーションに最適です。
  • アンサンブルとモデルのバージョン管理:Triton のアンサンブルモードは、複数のモデルを組み合わせて結果を改善することができ、モデルのバージョン管理はA/Bテストとローリングアップデートをサポートします。
  • 自動バッチ処理:Triton 複数の推論リクエストを自動的にグループ化し、スループットを大幅に向上させ、待ち時間を短縮します。
  • シンプルな導入:システムの全面的なオーバーホールを必要とせず、AIワークフローを段階的に最適化することで、効率的な拡張が容易になります。

Triton でYOLO11 をセットアップして実行するための詳細な手順については、セットアップガイドを参照してください。

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

Ultralytics YOLO11 モデルをNVIDIA Triton InferenceServerにデプロイする前に、ONNX (Open Neural Network Exchange) フォーマットを使用すると、いくつかの重要な利点があります:

  • 相互運用性:ONNX フォーマットは、異なるディープラーニングフレームワーク(PyTorch やTensorFlow など)間の転送をサポートし、より幅広い互換性を確保する。
  • 最適化:Triton を含む多くの展開環境は、ONNX のために最適化され、より高速な推論とより優れたパフォーマンスを可能にする。
  • 導入の容易さ:ONNX は、フレームワークやプラットフォーム間で幅広くサポートされているため、さまざまなオペレーティングシステムやハードウェア構成での導入プロセスが簡素化される。
  • フレームワークの独立性:ONNX変換されると、モデルは元のフレームワークに縛られなくなり、移植性が高まります。
  • 標準化:ONNX 、異なるAIフレームワーク間の互換性の問題を克服するのに役立つ標準化された表現を提供する。

モデルをエクスポートするには

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
onnx_file = model.export(format="onnx", dynamic=True)

ONNX 統合ガイドの手順に従って、プロセスを完了することができます。

Triton Inference Server上で、Ultralytics YOLO11 モデルを使って推論を行うことはできますか?

はい、NVIDIA Triton Inference Server上でUltralytics YOLO11 モデルを使用して推論を実行することができます。モデルがTriton Model Repositoryにセットアップされ、サーバーが起動していれば、以下のようにモデルをロードして推論を実行することができます:

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最適化を活用することができます。YOLO11 Triton Serverのセットアップと実行に関する詳細なガイドについては、Runningtriton inference serverのセクションを参照してください。

Ultralytics YOLO11 は、TensorFlow やPyTorch の展開モデルと比較してどうですか?

Ultralytics YOLO11TensorFlowやPyTorch モデルと比較して、いくつかのユニークな利点があります:

  • リアルタイム性能:リアルタイムの物体検出タスク用に最適化されたYOLO11 は、最先端の精度とスピードを提供し、ライブビデオ解析を必要とするアプリケーションに最適です。
  • 使いやすさ:YOLO11 はTriton Inference Server とシームレスに統合され、多様なエクスポートフォーマット (ONNX,TensorRT,CoreML) をサポートしているため、さまざまな展開シナリオに柔軟に対応できます。
  • 高度な機能:YOLO11 には、動的モデル・ローディング、モデル・バージョニング、アンサンブル推論などの機能が含まれており、これらはスケーラブルで信頼性の高いAI導入に不可欠です。
  • 簡素化されたAPI:Ultralytics APIは、異なるデプロイメントターゲット間で一貫したインターフェイスを提供し、学習曲線と開発時間を短縮します。
  • エッジの最適化:YOLO11 モデルはエッジ展開を念頭に設計されており、リソースに制約のあるデバイスでも優れたパフォーマンスを発揮します。

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

📅作成:1年前 ✏️更新しました 8日前

コメント