优化Ultralytics YOLO模型的OpenVINO推理:综合指南
引言
在部署深度学习模型时,特别是像Ultralytics YOLO这样的目标检测模型,实现最佳性能至关重要。本指南深入探讨如何利用英特尔的OpenVINO工具包优化推理,重点关注延迟和吞吐量。无论您是在开发消费级应用还是大规模部署,理解和应用这些优化策略将确保您的模型在各种设备上高效运行。
优化延迟
延迟优化对于需要单个模型对单个输入立即响应的应用至关重要,这在消费场景中很常见。目标是尽量减少输入和推理结果之间的延迟。然而,实现低延迟需要仔细考虑,尤其是在运行并发推理或管理多个模型时。
延迟优化的关键策略:
- 单设备单推理: 实现低延迟的最简单方法是限制每个设备一次只进行一次推理。额外的并发通常会导致延迟增加。
- 利用子设备: 像多插槽CPU或多Tile GPU这样的设备可以通过利用其内部子设备来执行多个请求,而不会显著增加延迟。
- OpenVINO性能提示: 在模型编译期间使用OpenVINO的
ov::hint::PerformanceMode::LATENCY
作为ov::hint::performance_mode
属性,简化了性能调优,提供了一种与设备无关且面向未来的方法。
管理首次推理延迟:
- 模型缓存: 为了减轻模型加载和编译时间对延迟的影响,尽可能使用模型缓存。在无法缓存的情况下,CPU通常提供最快的模型加载时间。
- 模型映射与读取: 为了减少加载时间,OpenVINO用映射取代了模型读取。然而,如果模型位于可移动或网络驱动器上,考虑使用
ov::enable_mmap(false)
切换回读取。 - AUTO设备选择: 此模式在CPU上开始推理,一旦准备好就切换到加速器,无缝减少首次推理延迟。
优化吞吐量
吞吐量优化对于同时处理大量推理请求的场景至关重要,最大限度地利用资源而不显著牺牲单个请求的性能。
吞吐量优化的方法:
-
OpenVINO性能提示: 一种高级的、面向未来的方法,通过性能提示在设备间提升吞吐量。
-
显式批处理和流: 一种更细粒度的方法,涉及显式批处理和使用流进行高级性能调优。
设计面向吞吐量的应用:
为了最大化吞吐量,应用应:
- 并行处理输入,充分利用设备的性能。
- 将数据流分解为并发推理请求,安排并行执行。
- 使用带有回调的异步API以保持效率并避免设备饥饿。
多设备执行:
OpenVINO的多设备模式通过自动平衡跨设备的推理请求,简化了吞吐量的扩展,而无需应用级别的设备管理。
结论
使用OpenVINO优化Ultralytics YOLO模型的延迟和吞吐量可以显著提升应用性能。通过仔细应用本指南中概述的策略,开发者可以确保其模型高效运行,满足各种部署场景的需求。请记住,优化延迟或吞吐量的选择取决于您的具体应用需求和部署环境的特点。
如需更多详细技术信息和最新更新,请参阅OpenVINO文档和Ultralytics YOLO仓库。这些资源提供了深入的指南、教程和社区支持,帮助您充分利用深度学习模型。
确保您的模型达到最佳性能不仅仅是调整配置的问题;而是要了解应用程序的需求并做出明智的决策。无论您是优化实时响应还是最大化大规模处理的吞吐量,Ultralytics YOLO 模型与 OpenVINO 的结合都为开发者提供了一个强大的工具包,用于部署高性能的 AI 解决方案。
常见问题
如何使用 OpenVINO 优化 Ultralytics YOLO 模型的低延迟?
优化 Ultralytics YOLO 模型的低延迟涉及几个关键策略:
- 单设备单次推理: 限制每个设备一次只进行一次推理,以最小化延迟。
- 利用子设备: 使用多插槽 CPU 或多 tile GPU 等设备,这些设备可以处理多个请求,同时最小化延迟增加。
- OpenVINO 性能提示: 在模型编译期间使用 OpenVINO 的
ov::hint::PerformanceMode::LATENCY
进行简化、与设备无关的调优。
有关优化延迟的更多实用技巧,请查看我们的指南中的延迟优化部分。
为什么我应该使用 OpenVINO 来优化 Ultralytics YOLO 的吞吐量?
OpenVINO 通过最大化设备资源利用率而不牺牲性能,增强了 Ultralytics YOLO 模型的吞吐量。主要好处包括:
- 性能提示: 简单、跨设备的高级性能调优。
- 显式批处理和流: 高级性能的精细调优。
- 多设备执行: 自动推理负载均衡,简化应用程序级别的管理。
示例配置:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
了解更多关于吞吐量优化的信息,请参阅我们详细指南中的吞吐量优化部分。
在 OpenVINO 中减少首次推理延迟的最佳实践是什么?
要减少首次推理延迟,请考虑以下实践:
- 模型缓存: 使用模型缓存来减少加载和编译时间。
- 模型映射与读取: 默认使用映射(
ov::enable_mmap(true)
),但如果模型位于可移动或网络驱动器上,则切换到读取(ov::enable_mmap(false)
)。 - AUTO 设备选择: 使用 AUTO 模式以 CPU 推理开始,并无缝过渡到加速器。
有关管理首次推理延迟的详细策略,请参阅管理首次推理延迟部分。
如何在使用 Ultralytics YOLO 和 OpenVINO 时平衡延迟和吞吐量的优化?
平衡延迟和吞吐量优化需要了解您的应用程序需求:
- 延迟优化: 适用于需要即时响应的实时应用程序(例如,消费级应用)。
- 吞吐量优化: 适用于有许多并发推理的场景,最大化资源利用(例如,大规模部署)。
使用 OpenVINO 的高级性能提示和多设备模式可以帮助找到正确的平衡。根据您的具体需求选择适当的 OpenVINO 性能提示。
除了 OpenVINO,我还可以将 Ultralytics YOLO 模型与其他 AI 框架一起使用吗?
是的,Ultralytics YOLO 模型非常灵活,可以与各种 AI 框架集成。选项包括:
- TensorRT: 对于 NVIDIA GPU 优化,请遵循 TensorRT 集成指南。
- CoreML: 对于 Apple 设备,请参阅我们的 CoreML 导出说明。
- TensorFlow.js: 对于 Web 和 Node.js 应用程序,请参阅 TF.js 转换指南。
在 Ultralytics 集成页面 上探索更多集成。