中文 英语

降低人工智能能耗的11种方法

将人工智能推向边缘需要新的架构、工具和方法。

受欢迎程度

随着机器学习行业的发展,重点已经从仅仅解决问题扩展到更好地解决问题。

“更好”通常意味着准确性或速度,但随着数据中心的能源预算激增机器学习移动到边缘在美国,能耗已取代精度和速度成为一个关键问题。神经网络有许多方法可以降低能量消耗。

“每个人都在寻找替代的执行方式神经网络这将大大降低功耗,”软件工程组主管,定制IC和PCB组Elias Fallon说节奏

其他人也同意。谷歌数字设计组研发、人工智能和机器学习解决方案总监Venki Venkatesh表示:“谷歌本身担心的是神经网络创建和训练过程中的力量Synopsys对此

每一个关于神经网络的决定都会对能源产生影响。模型本身会影响性能,实现硬件的选择也会影响性能。虽然性能和功率一直是对立的,但许多低能耗的选择也可以提高速度。它的准确性可能更容易受到低能量实现的影响。

我们经常谈论"电力消耗仿佛权力是可以消耗的东西。但功率是能源消耗的比率。“对于制造这些东西的硅供应商来说,功率是非常重要的。他们需要正确地设计电源轨道和电压,”Cadence公司Tensilica AI产品营销总监Suhas Mitra表示。“但对于IP选择来说,更重要的事情是降低能量。”

换句话说,如果限制是热量,那么功率是最重要的。如果限制是电池寿命,那么重要的是能量消耗,而不是功率。

Lightmatter首席执行官尼克·哈里斯(Nick Harris)表示:“能量饱和会变成功率饱和,因为一旦芯片的功率超过几百瓦,就无法冷却。”“然后这就变成了,‘我不能用晶体管来做计算工作。’”

更少的计算和数据意味着更少的能源消耗。这推动了许多降低能源使用的架构方法和特定策略。此外,更少的数据移动意味着更低的能源消耗。这些想法可以独立运作,也可以叠加在一起以节省更多成本。

1.小排量车型。在所有其他条件相同的情况下,较小的模型具有更少的层和更少的过滤器,因此需要更少的计算和内存。

Synopsys ARC处理器研发总监Fergus Casey表示:“我们发现,在处理相同数据集的图表之间,计算能力存在数量级的差异。”“有时,为较低的计算要求而优化的图形甚至不会降低结果的准确性。”

不幸的是,简单地选择一个较小的网络进行培训可能不是一个好的解决方案。在一个地区奥卡姆剃刀可以应用到很大的效果,目前的趋势,更大的模型指出了挑战。如果小模型就足够了,那么就不需要大模型了。但它们还在不断变大。

这是由于需要更高的准确性和更复杂的决策。在更广泛的训练样本中做更好的工作可能需要更大的模型。在一组样本中处理更多的细微差别(区分长得像猫的狗和长得像狗的猫)也需要更多的重量。

正如我们将看到的,有一些想法可以在战术基础上使模型更小,但如果MobileNet足以满足所有需求,那么我们就不需要YOLO了。相反,当计算平台和能源需要时,会选择较小的模型,并将准确性作为潜在的权衡。

2.移动更少的数据。这可能是最明显的能源缓解措施,因为人们普遍认识到撞击地球的影响内存墙.这里的解决方案本质上是高度架构化的。

虽然之前的方法建议减少数据,但内存墙并不是减少数据,而是减少数据的移动次数和缩短距离。对于给定的数据量,体系结构可能是一个决定因素。

最坏的情况是一个CPU处理整个网络。对于每一次计算,数据都必须读取、操作并再次存储起来以供以后使用。对于给定的一组操作数,还必须获取和解码指令。开销占主导地位,损害了电力和性能。

在频谱的另一端,是权重保持不变,激活在芯片内递增向前移动的架构。通过使芯片大到足以容纳整个模型,重量可以加载一次并留在原地。通过在每个过滤级的输出端定位SRAM的小块,激活可以流向附近的单元进行进一步的计算,而不是必须回到DRAM中,然后再取出来。

然而,保持体重不变只是一种选择。Casey说:“权重平稳对传统卷积来说可能是最有效的,但非批处理的全连接层在输入平稳或输出平稳模式下更有效。”后者指的是生成一个几乎最终的结果,而不是存储一系列部分结果并随后组合。

