Saltar al contenido

Triton Servidor de inferencia con Ultralytics YOLOv8

Triton Inference Server (antes conocido como TensorRT Inference Server) es una soluci贸n de software de c贸digo abierto desarrollada por NVIDIA. Proporciona una soluci贸n de inferencia en la nube optimizada para las GPU NVIDIA. Triton simplifica la implantaci贸n de modelos de IA a escala en la producci贸n. La integraci贸n de Ultralytics YOLOv8 con Triton Inference Server te permite implantar cargas de trabajo de inferencia de aprendizaje profundo escalables y de alto rendimiento. Esta gu铆a proporciona los pasos para configurar y probar la integraci贸n.



Observa: Primeros pasos con NVIDIA Triton Inference Server.

驴Qu茅 es Triton Servidor de Inferencia?

Triton Inference Server est谩 dise帽ado para desplegar diversos modelos de IA en producci贸n. Es compatible con una amplia gama de marcos de aprendizaje profundo y aprendizaje autom谩tico, como TensorFlow, PyTorch, ONNX Runtime y muchos otros. Sus principales casos de uso son:

  • Servir varios modelos desde una 煤nica instancia de servidor.
  • Carga y descarga din谩mica de modelos sin reiniciar el servidor.
  • Inferencia conjunta, que permite utilizar varios modelos juntos para obtener resultados.
  • Versionado de modelos para pruebas A/B y actualizaciones continuas.

Requisitos previos

Aseg煤rate de que tienes los siguientes requisitos previos antes de proceder:

  • Docker instalado en tu m谩quina.
  • Instala tritonclient:
    pip install tritonclient[all]
    

Exportar YOLOv8 al formato ONNX

Antes de desplegar el modelo en Triton, hay que exportarlo al formato ONNX . ONNX (Open Neural Network Exchange) es un formato que permite transferir modelos entre distintos marcos de aprendizaje profundo. Utiliza el formato export de la funci贸n YOLO clase:

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)

Configuraci贸n del repositorio de modelos Triton

El repositorio de modelos de Triton es un lugar de almacenamiento al que Triton puede acceder y cargar modelos.

  1. Crea la estructura de directorios necesaria:

    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. Mueve el modelo ONNX exportado al repositorio 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()
    

Ejecutando Triton Servidor de Inferencia

Ejecuta el Servidor de Inferencia Triton utilizando 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)

A continuaci贸n, ejecuta la inferencia utilizando el modelo 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")

Limpia el contenedor:

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

Siguiendo los pasos anteriores, puedes desplegar y ejecutar eficientemente modelos Ultralytics YOLOv8 en Triton Inference Server, proporcionando una soluci贸n escalable y de alto rendimiento para tareas de inferencia de aprendizaje profundo. Si tienes alg煤n problema o alguna duda, consulta la documentaci贸n oficial de Triton o ponte en contacto con la comunidad de Ultralytics para obtener ayuda.



Creado 2023-11-12, Actualizado 2024-05-27
Autores: glenn-jocher (7)

Comentarios