Optimización de la Inferencia OpenVINO para YOLO
Introducción
Al implementar modelos de aprendizaje profundo, en particular aquellos para la detección de objetos como los modelos Ultralytics YOLO, lograr un rendimiento óptimo es crucial. Esta guía profundiza en el aprovechamiento del kit de herramientas OpenVINO de Intel para optimizar la inferencia, centrándose en la latencia y el rendimiento. Ya sea que esté trabajando en aplicaciones de consumo o en implementaciones a gran escala, comprender y aplicar estas estrategias de optimización garantizará que sus modelos se ejecuten de manera eficiente en varios dispositivos.
Optimización para la latencia
La optimización de la latencia es vital para las aplicaciones que requieren una respuesta inmediata de un solo modelo dada una sola entrada, 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 cuando se ejecutan inferencias concurrentes o se gestionan múltiples 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 limitando a una inferencia a la vez por dispositivo. La concurrencia adicional a menudo conduce a una mayor latencia.
- Aprovechamiento de subdispositivos: Los dispositivos como las CPUs de varios sockets o las GPUs de múltiples mosaicos pueden ejecutar múltiples solicitudes con un aumento mínimo de la latencia al utilizar sus subdispositivos internos.
- Sugerencias de rendimiento de OpenVINO: Utilizando OpenVINO
ov::hint::PerformanceMode::LATENCY
para elov::hint::performance_mode
La propiedad durante la compilación del modelo simplifica el ajuste del rendimiento, ofreciendo un enfoque independiente del dispositivo y preparado para el futuro.
Gestión de la latencia de la primera inferencia:
- Caché de Modelos: Para mitigar los tiempos de carga y compilación de modelos que impactan en la latencia, utilice el caché de modelos siempre que sea posible. Para escenarios donde el almacenamiento en caché no es viable, las CPUs generalmente ofrecen los tiempos de carga de modelos más rápidos.
- Asignación vs. Lectura de Modelos: Para reducir los tiempos de carga, OpenVINO reemplazó la lectura del modelo con 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 AUTOMÁTICA de Dispositivo: Este modo comienza la inferencia en la CPU, cambiando a un acelerador una vez que está listo, reduciendo sin problemas la latencia de la primera inferencia.
Optimización para el rendimiento
La optimización del rendimiento es crucial para escenarios que atienden numerosas solicitudes de inferencia simultáneamente, maximizando la utilización de recursos sin sacrificar significativamente el rendimiento de cada solicitud individual.
Enfoques para la optimización del rendimiento:
-
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)
-
Batching y Streams explícitos: Un enfoque más granular que implica el batching explícito y el uso de streams para la optimización avanzada del rendimiento.
Diseñando aplicaciones orientadas al rendimiento:
Para maximizar el rendimiento, las aplicaciones deben:
- Procese las entradas en paralelo, aprovechando al máximo las capacidades del dispositivo.
- Descomponga el flujo de datos en solicitudes de inferencia concurrentes, programadas para su ejecución en paralelo.
- Utilice la API asíncrona con devoluciones de llamada para mantener la eficiencia y evitar la saturación del dispositivo.
Ejecución Multidispositivo:
El modo multidispositivo de OpenVINO simplifica el escalado del rendimiento al equilibrar automáticamente las solicitudes de inferencia entre dispositivos sin necesidad de gestión de dispositivos a nivel de aplicación.
Ganancias de rendimiento en el mundo real
La implementación de optimizaciones OpenVINO con modelos Ultralytics YOLO puede generar mejoras significativas en el rendimiento. Como se demuestra en los benchmarks, los usuarios pueden experimentar velocidades de inferencia hasta 3 veces más rápidas en las CPU de Intel, con aceleraciones aún mayores posibles en todo el espectro de hardware de Intel, incluidas las GPU integradas, las GPU dedicadas y las VPU.
Por ejemplo, al ejecutar modelos YOLOv8 en CPUs Intel Xeon, las versiones optimizadas para OpenVINO superan consistentemente a sus contrapartes de PyTorch en términos de tiempo de inferencia por imagen, sin comprometer la precisión.
Implementación Práctica
Para exportar y optimizar su modelo Ultralytics YOLO para OpenVINO, puede utilizar la funcionalidad de exportación:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
Después de exportar, puedes ejecutar la inferencia con el modelo optimizado:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)
Conclusión
La optimización de los modelos YOLO de Ultralytics para la latencia y el rendimiento con OpenVINO puede mejorar significativamente el rendimiento de su aplicación. Al aplicar cuidadosamente las estrategias descritas en esta guía, los desarrolladores pueden asegurarse de que sus modelos se ejecuten de manera eficiente, satisfaciendo las demandas de varios escenarios de implementación. Recuerde, la elección entre optimizar para la latencia o el rendimiento depende de las necesidades específicas de su aplicación y de las características del entorno de implementación.
Para obtener información técnica más detallada y las últimas actualizaciones, consulta la documentación de OpenVINO y el repositorio YOLO de Ultralytics. Estos recursos proporcionan guías detalladas, tutoriales y soporte de la comunidad para ayudarte a aprovechar al máximo tus modelos de aprendizaje profundo.
Asegurar que tus modelos alcancen un rendimiento óptimo no se trata solo de ajustar las configuraciones; se trata de comprender las necesidades de tu aplicación y tomar decisiones informadas. Ya sea que estés optimizando para respuestas en tiempo real o maximizando el rendimiento para el procesamiento a gran escala, la combinación de los modelos YOLO de Ultralytics y OpenVINO ofrece un potente conjunto de herramientas para que los desarrolladores implementen soluciones de IA de alto rendimiento.
Preguntas frecuentes
¿Cómo optimizo los modelos Ultralytics YOLO para baja latencia usando OpenVINO?
La optimización de los modelos YOLO de Ultralytics para una baja latencia implica varias estrategias clave:
- Inferencia única por dispositivo: Limite las inferencias a una a la vez por dispositivo para minimizar los retrasos.
- Aprovechamiento de subdispositivos: Utilice dispositivos como CPUs de varios sockets o GPUs de múltiples mosaicos que pueden manejar múltiples solicitudes con un aumento mínimo de la latencia.
- Sugerencias de rendimiento de OpenVINO: Utiliza OpenVINO
ov::hint::PerformanceMode::LATENCY
durante la compilación del modelo para una optimización simplificada e independiente del dispositivo.
Para obtener consejos más prácticos sobre cómo optimizar la latencia, consulta la sección de Optimización de la Latencia de nuestra guía.
¿Por qué debería usar OpenVINO para optimizar el rendimiento de Ultralytics YOLO?
OpenVINO mejora el rendimiento del modelo Ultralytics YOLO maximizando 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 y Streams explícitos: Ajuste fino para un rendimiento avanzado.
- Ejecución en múltiples dispositivos: Equilibrio automatizado de la carga de inferencia, 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)
Obtenga más información sobre la optimización del rendimiento en la sección de Optimización del rendimiento de nuestra guía detallada.
¿Cuál es la mejor práctica para reducir la latencia de la primera inferencia en OpenVINO?
Para reducir la latencia de la primera inferencia, considera estas prácticas:
- Caché de Modelos: Utilice el caché de modelos para disminuir los tiempos de carga y compilación.
- Asignación vs. Lectura de Modelos: Utiliza la asignación (
ov::enable_mmap(true)
) de forma predeterminada, pero cambie a la lectura (ov::enable_mmap(false)
) si el modelo está en una unidad extraíble o de red. - Selección AUTOMÁTICA de Dispositivo: Utilice el modo AUTO para comenzar con la inferencia de la CPU y la transición a un acelerador sin problemas.
Para obtener estrategias detalladas sobre cómo gestionar la latencia de la primera inferencia, consulta la sección Gestión de la latencia de la primera inferencia.
¿Cómo equilibro la optimización de la latencia y el rendimiento con Ultralytics YOLO y OpenVINO?
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 de consumo).
- Optimización del rendimiento: Lo mejor para escenarios con muchas inferencias concurrentes, maximizando el uso de recursos (por ejemplo, implementaciones a gran escala).
El uso de sugerencias de rendimiento de alto nivel y modos multi-dispositivo de OpenVINO puede ayudar a encontrar el equilibrio adecuado. Elige las sugerencias de rendimiento de OpenVINO adecuadas según tus requisitos específicos.
¿Puedo usar modelos Ultralytics YOLO con otros marcos de IA además de OpenVINO?
Sí, los modelos YOLO de Ultralytics son altamente versátiles y se pueden integrar con varios marcos de IA. Las opciones incluyen:
- TensorRT: Para la optimización de la GPU NVIDIA, siga la guía de integración de TensorRT.
- CoreML: Para dispositivos Apple, consulte nuestras instrucciones de exportación de CoreML.
- TensorFlow.js: Para aplicaciones web y Node.js, consulte la guía de conversión de TF.js.
Explore más integraciones en la página de integraciones de Ultralytics.