Ultralytics YOLO27:

Triton Inference Server mit Ultralytics YOLO26#

Der Triton Inference Server (früher als TensorRT Inference Server bekannt) ist eine von NVIDIA entwickelte Open-Source-Softwarelösung. Sie bietet eine für NVIDIA GPUs optimierte Inferenzlösung für die Cloud. Triton vereinfacht die Bereitstellung von KI-Modellen im Produktionsbetrieb in großem Maßstab. Durch die Integration von Ultralytics YOLO26 in den Triton Inference Server kannst du skalierbare, leistungsstarke Inferenz-Workloads für Deep Learning bereitstellen. Diese Anleitung beschreibt die Schritte zum Einrichten und Testen der Integration.



Watch: Getting Started with NVIDIA Triton Inference Server.

Was ist der Triton Inference Server?#

Der Triton Inference Server wurde für die Bereitstellung verschiedener KI-Modelle im Produktionsbetrieb entwickelt. Er unterstützt zahlreiche Frameworks für Deep Learning und Machine Learning, darunter PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT und viele weitere. Zu den wichtigsten Anwendungsfällen gehören:

  • Mehrere Modelle über eine einzige Serverinstanz bereitstellen
  • Modelle dynamisch laden und entladen, ohne den Server neu zu starten
  • Ensemble-Inferenz, bei der mehrere Modelle gemeinsam verwendet werden, um Ergebnisse zu erzielen
  • Modellversionierung für A/B-Tests und schrittweise Aktualisierungen

Wichtige Vorteile des Triton Inference Server#

Die Verwendung des Triton Inference Server mit Ultralytics YOLO26 bietet mehrere Vorteile:

  • Automatisches Batching: Gruppiert mehrere KI-Anfragen vor der Verarbeitung, wodurch die Latenz reduziert und die Inferenzgeschwindigkeit erhöht wird
  • Kubernetes-Integration: Das Cloud-native-Design funktioniert nahtlos mit Kubernetes zur Verwaltung und Skalierung von KI-Anwendungen
  • Hardwarespezifische Optimierungen: Nutzt NVIDIA GPUs vollständig aus, um maximale Leistung zu erzielen
  • Framework-Flexibilität: Unterstützt mehrere KI-Frameworks, darunter PyTorch, TensorFlow, ONNX, OpenVINO und TensorRT
  • Open Source und anpassbar: Kann an spezifische Anforderungen angepasst werden und gewährleistet so Flexibilität für verschiedene KI-Anwendungen

Voraussetzungen#

Stelle sicher, dass die folgenden Voraussetzungen erfüllt sind, bevor du fortfährst:

  • Docker (>= 28.2.0, mit NVIDIA Container Toolkit >= 1.18 für den CDI-GPU-Zugriff) oder Podman ist auf deinem Rechner installiert
  • Installiere ultralytics:
    pip install ultralytics
  • Installiere tritonclient:
    pip install tritonclient[all]

Triton Inference Server einrichten#

Führe diesen vollständigen Einrichtungsblock aus, um Ultralytics YOLO26 nach ONNX zu exportieren, das Triton-Modellrepository zu erstellen und den Triton Inference Server zu starten:

Hinweis

Verwende den Schalter runtime im Skript, um deine Container-Engine auszuwählen:

  • Setze runtime = "docker" für Docker
  • Setze runtime = "podman" für 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"
  }
}

# Enable TensorRT acceleration (requires a GPU and TensorRT-enabled Triton; remove this block for CPU-only serving)
# The 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)

# CDI GPU request works identically on Docker and Podman
gpu_flags = "--device nvidia.com/gpu=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)

Inferenz ausführen#

Führe die Inferenz mit dem Triton-Servermodell aus:

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

Container bereinigen:

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-Optimierung (optional)#

Für eine noch höhere Leistung kannst du TensorRT mit dem Triton Inference Server verwenden. TensorRT ist ein speziell für NVIDIA GPUs entwickelter, leistungsstarker Optimierer für Deep Learning, der die Inferenzgeschwindigkeit deutlich erhöhen kann.

Zu den wichtigsten Vorteilen der Verwendung von TensorRT mit Triton gehören:

  • Bis zu 36-mal schnellere Inferenz im Vergleich zu nicht optimierten Modellen
  • Hardwarespezifische Optimierungen für eine maximale GPU-Auslastung
  • Unterstützung reduzierter Präzisionsformate (INT8, FP16) bei gleichbleibender Genauigkeit
  • Zusammenführung von Schichten zur Verringerung des Rechenaufwands

Um TensorRT direkt zu verwenden, kannst du dein Ultralytics YOLO26-Modell in das TensorRT-Format exportieren:

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'

Weitere Informationen zur TensorRT-Optimierung findest du in der TensorRT-Integrationsanleitung.

Du kannst jetzt Ultralytics YOLO26-Modelle auf dem Triton Inference Server bereitstellen und ausführen, um skalierbare und leistungsstarke Inferenz zu ermöglichen. Weitere Informationen findest du in der offiziellen Triton-Dokumentation oder du kannst die Ultralytics-Community um Hilfe bitten.