在这个领域,电力和消耗的能源之间的区别可能会有很大的不同。理论上,如果所有计算都通过一个消耗x能量的单一核心进行,那么y次计算所消耗的能量将是x乘以y。

如果同一个内核的数组有足够的内核并行处理所有的计算,那么你就有y个核做1个计算,而不是1个核做y个计算。所消耗的能量应该是相同的,但事实上,平行版本在更短的时间内消耗能量,使其功率更高。

提高局部性的另一种方法是在尽可能靠近数据源的地方进行尽可能多的计算。Andy Heinig,高级系统集成组组长和高效电子部门主管弗劳恩霍夫IIS的自适应系统部的工程师,用一个传感器融合的例子说明了这一点。他说:“对于不同的任务,将数据处理分散到不同的地方非常重要。”“第一个处理步骤应该直接在传感器上进行,然后在边缘节点上进行进一步处理,它汇总了来自不同传感器的信息。”

在像汽车这样的应用程序中,传感器是广泛分布的,因此可能需要一些中央计算轨迹来折叠所有传感器。“有些决定只能在中央处理器上完成,因为只有来自所有传感器的所有信息可用,”Heinig补充道。最小化中央计算意味着更少的数据从车辆的远端传输。

通常,有效的编译器可以通过仔细使用缓存、fifo和/或DMA操作来优化数据移动。

在所有其他条件相同的情况下,这种架构选择不应该影响准确性。

3.在可能的情况下减少计算。对于给定的模型,可能有一些方法可以用更少的操作来计算结果。卷积的一个流行例子是Winograd的方法。

“使用卷积的Winograd变换可以显著减少大型张量操作所需的计算量,显著降低过程中的功耗,”Steve Roddy说,他是at机器学习组的产品营销副总裁手臂

卷积矩阵乘法的直接方法的规模是n的数量级3.,而Winograd将其缩减为n2.特别是,它减少了“强”计算(乘法)的数量,代价是额外的“弱”计算(加法)。

激活函数的选择也很重要。“依赖于tanh作为激活函数的小型模型可能比使用简单ReLU的稍微大一些的模型效率更低,”Casey指出。

执行模式的选择也很重要。使用TensorFlow Lite或其他等价的解释方法可能比直接为底层硬件编译的模型消耗更多的能量。

4.批处理有帮助——在可能的情况下。对于某些应用程序,比如处理静态图像或帧的集合,可以通过增加批处理大小来提高效率。这意味着给定的处理资源配置(内核代码和权重)可以分摊到更多的样本上,从而导致更少的数据和指令获取。

但这只适用于某些应用程序。而且它通常只适用于数据中心实现,在数据中心实现中,操作是在已经驻留的大量示例集合上执行的。

边缘应用程序通常一次接收单个数据包。根据定义,它们必须在开始处理下一个数据包之前完成单个数据包的处理。因此,这种技术并不能很好地应用于一些可以使用它的实现——最小的电池供电的边缘设备。

批处理也不会影响准确性。同时从大量数据中获得的结果应该与一次完成一个完整样本的相同处理没有区别。

5.数据格式很重要。在计算中使用最精确的数字将获得最高的精度。这就是为什么训练通常涉及浮点数。

但是浮点电路比整数电路消耗更多的能量。用更多比特表示的整数比用更小比特宽度表示的整数使用更多的能量。

量化为整数是常见的,尽管不是普遍的。在这种情况下,许多公司似乎都选择了8位整数。但研究人员也在研究更小的整数——4位、2位,甚至1位。这意味着更少的数据存储和移动。

限制是单比特实现,这就产生了所谓的“二进制神经网络”(bnn)。林利集团总裁兼首席分析师林利·格温纳普在林利2021年春季会议上说:“这不仅减少了计算量和内存量,而且实际上可以完全摆脱多重电路。”“当一个比特乘以一个比特时,它是一个XNOR逻辑门来执行这个功能。因此,这将大大节省计算和电力。”

这里的权衡是准确性。Mitra说:“当你做出这些权衡时,你就会从浮点数到量化版本,再到更低的比特精度。”“神奇的是,所有这些事情都是可能的。人们忘记的是,没有什么是免费的。”

模型在量化后可能需要重新训练,以使精度再次恢复。量化感知训练可以通过将所需的位宽合并到原始训练中来提供帮助,从而潜在地避免了下游再训练步骤的需要。

