通过自动设备插件改进 AI 应用程序的性能和可移植性






4.20/5 (4投票s)
Intel® OpenVINO™ 工具包中的新功能让您可以轻松优化吞吐量或延迟,并帮助您实现“一次编写,随处部署”。
AI 的挑战之一在于需要兼容用于推理的各种计算设备。 OpenVINO™ 工具包通过提供利用处理器、GPU 或视觉处理单元 (VPU) 中硬件功能的运行时,帮助加速 AI 应用。
现在,随着 OpenVINO 2022.1 版本的发布,自动设备插件 (AUTO) 可以轻松地针对不同设备。它可以自动选择最合适的设备,并进行相应配置以优先考虑延迟或吞吐量。新插件还包含一项加速首次推理延迟的功能。
OpenVINO 工具包中的 AUTO 是什么?
自动设备插件(简称 AUTO)是 OpenVINO 中的一个新型虚拟代理设备,它不绑定到特定类型的硬件设备。
当您选择 AUTO 作为目标平台时,OpenVINO 会自动发现平台的加速器和硬件功能,并选择最适合您目标的设备。您可以在配置 API 中提供提示,告知 OpenVINO 优化延迟或吞吐量,具体取决于应用程序。
使用 AUTO 的好处包括:
- 更快的应用程序开发:使用 AUTO,应用程序无需包含检测、选择或配置计算设备的逻辑。
- 提高应用程序的可移植性:由于应用程序不需要包含特定于设备的专用代码,甚至不需要从列表中选择设备,因此应用程序更具可移植性。这不仅使得在其他平台上运行应用程序更容易,而且还使应用程序能够利用新一代硬件的可用性。
- 更快的应用程序启动: AUTO 通过使用 CPU 来实现应用程序的快速启动,同时其他目标平台(如 GPU)仍在加载 AI 网络。网络加载后,AUTO 可以将推理切换到 GPU。
- 使用提示而非配置:使用 AUTO,无需提供特定于设备的配置。相反,您可以表达性能提示来优先考虑延迟或吞吐量。AUTO 会负责选择最佳设备。OpenVINO 提供可供开发人员选择的配置,例如并行使用多个核心或使用大型队列。
如何在 OpenVINO 中配置 AUTO
AUTO 是 OpenVINO 核心功能的一部分。要使用它,只需选择“AUTO”作为设备名称,或省略设备名称即可。
以下是一个 C++ 示例
// Load a network to AUTO using the default list of device candidates.
// 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 是网络执行唯一可接受的两个设备的场景。
以下是一个 C++ 示例
// Specify the devices and the priority to be used by AUTO in its selection process.
// 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 提供“延迟”或“吞吐量”的性能提示。然后,AUTO 会选择最佳硬件设备和配置来实现您的目标。
以下是一个 C++ 示例
// Load a network to AUTO with Performance Hints enabled.
// To use the “throughput” mode:
ov::CompiledModel compiled_model = core.compile_model(model, “AUTO:GPU,CPU”, ov::hint::performance_mode(ov::hint::PerformanceMode::THROUGHPUT));// or the “latency” mode:ov::CompiledModel compiledModel1 = core.compile_model(model, “AUTO:GPU,CPU”, ov::hint::performance_mode (
ov::hint::PerformanceMode::LATENCY));
以下是一个 Python 示例
# To use the “throughput” mode:
compiled_model = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"THROUGHPUT"})
# or the “latency” mode:
我们在 Intel® CoreTM i7 处理器上使用 googlenet-v1 模型进行测试,发现在使用集成 GPU 时,吞吐量提示的每秒帧数 (FPS) 性能是延迟提示的两倍¹。相比之下,使用 GPU 的延迟提示提供的延迟比吞吐量提示低十倍以上¹。
请注意,这些提示不需要特定于设备的设置,并且在计算设备之间是完全可移植的。这意味着,在代码改动更少、所需专业知识更少的情况下,即可获得更高的性能。
为了实现吞吐量结果,设备被配置为更高的利用率,例如增加批量大小,以及更多的线程和流。对于延迟场景,任务队列大小和并行化会减少,以实现更快的周转时间。
有关带有性能提示的 AUTO 用法的完整 Python 示例,请参阅此 OpenVINO notebook。
AUTO 如何选择设备?
当您使用 OpenVINO 2022.1 版本时,AUTO 会根据设备是否可用以及是否支持 AI 模型的精度,按照表 1 中所示的顺序选择设备。设备仅在 AI 网络加载时选择一次。CPU 是默认的备用设备。
图 1 展示了 AUTO 如何充当代理设备,并选择最适合 AI 网络运行的设备。
加速首次推理延迟
AUTO 的关键性能优势之一是加速首次推理延迟 (FIL)。
将 OpenCL 图编译为 GPU 优化内核需要几秒钟。对于某些应用程序(例如基于面部的身份验证),此初始化时间可能无法容忍。
使用 CPU 可以提供最短的 FIL,因为 OpenVINO 图表示可以快速为 CPU 进行即时编译。但是,CPU 可能不是满足开发人员启动后吞吐量或延迟目标的最佳平台。
为了加快 FIL,AUTO 使用 CPU 作为首次推理设备,直到 GPU 准备就绪(参见图 2)。即使 CPU 在为 GPU 进行网络编译的同时也执行推理,AUTO 的 FIL 也接近 CPU 设备。使用 AUTO,我们观察到 FIL 比仅使用 GPU 降低了十倍以上¹。
但是请注意,CPU 的吞吐量可能比 GPU 差。对于需要满足吞吐量目标的实时应用程序,初始推理缓慢的阶段可能无法接受。此时,最好等待模型在 GPU 上加载。在许多情况下,建议使用模型/内核缓存以加快模型加载速度。
使用 AUTO 公开的信息进行调试
如果出现执行问题,AUTO 会提供有关异常和错误值的信息。如果返回的数据不足以进行调试,可以使用 ov::log::Level
获取更多信息。
运行时和 AUTO 的所有主要性能调用都通过仪器和跟踪技术 (ITT) API 进行检测。有关更多信息,请参阅OpenVINO 性能分析文档和Intel® VTune™ Profiler 用户指南。
AUTO 的未来版本
在未来的版本中,AUTO 将提供更多性能提示,并在系统级别平衡工作负载,例如,将一个神经网络的推理卸载到多个硬件设备(类似于多设备插件)。
摘要
总而言之,使用 OpenVINO 中的新型 AUTO 设备插件:
- 开发人员无需更新其应用程序逻辑即可利用英特尔新平台和新版本 OpenVINO 提供的高级功能和功能。
- 开发人员可以享受优化的性能,并加快产品上市时间。
有关更多信息,请参阅 AUTO 文档。
资源
声明与免责条款
性能因使用情况、配置和其他因素而异。了解更多信息,请访问 www.intel.com/PerformanceIndex www.intel.com/PerformanceIndex
性能结果基于显示日期的测试配置,可能无法反映所有公开可用的更新。请参阅备份以获取配置详细信息。没有任何产品或组件可以绝对安全。
英特尔技术可能需要启用硬件、软件或服务激活。
描述的产品可能包含设计缺陷或错误(称为勘误),这可能导致产品偏离发布规范。当前已确认的勘误可应要求提供。
¹测试配置
配置一:Intel® Core™ i7–10710U 处理器,带 DDR4 2*16 GB 2666MHz,集成 GPU,操作系统:Windows 10 Enterprise Version 10.0.19042 Build 19042,Microsoft Visual Studio Community 2019 Version 16.11.8,Intel(R) UHD Graphics 驱动程序 Version 30.0.101.1191,OpenVINO 2022.1 (zip 文件下载),googlenet-v1 网络模型。使用notebook 106-auto-device 进行测试。
配置二:Intel® Core™ i7–1165G7 处理器,带 DDR4 2*16 GB 4,266 MHz,集成 GPU,Intel® Iris® Xe MAX Graphics,操作系统:Windows 10 Enterprise Version 10.0.19042 Build 19042,Microsoft Visual Studio Community 2019 Version 16.11.10,Intel(R) Iris® Xe Graphics 驱动程序 Version 30.0.101.1003(集成 GPU),Intel(R) Iris® Xe MAX Graphics 驱动程序 Version 30.0.101.1340(独立 GPU),OpenVINO 2022.1 (zip 文件下载),googlenet-v1 网络模型。使用 OpenVINO 2022.1 中的 CPP benchmark_app 进行测试。
这些测试由英特尔于 2022 年 4 月 20 日进行。