YOLO Vision 2026:

Optimización de inferencia con OpenVINO para YOLO#

OpenVINO Ecosystem

Introducción#

Al desplegar modelos de deep learning, en particular aquellos para object detection como los modelos Ultralytics YOLO, lograr un rendimiento óptimo es fundamental. Esta guía profundiza en el uso de Intel's OpenVINO toolkit para optimizar la inferencia, centrándose en la latencia y el rendimiento. Ya sea que trabajes en aplicaciones de consumo o en despliegues a gran escala, comprender y aplicar estas estrategias de optimización garantizará que tus modelos se ejecuten de manera eficiente en varios dispositivos.

Optimización para latencia#

La optimización de la latencia es vital para aplicaciones que requieren una respuesta inmediata de un solo modelo ante una entrada única, algo típico en escenarios de consumo. El objetivo es minimizar el retraso entre la entrada y el resultado de la inferencia. Sin embargo, lograr una baja latencia implica una consideración cuidadosa, especialmente al ejecutar inferencias simultáneas o gestionar varios modelos.

Estrategias clave para la optimización de la latencia:#

  • Inferencia única por dispositivo: La forma más sencilla de lograr una baja latencia es limitarte a una inferencia a la vez por dispositivo. La concurrencia adicional a menudo conduce a un aumento de la latencia.
  • Aprovechamiento de sub-dispositivos: Los dispositivos como las CPU de varios zócalos o las GPU de varios tiles pueden ejecutar múltiples solicitudes con un aumento mínimo de la latencia utilizando sus sub-dispositivos internos.
  • OpenVINO Performance Hints: Utilizar ov::LATENCY de OpenVINO para la propiedad ov::performance_mode durante la compilación del modelo simplifica el ajuste del rendimiento, ofreciendo un enfoque agnóstico del dispositivo y preparado para el futuro.

Gestión de la latencia de primera inferencia:#

  • Almacenamiento en caché del modelo: Para mitigar que los tiempos de carga y compilación del modelo afecten a la latencia, utiliza el almacenamiento en caché del modelo siempre que sea posible. Para escenarios donde el almacenamiento en caché no sea viable, las CPU generalmente ofrecen los tiempos de carga de modelo más rápidos.
  • Model Mapping vs. Reading: Para reducir los tiempos de carga, OpenVINO reemplazó la lectura del modelo por el mapeo. Sin embargo, si el modelo está en una unidad extraíble o de red, considera usar ov::enable_mmap(false) para volver a la lectura.
  • Selección de dispositivo AUTO: Este modo comienza la inferencia en la CPU y cambia a un acelerador una vez que esté listo, reduciendo sin problemas la latencia de la primera inferencia.

Optimización para rendimiento (throughput)#

La optimización del rendimiento es crucial para escenarios que atienden numerosas solicitudes de inferencia simultáneamente, maximizando la resource utilization sin sacrificar significativamente el rendimiento de las solicitudes individuales.

Enfoques para la optimización del rendimiento:#

  1. Sugerencias de rendimiento de OpenVINO: Un método de alto nivel y preparado para el futuro para mejorar el rendimiento en todos los dispositivos utilizando sugerencias de rendimiento.

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. Batching explícito y flujos: Un enfoque más granular que involucra el procesamiento por lotes (batching) explícito y el uso de flujos (streams) para un ajuste de rendimiento avanzado.

Diseño de aplicaciones orientadas al rendimiento:#

Para maximizar el rendimiento, las aplicaciones deben:

  • Procesar entradas en paralelo, aprovechando al máximo las capacidades del dispositivo.
  • Descomponer el flujo de datos en solicitudes de inferencia concurrentes, programadas para su ejecución en paralelo.
  • Utilizar la API asíncrona (Async API) con retrollamadas para mantener la eficiencia y evitar el hambre de recursos del dispositivo.

Ejecución en múltiples dispositivos:#

El modo de dispositivo múltiple de OpenVINO simplifica el escalado del rendimiento al equilibrar automáticamente las solicitudes de inferencia entre dispositivos sin necesidad de gestionar los dispositivos a nivel de aplicación.

Ganancias de rendimiento en el mundo real#

Implementar las optimizaciones de OpenVINO con los modelos Ultralytics YOLO puede generar mejoras significativas en el rendimiento. Como se demuestra en las benchmarks, los usuarios pueden experimentar velocidades de inferencia hasta 3 veces más rápidas en CPUs Intel, con aceleraciones aún mayores en todo el espectro de hardware de Intel, incluyendo GPUs integradas, GPUs dedicadas y VPUs.

Por ejemplo, al ejecutar modelos YOLO26 en CPUs Intel Xeon, las versiones optimizadas con OpenVINO superan constantemente a sus homólogos de PyTorch en términos de tiempo de inferencia por imagen, sin comprometer la accuracy.