精度也可以通过允许不同的层具有不同的精度来调整。训练框架支持这一点,平衡低能量和更高精度的需求。

一些公司花费了大量精力寻找在不影响准确性的情况下减少数据大小的方法。“IBM能够实现同样的精度,从INT8到INT4,这是非常令人印象深刻的,”Gwennap说。“即使使用2位整数,准确度也在1%或2%之内。”

如果要保持准确性,减少数据量可能会产生一个副作用。Heinig说:“通常,数据类型越小,网络的规模就越大。”“肯定有一个最佳点。但最佳点可能是针对特定应用的。”

6.稀疏性会有所帮助。神经网络计算都是关于向量和矩阵数学。理论上,计算量仅由矩阵大小决定。但是0值的元素会产生0的乘法结果,这是已知的先验。不需要运行计算。所以向量或矩阵中0的个数越多,真正需要的计算量就越少。

原则上,一个原始模型可能比其他模型更稀疏。在这种情况下,利用这种稀疏性并不需要权衡。但通常,矩阵或向量不是真正的稀疏,它们可能有非常小的数。我们的想法是,这些条目对整体结果的影响可以忽略不计,因此可以将较小的数字更改为0以构建更稀疏性。

这可以在模型开发期间通过修剪过小的权重来实现,从而导致权重矩阵更稀疏。根据选择的激活函数,也可以对激活进行实时处理,从而得到更稀疏的激活向量。

英伟达有一个动态版本,包括屏蔽零值权重。这增加了电路的复杂性,同时比其他方法更大程度地利用稀疏性。

图1:英伟达的方案可以利用不同位置的稀疏性,通过聚类非零值并使用掩码来确保这些值乘以适当的激活值。资料来源:林利集团

图1:英伟达的方案可以利用不同位置的稀疏性,通过聚类非零值并使用掩码来确保这些值乘以适当的激活值。资料来源:林利集团

这也是准确性的问题。例如,当一个给定的权重被剔除时,我们假设它不会对结果产生有意义的影响。对于这个权重,这可能是对的。但如果对大量权重进行修剪,则累积结果的精度可能较低。

出于同样的原因,引入稀疏性可能不会对给定的激活产生太大影响。但如果每一层都发生这种情况,那么错误就会累积起来,从而降低准确性。

7.使用压缩。对于给定的稀疏性级别,压缩有助于减少移动的数据量。在设计时,可以以牺牲解压缩硬件为代价来压缩权重。在运行时,可以以牺牲压缩和解压硬件为代价来压缩输入或激活。

该公司高级技术人员、系统工程师Ashutosh Pandey指出:“减压的能源成本比获取额外比特的能源成本要小得多。英飞凌

这种压缩,假设它是无损的,应该对精度没有影响。

8.专注于事件。视频由一系列按顺序排列的图像组成。每一帧都与前一帧不同——有时很大,但更多时候是微妙的。例如,一个物体可以在画面中移动,而背景保持静止。

传统的方法是对每一帧的固定信息进行重新处理。随着时间的推移,会有很多冗余处理。另一种方法是只关注流中发生变化的内容。这通常比全帧的像素要少得多,可以减少计算量和内存。

这可以使用标准的神经网络架构来完成,但只关注变化。对于第一帧,必须处理整个帧。对于连续的帧,可以在当前帧和前一帧之间取一个“差异”,将工作只指向那些发生变化的部分。

这些更改被归类为“事件”,这种体系结构是一种“基于事件”的方法。GrAI Matter就是一个例子,这家公司拥有或多或少的传统网络,但它适用于事件领域。

这个想法的另一个实现是尖峰神经网络SNN。snn被认为是神经形态的,它们没有与更传统的人工神经网络(ann)相同的结构。英特尔的Loihi项目是围拢snn的一次巨大尝试。BrainChip的商业产品则更为温和。

图2:尖峰神经网络模仿大脑,通过关注事件来降低能量。资料来源:林利集团

图2:尖峰神经网络模仿大脑,通过关注事件来降低能量。资料来源:林利集团

目前还不清楚使用基于事件的方法是否会对准确性产生特定的影响。

Casey指出了基于事件的架构的一个挑战:由于缺乏同步,“完全事件驱动的SNN将无法利用任何向量化。”这可能会导致计算效率降低——这可能会让一些节省下来的能源付回。

