YOLO Vision 2026:

针对 YOLO 的 OpenVINO 推理优化#

OpenVINO Ecosystem

简介#

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

延迟优化#

对于需要在单次输入下实现即时响应的应用程序(这是消费类场景中的典型需求),延迟优化至关重要。其目标是将输入到推理结果之间的延迟降至最低。然而,实现低延迟需要仔细考量,尤其是在执行并发推理或管理多个模型时。

延迟优化的关键策略:#

  • 每设备单次推理: 实现低延迟最简单的方法是限制每个设备一次只进行一次推理。额外的并发通常会导致延迟增加。
  • 利用子设备: 像多插槽 CPU 或多片(multi-tile)GPU 这类设备,可以通过利用其内部子设备,在延迟增加极小的情况下执行多个请求。
  • **OpenVINO 性能提示:**在模型编译期间利用 OpenVINO 的 ov::LATENCY 来处理 ov::performance_mode 属性,可以简化性能调优,提供一种与设备无关且面向未来的方法。

管理首次推理延迟:#

  • 模型缓存: 为减轻模型加载和编译时间对延迟的影响,请尽可能使用模型缓存。对于无法缓存的场景,CPU 通常能提供最快的模型加载时间。
  • **模型映射与读取:**为了减少加载时间,OpenVINO 用映射取代了模型读取。但是,如果模型位于可移动驱动器或网络驱动器上,请考虑使用 ov::enable_mmap(false) 切换回读取。
  • AUTO 设备选择: 该模式会从 CPU 开始推理,并在准备就绪后无缝切换到加速器,从而有效降低首次推理的延迟。

吞吐量优化#

吞吐量优化对于同时服务于大量推理请求的场景至关重要,它能在不显著牺牲单个请求性能的前提下最大化资源利用率

吞吐量优化的方法:#

  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 模型结合使用可以带来显著的性能提升。正如在基准测试中所展示的,用户在英特尔 CPU 上可以体验到快达 3 倍的推理速度,在英特尔的整个硬件产品线(包括集成 GPU、独立 GPU 和 VPU)中还能获得更高的加速效果。

例如,在英特尔至强 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 模型的低延迟涉及几个关键策略:

    1. 每设备单次推理: 限制每台设备一次只进行一次推理,以最大限度减少延迟。
    2. 利用子设备: 利用多插槽 CPU 或多片 GPU 等设备,它们可以处理多个请求且几乎不会增加延迟。
    3. **OpenVINO 性能提示:**在模型编译期间使用 OpenVINO 的 ov::LATENCY,以实现简化的、与设备无关的调优。

    有关优化延迟的更多实用技巧,请查看我们指南中的延迟优化部分

  • OpenVINO 通过最大化设备资源利用率来提升 Ultralytics YOLO 模型的吞吐量,且不会牺牲性能。主要优势包括:

    • 性能提示: 简单、高阶的跨设备性能调优。
    • 显式批处理和流: 针对高级性能进行的微调。
    • 多设备执行: 自动推理负载均衡,降低应用层管理难度。

    配置示例:

    import openvino.properties.hint as hints
    
    config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
    compiled_model = core.compile_model(model, "GPU", config)

    在我们的详细指南中的吞吐量优化部分了解有关吞吐量优化的更多信息。

  • 为减少首次推理延迟,请考虑以下实践:

    1. 模型缓存: 使用模型缓存来缩短加载和编译时间。
    2. **模型映射与读取:**默认使用映射(ov::enable_mmap(true)),但如果模型在可移动驱动器或网络驱动器上,则切换到读取(ov::enable_mmap(false))。
    3. AUTO 设备选择: 利用 AUTO 模式从 CPU 推理开始,并无缝过渡到加速器。

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

  • 平衡延迟和吞吐量优化需要了解你的应用程序需求:

    • 延迟优化: 非常适合需要即时响应的实时应用程序(例如消费级应用)。
    • 吞吐量优化: 最适合具有大量并发推理的场景,可实现资源最大化利用(例如大规模部署)。

    使用 OpenVINO 的高级性能提示和多设备模式有助于取得良好的平衡。根据你的具体要求选择合适的OpenVINO 性能提示

  • 可以,Ultralytics YOLO 模型具有高度通用性,可以与各种 AI 框架集成。选项包括:

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

评论