Vai al contenuto

Triton Server di inferenza con Ultralytics YOLOv8

Triton Inference Server (precedentemente noto come TensorRT Inference Server) è una soluzione software open-source sviluppata da NVIDIA. Offre una soluzione di inferenza in cloud ottimizzata per le GPU NVIDIA . Triton semplifica l'implementazione di modelli di intelligenza artificiale su scala in produzione. L'integrazione di Ultralytics YOLOv8 con Triton Inference Server consente di distribuire carichi di lavoro di inferenza di deep learning scalabili e ad alte prestazioni. Questa guida fornisce i passaggi per configurare e testare l'integrazione.



Guarda: Come iniziare con NVIDIA Triton Inference Server.

Cos'è Triton Inference Server?

Triton Inference Server è stato progettato per distribuire una serie di modelli di intelligenza artificiale in produzione. Supporta un'ampia gamma di framework di deep learning e machine learning, tra cui TensorFlow, PyTorch, ONNX Runtime e molti altri. I suoi casi d'uso principali sono:

  • Servire più modelli da un'unica istanza del server.
  • Caricamento e scaricamento dinamico del modello senza riavvio del server.
  • Inferenza ensemble, che consente di utilizzare più modelli insieme per ottenere risultati.
  • Modellazione di versioni per test A/B e aggiornamenti continui.

Prerequisiti

Assicurati di avere i seguenti prerequisiti prima di procedere:

  • Docker installato sul tuo computer.
  • Installa tritonclient:
    pip install tritonclient[all]
    

Esportare YOLOv8 nel formato ONNX

Prima di distribuire il modello su Triton, è necessario esportarlo nel formato ONNX . ONNX (Open Neural Network Exchange) è un formato che permette di trasferire i modelli tra diversi framework di deep learning. Usa il formato export dalla funzione YOLO classe:

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load an official model

# Export the model
onnx_file = model.export(format="onnx", dynamic=True)

Impostazione del repository di modelli Triton

Il Repository dei modelli di Triton è un luogo di archiviazione in cui Triton può accedere e caricare i modelli.

  1. Crea la struttura di directory necessaria:

    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)
    
  2. Sposta il modello esportato di ONNX nel repository di Triton :

    from pathlib import Path
    
    # 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()
    

Esecuzione di Triton Inference Server

Esegui il server di inferenza Triton utilizzando Docker:

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:23.09-py3"  # 6.4 GB

# Pull the image
subprocess.call(f"docker pull {tag}", shell=True)

# Run the Triton server and capture the container ID
container_id = (
    subprocess.check_output(
        f"docker run -d --rm -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
        shell=True,
    )
    .decode("utf-8")
    .strip()
)