FAQ#

  • Das Einrichten von Ultralytics YOLO26 mit dem NVIDIA Triton Inference Server umfasst einige wichtige Schritte:

    1. YOLO26 in das ONNX-Format exportieren:

      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-Modellrepository einrichten:

      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-Server ausführen:

      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)
      
      # CDI GPU request works identically on Docker and Podman
      gpu_flags = "--device nvidia.com/gpu=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)

    Diese Einrichtung kann dir dabei helfen, Ultralytics YOLO26-Modelle effizient im großen Maßstab auf dem Triton Inference Server bereitzustellen und eine leistungsstarke Inferenz von KI-Modellen zu ermöglichen.

  • Die Integration von Ultralytics YOLO26 in den NVIDIA Triton Inference Server bietet mehrere Vorteile:

    • Skalierbare KI-Inferenz: Triton ermöglicht die Bereitstellung mehrerer Modelle über eine einzige Serverinstanz und unterstützt das dynamische Laden und Entladen von Modellen. Dadurch eignet sich Triton besonders gut für vielfältige KI-Workloads mit hohen Skalierungsanforderungen.
    • Hohe Leistung: Der für NVIDIA GPUs optimierte Triton Inference Server gewährleistet schnelle Inferenzvorgänge und eignet sich ideal für Echtzeitanwendungen wie die Objekterkennung.
    • Ensemble und Modellversionierung: Der Ensemble-Modus von Triton ermöglicht die Kombination mehrerer Modelle zur Verbesserung der Ergebnisse, während die Modellversionierung A/B-Tests und schrittweise Aktualisierungen unterstützt.
    • Automatisches Batching: Triton gruppiert automatisch mehrere Inferenzanfragen und verbessert dadurch den Durchsatz deutlich, während die Latenz reduziert wird.
    • Vereinfachte Bereitstellung: KI-Workflows können schrittweise optimiert werden, ohne dass eine vollständige Überarbeitung des Systems erforderlich ist. Dadurch lässt sich die Lösung leichter effizient skalieren.

    Detaillierte Anweisungen zum Einrichten und Ausführen von Ultralytics YOLO26 mit Triton findest du unter Triton Inference Server einrichten und Inferenz ausführen.

  • Die Verwendung des ONNX-Formats (Austausch neuronaler Netze (ONNX)) für dein Ultralytics YOLO26-Modell vor der Bereitstellung auf dem NVIDIA Triton Inference Server bietet mehrere wichtige Vorteile:

    • Interoperabilität: Das ONNX-Format ermöglicht die Übertragung zwischen verschiedenen Deep-Learning-Frameworks (z. B. PyTorch und TensorFlow) und gewährleistet dadurch eine umfassendere Kompatibilität.
    • Optimierung: Viele Bereitstellungsumgebungen, darunter Triton, sind für ONNX optimiert, was schnellere Inferenz und eine höhere Leistung ermöglicht.
    • Einfache Bereitstellung: ONNX wird von zahlreichen Frameworks und Plattformen unterstützt und vereinfacht dadurch die Bereitstellung unter verschiedenen Betriebssystemen und in unterschiedlichen Hardwarekonfigurationen.
    • Unabhängigkeit vom Framework: Nach der Konvertierung in ONNX ist dein Modell nicht mehr an sein ursprüngliches Framework gebunden und dadurch portabler.
    • Standardisierung: ONNX bietet eine standardisierte Darstellung, die dabei hilft, Kompatibilitätsprobleme zwischen verschiedenen KI-Frameworks zu überwinden.

    Verwende zum Exportieren deines Modells:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    onnx_file = model.export(format="onnx", dynamic=True)

    Du kannst die Schritte in der ONNX-Integrationsanleitung befolgen, um den Vorgang abzuschließen.

  • Ja, du kannst das Modell Ultralytics YOLO26 auf dem NVIDIA Triton Inference Server für Inferenz verwenden. Sobald dein Modell im Triton-Modellrepository eingerichtet ist und der Server läuft, kannst du es wie folgt laden und für Inferenz verwenden:

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

    Mit diesem Ansatz kannst du die Optimierungen von Triton nutzen und gleichzeitig die vertraute Ultralytics-YOLO-Schnittstelle verwenden.

  • Ultralytics YOLO26 bietet bei der Bereitstellung mehrere einzigartige Vorteile gegenüber TensorFlow- und PyTorch-Modellen:

    • Echtzeitleistung: Ultralytics YOLO26 ist für Aufgaben der Objekterkennung in Echtzeit optimiert und bietet eine hochmoderne Genauigkeit sowie hohe Geschwindigkeit. Damit eignet sich das Modell ideal für Anwendungen, die eine Live-Videoanalyse erfordern.
    • Einfache Verwendung: Ultralytics YOLO26 lässt sich nahtlos in den Triton Inference Server integrieren und unterstützt verschiedene Exportformate (ONNX, TensorRT), wodurch das Modell für unterschiedliche Bereitstellungsszenarien flexibel einsetzbar ist.
    • Erweiterte Funktionen: Das Bereitstellen über Triton fügt dynamisches Laden von Modellen, Modellversionierung und Ensemble-Inferenz hinzu, die für skalierbare und zuverlässige KI-Bereitstellungen unerlässlich sind.
    • Vereinfachte API: Die Ultralytics API bietet über verschiedene Bereitstellungsziele hinweg eine einheitliche Schnittstelle und verkürzt dadurch die Einarbeitungs- und Entwicklungszeit.
    • Optimierung für Edge-Geräte: Ultralytics YOLO26-Modelle sind auf die Bereitstellung auf Edge-Geräten ausgelegt und bieten selbst auf Geräten mit begrenzten Ressourcen eine hervorragende Leistung.

    Weitere Informationen findest du im Leitfaden zum Modelleport, in dem die Bereitstellungsoptionen verglichen werden.

Kommentare