9.使用模拟电路。模拟实现可以比数字版本消耗更少的能量-特别是在模拟信号上进行计算时。将模拟转换为数字会消耗大量的能量,所以如果可能的话,保持在模拟域中可以节省能量。Gwennap指出:“使用模拟计算可以将功耗降低10倍、20倍甚至更多。

如果传入的传感器流具有较低水平的相关数据,这可能特别有效。不将不相关的数据转换为数字数据进行分析可以节省能源。Aspinity就是一家遵循这条道路的公司。

内存计算(IMC)也利用模拟,但它的特点是在数字芯片中使用模拟岛。数字数据必须精确地转换为模拟数据进行计算,然后结果必须精确地转换回数字,从而降低了整体节能。但是他们声称,在模拟领域的能源节约仍然是净能源的胜利。Mythic公司就是使用这种技术的一个例子。

IMC可以通过两种方式降低功率。英飞凌RAM产品线应用工程和产品营销、内存解决方案高级总监Ramesh Chettuvetty表示:“不需要从内存中获取数据是一个压倒性的因素。“但另一件事是IMC极大地提高了计算并行性。”

图3:内存计算通过内存数组将乘法加法运算转换为欧姆定律练习。权重保留为阵列中的电导值。资料来源:林利集团

图3:内存计算将乘法-加法运算转换为欧姆定律通过记忆数组进行练习。权重保留为阵列中的电导值。资料来源:林利集团

在更多的地方使用模拟技术确实存在一个主要障碍,正如Heinig所指出的:“模拟技术的实现要复杂得多。”

10.用光子代替电子。当传统的开发人员与摩尔定律作斗争,以扩大可以在一块硅片上完成的电子计算时,很少有公司转向摩尔定律硅光子学.这可以降低能源消耗,因为计算本身不消耗能源。

所有用于光子计算的能量都来自激光。在计算阶段,这些能量会以不同的方式被分割和重组,一些能量会在波导中损失。但从根本上说,激光是外部能量的唯一消耗者。其余的电路只是消耗能量,希望在输出信号中留下足够的能量。

这使得创建具有低损耗波导的高效光子学平台变得更加重要。但是这个平台的奇异程度是有限的,因为今天的实用光子学芯片将需要与CMOS兼容,以便利用fab效率来降低成本(无论CMOS电路是否与光子学共驻留在单个芯片上)。

图4:光子“电路”不使用能量进行计算功能。所有的能量都是通过激光引入的。资料来源:林利集团

图4:光子“电路”不使用能量进行计算功能。所有的能量都是通过激光引入的。资料来源:林利集团

11.优化您的硬件和软件。根据底层计算硬件的能力定制实现也会降低功耗。这可能意味着更高级别的体系结构或更低级别的细节。潘迪说:“如果你能根据你的应用量身定制管道,这是一种节省电力的方法。”

越早做越好。“也许最大的杠杆来自于为目标硬件量身定制网络,并在模型开发时这样做,”Roddy说。“今天的培训框架中有大量的技术,强调在设备上进行推理部署。”

在某些情况下,你可能会先训练模型,使用一个粗略的裁剪,只是为了让一些东西尽快工作。一旦确定了硬件,针对该硬件的再训练或专门针对该硬件的编译将导致更有效的实现。

虽然大部分注意力都集中在硬件架构上,但几乎总是有一些软件组件在执行。如何优化——例如,如何嵌套循环——会影响能源消耗。

结论
对于传统电路,人们通常认为,为了让速度更快,你必须使用更多的能量。在这个游戏中,速度和力量是永无止境的战斗。但在降低AI能耗的情况下,许多技术也有助于提高性能。

例如,通过将数据保持在本地或固定,可以节省能源,而不会受到数据获取的延迟增加的影响。稀疏性减少了计算量,这意味着您可以更快地完成。

最终的例子是光子学。计算将有皮秒级的延迟,高水平的并行性可以使用波分复用实现,在皮秒级的时间框架内并行完成多个计算流。

然而,这不是免费的午餐。在功率和性能不冲突的情况下,折衷可能是成本和/或准确性。人们很可能会为了功率和速度的好处而牺牲硅面积。也就是说,花在硅上的钱可以用更低的能源账单来回报自己。



1评论

罗恩Lavallee 说:

另一种降低功耗和提高执行速度的方法是使用无时钟(异步)方法来设计和执行AI系统,使用“并行异步建模和执行的处理电路”。

留下回复


(注:此名称将公开显示)

Baidu