Triton Inference Server mit Ultralytics YOLO26#
Der Triton Inference Server (früher bekannt als TensorRT Inference Server) ist eine von NVIDIA entwickelte Open-Source-Softwarelösung. Er bietet eine Cloud-Inferenzlösung, die für NVIDIA-GPUs optimiert ist. Triton vereinfacht die Bereitstellung von KI-Modellen im großen Maßstab in der Produktion. Die Integration von Ultralytics YOLO26 mit dem Triton Inference Server ermöglicht es dir, skalierbare und leistungsstarke Deep Learning-Inferenz-Workloads bereitzustellen. Dieser Leitfaden 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 entwickelt, um eine Vielzahl von KI-Modellen in der Produktion bereitzustellen. Er unterstützt ein breites Spektrum an Deep-Learning- und Machine Learning-Frameworks, darunter PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT und viele andere. Die Hauptanwendungsbereiche sind:
- Bereitstellung mehrerer Modelle von einer einzigen Serverinstanz aus
- Dynamisches Laden und Entladen von Modellen ohne Server-Neustart
- Ensemble-Inferenz, die es ermöglicht, mehrere Modelle gemeinsam zu verwenden, um Ergebnisse zu erzielen
- Modell-Versionierung für A/B-Tests und Rolling Updates
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, um die Latenz zu verringern und die Inferenzgeschwindigkeit zu verbessern
- Kubernetes-Integration: Das Cloud-native Design arbeitet nahtlos mit Kubernetes zusammen, um KI-Anwendungen zu verwalten und zu skalieren
- Hardware-spezifische Optimierungen: Nutzt NVIDIA GPUs vollständig aus, um maximale Leistung zu erzielen
- Framework-Flexibilität: Unterstützt mehrere KI-Frameworks, einschließlich PyTorch, TensorFlow, ONNX, OpenVINO und TensorRT
- Open-Source und anpassbar: Kann an spezifische Anforderungen angepasst werden, was Flexibilität für verschiedene KI-Anwendungen gewährleistet
Voraussetzungen#
Stelle sicher, dass du die folgenden Voraussetzungen erfüllst, 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 Computer installiert
- Installiere
ultralytics:pip install ultralytics - Installiere
tritonclient:pip install tritonclient[all]
Einrichten des Triton Inference Server#
Führe diesen vollständigen Setup-Block aus, um Ultralytics YOLO26 nach ONNX zu exportieren, das Triton-Modellrepository zu erstellen und den Triton Inference Server zu starten:
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)Ausführen der Inferenz#
Führe die Inferenz unter Verwendung des Triton Server-Modells 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")Bereinige 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 höhere Leistung kannst du TensorRT mit dem Triton Inference Server verwenden. TensorRT ist ein speziell für NVIDIA-GPUs entwickelter, hochleistungsfähiger Deep-Learning-Optimierer, der die Inferenzgeschwindigkeit erheblich steigern kann.
Die Hauptvorteile der Verwendung von TensorRT mit Triton sind:
- Bis zu 36-mal schnellere Inferenz im Vergleich zu nicht optimierten Modellen
- Hardware-spezifische Optimierungen für eine maximale GPU-Auslastung
- Unterstützung für Formate mit reduzierter Präzision (INT8, FP16) bei gleichbleibender Genauigkeit
- Layer-Fusion zur Reduzierung 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 im TensorRT-Integrationsleitfaden.
Du kannst jetzt Ultralytics YOLO26-Modelle auf dem Triton Inference Server für eine skalierbare, leistungsstarke Inferenz bereitstellen und ausführen. Weitere Details findest du in der offiziellen Triton-Dokumentation oder frage die Ultralytics-Community um Hilfe.
FAQ#
Das Einrichten von Ultralytics YOLO26 mit dem NVIDIA Triton Inference Server umfasst einige wesentliche Schritte:
-
Exportiere YOLO26 in das ONNX-Format:
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) -
Richte das Triton-Modell-Repository ein:
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() -
Starte den Triton-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: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)
Dieses Setup hilft dir dabei, Ultralytics YOLO26-Modelle im großen Maßstab auf dem Triton Inference Server für eine leistungsstarke KI-Modell-Inferenz effizient bereitzustellen.
-
Die Integration von Ultralytics YOLO26 mit dem NVIDIA Triton Inference Server bietet mehrere Vorteile:
- Skalierbare KI-Inferenz: Triton ermöglicht die Bereitstellung mehrerer Modelle von einer einzigen Serverinstanz aus und unterstützt das dynamische Laden und Entladen von Modellen, was es für verschiedene KI-Workloads hochgradig skalierbar macht.
- Hohe Leistung: Der für NVIDIA-GPUs optimierte Triton Inference Server gewährleistet Hochgeschwindigkeits-Inferenzoperationen, perfekt für Echtzeitanwendungen wie die Objekterkennung.
- Ensemble- und Modell-Versionierung: Der Ensemble-Modus von Triton ermöglicht die Kombination mehrerer Modelle zur Verbesserung der Ergebnisse, und die Modell-Versionierung unterstützt A/B-Tests und Rolling Updates.
- Automatisches Batching: Triton gruppiert automatisch mehrere Inferenzanfragen, was den Durchsatz erheblich verbessert und die Latenz verringert.
- Vereinfachte Bereitstellung: Schrittweise Optimierung von KI-Workflows ohne die Notwendigkeit vollständiger Systemüberholungen, was eine effiziente Skalierung erleichtert.
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 (Open Neural Network Exchange) für dein Ultralytics YOLO26-Modell vor der Bereitstellung auf dem NVIDIA Triton Inference Server bietet mehrere wesentliche Vorteile:
- Interoperabilität: Das ONNX-Format unterstützt den Transfer zwischen verschiedenen Deep-Learning-Frameworks (wie PyTorch, TensorFlow) und gewährleistet so eine breitere Kompatibilität.
- Optimierung: Viele Bereitstellungsumgebungen, einschließlich Triton, sind auf ONNX optimiert, was eine schnellere Inferenz und eine bessere Leistung ermöglicht.
- Einfache Bereitstellung: ONNX wird von vielen Frameworks und Plattformen unterstützt, was den Bereitstellungsprozess in verschiedenen Betriebssystemen und Hardwarekonfigurationen vereinfacht.
- Framework-Unabhängigkeit: Sobald dein Modell in ONNX konvertiert wurde, ist es nicht mehr an sein ursprüngliches Framework gebunden, was es portabler macht.
- Standardisierung: ONNX bietet eine standardisierte Repräsentation, die hilft, Kompatibilitätsprobleme zwischen verschiedenen KI-Frameworks zu überwinden.
Um dein Modell zu exportieren, verwende:
from ultralytics import YOLO model = YOLO("yolo26n.pt") onnx_file = model.export(format="onnx", dynamic=True)Du kannst den Schritten im ONNX-Integrationsleitfaden folgen, um den Vorgang abzuschließen.
Ja, du kannst Inferenz mit dem Ultralytics YOLO26-Modell auf dem NVIDIA Triton Inference Server ausführen. Sobald dein Modell im Triton-Modellrepository eingerichtet ist und der Server läuft, kannst du dein Modell wie folgt laden und Inferenz darauf ausführen:
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")Dieser Ansatz ermöglicht es dir, die Optimierungen von Triton zu nutzen und gleichzeitig die vertraute Ultralytics YOLO-Schnittstelle beizubehalten.
Ultralytics YOLO26 bietet im Vergleich zu TensorFlow- und PyTorch-Modellen für die Bereitstellung mehrere einzigartige Vorteile:
- Echtzeitleistung: Ultralytics YOLO26 ist für Echtzeit-Objekterkennungsaufgaben optimiert und bietet modernste Genauigkeit und Geschwindigkeit, wodurch es ideal für Anwendungen ist, die Live-Videoanalysen erfordern.
- Benutzerfreundlichkeit: Ultralytics YOLO26 lässt sich nahtlos in den Triton Inference Server integrieren und unterstützt verschiedene Exportformate (ONNX, TensorRT), wodurch es für verschiedene Bereitstellungsszenarien flexibel ist.
- Erweiterte Funktionen: Ultralytics YOLO26 enthält Funktionen wie dynamisches Laden von Modellen, Modellversionierung und Ensemble-Inferenz, die für skalierbare und zuverlässige KI-Bereitstellungen von entscheidender Bedeutung sind.
- Vereinfachte API: Die Ultralytics-API bietet eine konsistente Schnittstelle für verschiedene Bereitstellungsziele, was die Lernkurve verkürzt und die Entwicklungszeit reduziert.
- Edge-Optimierung: Ultralytics YOLO26-Modelle sind auf Edge-Bereitstellung ausgelegt und bieten auch auf ressourcenbeschränkten Geräten eine hervorragende Leistung.
Weitere Details findest du im Vergleich der Bereitstellungsoptionen im Modell-Exportleitfaden.