| ||
由于硬件和软件两边都有不同目标,机器学习领域是否正在朝着另一个软硬件分离的趋势发展呢?
机器学习是当今最热门的研究领域之一,但是到目前为止,大部分人都把注意力集中在云、算法以及GPU上。对于半导体行业而言,机器学习在一些汽车电子、便携式设备以及物联网领域有着很大应用前景,一般会将其用于优化和整合系统解决方案,提高解决方案的实用性。
一般当某种东西变得容易获得之后,效率便会变得低下。对于机器学习行业来说也是如此,例如大家都认为GPU是机器训练(Machine training)解决方案中性能最高的。并且由于这些设备是基于浮点运算的,所以设计出来的机器学习的算法都是基于浮点的。
边缘设备(Edge Devices)中的推理运算无法使用浮点运算,并且一般都需要将浮点系数转换为定点。现在我们可以使用定点运算来进行机器训练吗?虽然针对定点运算的专用硬件才刚刚被提出来,但是这也是有可能的。我们还不清楚,现有的机器学习的算法以及开发工具是否已经被牢牢确定下来,是否没有任何改变的可能性,迫使机器学习硬件行业只能沿着像通用软件一样低效率的路径继续前进。
现在看来很大的一个问题就是,机器学习这个行业的发展是否也会产生另一个硬件和软件的鸿沟。这很可能表现为云计算与嵌入式设备两个截然不同的发展方向。除非我们采取一些新的方法来消除这两者之间的差异,否者差别只会越来越大。
Babblabs首席执行官Chris Rowen认为,在如今,某个时刻很可能就有数十个甚至数十万个网络正在进行机器训练,并且我们很快就会生活在一个数百亿网络同时进行推理运算的世界。
目前的现状
如今大多数的机器学习的算法开发都集中在云上,大部分的假设推理运算(assumes inferencing)也都是基于云计算。推理运算所需要的计算算力在整个机器训练过程中只占有的很小的一部分,所以很少有人去关注。
硬件与软件的鸿沟是真的吗?Mentor嵌入式系统事业部高级研究主管兰迪艾伦说,目前机器学习社区中算法设计者和算法实现人员之间存在很大的分歧。那些算法设计人员使用Matlab和Python来进行设计,对底层的硬件实现不会提供任何帮助。他们并不关心硬件是否支持定点运算,只想在硬件设备上运行算法而并不关心如何去优化。
Synopsys嵌入式视觉处理器产品营销经理Gordon Cooper也认为我们需要关注底层的硬件实现。他说,如果你像Google公司一样进行人工智能或机器学习开发,你或许会有很多GPU服务器来供你使用而完全不用担心计算资源。但是如果你是在安卓手机或者汽车芯片上进行机器学习开发,你可能会非常关注芯片的功耗以及成本乃至于芯片面积的大小,并且希望在满足功耗限制以及面积限制的前提下,获得最大的性能。
在嵌入式级别,我们将利用所有可用的技术。Rowen认为,机器学习是一个广义的术语,包括很多非神经网络方法(例如向量机,随机森林)以及深度学习方法,尤其深度学习中的神经网络,这些不太深入的机器学习方法并不像深度神经网络那样具有计算密集性,因此GPU和FPGA理论上的效率优势可能就显得不那么重要了。
总体而言,实际的应用程序,即使是那些深度利用机器学习的应用程序也是由很多部分组成的。Rowen认为里面包括图像预处理,MPEG解码,图像和是视频剪辑,特定区域选择,运动检测,背景删除,直方图绘制,转码,数据分割,数据库访问,数据格式化,图像平滑,噪声消除,数据增强,人脸检测,快速傅里叶变换,帧到帧跟踪,I/O数据处理以及处理流水线(complete processing pipelines)的各种拼接。
硬件解决方案有着很久的历史,Cooper说,在嵌入式计算机视觉领域,使用传统的计算机视觉理论已经进行了很多年的工作,基于这个我们可以编写一段程序来确定某个东西是否是一个行人。方向梯度直方图(Histogram of gradients)就是其中的一种程序,它会查找人们周围的边缘,然后尝试确定其行为模式及其对应的内容。这就是矢量DSP(vector DSP)使用大型SIMD乘法进行像素处理所利用的程序。
从中我们也可以看出,当今很多的机器学习的硬件解决方案都是各种技术的组合,例如部署矢量处理技术以及将神经网络紧密耦合到组合加速器引擎中。此外与很多其他的硬件解决方案一样,我们也不得不做出很多权衡。如果我们利用ASIC芯片,或许能够获得最低的功耗以及最小的面积。但是如果我们希望我们的产品可以不断的更新,时刻引领潮流,我们可能就需要考虑到芯片的可编程性了。机器学习这一行业正在当今这个快速变化的环境中寻找理想的解决方案。