Ultralytics YOLO27:

Optimización de la inferencia de OpenVINO para YOLO#

OpenVINO Ecosystem

Introducción#

Al implementar modelos de aprendizaje profundo, especialmente modelos de detección de objetos como los modelos YOLO de Ultralytics, es fundamental conseguir un rendimiento óptimo. En esta guía se explica cómo aprovechar el kit de herramientas OpenVINO de Intel para optimizar la inferencia, centrándose en la latencia y el rendimiento. Tanto si trabajas en aplicaciones para consumidores como en implementaciones a gran escala, comprender y aplicar estas estrategias de optimización garantizará que tus modelos funcionen de forma eficiente en distintos dispositivos.

Optimización de la latencia#

Optimizar la latencia es fundamental para las aplicaciones que requieren una respuesta inmediata de un único modelo a partir de una única entrada, algo habitual en los escenarios de consumo. El objetivo es minimizar el retraso entre la entrada y el resultado de la inferencia. Sin embargo, conseguir una latencia baja requiere tener en cuenta varios aspectos, especialmente al ejecutar inferencias simultáneas o gestionar varios modelos.

Estrategias clave para la optimización de la latencia#

  • Una sola inferencia por dispositivo: La forma más sencilla de conseguir una latencia baja es limitar el dispositivo a una sola inferencia cada vez. Una concurrencia adicional suele aumentar la latencia.
  • Aprovechamiento de subdispositivos: Los dispositivos como las CPU con varios sockets o las GPU con varios tiles pueden ejecutar varias solicitudes con un aumento mínimo de la latencia al utilizar sus subdispositivos internos.
  • Sugerencias de rendimiento de OpenVINO: Utilizar ov::LATENCY de OpenVINO para la propiedad ov::performance_mode durante la compilación del modelo simplifica el ajuste del rendimiento y ofrece un enfoque independiente del dispositivo y preparado para el futuro.

Gestión de la latencia de la primera inferencia#

  • Almacenamiento en caché del modelo: Para mitigar el impacto de los tiempos de carga y compilación del modelo en la latencia, utiliza la caché del modelo siempre que sea posible. En los casos en que no sea viable usarla, las CPU suelen ofrecer los tiempos de carga del modelo más rápidos.
  • Mapeo del modelo frente a lectura: Para reducir los tiempos de carga, OpenVINO sustituyó la lectura del modelo por el mapeo. Sin embargo, si el modelo se encuentra en una unidad extraíble o de red, considera utilizar ov::enable_mmap(false) para volver a la lectura.
  • Selección automática del dispositivo: Este modo inicia la inferencia en la CPU y cambia a un acelerador cuando está listo, reduciendo de forma fluida la latencia de la primera inferencia.

Optimización del rendimiento#

Optimizar el rendimiento es fundamental en escenarios que atienden numerosas solicitudes de inferencia simultáneamente, maximizando la utilización de los recursos sin sacrificar significativamente el rendimiento de cada solicitud.

Enfoques para la optimización del rendimiento#

  1. Sugerencias de rendimiento de OpenVINO: Un método de alto nivel y preparado para el futuro que mejora el rendimiento en distintos dispositivos mediante sugerencias de rendimiento.

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)
  2. Agrupación explícita y flujos: Un enfoque más granular que implica utilizar agrupación explícita y flujos para realizar un ajuste avanzado del rendimiento.

Diseño de aplicaciones orientadas al rendimiento#

Para maximizar el rendimiento, las aplicaciones deben:

  • Procesar las entradas en paralelo, aprovechando al máximo las capacidades del dispositivo.
  • Descomponer el flujo de datos en solicitudes de inferencia simultáneas, programadas para ejecutarse en paralelo.
  • Utilizar la API asíncrona con callbacks para mantener la eficiencia y evitar que el dispositivo quede infrautilizado.

Ejecución en múltiples dispositivos#

El modo multidispositivo de OpenVINO simplifica el escalado del rendimiento al equilibrar automáticamente las solicitudes de inferencia entre dispositivos, sin necesidad de gestionar los dispositivos desde la aplicación.

Mejoras de rendimiento en situaciones reales#

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

Por ejemplo, al ejecutar modelos YOLO26 en CPU Intel Xeon, las versiones optimizadas para OpenVINO superan sistemáticamente a sus equivalentes de PyTorch en cuanto al tiempo de inferencia por imagen, sin comprometer la precisión.

