Ultralytics YOLO27:

Triton Inference Server con Ultralytics YOLO26#

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 GPU NVIDIA. Triton simplifica el despliegue de modelos de IA a escala en producción. Integrar Ultralytics YOLO26 con Triton Inference Server te permite desplegar cargas de trabajo de inferencia de deep learning escalables y de alto rendimiento. Esta guía proporciona los pasos para configurar y probar la integración.



Watch: Getting Started with NVIDIA Triton Inference Server.

¿Qué es Triton Inference Server?#

Triton Inference Server está diseñado para desplegar diversos modelos de IA en producción. Admite una amplia variedad de frameworks de deep learning y machine learning, incluidos PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT y muchos otros. Sus principales casos de uso son:

  • Servir varios modelos desde una única instancia del servidor
  • Cargar y descargar modelos dinámicamente sin reiniciar el servidor
  • Inferencia en conjunto, que permite utilizar varios modelos conjuntamente para obtener resultados
  • Control de versiones de modelos para pruebas A/B y actualizaciones progresivas

Principales ventajas de Triton Inference Server#

Usar Triton Inference Server con Ultralytics YOLO26 ofrece varias ventajas:

  • Procesamiento por lotes automático: Agrupa varias solicitudes de IA antes de procesarlas, lo que reduce la latencia y mejora la velocidad de inferencia
  • Integración con Kubernetes: Su diseño nativo de la nube funciona perfectamente con Kubernetes para gestionar y escalar aplicaciones de IA
  • Optimizaciones específicas del hardware: Aprovecha al máximo las GPU NVIDIA para obtener el máximo rendimiento
  • Flexibilidad de frameworks: Admite varios frameworks de IA, incluidos PyTorch, TensorFlow, ONNX, OpenVINO y TensorRT
  • Código abierto y personalizable: Puede modificarse para adaptarse a necesidades específicas, lo que garantiza flexibilidad para diversas aplicaciones de IA

Requisitos previos#

Asegúrate de disponer de los siguientes requisitos previos antes de continuar:

  • Docker (>= 28.2.0, con NVIDIA Container Toolkit >= 1.18 para acceder a GPU mediante CDI) o Podman instalado en tu equipo
  • Instala ultralytics:
    pip install ultralytics
  • Instala tritonclient:
    pip install tritonclient[all]

Configuración de Triton Inference Server#

Ejecuta este bloque completo de configuración para exportar Ultralytics YOLO26 a ONNX, crear el repositorio de modelos de Triton e iniciar Triton Inference Server:

Nota

Usa la opción runtime en el script para elegir el motor de contenedores:

  • Establece runtime = "docker" para Docker
  • Establece runtime = "podman" para 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)

Ejecución de la inferencia#

Ejecuta la inferencia utilizando el modelo del servidor Triton:

from ultralytics import YOLO

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

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

Limpia el contenedor:

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)

Optimización con TensorRT (opcional)#

Para obtener un rendimiento aún mayor, puedes usar TensorRT con Triton Inference Server. TensorRT es un optimizador de deep learning de alto rendimiento creado específicamente para GPU NVIDIA que puede aumentar significativamente la velocidad de inferencia.

Entre las principales ventajas de usar TensorRT con Triton se incluyen:

  • Inferencia hasta 36 veces más rápida que con modelos sin optimizar
  • Optimizaciones específicas del hardware para maximizar el uso de la GPU
  • Compatibilidad con formatos de precisión reducida (INT8, FP16) manteniendo la precisión
  • Fusión de capas para reducir la sobrecarga computacional

Para usar TensorRT directamente, puedes exportar tu modelo de Ultralytics YOLO26 al formato TensorRT:

from ultralytics import YOLO

# Load the YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo26n.engine'

Para obtener más información sobre la optimización con TensorRT, consulta la guía de integración de TensorRT.

Ahora puedes desplegar y ejecutar modelos de Ultralytics YOLO26 en Triton Inference Server para realizar inferencias escalables y de alto rendimiento. Para obtener más información, consulta la documentación oficial de Triton o pide ayuda a la comunidad de Ultralytics.

