AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


5 混合量化
发布日期:2024-05-07 07:16:34 浏览次数: 2349


原文:https://zhuanlan.zhihu.com/p/694120813

1 背景

模型量化是一种模型压缩技术。在LLM中,模型量化主要是将FP32/FP16/BF16的权重、激活值或KV Cache使用INT8/FP8/INT4/FP4表示。LLM推理量化中,量化依据不同,量化分类也不同,具体可见下图。本文主要关注LLM PTQ(Post Training Quantization)量化,量化收益主要有以下3个方面:

  • 显存收益:LLM权重占用的显存远远超过传统AI模型权重占用的显存,甚至影响LLM在部分GPU上的可运行性。因此对LLM权重进行量化,在显存占用方面会有很大的收益。

  • 吞吐收益:LLM推理过程中KV Cache的显存占用量较大,将KV Cache量化后存储,可以将更多请求的KV Cache保存到显存中,从而极大地增加模型吞吐,降低推理成本。

  • 延迟收益:LLM推理的Decoding阶段主要是访存受限,权重或者激活值量化后,算子的访存压力相应减少,同时大部分Nvidia GPU上低精度硬件单元的算力明显高于高精度硬件单元的算力,有利于减少算子运行耗时,降低推理延迟

2 FP8格式

LLM推理过程中,通常有INT8和FP8两种量化类型。FP8是由Nvidia在Hopper和Ada Lovelace架构GPU上推出的数据类型,有如下两种形式:

  • E4M3:具有4个指数位、3个尾数位和1个符号位

  • E5M2:具有5个指数位、2个尾数位和1个符号位

其中,E4M3支持动态范围更小、精度更高的计算,而E5M2可提供更宽广的动态范围和更低的精度。LLM推理过程对精度要求较高,对数值范围要求偏低,因此FP8-E4M3更适合于LLM推理

由于浮点数的特性,FP8表示的数值是非均匀的。Yijia Zhang在Integer or Floating Point? New Outlooks for Low-Bit Quantization on Large Language Models中给出了FP8与INT8的数值分布示意图,对FP8来说,越靠近0,分布越稠密,越远离0,分布越稀疏,因此FP8对于大值的精度较差,对于小值的精度较好。

3 量化精度

FP8增加了尾数,那么相比于INT8,是否具有量化精度的优势?

3.1 数值分布

针对不同的数值分布,Mart van Baalen在FP8 versus INT8 for efficient deep learning inference中给出了INT8和FP8量化后的精度,纵坐标值越大,精度越好。对于均匀分布,INT8的精度是最好的,FP8-E4和FP8-E5的精度较差。对于正态分布,FP8-E2(具有2个指数位、5个尾数位和1个符号位)的精度是最好的,INT8的精度紧随其后,FP8-E4和FP8-E5的精度较差。而对于具有异常值的t-分布,量化精度普遍较差,其中FP8-E4的精度稍好。

3.2 权重量化

在实际的大模型权重参数中,哪种量化的精度更好呢?Yijia Zhang统计了LLaMA-65B各层权重的Per Channel量化后的偏差,并对结果进行了排序。结果表明INT8在所有层的权重量化的精度方面要明显好于FP8-E4。

3.3 激活值量化

同时,Yijia Zhang也统计了LLaMA-65B各层激活值的Per Tensor量化后的偏差,并对结果进行了排序。结果表明FP8-E4在多数层的激活值量化的精度方面要好于INT8。Yijia Zhang对该结果进行了解释:激活值是动态的,随着每个输入的不同而变化,因此需要使用校准集来确定量化Scale;校准过程是选择所有Batch的最大值来计算量化Scale,导致非最大值所在的Batch量化后的数值普遍偏小,而FP8-E4对于小值的精度更好。

此处引出一个问题,校准过程中是否可以对激活值采用Per Token或者Per Group的量化粒度,以此来削弱量化Scale选取带来的影响,量化的精度结果将会如何?

3.4 小结

总体来看,根据Mart van Baalen和Yijia Zhang的结果,FP8-E4量化相对于INT8量化没有精度的优势,INT8量化更适合于权重,FP8-E4量化更适合于多数层的激活值。

4 量化性能

既然FP8的量化精度没有优势,那么FP8的量化性能是不是更好呢?毕竟Nvidia在其推出的Hopper和Ada Lovelace架构GPU中增加了FP8 Tensor Core,可以直接加速FP8的相关运算。

4.1 硬件参数

首先,以Nvidia L40 GPU为例,其硬件参数如下,可以发现FP8 Tensor Core和INT8 Tensor Core在各自数据类型上的计算能力是相同的,该硬件参数在H800、L20和L40S上也是相同的。

4.2 计算效率

其次,Mart van Baalen从累加器硬件的角度分析指出,以FP32累加器为例,FP8-E4的效率比INT8的效率低183%。Bita Rouhani在With Shared Microexponents, A Little Shifting Goes a Long Way中对两种格式都使用浮点累加器,预估FP8的性能比INT8下降40%。Mart van Baalen根据以上分析得出结论,FP8的计算成本明显高于INT8,这意味着对于计算瓶颈的网络,FP8量化后会出现性能较差的情况。

此处引出一个TODO,需要在Hopper或者Ada Lovelace架构GPU上测试计算瓶颈的算子(比如GEMM等)在INT8和FP8-E4两种格式下的具体性能表现。

4.3 小结

总体来看,根据Mart van Baalen和Bita Rouhani的结果,相比于INT8量化,FP8-E4量化性能没有优势。

5 混合量化

注意到FP8-E4量化相比于INT8量化的优势主要体现在多数层的激活值的量化精度上,所以Yijia Zhang对LLaMA和OPT模型采用MoFQ8(Mixture-of-Formats Quantization)混合量化的方式实现W8A8,专注于逐层选择量化方法,且每层选择相同的量化类型,MoFQ8在WikiText-2、LAMBADA、PIQA和HellaSwag四个数据集上的表现都要明显好于单一的FP8-E4或者INT8量化,取得了接近FP16的精度。

6 总结

对于LLM PTQ推理量化来说,从工程视角来看:

FP8 vs INT8:即使Nvidia在Hopper和Ada Lovelace架构GPU上推出了FP8 Tensor Core,但由于FP8-E4量化相比于INT8量化在精度和性能上都没有明显优势,所以当前工程上仍然会以INT8量化为主,但也会持续探索和挖掘FP8的推理适用场景。如果特定模型经过INT8量化后的精度下降较多,那么可以结合Yijia Zhang的MoFQ8混合量化工作去优化,或者结合Tim Dettmers在LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale中的混合量化工作去优化。

W8A16 vs W8A8:以INT8为例,相比FP32/FP16/BF16来说,W8A16(Weight Only)量化在几乎不影响精度的前提下,主要有两大收益,其一是显著降低权重的显存占用;其二是显著缓解Decoding阶段对于权重的访存压力,降低推理延迟。W8A8将权重和激活值同时量化,增加了激活值的显存收益和访存收益,收益与输入Prompt和输出序列的长度有关,Prompt和输出序列越长收益越明显;此外W8A16的计算硬件资源仍然是FP16/BF16 Tensor Core,W8A8可以使用算力更高的INT8 Tensor Core,降低推理延迟,提升Nvidia GPU的硬件资源利用率


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询