Saltar al contenido

Triton Servidor de inferencia con Ultralytics YOLOv8

El 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 GPUs NVIDIA . Triton simplifica el despliegue de modelos de IA a escala en producci贸n. La integraci贸n de Ultralytics YOLOv8 con Triton Inference Server te permite desplegar 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 Servidor de Inferencia.

驴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("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.

PREGUNTAS FRECUENTES

驴C贸mo configuro Ultralytics YOLOv8 con NVIDIA Triton Inference Server?

La configuraci贸n Ultralytics YOLOv8 con NVIDIA Triton Inference Server implica unos cuantos pasos clave:

  1. Exporta YOLOv8 al 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. Configura Triton Repositorio de modelos:

    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. Ejecuta el servidor 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)
    

Esta configuraci贸n puede ayudarte a desplegar eficazmente modelos YOLOv8 a escala en Triton Inference Server para la inferencia de modelos de IA de alto rendimiento.

驴Qu茅 ventajas ofrece el uso de Ultralytics YOLOv8 con NVIDIA Triton Inference Server?

La integraci贸n de Ultralytics YOLOv8 con NVIDIA Triton Inference Server ofrece varias ventajas:

  • Inferencia de IA escalable: Triton permite servir m煤ltiples modelos desde una 煤nica instancia de servidor, soportando la carga y descarga din谩mica de modelos, lo que lo hace altamente escalable para diversas cargas de trabajo de IA.
  • Alto rendimiento: Optimizado para las GPU NVIDIA , Triton Inference Server garantiza operaciones de inferencia de alta velocidad, perfectas para aplicaciones en tiempo real como la detecci贸n de objetos.
  • Ensemble y versionado de modelos: el modo ensemble de Triton permite combinar varios modelos para mejorar los resultados, y su versionado de modelos admite pruebas A/B y actualizaciones continuas.

Para obtener instrucciones detalladas sobre c贸mo configurar y ejecutar YOLOv8 con Triton, puedes consultar la gu铆a de configuraci贸n.

驴Por qu茅 debo exportar mi modelo YOLOv8 al formato ONNX antes de utilizar el servidor de inferencia Triton ?

Utilizar el formato ONNX (Open Neural Network Exchange) para tu Ultralytics YOLOv8 modelo antes de desplegarlo en NVIDIA Triton Inference Server ofrece varias ventajas clave:

  • Interoperabilidad: el formato ONNX admite la transferencia entre distintos marcos de aprendizaje profundo (como PyTorch, TensorFlow), lo que garantiza una mayor compatibilidad.
  • Optimizaci贸n: Muchos entornos de implantaci贸n, incluido Triton, optimizan para ONNX, lo que permite una inferencia m谩s r谩pida y un mejor rendimiento.
  • Facilidad de despliegue: ONNX es ampliamente compatible con distintos marcos y plataformas, lo que simplifica el proceso de despliegue en diversos sistemas operativos y configuraciones de hardware.

Para exportar tu modelo, utiliza

from ultralytics import YOLO

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

Puedes seguir los pasos de la gu铆a de exportaci贸n para completar el proceso.

驴Puedo ejecutar la inferencia utilizando el modelo Ultralytics YOLOv8 en Triton Inference Server?

S铆, puedes ejecutar la inferencia utilizando el Ultralytics YOLOv8 modelo en NVIDIA Triton Servidor de Inferencia. Una vez que tu modelo est茅 configurado en el Repositorio de Modelos Triton y el servidor est茅 funcionando, puedes cargar y ejecutar la inferencia sobre tu modelo de la siguiente manera:

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")

Para obtener una gu铆a detallada sobre la configuraci贸n y el funcionamiento del servidor Triton con YOLOv8, consulta la secci贸n Funcionamiento del servidor de inferencia triton .

驴C贸mo se compara Ultralytics YOLOv8 con los modelos TensorFlow y PyTorch para su despliegue?

Ultralytics YOLOv8 ofrece varias ventajas 煤nicas en comparaci贸n con los modelos de implantaci贸n TensorFlow y PyTorch :

  • Rendimiento en tiempo real: Optimizado para tareas de detecci贸n de objetos en tiempo real, YOLOv8 proporciona precisi贸n y velocidad de vanguardia, lo que lo hace ideal para aplicaciones que requieren an谩lisis de v铆deo en directo.
  • Facilidad de uso: YOLOv8 se integra perfectamente con Triton Inference Server y admite diversos formatos de exportaci贸n (ONNX, TensorRT, CoreML), lo que lo hace flexible para diversos escenarios de implantaci贸n.
  • Funciones avanzadas: YOLOv8 incluye funciones como la carga din谩mica de modelos, el versionado de modelos y la inferencia de conjuntos, que son cruciales para implantaciones de IA escalables y fiables.

Para m谩s detalles, compara las opciones de despliegue en la gu铆a de despliegue del modelo.



Creado 2023-11-12, Actualizado 2024-07-05
Autores: glenn-jocher (10)

Comentarios