Preguntas frecuentes#

  • Configurar Ultralytics YOLO26 con NVIDIA Triton Inference Server implica varios pasos clave:

    1. Exportar YOLO26 al formato ONNX:

      from ultralytics import YOLO
      
      # Load a model
      model = YOLO("yolo26n.pt")  # load an official model
      
      # Export the model to ONNX format
      onnx_file = model.export(format="onnx", dynamic=True)
    2. Configurar el repositorio de modelos de 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. Ejecutar 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)

    Esta configuración puede ayudarte a desplegar de forma eficiente modelos de Ultralytics YOLO26 a escala en Triton Inference Server para realizar inferencias de modelos de IA de alto rendimiento.

  • Integrar Ultralytics YOLO26 con NVIDIA Triton Inference Server ofrece varias ventajas:

    • Inferencia de IA escalable: Triton permite servir varios modelos desde una única instancia del servidor y admite la carga y descarga dinámica de modelos, por lo que resulta muy escalable para diversas cargas de trabajo de IA.
    • Alto rendimiento: Optimizado para GPU NVIDIA, Triton Inference Server garantiza operaciones de inferencia de alta velocidad, perfectas para aplicaciones en tiempo real como la detección de objetos.
    • Inferencia en conjunto y control de versiones de modelos: El modo de conjunto de Triton permite combinar varios modelos para mejorar los resultados, y el control de versiones de modelos admite pruebas A/B y actualizaciones progresivas.
    • Procesamiento por lotes automático: Triton agrupa automáticamente varias solicitudes de inferencia, lo que mejora significativamente el rendimiento y reduce la latencia.
    • Despliegue simplificado: Permite optimizar gradualmente los flujos de trabajo de IA sin necesidad de renovar completamente los sistemas, lo que facilita un escalado eficiente.

    Para obtener instrucciones detalladas sobre cómo configurar y ejecutar Ultralytics YOLO26 con Triton, consulta Configuración de Triton Inference Server y Ejecución de la inferencia.

  • Usar el formato ONNX (Intercambio abierto de redes neuronales) para tu modelo de Ultralytics YOLO26 antes de desplegarlo en NVIDIA Triton Inference Server ofrece varias ventajas clave:

    • Interoperabilidad: El formato ONNX permite transferir modelos entre distintos frameworks de deep learning (como PyTorch y TensorFlow), lo que garantiza una compatibilidad más amplia.
    • Optimización: Muchos entornos de despliegue, incluido Triton, están optimizados para ONNX, lo que permite realizar inferencias más rápidas y obtener un mejor rendimiento.
    • Facilidad de despliegue: ONNX es ampliamente compatible con frameworks y plataformas, lo que simplifica el proceso de despliegue en diversos sistemas operativos y configuraciones de hardware.
    • Independencia del framework: Una vez convertido a ONNX, tu modelo deja de estar vinculado a su framework original, lo que lo hace más portable.
    • Estandarización: ONNX proporciona una representación estandarizada que ayuda a superar los problemas de compatibilidad entre distintos frameworks de IA.

    Para exportar tu modelo, usa:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    onnx_file = model.export(format="onnx", dynamic=True)

    Puedes seguir los pasos de la guía de integración de ONNX para completar el proceso.

  • Sí, puedes ejecutar inferencias con el modelo Ultralytics YOLO26 en NVIDIA Triton Inference Server. Cuando hayas configurado tu modelo en el repositorio de modelos de Triton y el servidor esté en ejecución, puedes cargar el modelo y ejecutar inferencias de la siguiente manera:

    from ultralytics import YOLO
    
    # Load the Triton Server model
    model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
    
    # Run inference on the server
    results = model("path/to/image.jpg")

    Este método te permite aprovechar las optimizaciones de Triton mientras utilizas la conocida interfaz de Ultralytics YOLO.

  • Ultralytics YOLO26 ofrece varias ventajas únicas frente a los modelos de TensorFlow y PyTorch para el despliegue:

    • Rendimiento en tiempo real: Optimizado para tareas de detección de objetos en tiempo real, Ultralytics YOLO26 ofrece precisión y velocidad de última generación, por lo que es ideal para aplicaciones que requieren análisis de vídeo en directo.
    • Facilidad de uso: Ultralytics YOLO26 se integra perfectamente con Triton Inference Server y admite diversos formatos de exportación (ONNX, TensorRT), lo que proporciona flexibilidad para distintos escenarios de despliegue.
    • Funciones avanzadas: El servicio a través de Triton añade la carga dinámica de modelos, el control de versiones de modelos y la inferencia en conjunto, que son cruciales para implementaciones de IA escalables y fiables.
    • API simplificada: La API de Ultralytics proporciona una interfaz coherente en distintos destinos de despliegue, lo que reduce la curva de aprendizaje y el tiempo de desarrollo.
    • Optimización en el edge: Los modelos de Ultralytics YOLO26 están diseñados pensando en el despliegue en el edge y ofrecen un rendimiento excelente incluso en dispositivos con recursos limitados.

    Para obtener más información, compara las opciones de despliegue en la guía de exportación de modelos.

Comentarios