当我们考虑机器学习时,首先能够想到的是,通过服务器集群搭建的大数据中心和云平台,对于很多机器学习的应用来讲,这是一个存在了很多年的标准搭建方式。但近些年来,随着硬件能力的不断提升、物联网场景的出现以及成本的下降,大量的应用场景从云端转移到了边缘。在这样的模式转换中,随着智能化越来越接近事件发生地而远离云端,节点设备会变得更加自主化。这些变化导致了很多有趣的应用产生,例如无人机、ADAS辅助驾驶以及可移动的智能机器人,而且这仅仅是个开始。
在本文中,我们将在系统设计层面,综合阐述如何考虑在边缘部署人工智能。通常,一个比较典型的思路,可以归纳为对于任务的理解、算法的选择,以及对于推理模型的训练和部署。
目标:问题定义
架构:选择正确的工具
应用的需求和限制是驱动带有人工智能算法的最终产品标准的因素。这些需求和限制,与鲁棒性、推理时间、硬件资源以及服务质量相关,这对于考虑边缘方案的部署以及嵌入式平台的选型至关重要。鲁棒性代表了模型输出的精确度,以及防止运算结果过度拟合的能力。一般来讲,模型越复杂(深度和层级),数据集越丰富,鲁棒性越好。
推理时间的需求完全取决于应用场景。对于有些场景,例如自动驾驶,考虑到功能安全因素,需要机器视觉系统的响应时间在毫秒级别,但对于测量值变化缓慢的传感器融合系统来说,需求就没有这样苛刻。推理的速度取决于模型的复杂度,模型的层级越多,需要的计算就越多,从而导致更长的推理时间。这个问题可以通过选择算力资源更为丰富的方案来规避,例如嵌入式GPU、DSP,以及带有OpenCL内核的神经网络加速。
模型的内存占用是随着神经元数量以及权重的增加而增加的,每个权重都需要作为数据存储在内存中。为了减小模型占用的内存,以及解决一些硬件细节问题,可以将权重从浮点数或双精度数转换为整数进行存储。服务的质量以及系统的可靠性取决于模型的部署。在云端为基础的方案里,连接的需求使得系统的可靠性存在疑问,一旦服务器无法可靠连接,服务就无法获取,决策也就无法正常处理。在这种情况下,边缘部署就成了唯一可行的方案,例如自动驾驶汽车以及需要隔离的环境。基于机器学习的算法,本质上是概率系统,其输出具有一定的不确定性,理解这一点很重要,但在许多情况下,AI系统所做出的预测精准度和可靠度,早已超过人类的判断。至于系统设计是否需要90%乃至99%的概率,是由应用需求决定的。
最后,设计者应该根据解决方案的开发难度以及可扩展性的需要,来考虑采用何种硬件和软件。举例来说,在NVIDA Jetson这个AI应用嵌入式开发平台上运行模型,软件可以无缝运行,从而大大降低软件开发成本。
Jetson AGX Xavier开发套件
数据 & 训练:获取正确的结果
训练模型有很多种方法,简要来说,分为监督学习、无监督学习以及增强学习。对于监督学习,首先数据集会被标注,就图像分类而言,图像和标签是成对出现的。图像通过模型的各层向前传播,每层增加一点抽象,最终得到分类值;输出的分类值与标签进行比较,得到的误差反向传播到模型初始以更新权重。而对于无监督学习,数据集不会被标注,模型会开启自我寻找模式。对于增强学习,电子游戏是个最好的应用用例,增强学习的目标是在与环境的交互过程中,通过一系列的后续行为,对环境的反馈作出响应,达成回报最大化,例如执行一系列从一个地方移动到另一个地方的连续控制决策。
部署和推理:尚未解决的挑战
大多数的深度神经网络会在大型的GPU 上完成训练。当模型被用来进行推理时,例如通过神经网络的正向传播,以获得对单个样本的预测或者分类,可以使用的平台有很多种。我们可以将用于推理的模型部署在微控制器为Cortex M、Cortex A的设备上,这些微控制器带有GPU、神经网络加速、FPGA 或者专有ASIC,硬件的选型取决于应用的需要,而它们的区别在于运算能力、功耗以及成本。选择方案时,最棘手的一点在于如何有效且简易地部署模型。一般来说,模型训练通常会在诸如Tensor Flow或者Caffe这样的深度学习框架下完成,这些训练好的模型必须转变成在边缘设备的推理引擎上能够运行的格式。举例来说,使用开放式神经网络交换格式(ONNX),或者是在Cortex M 上使用的ARM CMSISNN文件格式。除此之外,模型还需要根据边缘设备的特点进行进一步的优化,可以通过剪枝(删除接近零的值)、量化(从float32移动到integer)或压缩来优化权重。
模型在边缘设备上的部署和运行,最终还是需要通过推理引擎来实现,这取决于设备供应商为OpenCV或者OpenCL等框架支撑所提供的目标处理器以及组件。令人遗憾的是,这个市场目前碎片化很严重,我们可以看到很多不同版本的SDK 以及工具,并没有一个统一的标准来指导如何在边缘节点上部署和推理。因此,业界对于类似于ONNX这样的统一标准更感兴趣,期待标准化的进一步演进。
责任编辑:Ct
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)