Ultralytics YOLO27:
Get Started

Triton Inference Server con Ultralytics YOLO26#

Triton Inference Server (precedentemente noto come TensorRT Inference Server) è una soluzione software open source sviluppata da NVIDIA. Offre una soluzione di inferenza cloud ottimizzata per le GPU NVIDIA. Triton semplifica il deployment dei modelli AI su larga scala in produzione. Integrare Ultralytics YOLO26 con Triton Inference Server consente di distribuire carichi di lavoro di inferenza scalabili e ad alte prestazioni per il deep learning. Questa guida illustra i passaggi per configurare e testare l'integrazione.



Guarda: Primi passi con NVIDIA Triton Inference Server.

Che cos'è Triton Inference Server?#

Triton Inference Server è progettato per distribuire in produzione diversi tipi di modelli 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 server
  • Caricare e scaricare dinamicamente i modelli senza riavviare il server
  • Inferenza con ensemble, che consente di usare più modelli insieme per ottenere risultati
  • Gestione delle versioni dei modelli per test A/B e aggiornamenti progressivi

Vantaggi principali di Triton Inference Server#

L'uso di Triton Inference Server con Ultralytics YOLO26 offre diversi vantaggi:

  • Batch automatici: raggruppa più richieste AI prima di elaborarle, riducendo la latenza e aumentando la velocità di inferenza
  • Integrazione con Kubernetes: il design cloud native si integra perfettamente con Kubernetes per gestire e scalare le applicazioni AI
  • Ottimizzazioni specifiche per l'hardware: sfrutta al massimo le GPU NVIDIA per ottenere prestazioni ottimali
  • Flessibilità dei framework: supporta diversi framework AI, tra cui PyTorch, TensorFlow, ONNX, OpenVINO e TensorRT
  • Open source e personalizzabile: può essere modificato per adattarsi a esigenze specifiche, offrendo flessibilità per diverse applicazioni AI

Prerequisiti#

