Link to this section针对 YOLO 的 OpenVINO 推理优化#
Link to this section简介#
在部署深度学习模型(特别是像 Ultralytics YOLO 模型这类目标检测模型)时,实现最佳性能至关重要。本指南深入探讨了如何利用 Intel 的 OpenVINO 工具包来优化推理,重点关注延迟和吞吐量。无论你是在开发消费级应用程序还是进行大规模部署,理解并应用这些优化策略都将确保你的模型在各类设备上高效运行。
Link to this section延迟优化#
对于需要在单次输入下实现即时响应的应用程序(这是消费类场景中的典型需求),延迟优化至关重要。其目标是将输入到推理结果之间的延迟降至最低。然而,实现低延迟需要仔细考量,尤其是在执行并发推理或管理多个模型时。
Link to this section延迟优化的关键策略:#
- 每设备单次推理: 实现低延迟最简单的方法是限制每个设备一次只进行一次推理。额外的并发通常会导致延迟增加。
- 利用子设备: 像多插槽 CPU 或多片(multi-tile)GPU 这类设备,可以通过利用其内部子设备,在延迟增加极小的情况下执行多个请求。
- OpenVINO 性能提示: 在模型编译期间将 OpenVINO 的
ov::LATENCY用于ov::performance_mode属性,可以简化性能调优,并提供一种与设备无关且面向未来的方法。
Link to this section管理首次推理延迟:#
- 模型缓存: 为减轻模型加载和编译时间对延迟的影响,请尽可能使用模型缓存。对于无法缓存的场景,CPU 通常能提供最快的模型加载时间。
- 模型映射与读取: 为缩短加载时间,OpenVINO 已用映射取代了模型读取。但如果模型位于可移动驱动器或网络驱动器上,请考虑使用
ov::enable_mmap(false)切回读取模式。 - AUTO 设备选择: 该模式会从 CPU 开始推理,并在准备就绪后无缝切换到加速器,从而有效降低首次推理的延迟。
Link to this section吞吐量优化#
吞吐量优化对于同时处理大量推理请求的场景至关重要,它能在不显著牺牲单个请求性能的前提下,最大化资源利用率。
Link to this section吞吐量优化的方法:#
-
OpenVINO 性能提示: 一种高阶、面向未来的方法,利用性能提示跨设备提升吞吐量。
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
显式批处理与流: 一种更细致的方法,涉及显式批处理和利用流来进行高级性能调优。
Link to this section设计面向吞吐量的应用程序:#
为最大化吞吐量,应用程序应:
- 并行处理输入,充分利用设备能力。
- 将数据流分解为并发推理请求,并安排并行执行。
- 利用带回调的 Async API 来保持效率并避免设备饥饿。
Link to this section多设备执行:#
OpenVINO 的多设备模式通过自动跨设备平衡推理请求,简化了吞吐量扩展,无需在应用层进行设备管理。
Link to this section实际性能提升#
将 OpenVINO 优化应用于 Ultralytics YOLO 模型可带来显著的性能提升。正如基准测试所示,用户在 Intel CPU 上可以体验到快达 3 倍的推理速度,在 Intel 硬件系列(包括集成 GPU、专用 GPU 和 VPU)上还有可能实现更大的加速。
例如,在 Intel Xeon CPU 上运行 YOLO26 模型时,OpenVINO 优化版本在每张图像的推理时间方面始终优于其 PyTorch 版本,且不会牺牲准确率。
Link to this section实际应用#
要为 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)Link to this section结论#
使用 OpenVINO 对 Ultralytics YOLO 模型进行延迟和吞吐量优化,可以显著增强你的应用程序性能。通过仔细应用本指南中概述的策略,开发者可以确保模型高效运行,满足各种部署场景的需求。请记住,在延迟优化还是吞吐量优化之间进行选择,取决于你的特定应用需求和部署环境的特性。
如需更详细的技术信息和最新更新,请参考 OpenVINO 文档和 Ultralytics YOLO 仓库。这些资源提供了深入的指南、教程和社区支持,帮助你充分利用深度学习模型。
确保模型达到最佳性能不仅仅是调整配置,更是要了解应用程序的需求并做出明智的决策。无论你是为了实时响应进行优化,还是为了大规模处理而最大化吞吐量,Ultralytics YOLO 模型与 OpenVINO 的结合都为开发者部署高性能 AI 解决方案提供了一个强大的工具包。
Link to this section常见问题解答#
Link to this section如何使用 OpenVINO 优化 Ultralytics YOLO 模型以实现低延迟?#
优化 Ultralytics YOLO 模型的低延迟涉及几个关键策略:
- 每设备单次推理: 限制每台设备一次只进行一次推理,以最大限度减少延迟。
- 利用子设备: 利用多插槽 CPU 或多片 GPU 等设备,它们可以处理多个请求且几乎不会增加延迟。
- OpenVINO 性能提示: 在模型编译期间使用 OpenVINO 的
ov::LATENCY,以实现简化的、与设备无关的调优。
关于延迟优化的更多实用技巧,请查看我们指南中的延迟优化部分。
Link to this section为什么我应该使用 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)在我们的详细指南的吞吐量优化部分中了解有关吞吐量优化的更多信息。
Link to this section在 OpenVINO 中减少首次推理延迟的最佳实践是什么?#
为减少首次推理延迟,请考虑以下实践:
- 模型缓存: 使用模型缓存来缩短加载和编译时间。
- 模型映射与读取: 默认使用映射 (
ov::enable_mmap(true)),但如果模型位于可移动驱动器或网络驱动器上,则切换到读取 (ov::enable_mmap(false))。 - AUTO 设备选择: 利用 AUTO 模式从 CPU 推理开始,并无缝过渡到加速器。
关于管理首次推理延迟的详细策略,请参考管理首次推理延迟部分。
Link to this section如何平衡 Ultralytics YOLO 与 OpenVINO 的延迟和吞吐量优化?#
平衡延迟和吞吐量优化需要了解你的应用程序需求:
- 延迟优化: 非常适合需要即时响应的实时应用程序(例如消费级应用)。
- 吞吐量优化: 最适合具有大量并发推理的场景,可实现资源最大化利用(例如大规模部署)。
使用 OpenVINO 的高阶性能提示和多设备模式有助于实现适当的平衡。根据你的特定要求选择合适的 OpenVINO 性能提示。
Link to this section我可以使用 Ultralytics YOLO 模型与 OpenVINO 之外的其他 AI 框架吗?#
可以,Ultralytics YOLO 模型具有高度通用性,可以与各种 AI 框架集成。选项包括:
- TensorRT: 对于 NVIDIA GPU 优化,请遵循 TensorRT 集成指南。
- CoreML: 对于 Apple 设备,请参考我们的 CoreML 导出说明。
- LiteRT.js: 针对 Web 和 Node.js 应用,请参阅 LiteRT 集成指南 以及 LiteRT.js Web 运行时。
在 Ultralytics 集成页面探索更多集成。