跳至内容

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

OpenVINO 生态系统

导言

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

优化延迟

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

优化延迟的关键策略:

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

管理首次推理延迟

  • 模型缓存:为减少模型加载和编译时间对延迟的影响,应尽可能使用模型缓存。在缓存不可行的情况下,CPU 通常能提供最快的模型加载时间。
  • 模型映射与阅读 为了缩短加载时间,OpenVINO 用映射取代了模型读取。不过,如果模型在移动硬盘或网络硬盘上,可考虑使用 ov::enable_mmap(false) 切换回阅读状态。
  • AUTO Device Selection: This mode begins inference on the CPU, shifting to an accelerator once ready, seamlessly reducing first-inference latency.

优化吞吐量

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

吞吐量优化方法

  1. OpenVINO 性能提示:利用性能提示提高跨设备吞吐量的高级、面向未来的方法。

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

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

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

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

多设备执行:

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

结论

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

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


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

常见问题

如何使用OpenVINO 优化Ultralytics YOLO 模型以实现低延迟?

优化Ultralytics YOLO 模型以实现低延迟涉及几个关键策略:

  1. 每个设备一次推理:限制每个设备一次只能进行一个推理,以尽量减少延迟。
  2. 利用子设备:利用多插槽 CPU 或多层 GPU 等设备,它们可以处理多个请求,并将延迟的增加降至最低。
  3. 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 中减少首次推理延迟的最佳做法是什么?

要减少首次推理延迟,请考虑以下做法:

  1. 模型缓存:使用模型缓存减少加载和编译时间。
  2. 模型映射与阅读 使用映射 (ov::enable_mmap(true)),但默认情况下会切换为读取 (ov::enable_mmap(false)),如果模型在移动硬盘或网络硬盘上。
  3. AUTO Device Selection: Utilize AUTO mode to start with CPU inference and transition to an accelerator seamlessly.

有关管理首次推断延迟的详细策略,请参阅管理首次推断延迟部分

如何在优化延迟和吞吐量与Ultralytics YOLO 和OpenVINO 之间取得平衡?

平衡延迟和吞吐量优化需要了解您的应用需求:

  • 延迟优化:非常适合需要即时响应的实时应用(如消费级应用)。
  • 吞吐量优化:最适合有许多并发推论的情况,最大限度地利用资源(如大规模部署)。

使用OpenVINO 的高级性能提示和多设备模式可以帮助实现适当的平衡。根据您的具体要求选择合适的OpenVINO 性能提示。

除了OpenVINO 之外,我还能在其他人工智能框架中使用Ultralytics YOLO 模型吗?

是的,Ultralytics YOLO 模型具有很强的通用性,可以与各种人工智能框架集成。选项包括

Ultralytics 集成页面探索更多集成。



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

评论