Ultralytics YOLO27:
Get Started

Triton Inference Server mit Ultralytics YOLO26#

Der Triton Inference Server (ehemals TensorRT Inference Server) ist eine von NVIDIA entwickelte Open-Source-Softwarelösung. Sie stellt eine für NVIDIA-GPUs optimierte Cloud-Inferenzlösung bereit. Triton vereinfacht die Bereitstellung von KI-Modellen im Produktivbetrieb und in großem Umfang. Durch die Integration von Ultralytics YOLO26 mit dem Triton Inference Server kannst du skalierbare, leistungsstarke Inferenz-Workloads für Deep Learning bereitstellen. Diese Anleitung beschreibt die Einrichtung und das Testen der Integration.



Ansehen: Erste Schritte mit dem NVIDIA Triton Inference Server.

Was ist der Triton Inference Server?#

Der Triton Inference Server dient der Bereitstellung verschiedenster KI-Modelle im Produktivbetrieb. Er unterstützt zahlreiche Frameworks für Deep Learning und maschinelles Lernen, darunter PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT und viele weitere. Zu den wichtigsten Anwendungsfällen zählen:

  • Bereitstellung mehrerer Modelle über eine einzelne Serverinstanz
  • Dynamisches Laden und Entladen von Modellen ohne Neustart des Servers
  • Ensemble-Inferenz, bei der mehrere Modelle gemeinsam eingesetzt werden, um Ergebnisse zu erzielen
  • Modellversionierung für A/B-Tests und schrittweise Aktualisierungen

Die wichtigsten Vorteile des Triton Inference Servers#

Der Einsatz des Triton Inference Servers mit Ultralytics YOLO26 bietet mehrere Vorteile:

  • Automatisches Batching: Gruppiert mehrere KI-Anfragen vor der Verarbeitung und verringert so die Latenz und erhöht die Inferenzgeschwindigkeit
  • Kubernetes-Integration: Das Cloud-native Design lässt sich nahtlos mit Kubernetes zur Verwaltung und Skalierung von KI-Anwendungen einsetzen
  • Hardwarespezifische Optimierungen: Nutzt NVIDIA-GPUs umfassend aus, um eine maximale Leistung zu erzielen
  • Flexibilität bei Frameworks: Unterstützt mehrere KI-Frameworks, darunter PyTorch, TensorFlow, ONNX, OpenVINO und TensorRT
  • Open Source und anpassbar: Lässt sich an spezifische Anforderungen anpassen und bietet so Flexibilität für verschiedene KI-Anwendungen

Voraussetzungen#

