加速嵌入式视觉和推理的开放标准:行业概述

描述

不断发展的机器学习领域为部署设备和应用程序创造了新的机会,这些设备和应用程序利用神经网络推理,具有前所未有的基于视觉的功能和准确性。但是,快速发展的领域已经让位于处理器、加速器和库的混乱格局。本文讨论了开放式互操作性标准及其在降低成本和在实际产品中使用推理和视觉加速的障碍方面的作用。

每个行业都需要开放标准,通过提高生态系统元素之间的互操作性来降低成本并缩短上市时间。开放标准和专有技术具有复杂且相互依存的关系。专有API和接口通常是达尔文式的试验场,可以在聪明的市场领导者手中保持主导地位,这是应该的。强大的开放标准源于行业对成熟技术的更广泛需求,并且可以提供健康、激励性的竞争。从长远来看,随着技术、平台和市场地位的旋转和发展,不受任何一家公司控制或依赖的开放标准通常可以成为行业进步的连续性线索。

创建嵌入式机器学习应用程序

许多互操作部分需要协同工作来训练神经网络,并将其成功部署在嵌入式加速推理平台上,如图 1 所示。有效的神经网络训练通常需要大型数据集,使用浮点精度,并在功能强大的 GPU 加速桌面机器或云中运行。训练完成后,经过训练的神经网络将被摄取到针对快速张量操作进行优化的推理运行时引擎中,或者将神经网络描述转换为可执行代码的机器学习编译器中。无论使用引擎还是编译器,最后一步都是在从 GPU 到专用张量处理器的各种加速器架构之一上加速推理代码。

机器学习

图1.训练神经网络并将其部署在加速推理平台上的步骤

那么,行业开放标准如何帮助简化这一过程呢?图2.说明了在视野和推理加速度中使用的 Khronos 标准。总的来说,随着处理器频率缩放让位于并行编程,人们对所有这些标准越来越感兴趣,并行编程是以可接受的成本和功耗水平提供所需性能的最有效方法。

机器学习

图2.用于加速视觉和推理应用和引擎的 Khronos 标准

从广义上讲,这些标准可以分为两组:高级和低级。高级 API 侧重于易于编程,并跨多个硬件架构提供有效的性能可移植性。相比之下,低级 API 提供对硬件资源的直接、显式访问,以实现最大的灵活性和控制力。每个项目都必须了解哪个级别的 API 最适合他们的开发需求。此外,高级 API 通常会在其实现中使用较低级别的 API。

让我们更详细地看一下其中一些Khronos标准。

SYCL - C++ 单源异构编程

SYCL(发音为“镰刀”)使用C++模板库来调度标准 ISO C++应用程序的选定部分以卸载处理器。SYCL 使复杂的C++机器学习框架和库能够直接编译和加速到在许多情况下优于手动调优代码的性能水平。如图 3 所示,默认情况下,SYCL 是通过较低级别的 OpenCL 标准 API 实现的:将用于加速的代码馈送到 OpenCL 中,其余主机代码通过系统的默认 CPU 编译器输入。

机器学习

图3.SYCL 将标准C++应用程序拆分为 CPU 和 OpenCL 加速代码

有越来越多的SYCL实现,其中一些使用专有后端,例如NVIDIA的CUDA用于加速代码。值得注意的是,英特尔新的oneAPI计划包含一个名为DPC++的并行C++编译器,它是OpenCL上的SYCL实现。

NNEF – 神经网络交换格式

目前有数十种神经网络训练框架在使用,包括Torch,Caffe,TensorFlow,Theano,Chainer,Caffe2,PyTorch和MXNet等等,并且都使用专有格式来描述其训练的网络。市场上还有数十种,甚至数百种嵌入式推理处理器。迫使许多硬件供应商理解和导入如此多的格式是一个经典的碎片化问题,可以通过开放标准解决,如图 4 所示。

机器学习

图4.NNEF 神经网络交换格式可通过推理加速器简化对训练网络的摄取

NNEF 文件格式旨在为网络训练和推理芯片世界提供有效的桥梁——Khronos 经过验证的多公司治理模型为硬件社区提供了强有力的声音,说明该格式如何以满足开发处理器工具链和框架的公司的需求的方式发展,通常在安全关键市场中。

NNEF不是业界唯一的神经网络交换格式,ONNX是由Facebook和微软创立的开源项目,是一种广泛采用的格式,主要关注训练框架之间的网络交换。NNEF 和 ONNX 是互补的,因为 ONNX 跟踪训练创新和机器学习研究社区的快速变化,而 NNEF 针对的是需要具有更深思熟虑的路线图演变格式的嵌入式推理硬件供应商。Khronos围绕NNEF启动了一个不断发展的开源工具生态系统,包括来自关键框架的导入商和导出商以及一个模型动物园,以使硬件开发人员能够测试他们的推理解决方案。

OpenVX – 便携式加速视觉处理

OpenVX(VX代表“视觉加速”)通过提供图形级抽象来简化视觉和推理软件的开发,使程序员能够通过连接一组函数或“节点”来构建所需的功能。这种高级抽象使芯片供应商能够非常有效地优化其OpenVX驱动程序,以便在几乎任何处理器架构上高效执行。随着时间的推移,OpenVX 在原始视觉节点之外添加了推理功能 - 神经网络毕竟只是另一个图!通过将NNEF训练的网络直接导入OpenVX图,OpenVX和NNEF之间的协同作用越来越大,如图5所示。

机器学习

图5.OpenVX 图可以描述视觉节点和从 NNEF 文件导入的推理操作的任意组合

OpenVX 1.3 于 2019 年 10 月发布,支持针对垂直细分市场(如推理)的精心挑选的规范子集作为正式标准实施和测试。OpenVX 还与 OpenCL 进行了深度集成,使程序员能够添加自己的自定义加速节点以在 OpenVX 图形中使用,从而提供简单可编程性和可定制性的独特组合。

OpenCL – 异构并行编程

OpenCL 是一种低级标准,用于对 PC、服务器、移动设备和嵌入式设备中的各种异构处理器进行跨平台并行编程。OpenCL 提供基于 C 和 C++ 的语言,用于构建内核程序,这些内核程序可以在具有 OpenCL 编译器的系统中的任何处理器上并行编译和执行,从而明确控制程序员在哪些处理器上执行哪些内核。OpenCL 运行时协调加速器设备的发现,编译选定设备的内核,以复杂的同步级别执行内核,并收集结果,如图 6 所示。

机器学习

图6.OpenCL 使 C 或 C++ 内核程序能够在异构处理器的任意组合中并行编译和执行

OpenCL 在整个行业中广泛使用,为计算、视觉和机器学习库、引擎和编译器提供最低的“接近金属”执行层。

OpenCL最初是为在高端PC和超级计算机硬件上执行而设计的,但在与OpenVX类似的演变中,需要OpenCL的处理器变得越来越小,精度越来越低,因为它们的目标是边缘视觉和推理。OpenCL 工作组正在努力定义为嵌入式处理器量身定制的功能,并使供应商能够完全一致地针对关键功耗和成本敏感用例提供选定的功能。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分