Implementación práctica#

Para exportar y optimizar tu modelo Ultralytics YOLO para OpenVINO, puedes usar la funcionalidad de export:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Export the model to OpenVINO format
model.export(format="openvino", quantize=16)  # Export with FP16 precision

Después de exportar, puedes ejecutar la inferencia con el modelo optimizado:

# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")

# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)

Conclusión#

Optimizar los modelos Ultralytics YOLO para latencia y rendimiento con OpenVINO puede mejorar significativamente el rendimiento de tu aplicación. Al aplicar cuidadosamente las estrategias descritas en esta guía, los desarrolladores pueden garantizar que sus modelos se ejecuten de manera eficiente, satisfaciendo las demandas de varios escenarios de despliegue. Recuerda, la elección entre optimizar para latencia o rendimiento depende de las necesidades específicas de tu aplicación y de las características del entorno de despliegue.

Para obtener información técnica más detallada y las últimas actualizaciones, consulta la OpenVINO documentation y el Ultralytics YOLO repository. Estos recursos proporcionan guías detalladas, tutoriales y soporte de la comunidad para ayudarte a aprovechar al máximo tus modelos de deep learning.


Garantizar que tus modelos alcancen un rendimiento óptimo no se trata solo de ajustar configuraciones; se trata de comprender las necesidades de tu aplicación y tomar decisiones informadas. Ya sea que estés optimizando para real-time responses o maximizando el rendimiento para el procesamiento a gran escala, la combinación de los modelos Ultralytics YOLO y OpenVINO ofrece un conjunto de herramientas potente para que los desarrolladores desplieguen soluciones de IA de alto rendimiento.

FAQ#

  • Optimizar los modelos Ultralytics YOLO para baja latencia implica varias estrategias clave:

    1. Inferencia única por dispositivo: Limita las inferencias a una a la vez por dispositivo para minimizar los retrasos.
    2. Aprovechamiento de sub-dispositivos: Utiliza dispositivos como CPU de varios zócalos o GPU de varios tiles que pueden manejar múltiples solicitudes con un aumento mínimo de la latencia.
    3. OpenVINO Performance Hints: Utiliza ov::LATENCY de OpenVINO durante la compilación del modelo para un ajuste simplificado y agnóstico del dispositivo.

    Para obtener consejos más prácticos sobre cómo optimizar la latencia, consulta la Latency Optimization section de nuestra guía.

  • OpenVINO mejora el rendimiento de los modelos Ultralytics YOLO al maximizar la utilización de los recursos del dispositivo sin sacrificar el rendimiento. Los beneficios clave incluyen:

    • Sugerencias de rendimiento: Ajuste de rendimiento sencillo y de alto nivel en todos los dispositivos.
    • Batching explícito y flujos: Ajuste preciso para un rendimiento avanzado.
    • Ejecución en múltiples dispositivos: Equilibrio de carga de inferencia automatizado, lo que facilita la gestión a nivel de aplicación.

    Ejemplo de configuración:

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)

    Obtén más información sobre la optimización del rendimiento en la Throughput Optimization section de nuestra guía detallada.

  • Para reducir la latencia de la primera inferencia, considera estas prácticas:

    1. Almacenamiento en caché del modelo: Usa el almacenamiento en caché del modelo para disminuir los tiempos de carga y compilación.
    2. Model Mapping vs. Reading: Utiliza el mapeo (ov::enable_mmap(true)) por defecto, pero cambia a la lectura (ov::enable_mmap(false)) si el modelo se encuentra en una unidad extraíble o de red.
    3. Selección de dispositivo AUTO: Utiliza el modo AUTO para comenzar con la inferencia de la CPU y realizar la transición a un acelerador sin problemas.

    Para obtener estrategias detalladas sobre la gestión de la latencia de la primera inferencia, consulta la Managing First-Inference Latency section.

  • Equilibrar la optimización de la latencia y el rendimiento requiere entender las necesidades de tu aplicación:

    • Optimización de latencia: Ideal para aplicaciones en tiempo real que requieren respuestas inmediatas (p. ej., aplicaciones de grado de consumo).
    • Optimización de rendimiento: Mejor para escenarios con muchas inferencias concurrentes, maximizando el uso de recursos (p. ej., despliegues a gran escala).

    El uso de las pistas de rendimiento de alto nivel y los modos multidispositivo de OpenVINO puede ayudar a lograr el equilibrio adecuado. Elige las OpenVINO performance hints adecuadas según tus requisitos específicos.

  • Sí, los modelos Ultralytics YOLO son altamente versátiles y se pueden integrar con varios frameworks de IA. Las opciones incluyen:

    Explora más integraciones en la Ultralytics Integrations page.

Comentarios