运行时推理优化

运行时或部署优化注重对推理参数(例如,同时执行的最佳请求数)和执行模型的其他方法进行调优。

性能简介主题中所述,专用文档涵盖模型级优化,如解锁 8 位推理的量化。模型优化最通用,适用于任何场景和任何设备(例如,加速量化模型)。相关运行时配置 ov::hint::inference_precision 允许设备以精度换取性能(例如,允许在原始 fp32 模型量化后对精度保持在 fp32 下的层执行 fp16/bf16)。

可能的优化应该从定义用例开始。例如,目标场景是否强调吞吐量而非延迟,例如数据中心在隔夜作业中处理数百万个样本。相比之下,实时用例可能会降低吞吐量,以最小的延迟达到同样的效果。这通常是一个组合场景,其目标是尽可能提高吞吐量,同时保持特定的延迟阈值。相关提示汇总如下。

全栈应用如何以端到端的方式使用推理组件也很重要。例如,哪些阶段需要编排?在某些情况下,工作负载的很大一部分时间花在获取和准备输入数据上。下面是高效连接数据输入管道和模型推理的多项提示。这些也是适用于延迟和吞吐量场景的常见性能技巧。

其他文档涵盖了相关的运行时性能优化主题。还需要考虑单个设备的功能支持表

通用应用级优化,具体包括:

用例特定的优化,例如针对延迟吞吐量进行优化

编写性能可移植性推理应用

OpenVINO 的每个支持的设备都提供了一组低级别性能设置。调整这种详细的配置需要深入理解架构。

此外,尽管得到的性能对于特定的设备和推理模型组合来说可能是最佳性能,但它实际上并非适用于所有设备/模型,也容易过时:

  • 即使在一个设备家族(如各种 CPU)中,由于指令集或 CPU 核心数量不同,成为最佳配置的执行配置也会有所不同。

  • 与此类似,最佳批次大小只针对 GPU 的特定实例。

  • 对于推理模型的计算与内存带宽要求以及推理精度,可能的模型量化也有助于选择最佳参数。

  • 最后,一个设备的最佳执行参数不会公开映射到另一种设备类型,例如:

    • CPU 和 GPU 设备都支持的概念,但推理得出的最佳流数却截然不同。

为了降低性能配置的复杂性,性能提示延迟吞吐量提供了高级“预设”,如性能提示使用文档所述。

除执行参数之外,还有设备特定的调度,它对性能有很大影响。具体而言,像批处理这样面向 GPU 的优化组合了多个(可能是数十个)输入,以实现最佳吞吐量,但并不一定始终能完全映射到 CPU,如其他内部架构章节所述。

这些提示实际上包含了使设备实现饱和所需的详细执行信息。您可以在“内部架构”章节中找到特定设备的实施详细信息(特别是 OpenVINO 如何实施“吞吐量”方法)。请记住,由于提供了这些提示,这些实施详细信息对应用来说是透明的。例如,这些提示免除了显式(应用端)批处理或流的必要。

借助提示,只需为每个摄像头或另一个输入源保留单独的推理请求,并使用异步 API 并行处理这些请求,如应用设计注意事项章节所述。应用利用吞吐量的主要要求是并行运行多个推理请求

总结而言,如果关注性能可移植性,则应考虑将性能提示作为解决方案。您可以在此处找到更多详细信息和 API 示例。