中文 英语
18.luck新利
的意见

快速、低功耗推论

重大贡献者定制开发硬件推论加速器的性能和效率。

受欢迎程度

力量和性能往往被看作是对立的目标,如果你将一枚硬币的两面。一个系统可以运行非常快,但它会消耗大量的电力。放松油门,能耗下降,但性能。优化功率和性能是具有挑战性的。

推测算法卷积神经网络(CNN)是计算密集型的。对于大型网络,他们可以涉及数十亿乘积累产生推理操作。当然,这意味着他们需要很长时间,而且消耗大量的电力。而cnn在python中往往是在通用计算机开发机器学习框架,如TensorFlow,许多将部署在嵌入式系统。这些都是出现在我们周围:聪明的演讲者,醒来当你说“Alexa,”汽车,轻轻推动你回车道,解锁的手机当它看到你的脸。但是嵌入式系统通常是有限的计算能力和可用功率,所以任何推测算法需要适应这些限制。

虽然力量是一个重要的指标,在考虑的选项部署一个推测每个推理算法的能量应该看,。回想一下,权力是能量的单位时间-瓦=焦耳/秒。确定能源/推理简单功耗乘以时间执行计算- j =瓦x秒。电池供电的嵌入式系统最终是有限的能源,可以存储在电池中,这是一个固定数量的焦耳。

当部署一个推测算法在嵌入式系统中有很多的选择。一种选择是嵌入式CPU上运行它。这几乎可以肯定是最慢的选择。另一个选择是一个GPU。gpu带来大量的并行计算能力。它将计算一个推理比CPU快得多。此选项可能会有最高的功耗。张量处理单元(tpu)是另一种选择。像gpu,他们带来一个处理元素数组的问题。tpu专门定制的推论,所以他们通常会比GPU更有效率。 There are some very efficient edge TPUs from Google and NVIDIA. But to really push the boundaries of performance and efficiency requires a bespoke accelerator, deployed in an ASIC or FPGA.

两个最重要的因素为自定义开发的硬件性能和效率推论加速器是量化和数据缓存。

当数据科学家们想出一个CNN的为一个特定的问题,他们很可能会在他们所有的计算使用32位浮点数。它足够小以减少内存占用,可以立即动手术的浮点指令CPU。但当实现硬件加速器,我们不需要使用32位浮点数,可以使用任何表示,提供正确的答案。定点表示法可以导致更小,从而降低功率,硬件。一个32位定点乘数大约一半的面积32位浮点乘法器。

减少数量的比特数的表示可以进一步提高效率。乘数的面积大约是输入因素的大小的平方。乘数与两个16位的输入是一个第四乘数的面积有两个32位的输入。一个8位乘法器是十六分之一。

事实证明使用一个32位浮点表示的数字在一个推测算法通常比需要更精确。作为一个实验,我们测试的准确性ResNET,对象识别算法,利用从32位定点数字一点。我们发现定点数到8位产生相同的准确性32位浮点数。和6 - 7位定点数字准确性仍在95%以上。图1显示了为不同的定点表示ResNET推断的准确性。


图1:ResNET准确性和位宽。

另一个或两个比特常常可以剃掉用数字表示饱和算术。通常情况下,如果一个数学运算溢出输出存储高阶位的大小只是下降。结果是错了,真的错了,任何进一步的计算将继续是错误的。这意味着推测算法的硬件需要能够从任何计算,存储最大的可能的结果。然而,数据科学家们了解到大量的大小,无论是积极的,还是消极的计算一个推理时并不那么重要。如果中间结果尤其如此“规范化”,或在1.0和-1.0之间,层间。与饱和数学如果一个操作将溢出的输出存储区域可能最大表示存储,而不是放弃高阶位并保持一个不正确的结果。结果仍然是错误的,但它是尽可能接近正确答案的硬件。

产生最好的结果,CNN应该被训练使用相同数量表示将用于推断法。幸运的是,这并不困难。Google的人能够产生一个包称为“QKeras”,或量化Keras可以发现http://github.com/google/qkeras。它具有相同的功能作为流行的机器学习框架Keras (http://keras.io)。而不是使用32位浮点数它使用定点数字和运算符。它使用开源算法C数据类型定义https://hlslibs.org。用户定义的大小定点数字用于执行任何培训或推论的计算。转换一个QKeras Keras CNN网络几乎是微不足道的。