Prima di procedere, assicurati di disporre dei seguenti prerequisiti:

  • Docker (>= 28.2.0, con NVIDIA Container Toolkit >= 1.18 per l'accesso alla GPU tramite CDI) oppure Podman installato sulla macchina
  • Installa ultralytics:
    pip install ultralytics
  • Installa tritonclient:
    pip install tritonclient[all]

Configurazione di Triton Inference Server#

Esegui questo blocco di configurazione completo per esportare Ultralytics YOLO26 in ONNX, creare il repository dei modelli Triton e avviare Triton Inference Server:

Nota

Usa l'opzione runtime nello script per scegliere il motore per i 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 Triton Server:

from ultralytics import YOLO

# Carica il modello Triton Server
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# Esegui l'inferenza sul 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 con TensorRT (facoltativa)#

Per ottenere prestazioni ancora migliori, puoi usare TensorRT con Triton Inference Server. TensorRT è un ottimizzatore di deep learning ad alte prestazioni, sviluppato appositamente per le GPU NVIDIA, che può aumentare significativamente la velocità di inferenza.

Ecco i principali vantaggi dell'uso di TensorRT con Triton:

  • Inferenza fino a 36 volte più veloce rispetto ai modelli non ottimizzati
  • Ottimizzazioni specifiche per l'hardware per sfruttare al massimo la GPU
  • Supporto per formati a precisione ridotta (INT8, FP16) senza compromettere l'accuratezza
  • Fusione dei layer per ridurre il sovraccarico computazionale

Il config.pbtxt qui sopra abilita già l'acceleratore TensorRT di Triton per il modello ONNX. Per eseguire TensorRT direttamente con Ultralytics, esporta invece il tuo modello Ultralytics YOLO26 in formato TensorRT:

from ultralytics import YOLO

# Carica il modello YOLO26
model = YOLO("yolo26n.pt")

# Esporta il modello in formato TensorRT
model.export(format="engine")  # crea 'yolo26n.engine'

Per ulteriori informazioni sull'ottimizzazione con 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 ulteriori dettagli, consulta la documentazione ufficiale di Triton oppure chiedi aiuto alla community Ultralytics.

Domande frequenti#

  • La configurazione di Ultralytics YOLO26 con NVIDIA Triton Inference Server prevede alcuni passaggi fondamentali:

    1. Esporta YOLO26 in formato ONNX:

      from ultralytics import YOLO
      
      # Carica un modello
      model = YOLO("yolo26n.pt")  # carica un modello ufficiale
      
      # Esporta il modello in formato ONNX
      onnx_file = model.export(format="onnx", dynamic=True)
    2. Configura il repository dei modelli Triton:

      from pathlib import Path
      
      # Definisci i percorsi
      model_name = "yolo"
      triton_repo_path = Path("tmp") / "triton_repo"
      triton_model_path = triton_repo_path / model_name
      
      # Crea le directory
      (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. Avvia 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 dei modelli AI ad alte prestazioni.

  • L'integrazione di Ultralytics YOLO26 con NVIDIA Triton Inference Server offre diversi vantaggi:

    • Inferenza AI scalabile: Triton consente di servire più modelli da una singola istanza server e supporta il caricamento e lo scaricamento dinamico dei modelli, garantendo un'elevata scalabilità per carichi di lavoro AI diversi.
    • Prestazioni elevate: ottimizzato per le GPU NVIDIA, Triton Inference Server garantisce operazioni di inferenza ad alta velocità, ideali per applicazioni in tempo reale come il rilevamento di 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 dei modelli supporta test A/B e aggiornamenti progressivi.
    • Batch automatici: Triton raggruppa automaticamente più richieste di inferenza, migliorando significativamente il throughput e riducendo la latenza.
    • Deployment semplificato: ottimizzazione graduale dei flussi di lavoro AI senza dover ristrutturare completamente il sistema, per scalare più facilmente ed efficientemente.

    Per istruzioni dettagliate su come configurare ed eseguire Ultralytics YOLO26 con Triton, consulta Configurazione di Triton Inference Server ed Esecuzione dell'inferenza.

  • Usare il formato ONNX (Scambio di reti neurali aperte) 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 deployment, tra cui Triton, sono ottimizzati per ONNX e consentono così un'inferenza più rapida e prestazioni migliori.
    • Facilità di deployment: ONNX è ampiamente supportato tra framework e piattaforme, semplificando il processo di deployment su diversi sistemi operativi e configurazioni hardware.
    • Indipendenza dai framework: una volta convertito in ONNX, il modello non è più vincolato al framework originale ed è quindi 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 della guida all’integrazione di ONNX per completare la procedura.

  • Sì, puoi eseguire inferenze con il modello Ultralytics YOLO26 su NVIDIA Triton Inference Server. Dopo aver configurato il modello nel Triton Model Repository e avviato il server, puoi caricare il modello ed eseguire inferenze come segue:

    from ultralytics import YOLO
    
    # Carica il modello Triton Server
    model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
    
    # Esegui l'inferenza sul 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 di oggetti in tempo reale, Ultralytics YOLO26 offre accuratezza e velocità all’avanguardia, caratteristiche che lo rendono ideale per le applicazioni che richiedono analisi video in tempo reale.
    • Facilità d’uso: Ultralytics YOLO26 si integra senza problemi con Triton Inference Server e supporta diversi formati di esportazione (ONNX, TensorRT), offrendo flessibilità per vari scenari di distribuzione.
    • Funzionalità avanzate: il serving tramite Triton aggiunge il caricamento dinamico dei modelli, il controllo delle versioni dei modelli e l’inferenza con ensemble, funzionalità fondamentali per distribuzioni AI scalabili e affidabili.
    • API semplificata: l’API Ultralytics offre un’interfaccia coerente su diverse piattaforme di distribuzione, riducendo la curva di apprendimento e i tempi di sviluppo.
    • Ottimizzazione per l’edge: i modelli Ultralytics YOLO26 sono progettati pensando alla distribuzione edge e offrono prestazioni eccellenti anche sui dispositivi con risorse limitate.

    Per maggiori dettagli, confronta le opzioni di distribuzione nella guida all’esportazione dei modelli.

Commenti