TinyML-4:(Quantization) 为什么int8足够用于ML

2021-01-10 20:06:59 浏览数 (1)

TF-Lite 量化(Quantization )由来

当神经网络最初被开发时,最大的挑战是使它们能够工作!这意味着训练期间的准确性和速度是重中之重。使用浮点算术是保持精度的最简单方法,并且GPU具备完善的设备来加速这些计算,因此自然不会对其他数字格式给予太多关注。

如今,实际上已经在商业应用程序中部署了许多模型。训练的计算需求随着研究人员的数量而增长,但是推理所需的周期与用户数量成比例地扩大。这意味着推理效率已成为部署ML解决方案(包括TinyML)的一个紧迫问题。

这就是Quantization量化的用处。这是一个概括性的术语,涵盖了许多不同的技术来存储数字并以比32位浮点数更紧凑的格式对其进行计算。

量化(Quantization )为什么能起作用

神经网络通过随机梯度下降进行训练;在weights上施加许多微小的推动力。这些小增量通常需要浮点精度才能起作用(尽管也有研究工作在这里使用量化表示形式),否则,可能会因为“vanishing gradients”而陷入困境。

采用预先训练的模型并进行推理非常不同。深度网络的神奇特性之一是,它们可以很好地应对输入中的高水平噪声。如果您想识别刚刚拍摄的照片中的物体,则网络必须忽略所有CCD噪声,照明变化以及该物体与以前看到的训练示例之间的其他不必要的差异,并着重于重要相反。这种能力意味着他们似乎将低精度计算视为噪声的另一个来源,即使使用包含较少信息的数字格式,它们仍然可以产生准确的结果。

可以使用八位参数和中间缓冲区(而不是全精度的32位浮点值)运行许多神经网络,并且最终精度不会受到明显损失。有时可能会损失一些准确性,但是通常可以从性能延迟和内存带宽方面获得收益。

为什么要量化?

神经网络模型可能会占用大量磁盘空间,例如原始的AlexNet以float格式超过200 MB。weights几乎占据了所有尺寸,因为单个模型中通常有数以百万计的weights。由于它们的浮点数略有不同,因此简单的压缩格式(如“ zip”)无法很好地对其进行压缩。但是,它们以较大的层排列,并且在每一层中,权重倾向于在一定范围内(例如-3.0到6.0)正态分布。

量化的最简单动机是通过存储每一层的最小值和最大值来缩小文件大小,然后将每个浮点值压缩为一个八位整数,该整数表示该范围内256个线性集合中最接近的实数。例如,在-3.0到6.0范围内,0字节表示-3.0,255表示6.0,而128表示1.5。这意味着您可以使用磁盘上缩小了75%的文件,然后在加载后将其转换回浮点格式,以便现有浮点代码可以正常工作而无需进行任何更改。

image.pngimage.png

例如,这是AlexNet的网络分配权重。它是一个直方图,显示大部分重量值,实际上就是所有这些条形,都聚集在一起形成两个巨大的肿块。这不是非常广泛的分布,而是相当狭窄的分布。因此,实际上可以采用int8在有限的范围内表达它们。

进行量化的另一个原因是,通过完全使用八位输入和输出运行推理计算,可以减少进行推理计算所需的计算资源。这要困难得多,因为它需要在您进行计算的任何地方进行更改,但是会提供很多潜在的回报。提取8位值仅需要浮点数的25%的内存带宽,因此您将更好地利用缓存并避免出现RAM访问瓶颈。您通常还可以使用硬件加速的单指令多数据(SIMD)操作,每个时钟周期执行更多操作。在某些情况下,您会提供数字信号处理器(DSP)芯片,该芯片也可以加速八位计算,这可以提供很多优势。

将计算移至八位将有助于您更快地运行模型,并使用较少的功率,这在移动设备上尤其重要。它还为许多无法高效运行浮点代码的嵌入式系统打开了大门,因此它可以在TinyML世界中启用许多应用程序。

对于TinyML量化带来的优势

1) size

Storage

image.pngimage.png

存储大小至关重要。如NRF52840微控制器上的存储大小是1兆字节的大小。例如MobileNet模型,是视觉任务中经常使用的东西,往往约为几兆字节。但是典型的微控制器只有1兆字节,我们甚至不能在设备上存储它。如果可以采用32位模型并将其简化为8位模型例如,每个权重用8位而不是32位表示,那么内存就会自动减少4倍。安装到设备上成为可能。

RAM Size

image.pngimage.png

TinyML在嵌入式上设备上运行时,应用程序由机器学习任务和非机器学习任务组成,这些都要占用RAM空间。如图所示,一个典型的TinyML应用的RAM空间占用,橙色的Tensorflow micro对战,红色的model只占很小的比例。所以必须压缩模型,能够在RAM中得以容纳运行。

2)Latency

image.pngimage.png

于浮点计算相比,整数计算可能只要1-2指令周期,二浮点计算往往需要10-15个指令周期;计算性能需求方面几乎相差一个数量级,所以把模型从浮点值转为更易于计算的int8可以带来性能的巨大提升。

同时,浮点计算需要花费更长的时间,需要更多的电量。切换到int8,可以降低功率,这是相当可观的。

image.pngimage.png

上图的所有三个模型,代表int8模型的绿色条都短得多。原因是因为该算法实际上运行得更快。该模型的延迟要好得多。

3) Portablility

image.pngimage.png

TinyML的一个关键因素是是可移植性。低成本的mcu,通常不支持浮点,如果一个模型推理需要浮点支持,无形降低了模型可移植的范围。另外为了嵌入式系统成本较低,并且保持在较低功耗水平,一般通过删除浮点单元之类的功能。

参考

  • Edx HarvardX TinyML2-1.4: Machine Learning on Mobile and Edge IoT Devices - Part 2
  • Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding" by Song Han, Huizi Mao, Willian J.Dally
  • TinyML实践-1:What & Why TinyML?
  • TinyML实践-2:How TinyML Works?
  • TinyML实践-3:牛运动姿态识别的落地实现

0 人点赞