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 in scala nella 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 impostare 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(f"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.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (8)

Commenti