作者:Shen, Wanglei 编译: 李翊玮
英特尔® OpenVINO™ 工具包中的新功能使您能轻松优化吞吐量或延迟,并帮助您“一次编写,随处部署”。
人工智能的挑战之一是迎合各种能用于推理的各种计算设备。OpenVINO™工具包通过时序优化, 可充分利用各种处理器的优势如CPU,GPU或视觉处理单元(VPU)并整合最终加快AI应用程序的速度。它降低不同架构编写导致其复杂性的门槛,同时使开发人员能够充分释放其目标平台的性能。
现在,随着OpenVINO的2022.1版本,自动设备插件(AUTO)可以轻松定位不同的目标设备。自动选择最合适的目标设备,并对其进行适当配置,并确定延迟或吞吐量的优先级。新插件还加入了加速首次推理延迟的功能。
OpenVINO 工具包中的AUTO是什么?
自动设备插件(Automatic Device Plugin或简称AUTO)是OpenVINO中的新虚拟代理设备,不会直接绑定到特定类型的硬件设备。
当您选择AUTO作为目标推理平台时,OpenVINO会自动找出平台的加速器和硬件功能,并自动选择使用哪一个加速器和硬件来实现您的目标。您可以在配置 API 中提供提示,以告知 OpenVINO 根据应用程序优化延迟或吞吐量。
使用 AUTO 插件的好处包括:
- 更快的开发出应用程序:使用 AUTO,应用程序无需包含用于检测、选择或配置计算设备的逻辑。
- 改进的应用程序可移植性:由于应用程序不需要包含特定设备的专用代码,甚至不需要从列表中选择设备,因此应用程序的可移植性更高。如今,在其他平台上运行应用程序不仅更容易,而且还使应用程序能够在新一代硬件出来时立即迁移并马上使用其优势。
- 更快的启动应用程序:AUTO 使应用程序能够使用 CPU 快速启动,而让其他目标平台(如 GPU)同步在加载 AI 网络。加载AI网络完毕后,AUTO 可以将推理切换到 GPU。
- 使用性能倾向性 (hints)而不是配置(configuration):使用 AUTO,无需提供特定设备的配置。反而,您可以体现性能提示以确定延迟或吞吐量的优先级。AUTO负责选择最佳设备。OpenVINO提供配置供开发人员选择,例如并行使用多个内核或使用大型任务队列。
如何在OpenVINO中配置AUTO
AUTO是OpenVINO核心功能的一部分。要使用它,请选择“AUTO”作为设备名称,或者省略设备名称。
C++示例:
// 使用默认的设备候选列表将网络加载到 AUTO. //
The following lines are equivalent:ov::CompiledModel model0 =
core.compile_model(model);ov::CompiledModel model1 =
core.compile_model(model, “AUTO”);
Python 示例:
compiled_model0 = core.compile_model(model=model)
compiled_model1 = core.compile_model(model=model, device_name="AUTO")
指定要使用的设备
AUTO有一个选项可以从您的首选设备中进行选择。例如,以下代码演示了只有CPU 和 GPU 是AI网络执行可接受的唯一两个设备的方案。
C++示例:
// 指定 AUTO 在其选择过程中要使用的设备和优先级。//
The following lines are equivalent (GPU is 1st priority to be
used):ov::CompiledModel model3 = core.compile_model(model,
“AUTO:GPU,CPU”);
ov::CompiledModel model4 = core.compile_model(model, “AUTO”,
ov::device::priorities (“GPU,CPU”));
Python 示例:
compiled_model3 = core.compile_model(model=model, device_name="AUTO:GPU,CPU")
compiled_model4 = core.compile_model(model=model, device_name="AUTO", config={"MULTI_DEVICE_PRIORITIES": "GPU,CPU"})
提供性能倾向功能
您还可以选择为 AUTO 提供 “延迟(Lantency)”或“吞吐量(Throughput)”性能倾向性功能。然后,AUTO选择最佳的硬件设备和配置来实现您的目标。
C++示例:
//将网络加载到启用了性能提示的 AUTO。// 要使用 “吞吐量” 倾向模式
:ov::CompiledModel compiled_model = core.compile_model(model, “AUTO:GPU,CPU”, ov::hint::performance_mode(
ov::hint::PerformanceMode::THROUGHPUT));
// 或 “延迟” 倾向模式
:ov::CompiledModel compiledModel1 = core.compile_model(model, “AUTO:GPU,CPU”, ov::hint::performance_mode (
ov::hint::PerformanceMode::LATENCY));
Python 示例:
# 使用 “吞吐量” 倾向模式:
compiled_model = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"THROUGHPUT"})
# 使用“延迟” 倾向模式:
compiled_model = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"LATENCY"})
在英特尔®酷睿TM i7处理器上使用googlenet-v1模型,我们发现,与延迟倾向¹相比,在集成GPU上使用吞吐量倾向可提供两倍的每秒帧数(FPS)性能。相比之下,在 GPU上使用延迟倾向的延迟比吞吐量倾向¹低 10 倍以上。
请注意,性能倾向不需要特定于设备的设置,并且在计算设备之间也可以完全移植。这意味着更高的性能,更少的代码更改,以及所需的专业知识更少。
为实现增大吞吐量方案,设备配置为具有更高的利用率,例如,增加批大小以及更多的线程和流。对于降低延迟方案,减小了任务队列的大小和并行化,以实现更快的周转时间。
带有性能倾向的AUTO用法的完整Python示例在此OpenVINO笔记本中可用。
自动设备插件如何选择设备?
当您使用OpenVINO的2022.1版本时,AUTO会按照表1所示的顺序选择设备,具体取决于设备是否可用以及是否可以支持AI模型的精度。加载 AI 网络时,仅做选择一次设备。CPU 是默认的备选设备。
表 1:AUTO 如何根据设备的可用性和 AI 网络的精度,确定计算设备与 AI 网络的优先级
图 1 显示了 AUTO 如何充当代理设备,并为 AI 网络选择最合适的设备。
图 1:AUTO 充当应用程序和设备之间的代理设备。
加速首次推理延迟
使用AUTO 的主要好处之一是加速首次推理延迟FIL(First Inference Latency)。
将 OpenCL 图编译为 GPU 优化的内核需要几秒钟。对于某些应用程序(如基于人脸的身份验证),这几秒钟的初始化时间可能无法容忍。
使用CPU将提供最短的FIL,因为OpenVINO图形表示可以为CPU快速做JIT编译。但是,CPU 可能不是在启动后满足开发人员的吞吐量或延迟目标的最佳平台。
为了加快 FIL 的速度,AUTO 使用 CPU 作为第一个推理设备,直到 GPU 准备就绪(参见图 2)。带有 AUTO 的 FIL 接近 CPU 设备的 FIL(绿色),即使 CPU 除了 GPU 的网络编译之外还执行推理。使用 AUTO,与仅使用 GPU1 相比(蓝色),我们看到 FIL 减少了 10 倍以上。
但请注意,CPU 上的吞吐量可能比 GPU 更差。对于需要满足吞吐量目标的实时应用程序,缓慢推理的初始阶段可能不可接受。最好等待模型在 GPU 上加载。在许多情况下,建议使用模型/内核缓存来加快模型加载速度。
图 2:通过在 CPU 上运行推理来自动减少首次推理延迟 (FIL),直到 GPU 准备就绪。
用Information AUTO进行Debugging
如果遇到执行问题,AUTO 将提供有关异常和错误值的信息。如果返回的数据不足以用于调试目的,可以使用ov::log::Level获取更多信息。
Runtime和 AUTO 的所有主要性能调用都使用检测和跟踪技术 (ITT) API 进行检测。有关更多信息,请参阅有关 OpenVINO 分析的文档和英特尔® VTune™ Profiler 用户指南。
AUTO的未来版本
在未来的版本中,AUTO将提供更多的性能倾向功能,并将在系统级别平衡工作负载,例如,通过将一个神经网络的推理卸载到多个硬件设备(类似于多设备插件)。
总结
总而言之,在OpenVINO中使用新的AUTO设备插件:
- 开发人员无需更新其应用程序逻辑即可使用英特尔新平台和新版本 OpenVINO 提供的高级特性和功能。
- 开发人员可以享受优化的性能和更快的上市时间。
有关详细信息,请参阅 AUTO 文档。
通知和免责声明:
性能因使用情况、配置和其他因素而异。在 www.intel.com/PerformanceIndex“www.intel.com/PerformanceIndex 了解更多信息
性能结果基于截至配置中显示的日期的测试,可能无法反映所有公开可用的更新。有关配置详细信息,请参阅备份。没有任何产品或组件是绝对安全的。
英特尔技术可能需要支持的硬件、软件或服务激活。
所描述的产品可能包含勘误表中已知的设计缺陷或错误,这可能会导致产品与公布的规格有所偏差。当前已确定的勘误表可根据要求提供。
¹测试配置:
配置一:英特尔®酷睿™ i7–10710U处理器,带DDR4 2 * 16 GB@2666MHz,集成GPU,操作系统:Windows 10企业版10.0.19042 Build 19042,Microsoft Visual Studio Community 2019版本16.11.8,Intel(R)UHD显卡驱动程序版本30.0.101.1191,OpenVINO 2022.1(zip文件下载),googlenet-v1网络模型。已使用笔记本 106 自动设备进行测试。
配置二:英特尔®酷睿™ i7–1165G7 处理器,带 DDR4 2*16 GB,4,266 MHz,集成 GPU,英特尔® Iris® Xe MAX 显卡,操作系统:Windows 10 企业版 10.0.19042 内部版本 19042,Microsoft Visual Studio Community 2019 版本 16.11.10,英特尔(R) Iris® Xe 显卡驱动程序 30.0.101.1003 版(集成 GPU),英特尔(R) Iris® Xe MAX 显卡驱动程序 30.0.101.1340 版(独立 GPU), OpenVINO 2022.1(zip文件下载),googlenet-v1网络模型。在OpenVINO 2022.1中用CPP benchmark_app进行测试。
这些测试由英特尔于 2022 年 4 月 20 日进行。