量化网络,或者减少位数字表示的数量尽可能多,影响性能和权力两个方面。首先,数学和逻辑运算符使用更小、更节能。如前所述,ResNET具有相同的精度是否使用32位浮点数或8位定点数字(即使没有饱和数学),但只有3.1%的8位定点乘数的面积32位浮点乘法器。第二,减少数据存储和移动。推测加速器往往有更多的内存比逻辑。因此,电力消耗是由这些大的泄漏电流的记忆。任何可以减少重量或中间结果的存储需求是一个重大胜利对权力和性能。

图2显示了量化的影响,饱和数学,和培训网络不同的数字表示的准确性。一个曲线显示了量化的准确性网络没有再培训或饱和数学。另一个显示精度使用饱和数学但没有培训。最后,一条曲线的网络使用量化的数据,采用饱和数学操作重新训练。


图2:定点推论。

第二个重要因素是数据缓存性能和效率。NVIDIA的工程师们,他们都在机器学习加速器工作发现,从一片外存储器读取数据的能量消耗约200倍执行ALU基因操作。事实证明,在一个推论加速器数据移动是性能的主导因素和力量。任何大小的减少数据——每一点帮助是很重要的。而且抓取尽可能少的数据会有所帮助。

考虑到TensorFlow conv2d()函数,传统的有线电视新闻网的主力。当使用一个3×3卷积核,每个特性映射数据将使用9乘以每个输出图像。如果有512个输出图像(不是异常多),每个特性映射数据将用于4608年计算。每次抓取数据使用它将破坏性能和权力,尤其是如果它被从片外存储器。少量的内存可以在本地保存特性数据计算每个输出图像值。这立即降低了获取9倍的数量。通过添加部分和数组的大小等于所有的输出图像,每个输入特性映射值可以读只有一次——所有的计算根据之前完成它就会被丢弃。在实践中,对于大多数网络,存储多个输入或输出映像是不切实际的,所以需要一些“瓷砖”。“瓦”是每一个输入或输出的一部分图像缓存的加速器和运营。

在构建一个推论加速器,设计师需要选择正确的瓷砖大小,瓷砖,和数量的乘数。正确的答案是什么?这取决于网络的拓扑结构实现,可用硅区域,能源预算和性能需求。不幸的是,没有公式做一个很好的选择。设计师需要探索选择和选择正确的取舍。

可以使用这些技术来创建一个快速、有效的推论加速器。表1显示了我们的结果从创建一个加速器MNIST手写数字识别CNN。添加处理器的加速器设计使权力和区域总体设计。但性能,与软件相比,几乎快200倍。和每个推理的能量小于1%的能量需要软件在CPU上执行推理。


表1:MNIST权力/区域的结果。

量化分析和优化应该在一个机器学习框架,QKeras是理想的。这将允许开发人员理解数字表示法的影响网络的规模和精度。分析和优化数据运动应该在一个c++或SystemC模型,体现所有的内存,缓存和缓冲元素在设计和它们之间的数据移动。它需要运行足够快来执行一个推理在几分钟或更少。这将允许设计师充分探索替代的无数的架构。NVIDIA的工程师们开发一个推论加速器使用SystemC包叫做“Matchlib”来做这种类型的建模。它可以发现在github:https://github.com/NVlabs/matchlib。它只是不切实际的分析需要在传统的高密度脂蛋白。如果使用c++或SystemC建模语言然后高级合成可用于推导RTL实现。这可以通过RTL综合运行,地点和路线下游工具来创建实现可用于确定权力,区域,和精力。这种组合的工具允许开发人员快速理解能力,性能,面积不同的实现,找到一个最优设计。



1评论

Harri W。 说:

谢谢你的清楚的文章。我刚发现的时候寻找QKeras信息。一些问题在我脑海中出现。一个饱和定点的意思是,例如,剪ReLU吗?你使用了什么方法当从QKeras模型SystemC模型?我的理解,QKeras利用所谓的“quantization-aware训练”的方法。我不知道在这种情况下重要吗?

留下一个回复


(注意:这个名字会显示公开)

Baidu