Triton Inference Server con Ultralytics YOLO26#
Il Triton Inference Server (precedentemente noto come TensorRT Inference Server) è una soluzione software open source sviluppata da NVIDIA. Fornisce una soluzione di inferenza cloud ottimizzata per le GPU NVIDIA. Triton semplifica la distribuzione di modelli di AI su larga scala in produzione. L'integrazione di Ultralytics YOLO26 con Triton Inference Server ti consente di distribuire carichi di lavoro di inferenza di deep learning scalabili e ad alte prestazioni. Questa guida illustra i passaggi per configurare e testare l'integrazione.
Watch: Getting Started with NVIDIA Triton Inference Server.
Che cos'è Triton Inference Server?#
Triton Inference Server è progettato per distribuire in produzione una varietà di modelli di AI. Supporta un'ampia gamma di framework di deep learning e machine learning, tra cui PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT e molti altri. I principali casi d'uso sono:
- Servire più modelli da una singola istanza del server
- Caricamento e rimozione dinamici dei modelli senza riavviare il server
- Inferenza tramite ensemble, che consente di usare più modelli insieme per ottenere risultati
- Gestione delle versioni dei modelli per i test A/B e gli aggiornamenti progressivi
Vantaggi principali di Triton Inference Server#
L'uso di Triton Inference Server con Ultralytics YOLO26 offre diversi vantaggi:
- Batching automatico: raggruppa più richieste di AI prima di elaborarle, riducendo la latenza e migliorando la velocità di inferenza
- Integrazione con Kubernetes: il design cloud-native funziona perfettamente con Kubernetes per gestire e scalare le applicazioni di AI
- Ottimizzazioni specifiche per l'hardware: sfrutta appieno le GPU NVIDIA per ottenere le massime prestazioni
- Flessibilità dei framework: supporta diversi framework di AI, tra cui PyTorch, TensorFlow, ONNX, OpenVINO e TensorRT
- Open source e personalizzabile: può essere modificato per adattarsi a esigenze specifiche, garantendo flessibilità per diverse applicazioni di AI
Prerequisiti#
Assicurati di disporre dei seguenti prerequisiti prima di procedere:
- Docker (>= 28.2.0, con NVIDIA Container Toolkit >= 1.18 per l'accesso alle GPU tramite CDI) oppure Podman installato sul tuo computer
- Installa
ultralytics:pip install ultralytics - Installa
tritonclient:pip install tritonclient[all]
Configurazione di Triton Inference Server#
Esegui questo blocco completo di configurazione per esportare Ultralytics YOLO26 in ONNX, creare il repository dei modelli Triton e avviare Triton Inference Server:
Usa l'opzione runtime nello script per scegliere il tuo motore per container:
- Imposta
runtime = "docker"per Docker - Imposta
runtime = "podman"per 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)Esecuzione dell'inferenza#
Esegui l'inferenza usando il modello del Triton Server:
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")Pulisci il 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)Ottimizzazione TensorRT (facoltativa)#
Per ottenere prestazioni ancora migliori, puoi usare TensorRT con Triton Inference Server. TensorRT è un ottimizzatore di deep learning ad alte prestazioni, progettato specificamente per le GPU NVIDIA, che può aumentare significativamente la velocità di inferenza.
I principali vantaggi dell'uso di TensorRT con Triton includono:
- Inferenza fino a 36 volte più veloce rispetto ai modelli non ottimizzati
- Ottimizzazioni specifiche per l'hardware per massimizzare l'utilizzo della GPU
- Supporto per formati a precisione ridotta (INT8, FP16) mantenendo l'accuratezza
- Fusione dei layer per ridurre il sovraccarico computazionale
Per usare TensorRT direttamente, puoi esportare il tuo modello Ultralytics YOLO26 nel formato 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'Per ulteriori informazioni sull'ottimizzazione TensorRT, consulta la guida all'integrazione di TensorRT.
Ora puoi distribuire ed eseguire i modelli Ultralytics YOLO26 su Triton Inference Server per ottenere un'inferenza scalabile e ad alte prestazioni. Per maggiori dettagli, consulta la documentazione ufficiale di Triton oppure chiedi aiuto alla community Ultralytics.
FAQ#
La configurazione di Ultralytics YOLO26 con NVIDIA Triton Inference Server prevede alcuni passaggi fondamentali:
-
Esporta YOLO26 nel formato 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) -
Configura il repository dei modelli 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() -
Esegui 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)
Questa configurazione può aiutarti a distribuire in modo efficiente i modelli Ultralytics YOLO26 su larga scala con Triton Inference Server, per un'inferenza di modelli di AI ad alte prestazioni.
-
L'integrazione di Ultralytics YOLO26 con NVIDIA Triton Inference Server offre diversi vantaggi:
- Inferenza di AI scalabile: Triton consente di servire più modelli da una singola istanza del server, supportando il caricamento e la rimozione dinamici dei modelli e risultando quindi altamente scalabile per carichi di lavoro di AI diversi.
- Elevate prestazioni: ottimizzato per le GPU NVIDIA, Triton Inference Server garantisce operazioni di inferenza ad alta velocità, perfette per applicazioni in tempo reale come il rilevamento degli oggetti.
- Ensemble e gestione delle versioni dei modelli: la modalità ensemble di Triton consente di combinare più modelli per migliorare i risultati, mentre la gestione delle versioni supporta i test A/B e gli aggiornamenti progressivi.
- Batching automatico: Triton raggruppa automaticamente più richieste di inferenza, migliorando significativamente il throughput e riducendo la latenza.
- Distribuzione semplificata: ottimizzazione graduale dei flussi di lavoro di AI senza richiedere revisioni complete del sistema, per facilitare una scalabilità efficiente.
Per istruzioni dettagliate sulla configurazione e l'esecuzione di Ultralytics YOLO26 con Triton, consulta Configurazione di Triton Inference Server e Esecuzione dell'inferenza.
Usare il formato ONNX per il tuo modello Ultralytics YOLO26 prima di distribuirlo su NVIDIA Triton Inference Server offre diversi vantaggi fondamentali:
- Interoperabilità: il formato ONNX supporta il trasferimento tra diversi framework di deep learning, come PyTorch e TensorFlow, garantendo una compatibilità più ampia.
- Ottimizzazione: molti ambienti di distribuzione, incluso Triton, sono ottimizzati per ONNX, consentendo un'inferenza più rapida e prestazioni migliori.
- Facilità di distribuzione: ONNX è ampiamente supportato tra framework e piattaforme, semplificando il processo di distribuzione su diversi sistemi operativi e configurazioni hardware.
- Indipendenza dal framework: una volta convertito in ONNX, il modello non è più vincolato al framework originale, risultando più portabile.
- Standardizzazione: ONNX fornisce una rappresentazione standardizzata che aiuta a superare i problemi di compatibilità tra diversi framework di AI.
Per esportare il tuo modello, usa:
from ultralytics import YOLO model = YOLO("yolo26n.pt") onnx_file = model.export(format="onnx", dynamic=True)Puoi seguire i passaggi nella guida all'integrazione di ONNX per completare il processo.
Sì, puoi eseguire l'inferenza usando il modello Ultralytics YOLO26 su NVIDIA Triton Inference Server. Dopo aver configurato il modello nel repository dei modelli Triton e avviato il server, puoi caricare ed eseguire l'inferenza sul modello come segue:
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")Questo approccio ti consente di sfruttare le ottimizzazioni di Triton usando al contempo la familiare interfaccia Ultralytics YOLO.
Ultralytics YOLO26 offre diversi vantaggi esclusivi rispetto ai modelli TensorFlow e PyTorch per la distribuzione:
- Prestazioni in tempo reale: ottimizzato per le attività di rilevamento degli oggetti in tempo reale, Ultralytics YOLO26 offre accuratezza e velocità all'avanguardia, risultando ideale per le applicazioni che richiedono analisi video in tempo reale.
- Facilità d'uso: Ultralytics YOLO26 si integra perfettamente con Triton Inference Server e supporta diversi formati di esportazione (ONNX, TensorRT), offrendo flessibilità per vari scenari di distribuzione.
- Funzioni Avanzate: l'erogazione tramite Triton aggiunge il caricamento dinamico dei modelli, il controllo delle versioni dei modelli e l'inferenza tramite ensemble, che sono fondamentali per distribuzioni di IA scalabili e affidabili.
- API semplificata: l'API Ultralytics offre un'interfaccia coerente tra diversi target di distribuzione, riducendo la curva di apprendimento e i tempi di sviluppo.
- Ottimizzazione per l'edge: i modelli Ultralytics YOLO26 sono progettati tenendo conto della distribuzione all'edge e offrono prestazioni eccellenti anche su dispositivi con risorse limitate.
Per ulteriori dettagli, confronta le opzioni di distribuzione nella guida all'esportazione dei modelli.