FP8 versus INT8 for efficient deep learning inference
FP8与INT8在高效深度学习推理中的对决
作者: Mart van Baalen, Andrey Kuzmin, Suparna S Nair, Yuwei Ren, Eric Mahurin, Chirag Patel, Sundar Subramanian, Sanghyuk Lee, Markus Nagel, Joseph Soriaga, Tijmen Blankevoort
机构: Qualcomm AI Research
A1 主要贡献
本文旨在论证,尽管FP8格式在神经网络训练领域备受关注,但它不太可能取代INT8成为边缘设备高效推理的主流格式。研究的核心问题是,在推理效率和准确性方面,新兴的FP8格式与成熟的INT8格式相比孰优孰劣。
论文的主要贡献和核心论点如下:
1. 硬件效率分析:通过对专用硬件的计算分析表明,在面积和能耗方面,FP8格式比INT8格式的效率至少低50%。这意味着FP8必须在准确性上远超INT8,才能在硬件效率上弥补其劣势。
2. 理论与精度比较:本文从理论上阐述了INT8和FP8格式在表示神经网络中的权重和激活值时的核心差异,指出其关键在于对“异常值”(outliers)的表征能力。
3. 全面的实验验证:通过大量的后训练量化(Post-Training Quantization, PTQ)和量化感知训练(Quantization-Aware-Training, QAT)实验,系统性地比较了INT8与不同指数位数(E4, E5)的FP8格式在多种网络模型上的准确性。
4. 结论:研究结果表明,尽管FP8(特别是E5)可能适用于训练过程中的梯度表示,但对于推理任务,其性能和准确性并不足以证明需要专门实现FP8硬件来替代INT8。INT8在大多数情况下表现更优或相当,并且在硬件上更高效。
5. 实践指导:论文还探讨了将FP8训练的模型转换为INT8进行部署的可行性,并总结了当前高效设备上INT量化(INT4/INT8/INT16)的成熟范式和工具。
A3 背景知识与硬件考量
2. 预备知识
整数与浮点数表示。整数 z
可以表示为:
其中 s
是缩放参数,b
是可选的偏置,zi
是各个比特位。浮点数的表示类似,但允许为指数位和尾数位分配不同的比特数。
其中 m̂
是尾数,ê
是指数,B
是指数偏置,M
是尾数位数,E
是指数位数。我们假设格式包含次正规数(subnormal numbers),以便精确表示0。此外,我们假设只表示正0,并将负0保留用于编码单个特殊值(如NaN)。最后,与整数格式类似,我们假设权重和激活值可以被任意缩放,并且对于权重张量,这种缩放可以按通道(per-channel)应用。实际使用的数字格式稍微复杂一些,更详细的讨论见附录A。
FP8格式定义。业界普遍提出的FP8格式,也已在Nvidia的Hopper架构中实现,是具有4位或5位指数的FP8【Andersch, M., et al. Nvidia hopper architecture in-depth, 2022. URL https://developer.nvidia.com/blog/ nvidia-hopper-architecture-in-depth/】。本文中,我们将指数位数表示为FP8-E[X],因此提出的4位和5位指数格式分别称为FP8-E4和FP8-E5。我们还将研究FP8-E2和FP8-E3格式,以全面了解这些格式的行为。正如Nvidia的FP8介绍论文【Micikevicius, P., et al. Fp8 formats for deep leanring. arXiv preprint arXiv:2209.05433, 2022】所指出的,FP8-E5格式主要用于梯度,因此在我们对高效推理的比较中,将主要关注INT8和FP8-E4之间的差异。
3. 硬件考量
3.1 FP8是一个模糊的术语
深度学习加速器中的格式选择。在设计专用的神经网络推理硬件时,有多种选择。仅仅指定网络的数字格式并不能完全描述硬件中发生的情况,也无法清晰地说明一种格式的效率。图1展示了一个深度学习加速器的示意图,它大致适用于大多数常用加速器。权重和激活值存储在内存中,然后被加载到MatMul计算单元以计算点积。多个计算结果被写入一个更高位宽的累加器中以高精度求和。计算完成后,累加器中的值可能会被重新量化,然后写回内存。例如,即使计算打算以8位进行,激活张量也可能以16位存储,在这种情况下,16位张量会在计算前先转换为8位张量。
3.2 不同的选择导致不同的性能
带宽与计算瓶颈。在神经网络硬件中,通常会受限于带宽或计算能力。这取决于具体的网络和硬件。理想的推理硬件应在这两者之间达到平衡。例如,如果受内存带宽限制,以16位而不是8位读写张量会损害推理速度,这在处理大图像的网络中很常见。反之,如果内存带宽很高,计算速度可能成为瓶颈。
FP8实现的局限性。对于FP8的实现,没有标准明确定义所有步骤的格式选择。例如,Nvidia/Arm/Intel关于FP8的白皮书【Micikevicius, P., et al. Fp8 formats for deep leanring. arXiv preprint arXiv:2209.05433, 2022】在ImageNet的实验中仅对卷积层和线性层使用FP8,而所有中间表示都以FP16存储,其他操作(如昂贵的Softmax)也以FP16执行。这会在高效推理设备上产生巨大的开销。如果网络主要受激活内存瓶颈限制,实际可能无法获得显著的加速。
混合精度的现实。此外,用FP8训练的网络很可能只有部分是FP8格式。目前Nvidia GPU上只有两个库支持混合精度训练:Apex引擎【Nvidia. Nvidia: Apex automatic mixed precision, 2019. URL https://github.com/NVIDIA/apex】和Transformer引擎【Nvidia. Nvidia: Transformer engine, 2022. URL https://github.com/NVIDIA/ TransformerEngine】。Apex库可以在FP32和FP16之间自动切换,这表明训练中某些层需要FP32。Transformer引擎也类似,线性运算在FP8中进行,但一些中间激活和操作(如Softmax和逐元素加法)则在FP16中完成。因此,在比较数字格式时,必须明确所做的选择,因为这会严重影响准确性和设备性能。
INT8的优势。对于INT8,我们通常将所有中间激活值也设为INT8,这在激活内存/带宽是瓶颈时非常有帮助。在为高效推理进行量化时,所有层都使用INT8,或者在最坏情况下,只有少数层使用W8A16。此外,由于整数累加是精确的,我们可以使用更高效的累加器实现,从而显著降低能耗。
总结。所提出的FP8实现对于权重、内存或计算速度主导的网络,确实比FP16更快。但对于具有大激活张量的网络,FP16的激活仍是瓶颈,加速效果会大打折扣。实际加速效果还取决于有多少层能真正以FP8执行。最终的FP8混合精度网络比纯FP16网络更高效,但一个完全INT8的网络预计会显著更高效。
3.3 浮点硬件考量
乘加单元的硬件成本分析。由于大多数硬件加速器由乘加单元阵列组成,我们可以通过分析单个单元的性能来了解整个阵列的情况。我们通过估算构建设计所需的等效2输入简单门(如NAND2/NOR2)数量,来对浮点和整数运算的面积/功耗成本进行一个简单而公平的估算。这个指标与实际性能高度相关【Buyuksahin, K. M. and Najm, F. High-level area estimation. ISLPED, 2002.】。
累加器类型。Kulisch(定点)累加器对于INT8等格式既精确又高效。而浮点累加器不精确,但对于像FP8-E4这样具有较多指数位的格式更高效,因为它可以在不大幅增加累加器大小的情况下覆盖更大的动态范围。由于浮点累加器的不精确性,求和顺序会影响结果,并且求和次数越多,累积值越不准确。
硬件设计示意图。图2展示了单个乘加单元的硬件示意图。左侧是定点累加器方案,右侧是更复杂的浮点累-加器方案。浮点累加增加了显著的复杂性以换取更少的累加器位数。我们基于这些示意图和附录B中的假设来计算实现两种格式所需的门数。
门数分析结果。图3显示了分析结果。对于INT8一直到FP8-E3,定点累加器是最高效的。对于FP8-E4,浮点和定点累加的成本几乎持平。最重要的是,比较INT8和FP8-E4,浮点格式的成本增加了53%。如果需要FP32累加器,情况会更糟,FP8-E4的效率比INT8低183%。
结论。因此,对于专用硬件实现,FP8-E4在计算所需的面积和功耗上比INT8昂贵得多。如果网络受计算瓶颈限制,这也将转化为慢得多的性能。这一分析得到了Rouhani等人【Rouhani, B., et al. Shared microexponents: A little shifting goes a long way. 2023.】研究的支持,他们通过综合估算得出FP8相对于INT8有40%的性能下降。综上所述,无论是对于激活带宽主导还是计算主导的网络,FP8格式在高效推理场景下的效率都不及INT8。
A2 方法细节
本节将深入比较FP8和INT8在深度学习网络推理中,于后训练量化(PTQ)和量化感知训练(QAT)设置下的准确性差异。我们首先提供一个理论视角来解释两种格式的差异,表明它们之间唯一显著的区别在于捕捉异常值的能力。随后,我们将展示该理论如何预测PTQ和QAT的性能。
我们开源了复现部分PTQ和QAT结果的代码,地址为:https://github.com/Qualcomm-AI-research/FP8-quantization。
4.1 表示异常值
格式的根本差异。回顾第2节,INT8和FP8-EX之间的唯一区别在于,FP8-EX使用了X个指数位来增加动态范围,而不是提高精度。在整数硬件中,通常有一个灵活的缩放因子(per-tensor或per-channel),这在硬件上实现成本几乎为零,且能显著提高准确性【Krishnamoorthi, R. Quantizing deep convolutional networks for efficient inference: A whitepaper. arXiv preprint arXiv:1806.08342, 2018】;【Nagel, M., et al. A white paper on neural network quantization. arXiv preprint arXiv:1308.3432, 2020b.】。如果浮点格式也采用类似设置,如Nvidia所做【Andersch, M., et al. Nvidia hopper architecture in-depth, 2022. URL https://developer.nvidia.com/blog/ nvidia-hopper-architecture-in-depth/】,那么两种格式只有一个区别:增加指数位会使靠近零的值的表示密度更高,而远离零的值的密度更低。因此,如果待表示的分布集中在零附近且有少量异常值,浮点格式的误差会比整数格式小。图4是一个例子。
不同分布下的误差分析。我们可以通过分析一些简单分布的均方误差(MSE)来理解这种差异,MSE已被证明与噪声对神经网络的影响密切相关【Nagel, M., et al. Up or down? Adaptive rounding for post-training quantization. In III, H. D. and Singh, A. (eds.), Proceedings of the 37th International Conference on Machine Learning, volume 119 of Proceedings of Machine Learning Research, pp. 7197–7206. PMLR, 13–18 Jul 2020a. URL http://proceedings.mlr.press/ v119/nagel20a.html.】。从图5可以看出,对于均匀分布,INT格式是最好的。对于高斯分布,FP8-E2是最好的,INT8紧随其后。这一点很重要,因为神经网络中的许多权重和激活值都经过了良好正则化,其分布与高斯分布非常相似【Zhang, C., et al. Understanding deep learning (still) requires rethinking generalization. Communications of the ACM, 2021.】。
异常值是关键。只有当异常值出现时,拥有更多指数位来匹配分布才有意义。在图5.c中,我们分析了一个具有显著异常值的学生t分布的MSE,发现FP8-E4格式对此特定分布表现最好。这导出了一个简单结论:关键在于异常值。如果分布有显著异常值,FP8-E4/FP8-E5更准确;如果分布是行为良好、更接近高斯形态的,则INT8或FP8-E2/FP8-E3预计表现更好。
指数位增加的代价。值得注意的是,为了增加指数位而减少尾数位会显著损害准确性。对于行为良好的高斯层,FP8-E5格式仅提供约4或5位的信息,这意味着如果缩放因子设置正确,使用INT4/INT5格式即可达到相同精度。
最优量化策略。最后,即使在处理带异常值分布的理想情况下,其位精度也低于无异常值的分布。如图5所示,均匀分布的最高得分是8位,而学生t分布下FP8-E4只有5位精度。因此,为量化优化网络的最佳策略是拥有一个完全没有异常值的网络,此时INT8和FP8-E2格式表现最佳。这一点在4.5节关于QAT的讨论中会再次出现。
4.2 比较分析的设置
实验框架。我们在PTQ和QAT两种设置下比较INT8与不同指数位宽的FP8格式。在PTQ设置中,我们直接将FP32训练好的网络“朴素地”转换为8位格式,不使用任何高级技巧(如AdaRound【Nagel, M., et al. Up or down? Adaptive rounding for post-training quantization. In III, H. D. and Singh, A. (eds.), Proceedings of the 37th International Conference on Machine Learning, volume 119 of Proceedings of Machine Learning Research, pp. 7197–7206. PMLR, 13–18 Jul 2020a. URL http://proceedings.mlr.press/ v119/nagel20a.html.】),以实现格式间的公平比较。在QAT设置中,我们对FP32训练的网络进行微调,这更接近FP8格式的实际使用方式。我们将看到理论结果、PTQ结果和QAT结果之间存在显著的一致性。实验设置详情见附录C。
4.3 PTQ 结果
PTQ性能分析。表1展示了后训练量化设置下的结果。一个清晰的模式浮现出来:对于像ResNet18【He, K., et al. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 770–778, 2016.】、MobileNetV2【Sandler, M., et al. Mobilenetv2: Inverted residuals and linear bottlenecks. In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 4510–4520, 2018.】和DeeplabV3【Chen, L.-C., et al. Rethinking atrous convolution for semantic image segmentation, 2017.】这样层行为良好的网络(层分布大多呈高斯形),FP8-E2和INT格式表现最佳,而FP8-E4和FP8-E5表现明显更差。相反,ViT【Dosovitskiy, A., et al. An image is worth 16x16 words: Transformers for image recognition at scale. ICLR, 2021.】和BERT【Devlin, J., et al. Bert: Pre-training of deep bidirectional transformers for language understanding, 2018. URL https://arxiv.org/abs/1810.04805.】等Transformer模型在FP8-E4下表现最好,原因在于Transformer网络中的少数层存在显著的大异常值【Bondarenko, Y., et al. Understanding and overcoming the challenges of efficient transformer quantization. In EMNLP, 2021.】;【Xiao, G., et al. Smoothquant: Accurate and efficient post-training quantization for large language models. In CVPR, 2022.】;【Dettmers, T., et al. Llm.int8(): 8-bit matrix multiplication for transformers at scale. In NeuRIPS, 2022.】。这些异常值出现在LayerNorm之前的激活中,对性能影响巨大,因此能更好表示异常值的FP8-E4格式表现最佳。
Transformer中的病态问题。这些问题是Transformer架构特有的,仅发生在极少数层和极少数输出通道中。我们将在4.6节深入探讨其根本原因和解决方案。
4.3.1 PTQ结果对INT8与FP8-E4/E5的启示
PTQ结论。与理论分析一致,核心在于异常值。对于没有太多异常值的行为良好的网络,INT8在PTQ设置下比FP8-E4和FP8-E5准确得多。同时,FP8-E5从未成为推理的最佳格式;即使对于有显著异常值的Transformer层,FP8-E4也更好。这与Nvidia/Intel/ARM的论文【Micikevicius, P., et al. Fp8 formats for deep leanring. arXiv preprint arXiv:2209.05433, 2022】的发现一致,即建议前向传播使用FP8-E4,反向传播才使用FP8-E5。单纯从PTQ角度看,没有一种格式是普适最优的。结合第3节的硬件实现成本,FP8-E4本身看起来是比其指数位更低的兄弟格式(如FP8-E3)更差的选择,后者在硬件上更便宜且准确性更高。
4.4 量化感知训练
QAT的重要性与设置。对于FP8格式,最重要的场景是在训练中引入量化操作,即量化感知训练(QAT)。我们对预训练的FP32模型进行微调。实验中,权重和激活值都量化为FP8格式,并使用基于LSQ【Esser, S. K., et al. Learned step size quantization. International Conference on Learning Representations (ICLR), 2020.】;【Bhalgat, Y., et al. Lsq+: Improving low-bit quantization through learnable offsets and better initialization. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops, June 2020.】的方法进行范围学习,以确保结果不受量化范围设置差异的影响。INT8和不同FP8格式的训练设置完全相同,以实现最公平的比较。
QAT结果分析。从表2可以看出,首先,所有网络都接近其原始浮点性能,有些甚至超过了基线FP32结果。其次,QAT结果与PTQ设置呈现相似模式:对于图像相关网络,INT8性能优于浮点性能;对于DeeplabV3【Chen, L.-C., et al. Rethinking atrous convolution for semantic image segmentation, 2017.】和HRNet【Wang, J., et al. Deep high-resolution representation learning for visual recognition. TPAMI, 2019a.】,INT8也是最佳格式。对于在PTQ中FP8-E3和FP8-E4表现良好的网络(如Transformers和SalsaNext【Cortinhal, T., et al. Salsanext: Fast, uncertainty-aware semantic segmentation of lidar point clouds for autonomous driving, 2020a.】),在QAT中这些格式也表现更好。但值得注意的是,FP8-E4在QAT后从未成为最佳格式。
INT8在QAT中受益更多的原因。一个令人惊讶的趋势是,INT8的结果相比其PTQ基线,比其FP8对应格式改进得更多。这同样与异常值有关。在QAT期间,异常值被裁剪,不接收梯度,网络会学习到在移除异常值后仍然表现良好的权重。同时,使用LSQ等方法训练量化参数,网络可以学习缩小范围,以在裁剪误差和量化误差之间找到更好的权衡。这对于对量化范围更敏感的INT8尤其有利。
理论联系。如4.1节末尾所讨论,神经网络层能达到的最佳MSE是在权重均匀且使用INT8时。如果分布更像高斯分布,则FP8-E2最佳,INT8紧随其后。这些行为良好的分布所能达到的MSE显著高于FP8-E4分布,即使在FP8-E4的最优场景下也是如此。因此,当训练能够找到更均匀或高斯化的权重分布(即摆脱异常值)时,该层的MSE会降低,性能会提升,这解释了为什么INT8在QAT后结果优于FP8-E4。
4.5 深入探究QAT网络
网络参数是否适应数字格式? 一个疑问是,网络的参数和激活值是否会自然地围绕所用的数字分布进行塑造。事实并非如此。虽然很容易通过训练消除异常值的影响并学习量化范围,但在训练过程中,权重和激活值的分布并不会自动地塑造为最优形态。如表3所示,将两个FP8-E4 QAT训练的模型(ResNet18和MobileNetV2)“朴素地”转换回INT8后,准确率大致保持不变,甚至略有提高。
这背后的原因是,网络的分布(特别是激活值)并不取决于其训练时使用的数字格式,而是取决于其他训练设置,如正则化、优化器、初始化等。激活值的分布是连续的,它们只是被INT8格式更好地拟合,从而导致性能略有提升。
权重分布的可视化。图6比较了从头开始用FP32和FP8-E4训练的ResNet18的权重分布。我们看到分布几乎没有差异,这表明即使是网络的权重也不会真正围绕数字格式的表示限制进行塑造。
结论。上述分析表明,我们应该选择最能代表权重和激活值分布的数字格式,而不是期望分布去适应我们选择的数据格式。
4.6 Transformers
Transformer的特殊性。到目前为止,我们的讨论表明FP8-E4并不优于INT8和指数位更少的FP8格式,唯一的例外是Transformer。Transformer量化的问题在文献中是众所周知的【Bondarenko, Y., et al. Understanding and overcoming the challenges of efficient transformer quantization. In EMNLP, 2021.】;【Xiao, G., et al. Smoothquant: Accurate and efficient post-training quantization for large language models. In CVPR, 2022.】;【Dettmers, T., et al. Llm.int8(): 8-bit matrix multiplication for transformers at scale. In NeuRIPS, 2022.】,幸运的是,这个问题可以通过多种方式轻松解决。
问题定位。Transformer量化的问题出现在网络的一个非常特定的部分,即图7中红色高亮的部分。在一些全连接模块中,进入LayerNorm的求和项存在显著的异常值,尤其是在网络的最后几层。简单地裁剪这些异常值会显著降低网络精度,因为它们有特定作用:迫使下一层的注意力机制关注一些无意义的标记(如句子分隔符、句号),从而使该特定标记不被显著更新。
逐层分析。图8绘制了BERT模型中每个量化器的最优PTQ位宽。分析显示,只有少数几层最适合用FP8-E4表示,其他层用FP8-E2和FP8-E3能获得更低的MSE。
现有解决方案。由于异常值的特殊性(仅出现在少数层的少数通道),存在许多解决方案可以在INT8下获得优异的准确性:
* PTQ解决方案:
* Dettmers等人【Dettmers, T., et al. Llm.int8(): 8-bit matrix multiplication for transformers at scale. In NeuRIPS, 2022.】提出将少数异常值通道以FP32运行。
* Xiao等人【Xiao, G., et al. Smoothquant: Accurate and efficient post-training quantization for large language models. In CVPR, 2022.】提出使用跨层均衡程序。
* Bondarenko等人【Bondarenko, Y., et al. Understanding and overcoming the challenges of efficient transformer quantization. In EMNLP, 2021.】建议(1)采用per-embedding group量化,或(2)将有问题的层以W8A16(8位权重,16位激活)执行。
* Frantar等人【Frantar, E., et al. Gptq: Accurate quantization for generative pre-trained transformers. In ICLR, 2023.】通过类似AdaRound【Nagel, M., et al. Up or down? Adaptive rounding for post-training quantization. In III, H. D. and Singh, A. (eds.), Proceedings of the 37th International Conference on Machine Learning, volume 119 of Proceedings of Machine Learning Research, pp. 7197–7206. PMLR, 13–18 Jul 2020a. URL http://proceedings.mlr.press/ v119/nagel20a.html.】的算法在4位权重下取得了优异性能。
* QAT解决方案:量化感知训练也能恢复准确性,如Zafrir等人【Zafrir, O., et al. Q8bert: Quantized 8bit bert. In NeuRIPS, 2019.】的研究所示。我们的论文【Bondarenko, Y., et al. Understanding and overcoming the challenges of efficient transformer quantization. In EMNLP, 2021.】甚至用4位权重和8位激活恢复了大部分原始精度。
最终结论。是的,在最朴素的PTQ设置中,FP8-E4对Transformer表现优于INT8。然而,这是由一个非常特殊的、可解决的问题引起的。鉴于选择FP8-E4会在硬件上导致次优解,采用其中一种技巧来修复异常值问题,而不是诉诸于一种新的数字格式,是更值得的。这样,甚至4位权重也成为可能且似乎是最佳选择。
A4 实验环境
- 数据集:
- 图像分类:ImageNet【Russakovsky, O., et al. ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV), 115(3):211–252, 2015.】
- 目标检测:COCO【Lin, T., et al. Microsoft COCO: common objects in context. CoRR, abs/1405.0312, 2014. URL http://arxiv.org/abs/1405.0312.】,Nuscenes【Caesar, H., et al. nuscenes: A multimodal dataset for autonomous driving. In CVPR, 2020.】
- 自然语言理解:GLUE基准【Wang, A., et al. GLUE: A multi-task benchmark and analysis platform for natural language understanding. In Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP, pp. 353–355, Brussels, Belgium, November 2018a. Association for Computational Linguistics. doi: 10.18653/ v1/W18-5446. URL https://www.aclweb.org/anthology/W18-5446.】
- 语义分割:Pascal VOC【Everingham, M., et al. The pascal visual object classes challenge: A retrospective. International Journal of Computer Vision, 111(1): 98–136, 1 2015.】,CityScapes【Cordts, M., et al. The cityscapes dataset for semantic urban scene understanding. In Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016.】
- 点云分割:Semantic-KITTI【Behley, J., et al. Semantickitti: A dataset for semantic scene understanding of lidar sequences. arXiv, 2019.】
- 模型架构:
- 分类:ResNet18, MobileNetV2, EfficientNet-B0, ViT-Base, EfficientFormer-L1, FFNet-78S
- 检测:Yolov5, CenterPoint-Pillar
- NLP:BERT-base
- 分割:DeepLabV3, HRNet, SalsaNext, RangeNet++
- 硬件配置:论文主要进行理论上的硬件成本分析(门电路计数),未指定用于实验的具体硬件平台。但提到了Nvidia Hopper GPU架构作为FP8实现的参考。
- 软件配置:
- 代码实现:实验代码基于PyTorch,并已在GitHub上开源 (https://github.com/Qualcomm-AI-research/FP8-quantization)。
- 依赖库:使用了HuggingFace Transformers库获取BERT模型,以及其他模型对应的开源代码库。
- 量化工具:提到了高通自家的AIMET工具包 (https://github.com/quic/aimet),并用其展示了大量INT8和INT4的量化结果。
A5 实验结果
与其它工作的比较 (Section 5)
- 与Graphcore论文【Noune, B., et al. 8-bit numerical formats for deep neural networks. 2023.】的比较:该论文仅在ResNet-32上比较了INT8和FP8,结论是两者性能相当,但FP8的有效量化参数范围更广。本文指出其比较设置(如整数缩放因子、无per-channel量化)可能偏向FP8,且梯度量化问题已有成熟解决方案。
- 与Nvidia/Arm/Intel论文【Micikevicius, P., et al. Fp8 formats for deep leanring. arXiv preprint arXiv:2209.05433, 2022.】的比较:该论文结果与本文一致,但省略了关键的比较。它证明了用FP8训练可以恢复精度,但这并不意外,因为更低位宽也能做到。其FP8实验将许多操作保留在FP16,不适用于高效推理。其唯一的INT8比较是在Transformer的PTQ上,这恰好是FP8-E4表现最好的场景,且该问题有多种解决方案。本文认为其比较不够全面。
- 与其他工作的比较:其他讨论FP8的论文【Wang, N., et al. Training deep neural networks with 8-bit floating point numbers. In Bengio, S., et al. (eds.), Advances in Neural Information Processing Systems, volume 31. Curran Associates, Inc., 2018b. URL https://proceedings.neurips.cc/paper/ 2018/file/335d3d1cd7ef05ec77714a215134914c-Paper.pdf.】;【Sun, X., et al. Hybrid 8-bit floating point (hfp8) training and inference for deep neural networks. In Wallach, H., et al. (eds.), Advances in Neural Information Processing Systems, volume 32. Curran Associates, Inc., 2019. URL https://proceedings.neurips.cc/paper/2019/file/ 65fc9fb4897a89789352e211ca2d398f-Paper.pdf.】等缺乏与INT8的系统比较。而Rouhani等人【Rouhani, B., et al. Shared microexponents: A little shifting goes a long way. 2023.】的硬件综合分析证实了本文关于FP8硬件效率较低的结论。
- 结论:本文通过更广泛的比较,描绘了FP8-E4/E5格式一个不那么乐观的前景,在直接比较中,FP8相对于标准INT8格式没有显著的性能优势。
FP8到INT8的网络转换 (Section 6)
- 实验内容:将FP8-E4 QAT训练后的模型,直接(朴素地)转换为INT8,并评估其性能。
- 转换原理:如图9所示,只要缩放因子可调,INT8可以精确表示FP8-E4大部分(约90%)的大数值范围,仅在靠近零的小数值上会产生一些量化误差。实验中使用MSE范围估计法来对齐量化网格。
- 实验结果 (Table 4):
- 对于行为良好的模型(ResNet18, MobileNetV2),从FP8-E4转换为INT8后,准确率保持不变甚至略有提升。这归因于这些模型的激活值分布没有显著异常值,INT8在大部分范围内提供了更高的精度。
- 对于存在异常值的模型(BERT, SalsaNext),转换为INT8后准确率下降。但下降幅度小于直接从FP32转换到INT8。对BERT进行INT8-QAT可以恢复准确性。
- 结论:转换的平滑程度取决于模型本身是否存在异常值问题。对于没有异常值的模型,转换是无损的。对于有问题的模型,虽然转换后精度会下降,但FP8作为中间步骤比直接从FP32转换效果更好,并且后续可通过INT8-QAT恢复精度。
图9:转换时的数字分布。顶部是FP8-E4数字格式的分布。底部是INT8数字表示。中间的值是FP8-E4转换时的结果。当比例因子可以任意选择时,INT8数字格式可以完全匹配FP8-E4格式中的大数值。只有红色框中的值,即较小的数值,会遭受一些损失。
表4:当我们拿一个FP32网络,用QAT量化到FP8-E4,然后天真地转换到INT8时会发生什么?对于像ResNet18这样的网络,结果有所改善,而对于MobileNetV2,性能保持不变。只有在我们看到PTQ中性能更好的网络,由于FP8-E4捕捉了异常值,转换才会降低性能。
INT量化范式 (Section 7)
- INT8的优势:INT8格式可以达到与FP8相当或更好的准确性,同时在硬件上效率更高。
- INT量化流程 (图10):
- INT16:最准确,比FP16更能精确表示FP32值,适用于不关心效率、只想简单部署的场景。
- INT8:通过PTQ技术,大多数网络可以轻松量化为全INT8。
- W8A16混合精度:对于少数困难的层,使用W8A16几乎总能解决PTQ中的量化问题。
- W4A8 (INT4):若要极致优化,可通过QAT将权重降至4位。这对于权重受限的大型语言模型尤其重要。
- INT4的潜力:INT4格式在权重上日益流行,提供了更好的准确性与效率权衡。近期工作【Dettmers, T. and Zettlemoyer, L. The case for 4-bit precision: k-bit inference scaling laws. 2022.】;【Frantar, E., et al. Gptq: Accurate quantization for generative pre-trained transformers. In ICLR, 2023.】表明,即使是大型语言模型也能用简单的PTQ方法转换为4位权重。
- 工具生态:整数化量化工具已经相当成熟,如高通的AIMET工具包。
- 附录E:提供了大量使用AIMET成功量化为INT8 (Table 6) 和INT4 (Table 7) 的模型案例。
图10:INT量化范式。
A5 结论
本文全面地论证了,就性能和准确性而言,新兴的浮点格式FP8-E4和FP8-E5并不能替代INT8作为深度学习推理的标准。
-
准确性方面:对于大多数行为良好的层和网络,特别是在使用量化感知训练时,FP8格式的准确性不如INT8。仅在后训练量化的特定角落案例中,当层存在显著异常值时(如Transformer),FP8才表现出优势。然而,这些问题有更高效的解决方案,例如对问题层使用W8A16混合精度或应用量化感知训练。
-
硬件效率方面:在硬件中实现FP8格式进行推理效率低下,会产生巨大开销。根据累加器大小的不同,FP8的乘加单元比其INT8对应单元的效率低50%到180%。这将导致在计算密集型工作负载下,专用芯片的速度显著变慢。
-
INT生态的成熟度:许多网络可以轻松地量化到INT8,甚至可以推向更高效的INT4。相应的工具已经存在多年,并且向4位权重的跃迁是浮点格式目前无法提供的效率提升。
基于以上原因,为边缘应用场景实现浮点格式是次优选择。若要为模型寻求最佳的准确性和效率权衡,将它们量化到INT4-INT8-INT16的整数栈是当前最好的解决方案。
A6 附录
A. 浮点数描述
浮点数定义。一个浮点数集 F ⊂ R 的元素定义如下:
其中s是符号位,di是m位有效数,p是e位指数,B是指数偏置。为表示0,指数值p=0被保留用于指示次正规数。
本文中FP8格式的假设:
1. 隐式尾数位:当e=0时为0,否则为1。
2. 次正规数:指数值为0时表示次正规数,提供零附近的均匀量化。
3. 特殊值编码:二进制值10000000保留为特殊值(如NaN),不特殊编码INF。超出范围的值被裁剪到最大或最小值。
B. 门电路计数假设
硬件分析中的假设。该部分列出了第3.3节硬件分析中用于门电路计数的详细假设,包括了对加法器、乘法器、多路复用器、移位器等基本逻辑单元的门数估算。
C. 实验设置 PTQ/QAT
任务、数据集、模型和指标。本附录详细列出了所有实验中使用的模型、数据集、评估指标和来源链接,覆盖了ImageNet分类、Yolov5目标检测、GLUE基准、Pascal VOC/Cityscapes语义分割、Semantic-KITTI点云分割和CenterPoint-Pillar 3D目标检测等任务。
PTQ设置。为了公平比较,INT8 PTQ中未使用CLE、偏置校正或AdaRound等高级技巧。对INT8和FP8都进行了超参数网格搜索,包括per-channel/per-tensor量化、多种范围设置启发式方法(MSE、minmax等),以及是否更新批量归一化。
QAT设置。所有QAT实验都从预训练模型开始微调。对所有模型和指数位宽,都测试了per-channel/per-tensor量化以及是否使用范围学习。附录中详细描述了ImageNet、BERT/GLUE、DeepLabV3、HRNet和SalsaNext等不同任务的具体QAT超参数设置,包括学习率、优化器、训练周期和批量大小。
D. 实验设置 转换
转换实验的目标与方法。本部分描述了将FP8-E4训练模型转换为INT8的实验设置。为确保公平,ResNet18和MobileNetV2从头开始进行了FP8 QAT训练。由于发现从头训练和微调后的权重分布无显著差异,GLUE实验则使用了微调模型。
ImageNet模型。ResNet18和MobileNetV2的QAT设置遵循了【Noune, B., et al. 8-bit numerical formats for deep neural networks. 2023.】的描述,并扩展了搜索空间。转换到INT8时使用per-channel量化和MSE范围估计。
BERT on GLUE。使用微调的FP8 GLUE模型,转换为INT8时采用per-tensor量化和MSE范围估计。表5中的消融实验表明,对权重和激活都使用MSE范围估计法在宏平均上远超其他方法。
E. INT量化结果
INT8结果。表6展示了使用AIMET工具包将各种网络量化为INT8(W8A8)和/或W8A16后的精度,并与FP32模型精度进行比较。许多模型可在AIMET模型库中找到。结果表明,通过PTQ或混合精度,可以在INT8下达到接近原始模型的精度。
INT4-W4A8结果。表7展示了将模型量化为W4A8(4位权重和8位激活)的结果,大多数通过QAT实现。这证明了INT4在追求更高能效方面的可行性。
💬 评论讨论
欢迎在这里分享您的想法和见解!