OpenVINO Optimización de la inferencia para modelos Ultralytics YOLO : Una guía completa
Introducción
Cuando se despliegan modelos de aprendizaje profundo, en particular los de detección de objetos como los modelosYOLO Ultralytics , es crucial lograr un rendimiento óptimo. Esta guía profundiza en el aprovechamiento del kit de herramientas OpenVINO deIntel para optimizar la inferencia, centrándose en la latencia y el rendimiento. Ya sea que esté trabajando en aplicaciones para consumidores o en implementaciones a gran escala, comprender y aplicar estas estrategias de optimización garantizará que sus modelos se ejecuten eficientemente en diversos dispositivos.
Optimización de la latencia
La optimización de la latencia es vital para las aplicaciones que requieren una respuesta inmediata de un único modelo dada una única entrada, algo típico en los escenarios de consumo. El objetivo es minimizar el retraso entre la entrada y el resultado de la inferencia. Sin embargo, para conseguir una latencia baja hay que tener mucho cuidado, sobre todo cuando se realizan inferencias simultáneas o se gestionan varios modelos.
Estrategias clave para optimizar la latencia:
- Una única inferencia por dispositivo: La forma más sencilla de lograr una baja latencia es limitarse a una inferencia a la vez por dispositivo. La concurrencia adicional suele aumentar la latencia.
- Aprovechamiento de subdispositivos: Dispositivos como CPUs multi-socket o GPUs multi-tile pueden ejecutar múltiples peticiones con un mínimo incremento de latencia utilizando sus sub-dispositivos internos.
- OpenVINO Consejos de rendimiento: Utilizando OpenVINO's
ov::hint::PerformanceMode::LATENCY
para laov::hint::performance_mode
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:
- Almacenamiento en caché de modelos: Para mitigar los tiempos de carga y compilación de modelos que afectan a la latencia, utilice el almacenamiento en caché de modelos siempre que sea posible. En los casos en los que el almacenamiento en caché no es viable, las CPU suelen ofrecer los tiempos de carga de modelos más rápidos.
- Mapeo de modelos frente a lectura: Para reducir los tiempos de carga, OpenVINO ha sustituido la lectura de modelos por el mapeo. Sin embargo, si el modelo se encuentra en una unidad extraíble o de red, considere la posibilidad de utilizar
ov::enable_mmap(false)
para volver a la lectura. - Selección automática de dispositivos: Este modo comienza la inferencia en CPU, cambiando a un acelerador una vez que está listo, reduciendo sin problemas la latencia de la primera inferencia.
Optimización del rendimiento
La optimización del rendimiento es crucial para los escenarios que atienden numerosas solicitudes de inferencia simultáneamente, maximizando la utilización de los recursos sin sacrificar significativamente el rendimiento de las solicitudes individuales.
Enfoques para la optimización del rendimiento:
-
OpenVINO Sugerencias de rendimiento: Un método de alto nivel y a prueba de futuro para mejorar el rendimiento entre dispositivos mediante sugerencias de rendimiento.
-
Batching explícito y flujos: Un enfoque más granular que implica la dosificación explícita y el uso de flujos para el ajuste avanzado del rendimiento.
Diseño de aplicaciones orientadas al rendimiento:
Para maximizar el rendimiento, las aplicaciones deben:
- Procesa las 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.
- Utiliza la API Async con callbacks para mantener la eficiencia y evitar la inanición del dispositivo.
Ejecución multidispositivo:
OpenVINOsimplifica el escalado del rendimiento equilibrando automáticamente las solicitudes de inferencia entre dispositivos sin necesidad de gestionar los dispositivos a nivel de aplicación.
Aumento del rendimiento en el mundo real
La implementación de las optimizaciones OpenVINO con los modelosYOLO Ultralytics puede producir mejoras significativas en el rendimiento. Como demuestran los análisis comparativos, los usuarios pueden experimentar velocidades de inferencia hasta tres veces más rápidas en las CPU Intel Intel, con aceleraciones aún mayores posibles en todo el espectro de hardware Intel, incluidas las GPU integradas, las GPU dedicadas y las VPU.
Por ejemplo, al ejecutar modelos YOLOv8 en CPU Intel Xeon, las versiones OpenVINO superan sistemáticamente a sus homólogas PyTorch en términos de tiempo de inferencia por imagen, sin comprometer la precisión.
Aplicació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, puede 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 Ultralytics YOLO para la latencia y el rendimiento con OpenVINO puede mejorar significativamente el rendimiento de su aplicación. Mediante la aplicación cuidadosa de las estrategias descritas en esta guía, los desarrolladores pueden garantizar que sus modelos se ejecuten de manera eficiente, satisfaciendo las demandas de diversos escenarios de despliegue. Recuerde que la elección entre optimizar la latencia o el rendimiento depende de las necesidades específicas de su aplicación y de las características del entorno de despliegue.
Para obtener información técnica más detallada y las últimas actualizaciones, consulte la documentación deOpenVINO y el repositorioUltralytics YOLO . Estos recursos ofrecen guías detalladas, tutoriales y apoyo de la comunidad para ayudarle a sacar el máximo partido de sus modelos de aprendizaje profundo.
Garantizar que sus modelos alcancen un rendimiento óptimo no consiste únicamente en ajustar las configuraciones; se trata de comprender las necesidades de su aplicación y tomar decisiones informadas. Tanto si optimiza las respuestas en tiempo real como si maximiza el rendimiento del procesamiento a gran escala, la combinación de los modelos Ultralytics YOLO y OpenVINO ofrece un potente conjunto de herramientas para que los desarrolladores implementen soluciones de IA de alto rendimiento.
PREGUNTAS FRECUENTES
¿Cómo se optimizan los modelos Ultralytics YOLO para una baja latencia utilizando OpenVINO?
La optimización de los modelos Ultralytics YOLO para una baja latencia implica varias estrategias clave:
- Una única inferencia por dispositivo: Limita las inferencias a una cada vez por dispositivo para minimizar los retrasos.
- Aprovechamiento de subdispositivos: Utilizar dispositivos como CPUs multi-socket o GPUs multi-tile que puedan manejar múltiples peticiones con un mínimo incremento de latencia.
- OpenVINO Consejos de rendimiento: Utilice OpenVINO's
ov::hint::PerformanceMode::LATENCY
durante la compilación del modelo para un ajuste simplificado e independiente del dispositivo.
Para obtener más consejos prácticos sobre la optimización de la latencia, consulte la sección Optimización de la latencia de nuestra guía.
¿Por qué debería utilizar 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. Las principales ventajas son:
- Sugerencias de rendimiento: Ajuste sencillo y de alto nivel del rendimiento en todos los dispositivos.
- Batching explícito y flujos: Ajuste fino para un rendimiento avanzado.
- Ejecución multidispositivo: 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 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, tenga en cuenta estas prácticas:
- Almacenamiento en caché de modelos: Utilice el almacenamiento en caché de modelos para reducir los tiempos de carga y compilación.
- Mapeo de modelos frente a lectura: Utilice la asignación (
ov::enable_mmap(true)
) por defecto, pero cambia a lectura (ov::enable_mmap(false)
) si el modelo está en una unidad extraíble o de red. - Selección AUTO de dispositivos: Utilice el modo AUTO para empezar con la inferencia CPU y pasar a un acelerador sin problemas.
Para conocer estrategias detalladas sobre la gestión de la latencia de primera inferencia, consulte la sección Gestión de la latencia de primera inferencia.
¿Cómo puedo equilibrar 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 su aplicación:
- Optimización de la latencia: Ideal para aplicaciones en tiempo real que requieren respuestas inmediatas (por ejemplo, apps de consumo).
- Optimización del rendimiento: Lo mejor para escenarios con muchas inferencias concurrentes, maximizando el uso de recursos (por ejemplo, despliegues a gran escala).
El uso de las sugerencias de alto rendimiento y los modos multidispositivo de OpenVINO puede ayudarle a encontrar el equilibrio adecuado. Elija las sugerencias de rendimiento adecuadas de OpenVINO en función de sus necesidades específicas.
¿Puedo utilizar los modelos de Ultralytics YOLO con otros marcos de IA además de OpenVINO?
Sí, los modelos de Ultralytics YOLO son muy versátiles y pueden integrarse con diversos marcos de IA. Las opciones incluyen:
- TensorRT: Para la optimización de NVIDIA GPU , siga la guía de integraciónTensorRT .
- CoreML: Para dispositivos Apple, consulta nuestras instrucciones de exportación enCoreML .
- TensorFlow.js: Para aplicaciones web y Node.js, consulte la guía de conversiónTF.js.
Explore más integraciones en la páginaUltralytics Integrations.