针对 YOLO 的 OpenVINO 推理优化
介绍
在部署 深度学习 模型(尤其是像 Ultralytics YOLO 模型这样的 目标检测 模型)时,实现最佳性能至关重要。本指南深入探讨了如何利用 Intel OpenVINO 工具套件 来优化推理,重点关注延迟和吞吐量。无论你是在开发消费级应用程序还是进行大规模部署,理解并应用这些优化策略都将确保你的模型在各种设备上高效运行。
延迟优化
对于需要在单个输入下从单个模型获得即时响应的应用程序(在消费级场景中很常见),延迟优化至关重要。其目标是尽可能减少从输入到推理结果之间的延迟。然而,实现低延迟需要仔细考量,尤其是在运行并发推理或管理多个模型时。
延迟优化的关键策略:
- 单设备单次推理: 实现低延迟的最简单方法是限制每个设备一次仅执行一次推理。额外的并发通常会导致延迟增加。
- 利用子设备: 像多插槽 CPU 或多片 GPU 这样的设备,可以通过利用其内部子设备来执行多个请求,同时保持极低的延迟增加。
- OpenVINO Performance Hints: Utilizing OpenVINO's
ov::LATENCYfor theov::performance_modeproperty during model compilation simplifies performance tuning, offering a device-agnostic and future-proof approach.
管理首次推理延迟:
- 模型缓存: 为减轻模型加载和编译时间对延迟的影响,请尽可能使用模型缓存。对于无法缓存的场景,CPU 通常提供最快的模型加载时间。
- 模型映射与读取: 为缩短加载时间,OpenVINO 已用映射替代了模型读取。但如果模型位于可移动驱动器或网络驱动器上,请考虑使用
ov::enable_mmap(false)切换回读取模式。 - AUTO 设备选择: 该模式在 CPU 上启动推理,一旦准备就绪即切换到加速器,从而无缝减少首次推理延迟。
吞吐量优化
吞吐量优化对于同时服务大量推理请求的场景至关重要,它能在不显著牺牲单个请求性能的前提下最大限度地提高 资源利用率。
吞吐量优化方法:
-
OpenVINO 性能提示: 一种利用性能提示跨设备增强吞吐量的高级且面向未来的方法。
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
显式批处理与流: 一种更细致的方法,涉及显式批处理和利用流来进行高级性能调优。
设计面向吞吐量的应用程序:
为最大化吞吐量,应用程序应:
- 并行处理输入,充分利用设备的计算能力。
- 将数据流分解为并发推理请求,并调度为并行执行。
- 利用带回调的 Async API 以保持效率并避免设备饥饿。
多设备执行:
OpenVINO 的多设备模式通过自动跨设备平衡推理请求来简化吞吐量扩展,无需在应用层进行设备管理。
实际性能提升
将 OpenVINO 优化应用于 Ultralytics YOLO 模型可带来显著的性能提升。正如在 基准测试 中所示,用户在 Intel CPU 上可体验到高达 3 倍的推理速度提升,而在包括集成 GPU、专用 GPU 和 VPU 在内的 Intel 硬件系列上,甚至可能实现更高的加速效果。
例如,当在 Intel Xeon CPU 上运行 YOLOv8 模型时,OpenVINO 优化版本在每张图像的推理时间方面始终优于其 PyTorch 版本,且不会牺牲 准确率。
实际应用
要将你的 Ultralytics YOLO 模型导出并优化为 OpenVINO 格式,可以使用 导出 功能:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision导出后,你可以使用优化后的模型运行推理:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)总结
使用 OpenVINO 优化 Ultralytics YOLO 模型的延迟和吞吐量可以显著增强应用程序的性能。通过仔细应用本指南中概述的策略,开发人员可以确保其模型高效运行,满足各种部署场景的需求。请记住,在延迟优化与吞吐量优化之间的选择,取决于你的具体应用需求和部署环境的特征。
有关更详细的技术信息和最新更新,请参考 OpenVINO 文档 和 Ultralytics YOLO 存储库。这些资源提供了深入的指南、教程和社区支持,帮助你充分利用深度学习模型。
确保模型实现最佳性能不仅仅是调整配置,而是关于理解应用程序的需求并做出明智的决策。无论你是为了 实时响应 进行优化,还是为了大规模处理最大化吞吐量,Ultralytics YOLO 模型与 OpenVINO 的结合都为开发人员部署高性能 AI 解决方案提供了强大的工具包。
常见问题 (FAQ)
如何使用 OpenVINO 优化 Ultralytics YOLO 模型以实现低延迟?
优化 Ultralytics YOLO 模型以实现低延迟涉及几个关键策略:
- 单设备单次推理: 限制每个设备一次仅执行一次推理以尽量减少延迟。
- 利用子设备: 利用多插槽 CPU 或多片 GPU 等设备,它们可以处理多个请求,同时保持极低的延迟增加。
- OpenVINO 性能提示: 在模型编译期间使用 OpenVINO 的
ov::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 之外的其他 AI 框架中使用 Ultralytics YOLO 模型吗?
可以,Ultralytics YOLO 模型具有高度通用性,可以与各种 AI 框架集成。选项包括:
- TensorRT: 对于 NVIDIA GPU 优化,请遵循 TensorRT 集成指南。
- CoreML: 对于 Apple 设备,请参考我们的 CoreML 导出说明。
- TensorFlow.js: 对于 Web 和 Node.js 应用程序,请查看 TF.js 转换指南。
在 Ultralytics 集成页面 探索更多集成。