继续Seeing Machines对DMS商业化落地所遇到的挑战的总结。
神经网络简介
机器学习领域,如今也被称为深度学习,对于许多类算法尤其是计算机视觉领域的算法来说,其性能已经发生了一步步的变化。“深度学习”这一术语最终包含了有效发现数据中存在的关系并将其编码为神经网络(NN)“模型”的技术。这些模型是由一组节点(或人工神经元)和节点之间的连接(或人工突触)组成的数学构造。每个节点实现一个简单的数学函数(或“激活”函数),应用于输入并通过输出传递给下一个节点。网络的结构通常是共享一个共同激活函数的节点层。分层方法适合于这样的实现:各层作为处理pipeline中的离散阶段进行处理,从输入层到“隐藏”层,再到最后的输出层。
深度学习网络的“深度”是指可能有几十个隐藏层。更奇特的网络结构允许超越相邻层的连接,或者可能有递归(或循环)连接,允许反馈循环和有状态的记忆效应。
网络的设计维度包括:(i)每层激活函数的类型,(ii)应用于每个节点的输入和激活函数的缩放和阈值系数,(iii)整体节点和层的连接(或拓扑结构),(iv)每层的节点数和整体层数。这些设计维度是算法开发和训练过程中的“自由变量”。深度学习技术的神奇之处在于训练算法能够搜索这些自由变量的所有组合的广阔空间,并且只用一点数据就能迅速收敛到网络设计,将数据中的关系纳入到NN模型中。因此,“训练环境”往往是最先进的深度学习技术的关键成分,并被认为是任何技术公司的宝贵IP。
今天,有许多众所周知的网络“类别”。这些网络拓扑结构已经被研究证明优于其他传统类别(当与该类别的专门训练环境相配时)。网络类别被赋予了一些名称,这些名称在机器学习界是众所周知的(例如,LSTM、MobileNet、ResNet和其他许多名称)。
在过去的十年里,网络类别一直是研究热点,并迅速发展。这种演变是由于网络面临的压力:(i)在更少的计算周期内进行训练,使用更少或更低质量的训练数据,(ii)为现有类别提供卓越的性能结果,同时(iii)产生更小和执行更快的网络,从而减少嵌入式处理成本。这构成了Seeing Machines JGEP优化周期的一个关键部分。
虽然深度学习和NN在学术界有很长的历史,但它们大约在十年前开始进入商业产品。这是经典的技术颠覆“S曲线”的开始,它开始于自然语言理解和互联网搜索引擎的图像分类领域。紧随其后的是用于数据中心(云)的定制NPU加速,包括主要由英伟达的GPU发展而来的设计、谷歌的定制ASIC解决方案,以及微软的FPGA实现。这些有助于推动“深度学习AI”在许多日常(在线)产品中的最初的大规模应用。
如今,深度学习的AI已经在很大程度上取代了计算机视觉领域中最好的经典技术。“AI”算法正在为许多新型产品提供动力,不仅在云端,而且在“边缘”,在本地运行的智能手机和一些物联网设备上。用于高效开发NN的工具包(如TensorFlow、Torch、ONNX和其他)现在已经非常成熟,并催生了一个巨大的开发者社区,从而产生了一个通常被称为“AI驱动”的全新产品类别。
虽然这些产品不是真正的智能(它们只是很好地检测模式),但它们也许因为能够在从复杂和嘈杂的数据中快速提取有意义和可操作的信息的任务中胜过人类而获得“AI”的称号。然而,大多数网络仍然高度专业化,只执行“有限”的任务,如人脸识别。因此,它们被更准确地称为“狭义AI”,或者对那些老派的人来说,只是非常好的“专家系统”。
处理成本的挑战尽管在算法领域有上述的优势,然而,NN并不是没有缺点的,最重要的是与经典技术相比,处理需求很高。
我们将处理成本(COP)定义为产品成本结构中由算法处理需求直接或间接驱动的那部分。在没有实际建立竞争解决方案的情况下,COP可能是一个难以估计的数值,因为它不仅包括专门用于执行数字计算的额外芯片的成本,还包括诸如额外的PCB空间、热和电源管理方面的成本,如电容、电感、电源管理IC、额外的板层、更多的引脚、更大的散热片、外包装材料,以及任何额外的IP许可(如第三方加速器设计)。
COP是一个主要障碍,它限制了NN的尺寸、性能,以及最终NN向低功耗、低成本产品的扩散。这一障碍是由于以下事实:(i)NN有数据流和运算符,无法在传统的冯诺依曼CPU设计(如ARM或英特尔x86内核)上有效执行,以及(ii)通用NPU不一定是良方,可能会给任何SoC增加成本和功率需求。
内存带宽和神经网络
现在让我们把前一章的内存带宽数字作为处理成本的主要维度之一来看。我们将考虑嵌入式系统中使用的一些常见的NN,并了解从内存带宽的角度来看,在给定的处理速度下运行一个量化模型(8位)需要什么。请注意,我们将在下一节中更详细地探讨NN的执行加速问题。
在没有本地/内部缓存的情况下,使用INT8量化模型的普通NN对不同处理速率的原始内存带宽要求
上图代表了最坏的情况,因为它假设一个加速器没有本地缓存可以被调用以减轻DDR内存的访问。如果能巧妙地利用本地缓存,这些数字可以减少很多,有时至少减少50%或更多。当然,情况并不总是如此。事实上,除非整个网络可以在缓存外执行,否则这种缓存有时是无法使用的。很多时候,考虑到DMS在30fps(有时更高)下的实时处理的性质,网络需要谨慎地调度,以满足DMS结果的33ms的周期性限制(或当处理速率更高时,甚至更短的周期性期限)。这严重限制了在连续区块中 “批量”运行网络的可能性,而许多可用的加速器已经为此进行了优化。理解这一点的另一种方式就是那句常被说的“吞吐量可以买到,但延迟必须去争取”。加速器的设计是为了最大限度地提高吞吐量,但在这样做的过程中,它们可能会延长实时任务的延迟,并经常无法按时完成任务。
抛开板载缓存对DDR带宽的改善,可以很容易地看到,以更高的处理速度运行任何这些网络,很快就会开始需要大量的内存带宽。虽然Seeing Machines的算法并不完全是基于这个表格中列出的网络,但它有助于说明在这些较高的处理速度下是多么容易迅速消耗这类设备的资源预算(这就是Occula NPU和我们开发在Occula上运行的定制网络的原因)。有很多网络(实际上是大多数)不需要运行任何接近“跟踪”算法所需的速率。例如,一些DMS设计需要实现10个或更多的网络,这些网络以截然不同的速率并发执行。
在不同的处理速度下分配给各种网络的相对带宽大小
上图所示的是一个直观的例子,每个框的大小代表了可用内存带宽对不同网络的相对分配(不同颜色)和它们所需的处理速率(不同层)。对于任何给定的任务,NN的类型不在本文的讨论范围之内,只是说不同的NN具有不同的性能特征,因此与所需特征的KPI直接相关。算法要求和性能将决定网络的类型和所需的最低处理速率。处理pipeline必须确保每个网络的执行速度不低于其要求的处理速度,并始终能够满足其周期的时限(即批处理不是一个自动选项)。