跳至内容

为Ultralytics YOLO 模型优化OpenVINO 推论:综合指南

OpenVINO 生态系统

导言

在部署深度学习模型,尤其是用于物体检测的模型(如Ultralytics YOLO 模型)时,实现最佳性能至关重要。本指南将深入探讨如何利用英特尔的OpenVINO 工具包来优化推理,重点关注延迟和吞吐量。无论您是在开发消费级应用还是大规模部署,了解并应用这些优化策略都将确保您的模型在各种设备上高效运行。

优化延迟

对于需要在单一输入情况下从单一模型立即做出响应的应用来说,延迟优化至关重要,这在消费场景中非常典型。我们的目标是尽量减少输入与推理结果之间的延迟。然而,实现低延迟需要仔细考虑,尤其是在运行并发推理或管理多个模型时。

优化延迟的关键策略:

  • 每个设备一次推理:实现低延迟的最简单方法是限制每个设备一次只能进行一个推理。额外的并发通常会导致延迟增加。
  • 利用子设备:多插槽 CPU 或多层 GPU 等设备可利用其内部子设备执行多个请求,并将延迟增加降至最低。
  • OpenVINO 性能提示: 利用OpenVINO ov::hint::PerformanceMode::LATENCYov::hint::performance_mode 模型编译过程中的属性简化了性能调整,提供了一种与设备无关且面向未来的方法。

管理首次推理延迟

  • 模型缓存:为减少模型加载和编译时间对延迟的影响,应尽可能使用模型缓存。在缓存不可行的情况下,CPU 通常能提供最快的模型加载时间。
  • 模型映射与阅读 为了缩短加载时间,OpenVINO 用映射取代了模型读取。不过,如果模型在移动硬盘或网络硬盘上,可考虑使用 ov::enable_mmap(false) 切换回阅读状态。
  • 自动设备选择:该模式在 CPU 上开始推理,一旦准备就绪,就转到加速器上,从而无缝减少首次推理延迟。

优化吞吐量

吞吐量优化对于同时处理大量推理请求的场景至关重要,它可以在不明显影响单个请求性能的情况下最大限度地提高资源利用率。

吞吐量优化方法

  1. OpenVINO 性能提示:利用性能提示提高跨设备吞吐量的高级、面向未来的方法。
import openvino.properties as props
import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
  1. 显式批处理和流:更细化的方法,包括显式批处理和使用流进行高级性能调整。

设计以吞吐量为导向的应用程序

为最大限度地提高吞吐量,应用程序应

  • 并行处理输入,充分利用设备的功能。
  • 将数据流分解为并发推理请求,安排并行执行。
  • 利用带回调的异步应用程序接口(Async API)保持效率,避免设备饥饿。

多设备执行:

OpenVINO多设备模式通过自动平衡各设备之间的推理请求,简化了吞吐量的扩展,而无需应用级设备管理。

结论

利用OpenVINO 优化Ultralytics YOLO 模型的延迟和吞吐量,可以显著提高应用程序的性能。通过仔细应用本指南中概述的策略,开发人员可以确保其模型高效运行,满足各种部署场景的需求。请记住,选择优化延迟还是优化吞吐量取决于您的特定应用需求和部署环境的特征。

有关更详细的技术信息和最新更新,请参阅OpenVINO 文档Ultralytics YOLO 存储库。这些资源提供深入的指南、教程和社区支持,帮助您充分利用深度学习模型。


确保您的模型达到最佳性能不仅仅是调整配置,还需要了解您的应用需求并做出明智的决策。无论您是要优化实时响应,还是要最大限度地提高大规模处理的吞吐量,Ultralytics YOLO 模型和OpenVINO 的组合都为开发人员部署高性能人工智能解决方案提供了强大的工具包。



创建于 2024-03-17,更新于 2024-03-17
作者:glenn-jocher(1)

评论