Implementación práctica#

Para exportar y optimizar tu modelo YOLO de Ultralytics para OpenVINO, puedes utilizar la funcionalidad de exportación:

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 exportarlo, 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 YOLO de Ultralytics para la latencia y el 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 funcionen de forma eficiente y satisfagan las exigencias de diversos escenarios de implementación. Recuerda que la elección entre optimizar la latencia o el rendimiento depende de las necesidades específicas de tu aplicación y de las características del entorno de implementación.

Para obtener información técnica más detallada y las últimas novedades, consulta la documentación de OpenVINO y el repositorio de Ultralytics YOLO. Estos recursos ofrecen guías detalladas, tutoriales y asistencia de la comunidad para ayudarte a sacar el máximo partido de tus modelos de aprendizaje profundo.

Garantizar que tus modelos alcancen un rendimiento óptimo no consiste únicamente en ajustar configuraciones; también implica comprender las necesidades de tu aplicación y tomar decisiones fundamentadas. Tanto si optimizas las respuestas en tiempo real como si maximizas el rendimiento para el procesamiento a gran escala, la combinación de los modelos YOLO de Ultralytics y OpenVINO ofrece a los desarrolladores un potente conjunto de herramientas para implementar soluciones de IA de alto rendimiento.

Preguntas frecuentes#

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

    1. Una sola inferencia por dispositivo: Limita las inferencias a una cada vez por dispositivo para minimizar los retrasos.
    2. Aprovechamiento de subdispositivos: Utiliza dispositivos como CPU con varios sockets o GPU con varios tiles, que pueden gestionar varias solicitudes con un aumento mínimo de la latencia.
    3. Sugerencias de rendimiento de OpenVINO: Utiliza ov::LATENCY de OpenVINO durante la compilación del modelo para simplificar el ajuste independiente del dispositivo.

    Para obtener más consejos prácticos sobre la optimización de la latencia, consulta la sección Optimización de la latencia de nuestra guía.

  • OpenVINO mejora el rendimiento de los modelos YOLO de Ultralytics al maximizar la utilización de los recursos del dispositivo sin sacrificar el rendimiento. Entre sus principales ventajas se incluyen:

    • Sugerencias de rendimiento: Ajuste del rendimiento sencillo y de alto nivel en distintos dispositivos.
    • Agrupación explícita y flujos: Ajuste preciso para obtener un rendimiento avanzado.
    • Ejecución en varios dispositivos: Equilibrio automatizado de la carga de inferencia que facilita la gestión desde la aplicación.

    Configuración de ejemplo:

    import openvino as ov
    import openvino.properties.hint as hints
    
    core = ov.Core()
    model = core.read_model("yolo26n_openvino_model/yolo26n.xml")
    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 sección Optimización del rendimiento de nuestra guía detallada.

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

    1. Almacenamiento en caché del modelo: Utiliza la caché del modelo para reducir los tiempos de carga y compilación.
    2. Mapeo del modelo frente a lectura: Utiliza el mapeo (ov::enable_mmap(true)) de forma predeterminada, 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 automática del dispositivo: Utiliza el modo AUTO para iniciar la inferencia en la CPU y cambiar a un acelerador de forma fluida.

    Para consultar estrategias detalladas sobre la gestión de la latencia de la primera inferencia, consulta la sección Gestión de la latencia de la primera inferencia.

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

    • Optimización de la latencia: Ideal para aplicaciones en tiempo real que requieren respuestas inmediatas (por ejemplo, aplicaciones para consumidores).
    • Optimización del rendimiento: La mejor opción para escenarios con muchas inferencias simultáneas, ya que maximiza el uso de los recursos (por ejemplo, implementaciones a gran escala).

    Utilizar las sugerencias de rendimiento de alto nivel y los modos multidispositivo de OpenVINO puede ayudarte a encontrar el equilibrio adecuado. Elige las sugerencias de rendimiento de OpenVINO apropiadas según tus requisitos específicos.

  • Sí, los modelos YOLO de Ultralytics son muy versátiles y pueden integrarse con diversos frameworks de IA. Entre las opciones se incluyen:

    Explora más integraciones en la página de integraciones de Ultralytics.

Comentarios