Stelle vor dem Fortfahren sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • Docker (>= 28.2.0, mit NVIDIA Container Toolkit >= 1.18 für 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 den gesamten Einrichtungsblock aus, um Ultralytics YOLO26 nach ONNX zu exportieren, das Triton-Modellrepository zu erstellen und den Triton Inference Server zu starten:

Hinweis

Verwende im Skript den Schalter runtime, um die 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

# Das Triton-Servermodell laden
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# Inferenz auf dem Server ausführen
results = model("path/to/image.jpg")

Beende den Container:

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 noch mehr Leistung kannst du TensorRT mit dem Triton Inference Server verwenden. TensorRT ist ein leistungsstarker Deep-Learning-Optimierer, der speziell für NVIDIA-GPUs entwickelt wurde und die Inferenzgeschwindigkeit erheblich steigern kann.

Die wichtigsten Vorteile von TensorRT in Verbindung mit Triton sind:

  • Bis zu 36-mal schnellere Inferenz im Vergleich zu nicht optimierten Modellen
  • Hardwarespezifische Optimierungen für eine maximale GPU-Auslastung
  • Unterstützung für Formate mit geringerer Genauigkeit (INT8, FP16) bei gleichbleibender Genauigkeit
  • Fusion von Schichten zur Verringerung des Rechenaufwands

Der obige config.pbtxt aktiviert bereits Tritons TensorRT-Beschleuniger für das ONNX-Modell. Wenn du TensorRT stattdessen direkt mit Ultralytics ausführen möchtest, exportiere dein Ultralytics YOLO26-Modell ins TensorRT-Format:

from ultralytics import YOLO

# YOLO26-Modell laden
model = YOLO("yolo26n.pt")

# Exportiere das Modell im TensorRT-Format
model.export(format="engine")  # erstellt '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, leistungsstarke Inferenz zu ermöglichen. Weitere Informationen findest du in der offiziellen Triton-Dokumentation oder du kannst die Ultralytics-Community um Hilfe bitten.

Häufig gestellte Fragen#

  • Die Einrichtung von Ultralytics YOLO26 mit dem NVIDIA Triton Inference Server umfasst einige wichtige Schritte:

    1. YOLO26 ins ONNX-Format exportieren:

      from ultralytics import YOLO
      
      # Ein Modell laden
      model = YOLO("yolo26n.pt")  # Ein offizielles Modell laden
      
      # Exportiere das Modell in das ONNX-Format
      onnx_file = model.export(format="onnx", dynamic=True)
    2. Triton-Modellrepository einrichten:

      from pathlib import Path
      
      # Pfade festlegen
      model_name = "yolo"
      triton_repo_path = Path("tmp") / "triton_repo"
      triton_model_path = triton_repo_path / model_name
      
      # Verzeichnisse erstellen
      (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 starten:

      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)

    Mit dieser Einrichtung kannst du Ultralytics YOLO26-Modelle effizient und in großem Umfang auf dem Triton Inference Server bereitstellen, um eine leistungsstarke KI-Modellinferenz zu erzielen.

  • Die Integration von Ultralytics YOLO26 mit dem NVIDIA Triton Inference Server bietet mehrere Vorteile:

    • Skalierbare KI-Inferenz: Triton ermöglicht die Bereitstellung mehrerer Modelle über eine einzelne Serverinstanz und unterstützt das dynamische Laden und Entladen von Modellen. Dadurch lässt sich der Server für verschiedene KI-Workloads flexibel skalieren.
    • Hohe Leistung: Der für NVIDIA-GPUs optimierte Triton Inference Server gewährleistet schnelle Inferenz 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. Die Modellversionierung unterstützt A/B-Tests und schrittweise Aktualisierungen.
    • Automatisches Batching: Triton gruppiert automatisch mehrere Inferenzanfragen und verbessert so den Durchsatz erheblich und reduziert die Latenz.
    • Vereinfachte Bereitstellung: KI-Workflows lassen sich schrittweise optimieren, ohne dass das gesamte System umgebaut werden muss. So wird eine effiziente Skalierung erleichtert.

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

  • Das ONNX-Format (Austauschformat für neuronale Netze) bietet für dein Ultralytics YOLO26-Modell vor der Bereitstellung auf dem NVIDIA Triton Inference Server mehrere wichtige Vorteile:

    • Interoperabilität: Das ONNX-Format ermöglicht die Übertragung zwischen verschiedenen Deep-Learning-Frameworks (wie PyTorch und TensorFlow) und gewährleistet so eine breitere Kompatibilität.
    • Optimierung: Viele Bereitstellungsumgebungen, darunter Triton, sind für ONNX optimiert und ermöglichen dadurch schnellere Inferenz und bessere Leistung.
    • Einfache Bereitstellung: ONNX wird von zahlreichen Frameworks und Plattformen unterstützt und vereinfacht dadurch die Bereitstellung unter verschiedenen Betriebssystemen und Hardwarekonfigurationen.
    • Unabhängigkeit vom Framework: Nach der Konvertierung ins ONNX-Format ist dein Modell nicht mehr an sein ursprüngliches Framework gebunden und lässt sich dadurch leichter portieren.
    • Standardisierung: ONNX bietet eine standardisierte Darstellung, mit der sich Kompatibilitätsprobleme zwischen verschiedenen KI-Frameworks überwinden lassen.

    Verwende zum Exportieren deines Modells:

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

    Folge den Schritten in der Integrationsanleitung für ONNX, um den Vorgang abzuschließen.

  • Ja, du kannst mit dem Modell Ultralytics YOLO26 auf dem NVIDIA Triton Inference Server Inferenz ausführen. Sobald dein Modell im Triton Model Repository eingerichtet ist und der Server läuft, kannst du das Modell wie folgt laden und Inferenz ausführen:

    from ultralytics import YOLO
    
    # Das Triton-Servermodell laden
    model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
    
    # Inferenz auf dem Server ausführen
    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 einige besondere Vorteile gegenüber TensorFlow- und PyTorch-Modellen:

    • Echtzeit-Leistung: Ultralytics YOLO26 ist für Objekterkennung in Echtzeit optimiert und bietet modernste Genauigkeit sowie hohe Geschwindigkeit. Damit eignet es sich ideal für Anwendungen, die eine Live-Videoanalyse erfordern.
    • Einfache Bedienung: Ultralytics YOLO26 lässt sich nahtlos in den Triton Inference Server integrieren und unterstützt verschiedene Exportformate (ONNX, TensorRT), wodurch es sich flexibel für unterschiedliche Bereitstellungsszenarien einsetzen lässt.
    • Erweiterte Funktionen: Die Bereitstellung über Triton ermöglicht dynamisches Laden von Modellen, Modellversionierung und Ensemble-Inferenz – wichtige Funktionen für skalierbare und zuverlässige KI-Bereitstellungen.
    • Vereinfachte API: Die Ultralytics-API bietet eine einheitliche Schnittstelle für verschiedene Bereitstellungsziele und verkürzt so die Einarbeitungszeit und Entwicklungsdauer.
    • Optimierung für Edge-Geräte: Die Modelle Ultralytics YOLO26 sind für den Einsatz auf Edge-Geräten ausgelegt und bieten auch auf Geräten mit begrenzten Ressourcen eine hervorragende Leistung.

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

Kommentare