Ultralytics YOLO27:
Get Started

Servidor de inferencia Triton con Ultralytics YOLO26#

Triton Inference Server (anteriormente 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 entornos de producción. La integración de Ultralytics YOLO26 con Triton Inference Server permite desplegar cargas de trabajo de inferencia de aprendizaje profundo escalables y de alto rendimiento. Esta guía explica cómo configurar y probar la integración.



Ver: Primeros pasos con 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 marcos de aprendizaje automático y aprendizaje profundo, como PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT y muchos más. 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 de conjuntos, que permite utilizar varios modelos conjuntamente para obtener resultados
  • Control de versiones de modelos para pruebas A/B y actualizaciones progresivas

Ventajas principales de Triton Inference Server#

El uso de Triton Inference Server con Ultralytics YOLO26 ofrece varias ventajas:

  • Agrupación automática por lotes: 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 a la perfección con Kubernetes para gestionar y escalar aplicaciones de IA
  • Optimizaciones específicas para el hardware: aprovecha al máximo las GPU NVIDIA para ofrecer el máximo rendimiento
  • Flexibilidad de marcos de trabajo: admite varios marcos de IA, como PyTorch, TensorFlow, ONNX, OpenVINO y TensorRT
  • Código abierto y personalizable: se puede modificar para adaptarlo a necesidades específicas, lo que ofrece flexibilidad para distintas aplicaciones de IA

Requisitos previos#

Antes de continuar, asegúrate de cumplir los siguientes requisitos previos:

  • Docker (>= 28.2.0, con NVIDIA Container Toolkit >= 1.18 para acceder a la 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 de configuración completo para exportar Ultralytics YOLO26 a ONNX, crear el repositorio de modelos de Triton e iniciar Triton Inference Server:

Nota

Usa la opción runtime del 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 con el modelo de Triton Server:

from ultralytics import YOLO

# Carga el modelo de Triton Server
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")

# Ejecuta la inferencia en el servidor
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 aprendizaje profundo de alto rendimiento creado específicamente para GPU NVIDIA que puede aumentar significativamente la velocidad de inferencia.

Estas son algunas ventajas principales de usar TensorRT con Triton:

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

El config.pbtxt anterior ya activa el acelerador TensorRT de Triton para el modelo ONNX. Si prefieres ejecutar TensorRT directamente con Ultralytics, exporta tu modelo Ultralytics YOLO26 al formato TensorRT:

from ultralytics import YOLO

# Carga el modelo YOLO26
model = YOLO("yolo26n.pt")

# Exporta el modelo al formato TensorRT
model.export(format="engine")  # crea 'yolo26n.engine'

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

Ya puedes desplegar y ejecutar modelos 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#

  • Para configurar Ultralytics YOLO26 con NVIDIA Triton Inference Server, sigue estos pasos clave:

    1. Exporta YOLO26 al formato ONNX:

      from ultralytics import YOLO
      
      # Cargar un modelo
      model = YOLO("yolo26n.pt")  # carga un modelo oficial
      
      # Exporta el modelo al formato ONNX
      onnx_file = model.export(format="onnx", dynamic=True)
    2. Configura el repositorio de modelos de Triton:

      from pathlib import Path
      
      # Define las rutas
      model_name = "yolo"
      triton_repo_path = Path("tmp") / "triton_repo"
      triton_model_path = triton_repo_path / model_name
      
      # Crea los directorios
      (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 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 Ultralytics YOLO26 a gran escala en Triton Inference Server para realizar inferencias de modelos de IA de alto rendimiento.

  • La integración de 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 cargar y descargar modelos dinámicamente, lo que ofrece una gran escalabilidad para diversas cargas de trabajo de IA.
    • Alto rendimiento: Triton Inference Server está optimizado para GPU NVIDIA y garantiza operaciones de inferencia de alta velocidad, ideales para aplicaciones en tiempo real como la detección de objetos.
    • Conjuntos y control de versiones de modelos: el modo de conjuntos de Triton permite combinar varios modelos para mejorar los resultados, y el control de versiones de modelos admite pruebas A/B y actualizaciones progresivas.
    • Agrupación automática por lotes: Triton agrupa automáticamente varias solicitudes de inferencia, lo que mejora considerablemente el rendimiento y reduce la latencia.
    • Despliegue simplificado: permite optimizar gradualmente los flujos de trabajo de IA sin tener que renovar por completo el sistema, lo que facilita un escalado eficiente.

    Para consultar 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 (Open Neural Network Exchange, intercambio abierto de redes neuronales) para tu modelo Ultralytics YOLO26 antes de desplegarlo en NVIDIA Triton Inference Server ofrece varias ventajas importantes:

    • Interoperabilidad: el formato ONNX permite transferir modelos entre distintos marcos de aprendizaje profundo (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 una inferencia más rápida y un mejor rendimiento.
    • Facilidad de despliegue: ONNX cuenta con una amplia compatibilidad entre marcos y plataformas, lo que simplifica el proceso de despliegue en distintos sistemas operativos y configuraciones de hardware.
    • Independencia del marco de trabajo: una vez convertido a ONNX, el modelo deja de depender de su marco original, por lo que es 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, utiliza:

    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. Una vez que hayas configurado el modelo en Triton Model Repository y el servidor esté en funcionamiento, puedes cargar el modelo y ejecutar inferencias de la siguiente manera:

    from ultralytics import YOLO
    
    # Carga el modelo de Triton Server
    model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
    
    # Ejecuta la inferencia en el servidor
    results = model("path/to/image.jpg")

    Este enfoque te permite aprovechar las optimizaciones de Triton y, al mismo tiempo, utilizar la conocida interfaz de Ultralytics YOLO.

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

    • Rendimiento en tiempo real: Optimizado para tareas de detección de objetos en tiempo real, Ultralytics YOLO26 ofrece una precisión y una 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 sin problemas con Triton Inference Server y admite diversos formatos de exportación (ONNX, TensorRT), lo que le aporta flexibilidad para distintos escenarios de despliegue.
    • Funciones avanzadas: El servicio a través de Triton añade la carga dinámica de modelos, el versionado de modelos y la inferencia en conjunto, funciones esenciales para despliegues 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 para el edge: Los modelos Ultralytics YOLO26 están diseñados teniendo en cuenta el despliegue en dispositivos 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