# Wait for the Triton server to start
triton_client = InferenceServerClient(url="localhost: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)

Quindi esegui l'inferenza utilizzando il modello di Triton Server:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

Pulisci il contenitore:

# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)

Seguendo i passaggi sopra descritti, puoi distribuire ed eseguire i modelli di Ultralytics YOLOv8 in modo efficiente su Triton Inference Server, fornendo una soluzione scalabile e ad alte prestazioni per le attività di inferenza dell'apprendimento profondo. Se dovessi riscontrare dei problemi o avere ulteriori domande, consulta la documentazione ufficiale di Triton o rivolgiti alla comunità di Ultralytics per ricevere supporto.

DOMANDE FREQUENTI

Come faccio a configurare Ultralytics YOLOv8 con NVIDIA Triton Inference Server?

La configurazione Ultralytics YOLOv8 con NVIDIA Triton Inference Server comporta alcuni passaggi chiave:

  1. Esporta YOLOv8 nel formato ONNX :

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.pt")  # load an official model
    
    # Export the model to ONNX format
    onnx_file = model.export(format="onnx", dynamic=True)
    
  2. Imposta il repository dei modelli di 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()
    
  3. Esegui il server Triton :

    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:23.09-py3"
    
    subprocess.call(f"docker pull {tag}", shell=True)
    
    container_id = (
        subprocess.check_output(
            f"docker run -d --rm -v {triton_repo_path}/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
            shell=True,
        )
        .decode("utf-8")
        .strip()
    )
    
    triton_client = InferenceServerClient(url="localhost: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 di YOLOv8 su scala su Triton Inference Server per l'inferenza di modelli di intelligenza artificiale ad alte prestazioni.

Quali vantaggi offre l'utilizzo di Ultralytics YOLOv8 con NVIDIA Triton Inference Server?

L'integrazione Ultralytics YOLOv8 con NVIDIA Triton Inference Server offre diversi vantaggi:

  • Inferenza AI scalabile: Triton permette di servire più modelli da un'unica istanza del server, supportando il caricamento e lo scaricamento dinamico dei modelli e rendendolo altamente scalabile per diversi carichi di lavoro di AI.
  • Prestazioni elevate: Ottimizzato per le GPU NVIDIA , Triton Inference Server garantisce operazioni di inferenza ad alta velocità, perfette per applicazioni in tempo reale come il rilevamento di oggetti.
  • Ensemble e Model Versioning: la modalità ensemble di Triton permette di combinare più modelli per migliorare i risultati, mentre il model versioning supporta i test A/B e gli aggiornamenti continui.

Per istruzioni dettagliate sulla configurazione e l'utilizzo di YOLOv8 con Triton, puoi consultare la guida alla configurazione.

Perché devo esportare il mio modello YOLOv8 nel formato ONNX prima di utilizzare Triton Inference Server?

L'utilizzo del formato ONNX (Open Neural Network Exchange) per il tuo modello prima di distribuirlo su Inference Server offre diversi vantaggi. Ultralytics YOLOv8 prima di distribuirlo su NVIDIA Triton Inference Server offre diversi vantaggi:

  • Interoperabilità: il formato ONNX supporta il trasferimento tra diversi framework di deep learning (come PyTorch, TensorFlow), garantendo una maggiore compatibilità.
  • Ottimizzazione: Molti ambienti di distribuzione, tra cui Triton, ottimizzano ONNX, consentendo un'inferenza più veloce e migliori prestazioni.
  • Facilità di implementazione: ONNX è ampiamente supportato da diversi framework e piattaforme, semplificando il processo di implementazione in diversi sistemi operativi e configurazioni hardware.

Per esportare il tuo modello, usa:

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
onnx_file = model.export(format="onnx", dynamic=True)

Puoi seguire i passi della guida all'esportazione per completare il processo.

Posso eseguire l'inferenza utilizzando il modello Ultralytics YOLOv8 su Triton Inference Server?

Sì, puoi eseguire l'inferenza utilizzando il modello Ultralytics YOLOv8 su NVIDIA Triton Inference Server. Una volta che il tuo modello è stato configurato nel Repository dei modelli di Triton e il server è in funzione, puoi caricare ed eseguire l'inferenza sul tuo modello come segue:

from ultralytics import YOLO

# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")

# Run inference on the server
results = model("path/to/image.jpg")

Per una guida approfondita sull'impostazione e l'esecuzione di Triton Server con YOLOv8, consulta la sezione Esecuzione del server di inferenza triton .

Come si colloca Ultralytics YOLOv8 rispetto ai modelli TensorFlow e PyTorch per quanto riguarda la distribuzione?

Ultralytics YOLOv8 offre diversi vantaggi unici rispetto ai modelli TensorFlow e PyTorch per la distribuzione:

  • Prestazioni in tempo reale: Ottimizzato per le attività di rilevamento degli oggetti in tempo reale, YOLOv8 offre una precisione e una velocità all'avanguardia, rendendolo ideale per le applicazioni che richiedono l'analisi dei video in diretta.
  • Facilità d'uso: YOLOv8 si integra perfettamente con Triton Inference Server e supporta diversi formati di esportazione (ONNX, TensorRT, CoreML), rendendolo flessibile per vari scenari di implementazione.
  • Funzionalità avanzate: YOLOv8 include funzionalità come il caricamento dinamico dei modelli, il versioning dei modelli e l'inferenza di ensemble, che sono fondamentali per implementazioni di AI scalabili e affidabili.

Per maggiori dettagli, confronta le opzioni di distribuzione nella guida alla distribuzione del modello.



Creato 2023-11-12, Aggiornato 2024-07-05
Autori: glenn-jocher (10)

Commenti