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

不断发展的机器学习领域为部署设备和应用程序创造了新的机会,这些设备和应用程序利用神经网络推理,具有前所未有的基于视觉的功能和准确性。但是,快速发展的领域已经让位于处理器、加速器和库的混乱格局。本文讨论了开放式互操作性标准及其在降低成本和在实际产品中使用推理和视觉加速的障碍方面的作用。
每个行业都需要开放标准,通过提高生态系统元素之间的互操作性来降低成本并缩短上市时间。开放标准和专有技术具有复杂且相互依存的关系。专有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 工作组正在努力定义为嵌入式处理器量身定制的功能,并使供应商能够完全一致地针对关键功耗和成本敏感用例提供选定的功能。


怎样根据介质选择流量计
基于Arduino的机器学习开发
什么是汽车的智能钥匙/智能空调
蓄电池的寿命和性能与放电制度和使用条件是息息相关的
自制个人电子名片,简单实用
加速嵌入式视觉和推理的开放标准:行业概述
盘点新能源汽车补贴政策调整状况
广西敢为计划投资10亿元打造FPC生产基地
大族激光动力电池盖板组件的激光焊接应用流水线介绍
ONT是什么?
CMOS器件的输入信号上升时间为什么不能太长?
凌力尔特推出具集成输出断接功能的同步升压型DC/DC转换器LTC3122
示波器眼图的基本知识
用户视角下的中国人工智能 主流用例下沉碎片场景扩散
卧式蒸汽回收机的原理是什么,它的特点是什么
一份2019 AI算法岗求职攻略,快来“扫盲”吧!
IC Tag应用进入医疗院所 有助提高药品器材订购管理效率
Green LED Replaces LDO Regulator
高通服务器芯片更低功耗实现相同性能
机械设计中尺寸标注知识,教你看懂复杂的机械加工图纸