用于 YOLO 的 OpenVINO 推理优化#
简介#
部署深度学习模型时,尤其是部署 Ultralytics YOLO 这类用于目标检测的模型时,实现最佳性能至关重要。本指南将深入介绍如何利用Intel 的 OpenVINO 工具包优化推理,重点关注延迟和吞吐量。无论你是在开发消费级应用,还是进行大规模部署,理解并应用这些优化策略,都能确保模型在各种设备上高效运行。
延迟优化#
对于单个模型接收单个输入并要求立即响应的应用,延迟优化至关重要,这类场景在消费级应用中很常见。目标是尽量缩短输入与推理结果之间的延迟。不过,实现低延迟需要仔细权衡,尤其是在运行并发推理或管理多个模型时。
降低延迟的关键策略#
- 每台设备执行一次推理: 实现低延迟最简单的方法是将每台设备同时执行的推理限制为一次。额外的并发通常会导致延迟增加。
- 利用子设备: 多插槽 CPU 或多 Tile GPU 等设备可以利用内部子设备执行多个请求,同时将延迟增幅降至最低。
- OpenVINO 性能提示: 在模型编译期间,利用 OpenVINO 的
ov::LATENCY设置ov::performance_mode属性,可以简化性能调优,并提供与设备无关且面向未来的方案。
管理首次推理延迟#
- 模型缓存: 为减轻模型加载和编译时间对延迟的影响,应尽可能使用模型缓存。如果无法使用缓存,CPU 通常能提供最快的模型加载速度。
- 模型映射与读取: 为缩短加载时间,OpenVINO 用映射替代了模型读取。不过,如果模型位于可移动驱动器或网络驱动器上,可以考虑使用
ov::enable_mmap(false)切换回读取方式。 - AUTO 设备选择: 此模式会先在 CPU 上开始推理,待加速器就绪后再切换过去,从而平滑地降低首次推理延迟。
吞吐量优化#
对于需要同时处理大量推理请求的场景,吞吐量优化至关重要;它可以最大限度地提高资源利用率,同时不会显著牺牲单个请求的性能。
吞吐量优化方法#
-
OpenVINO 性能提示: 使用性能提示在不同设备上提升吞吐量,这是一种高级且面向未来的方法。
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) -
显式批处理和流: 通过显式批处理并使用流进行更精细的性能调优。
设计面向吞吐量的应用程序#
要最大限度地提高吞吐量,应用应:
- 并行处理输入,充分利用设备的能力。
- 将数据流拆分为并发推理请求,并安排并行执行。
- 使用带回调的异步 API 维持高效运行,避免设备空闲。
多设备执行#
OpenVINO 的多设备模式会自动在多个设备之间均衡分配推理请求,从而简化吞吐量扩展,无需在应用层管理设备。
实际性能提升#
使用 Ultralytics YOLO 模型实现 OpenVINO 优化可以带来显著的性能提升。正如基准测试中所展示的那样,用户在英特尔 CPU 上可以体验到最高快 3 倍的推理速度,在包括集成 GPU、独立 GPU 和 NPU 在内的英特尔硬件全系列上甚至可以实现更高的加速效果。
例如,在 Intel Xeon CPU 上运行 YOLO26 模型时,OpenVINO 优化版本在每张图像的推理时间方面始终优于 PyTorch 版本,同时不会影响准确率。
实际实现#
要导出并优化用于 OpenVINO 的 Ultralytics YOLO 模型,可以使用导出功能:
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导出后,你可以使用优化后的模型运行推理:
# 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)结论#
使用 OpenVINO 优化 Ultralytics YOLO 模型的延迟和吞吐量,可以显著提升应用性能。通过仔细应用本指南中介绍的策略,开发者可以确保模型高效运行,满足各种部署场景的需求。请记住,选择优化延迟还是吞吐量,取决于你的具体应用需求和部署环境的特征。
如需更详细的技术信息和最新更新,请参阅OpenVINO 文档和Ultralytics YOLO 代码仓库。这些资源提供深入的指南、教程和社区支持,帮助你充分发挥深度学习模型的性能。
确保模型实现最佳性能,不只是调整配置,还需要理解应用的需求并做出明智决策。无论你是在针对实时响应进行优化,还是要最大限度地提高大规模处理的吞吐量,Ultralytics YOLO 模型与 OpenVINO 的结合都能为开发者提供强大的工具包,用于部署高性能 AI 解决方案。
常见问题#
优化 Ultralytics YOLO 模型以实现低延迟,涉及以下几项关键策略:
- 每台设备执行一次推理: 将每台设备同时执行的推理限制为一次,以尽量减少延迟。
- 利用子设备: 利用多插槽 CPU 或多 Tile GPU 等设备,它们可以处理多个请求,同时将延迟增幅降至最低。
- OpenVINO 性能提示: 在模型编译期间使用 OpenVINO 的
ov::LATENCY,以简化与设备无关的调优。
如需了解更多实用的延迟优化技巧,请查看本指南的延迟优化部分。
OpenVINO 通过最大限度地提高设备资源利用率来提升 Ultralytics YOLO 模型的吞吐量,同时不牺牲性能。主要优势包括:
- 性能提示: 在不同设备上进行简单的高级性能调优。
- 显式批处理和流: 用于高级性能调优。
- 多设备执行: 自动均衡推理负载,减轻应用层管理负担。
配置示例:
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)如需进一步了解吞吐量优化,请查看详细指南中的吞吐量优化部分。
要降低首次推理延迟,可以考虑以下做法:
- 模型缓存: 使用模型缓存,缩短加载和编译时间。
- 模型映射与读取: 默认使用映射(
ov::enable_mmap(true)),但如果模型位于可移动驱动器或网络驱动器上,则切换为读取(ov::enable_mmap(false))。 - AUTO 设备选择: 使用 AUTO 模式先通过 CPU 推理,再平滑地切换到加速器。
如需了解管理首次推理延迟的详细策略,请参阅管理首次推理延迟部分。
平衡延迟和吞吐量优化,需要了解应用需求:
- 延迟优化: 适用于要求立即响应的实时应用(例如消费级应用)。
- 吞吐量优化: 适用于包含大量并发推理的场景,可最大限度地利用资源(例如大规模部署)。
使用 OpenVINO 的高级性能提示和多设备模式,有助于实现适当的平衡。根据你的具体需求选择合适的OpenVINO 性能提示。
可以,Ultralytics YOLO 模型具有很强的通用性,可以与各种 AI 框架集成。可选方案包括:
- TensorRT: 用于 NVIDIA GPU 优化,请参阅TensorRT 集成指南。
- CoreML: 用于 Apple 设备,请参阅我们的CoreML 导出说明。
- LiteRT.js: 用于 Web 和 Node.js 应用,请参阅LiteRT 集成指南和LiteRT.js Web 运行时。
在Ultralytics 集成页面上探索更多集成方案。