Blackwell与FP4精度:AI量化浪潮中推动端侧发展的“双子星”

科技   2024-11-20 17:33   浙江  

颠覆AI算力的革新:NVIDIA Blackwell架构与FP4量化精度解析

©作者|chuiyuw

来源|神州问学


引言


2024 年 3 月 18 日,英伟达在加州圣何塞举行的 GTC 大会上发布了备受瞩目的 Blackwell 架构 GPU,这一事件在 AI 领域引起了强烈的反响。Blackwell 框架拥有诸多令人瞩目的亮点,包括强大的性能表现、先进的 4nm 工艺技术、创新的多芯片封装设计和卓越的 FP4 精度特性,其中支持 FP4 精度尤为突出。FP4 精度使得模型中的每个参数仅占用 4bit,相比于全精度的 32bit  长度压缩了 1/8,极大地减少数据存储量和计算量,使得复杂的 AI 任务能够在在有限的资源下更高效地运行。


NVIDIA Blackwell 架构的发布


模型量化使得大模型的训练和推理变得更加高效。如今,端侧设备对于大模型的需求日益增加,无论是 AI PC、汽车的智能座舱还是其他 AI 嵌入式设备,都渴望在本地就能实现强大的 AI 功能。端侧设备由于自身算力和内存的限制,在部署大模型时通常需要对模型进行压缩。模型压缩主要有三种技术:其一为模型量化,它通过调整数据表示形式来降低存储和计算资源需求;其二是稀疏计算,这种方法通过去除模型中相对不重要的连接或参数,使模型结构更加精简;其三是知识蒸馏,这是一种将复杂大模型的知识迁移到小模型中的技术,从而在减少模型规模的同时保留其核心能力。这三种技术共同为端侧大模型的部署提供了可行的路径。


如今,学术界在模型量化上已经有大量的成果,各种精度和算法层出不穷,但要想使量化技术普及开来,除了软件算法以外,硬件适配也至关重要,这也是Blackwell 的 FP4 精度适配能轰动 AI 界的原因。


一、浅谈模型量化


模型量化是一种对神经网络进行压缩的重要技术手段,它将神经网络中原本高精度(例如 32 位浮点数)的参数(weight)和激活(activation)等换用低精度数来表示(例如 4 位整数),主要目的是减少模型的内存占用,加快模型的推理速度。模型量化过程的精度下降会带来量化误差,但由于深度神经网络对噪声有一定的容忍度,量化误差对模型性能的影响通常较小。


1. 量化的精度


16 位浮点数(fp16、bf16):我们从huggingface等模型仓库中拉取的模型文件通常是 fp16 或 bf16 (brain floating point) 精度。相对于全精度的 fp32,fp16 是一种较为常用的半精度浮点格式,它在精度和计算资源需求之间取得了较好的平衡。相对于全精度的 fp32,fp16 能够减少一半的内存占用和计算量。bf16 是专为机器学习加速和近传感器计算的浮点格式,总长度也是16位,但与 fp16 的指数位、尾数位长度不同。然而,16位浮点数的精度仍然较高,对于一些计算资源极度受限的设备,如嵌入式设备或移动设备,其计算和存储需求仍然较大。


4 位整数 (int4):目前端侧大模型基本上都采用了 int4 量化。int4 是一种低精度的整数量化方式,将数据用 4 位整数表示。整数的表示中,相邻两个数使等间隔的,因此整型量化是一种均匀量化。这种量化方式在内存占用和计算速度方面具有极大的优势,由于整数运算在硬件上的实现相对简单,因此 int4 量化后的模型可以在硬件上更快地执行,大大提高了模型的推理速度。然而当数据分布不均匀时,它可能会导致显著的信息丢失,从而影响模型的性能。为了减少这种精度损失,可以采用量化感知训练(Quantization Aware Training,QAT)等方法,对量化误差进行补偿,以提高量化后模型的精度。


4 位浮点数  (fp4):fp4 是一种比 fp16 更低精度的浮点量化格式,它兼具了浮点表示的一些特性和低精度带来的优势。与 int4 相比,fp4 仍属于浮点型表示,相邻两个数之间的间隔不统一,接近0的地方量化间隔较小,而远离0的地方量化间隔较大,因此属于非均匀量化,在表示一些数值范围较大或精度要求较高的参数时,具有更好的准确性。非均匀量化通常需要额外的计算和存储来管理量化参数,但它在量化方面提供了比均匀量化更高的精度和有效性。


2.量化的对象


模型量化中,量化的对象可以是权重(weights)和激活函数的输出(activation)。


权重量化:大模型的训练过程可以看作根据训练集的数据,对权重进行迭代优化。因此当模型训练完毕时,权重的值就固定了下来。由于大模型中的权重不会在推理过程中改变,在量化时可以事先得知权重的分布,因此可以通过针对性地选择量化间隔和取值范围。仅使用权重量化具有算法简单、量化损失小的优势。但实际计算过程中,由于激活函数的输出没有进行量化,因此对计算复杂度的降低有限。


权重-激活量化:激活是神经网络中神经元的输出,在模型推理过程中也占据相当大的计算资源,因此在对权重量化的同时也将激活量化,不仅可以进一步降低推理时的内存消耗,还能提高激活与权重的矩阵乘法的效率。此外,对权重和激活同时进行量化,在二者计算的过程中可以使用低精度的运算方式,而不需要再回到高精度下计算,计算复杂度也大大降低。与权重不同的是,激活值是由模型输入决定的,而我们无法准确获得输入的分布情况,对其进行量化的难度较大。因此,在对激活进行量化时,需要通过校准数据来估计激活值的分布情况,进而确定量化参数。


二、量化算法的困境


1. 精度降低导致准确率降低


量化过程会不可避免地丢失一些信息,因为高精度的浮点数能够表示的数值范围和精度更为广泛和精确,而低精度数据的表示能力相对有限。权重量化中,由于模型权重的确定性,准确率的降低一般不明显,但权重-激活量化中,激活值的分布难以准确把握,准确率降低会更加明显。此时通常会采用补偿的方法来挽回一些损失的精度,例如事先对激活值进行采样校准,或对激活值中元素的重要程度进行区分,将更重要的元素保留高精度。


2. 反量化过程影响计算效率


在对模型进行量化时,将权重或激活转换为低精度的表示形式,确实可以减少模型的存储需求和计算过程中的内存占用。然而,在实际的推理过程中,为了保证计算的准确性,往往需要将量化后的权重、激活反量化回到高精度的浮点形式进行计算。这一点在矩阵计算中尤为明显。


两种不同的量化方式:权重量化和权重-激活量化 [2]


如上图 (b) 所示,在仅作权重量化的情况下,输入数据仍然保持较高的精度,而矩阵乘法需要参与运算的两个矩阵精度相同,这就导致输入数据和权重在进行矩阵乘法时需要反量化回较高精度,这种在低精度和高精度之间来回转换,以及高精度下的矩阵乘法,增加了计算的复杂性和时间成本,从而使得整体的计算效率未能得到有效提高。上图 (c) 所示的权重-激活量化可以规避复杂的矩阵相乘计算,但对激活值的量化往往更困难,需要较复杂的补偿操作,而且在输出时依然要进行反量化,引入额外的计算。


3. 学术界成果推广困难:缺少硬件支持


硬件的专用性和局限性:目前的硬件设备大多是针对传统的高精度计算设计的,对于量化算法的支持不够完善。而且,单个硬件设备对量化算法的支持十分有限,不同的硬件设备对于量化算法的支持程度也存在差异,这就使得学术界开发的量化算法在实际应用中需要针对不同的硬件设备进行大量的适配和优化工作,增加了推广的难度。


硬件研发的滞后性:学术界对于量化算法的研究不断推进,新的量化方法和技术不断涌现。然而,硬件设备的研发周期相对较长,无法及时跟上学术界的研究进展。这就导致在新的量化算法出现后,缺乏相应的硬件支持,使得这些算法无法在实际应用中得到有效的验证和推广。例如,学术界在发表新型量化算法,验证计算效率提升时,由于缺少能与之适配的硬件,通常会使用硬件语言和 FPGA 自行编写量化算子,与不采用量化的模型进行性能比较,以验证量化算法是有效的,但实验室环境不代表实际环境,因此无法在实际的生产环境中进行部署和应用。


成本和兼容性问题:开发支持量化算法的硬件设备需要投入大量的研发成本和时间成本,这对于硬件厂商来说是一个巨大的挑战。而且,新的硬件设备需要与现有的软件和系统进行兼容,否则也会影响到量化算法的推广和应用。


三、Blackwell与FP4精度


1.浮点数量化算法


首先我们了解一下浮点数的表示。在IEEE Float32标准中,浮点数由3部分组成:符号位 (sign bit)、指数位 (exponent bits) 以及尾数位 (mantissa bits),如下图所示。


IEEE标准下单精度浮点数(FP32)的表示


简单来说,大部分浮点数的表示可以写成下面的公式:



其中,s 代表正负符号位表示的数,d 取 0 或 1 的值,用来表示第 i 个尾数位,p 是所有指数位所表示的无符号整数,介于 0 到 2^e - 1 之间,用来表示当前数字该被划分到哪一个指数区间,b 是指数位的偏置 bias。


浮点数量化的方法分两步[1]。


1.缩放与裁剪。低精度的浮点数能够表示的数的范围有限,因此首先要对输入的实际值进行缩放,使其落入低精度浮点数能够表示的区间,再对区间外的数进行裁剪,用区间左端点或右端点的值来表示被裁剪的数。此处缩放系数是一个全精度的数。



由于浮点数的指数位存在偏置,因此可以将指数偏置也放到缩放系数中。


2.比较和量化,将实际值量化成低精度的浮点数。值得一提的是,浮点数量化和整数量化的均匀量化不同,均匀量化无需判断实际值所在位置的量化间隔,因此直接用四舍五入的方法量化到相应的量化值即可,浮点数量化作为非均匀量化,量化间隔不相同,需要计算实际值落在哪个量化区间里。



上图以 m = 2, e = 2 为例,展示了比较和量化的过程。先利用公式 (5) 进行比较,确定量化区间,再用公式 (6) 得到量化值。


经过了这两部的计算,当weight和activation量化完成后,便可以在低精度下进行高效矩阵乘法。



从上式可以看出,缩放系数 α 可以提出来先进行计算,后面便是在低精度浮点数下的矩阵乘法,完成矩阵乘法的加速。


2.FP4下的精度补偿


FP4 的比特数只有 4 位,也一样要分成符号位、指数位和尾数位,这意味着可用于表示数据的信息位十分有限,量化误差也会变得巨大,若不采取补偿会对模型的表现产生灾难性的影响。为此,在 LLM-FP4 论文中[1],作者提出了一种有效的FP4精度的权重-激活量化补偿。


1.基于搜索的量化方法:作者团队注意到,不同的指数/尾数位设定会较大程度地影响量化误差,对此,该方法以最小化量化误差为目标,统筹搜索出模型中每个 Tensor 最适合的浮点数的指数/尾数位设定,例如E2M1或E1M2,以及对应的量化区间。


2.预移位指数偏差的优化(Pre-shifted Exponent Bias Optimization):作者团队发现,多数 Transformer 模型的激活值中,个别 channel 的值会比剩余的 channel 大很多,所以在量化激活值的过程中,量化的精度很大程度会被这些异常值决定,从而抑制其他 channel 值的量化区间,最终降低整体影响量化精度。然而 channel-wise 量化在矩阵运算中不能把缩放系数单独提出来,也就不可进行高效矩阵运算。对此,作者对每个激活值的缩放因子一拆为二,拆成一个per-tensor的因子和per-channel的因子(如下图a),并将per-channel因子先与weight进行计算(如下图b),这样在矩阵乘法中就去掉了per-channel因子的影响,将高效矩阵乘法充分利用起来(如下图c)。


LLM-FP4 对于激活值量化的处理[1]


3.Blackwell的硬件支持


LLM-FP4 利用了补偿的方法,极大程度上缓解了量化准确度降低,规避了在较高精度下的矩阵乘法,从软件算法层面实现了极低精度的浮点数量化。而英伟达看重了该算法的实力,在新一代Blackwell架构中不仅适配了 FP4 精度下的模型推理,还适配了包含 FP4 精度的混合精度模型训练。


Nvidia Blackwell 架构对上一代 Hopper 架构的 Transformer Engine 进行了迭代升级,第二代 Transformer 引擎搭配上第五代 Tensor Core 技术,并结合 NVIDIA® TensorRT™ - LLM 和 NeMo™框架创新成果,加速了大型语言模型和专家混合模型(MoE)的推理与训练。Blackwell B200 在 FP8 精度下的算力达到了 20 PFLOPS,是上一代 Hopper H100 的 2.5 倍,在全新的 FP4 精度下,40 PFLOPS 的算力更是 Hopper 的 5 倍


Tensor Core 最先在2017年英伟达的 Volta 框架中发布,专门为矩阵乘法加速而生。自发布以来,随着AI模型的规模和复杂度爆炸性地增长,Tensor Core 在不断地适配新的量化精度,以适应不断增长的训练和推理计算需求。


在 FP4 量化中,对实际值进行缩放依然是至关重要的。Tensor Core 采用了主流的共享缩放系数的方法,多个数共享一个高精度缩放因子,有效节省了模型的存储占用,提升了计算效率。



对于混合精度下的模型训练,英伟达的 Tensor Core 也在硬件上实现了自动化混合精度缩放。英伟达芯片有多种自动缩放低精度算术运算的方法,其中最常用的是延迟缩放。其原理为:在进行 FP4 计算时,记录每次计算的最大输出值,记为 amax。然后对最近的 amax 值在一定长度的窗口中取滑动平均值得到 amax_avg。由于下一次计算的最大值很可能与 amax_avg 相似,所以可以预先缩放即将进行的计算,使得与 amax_avg 相似的值不会因 FP4 表示而过度失真。用户也可以自行调整历史窗口的长度以及计算 amax_avg 的加权平均值的方式。


FP8 精度下的自动缩放。FP4 采用的相同方法。


目前,除去个别的运算(例如批归一化中的 Softmax 等)需要使用 FP32,许多层已经可以完全用 FP4 精度替代。而且网络用 FP4 精度的占比越大,Blackwell 的训练性能就越能接近英伟达宣称的 5 倍提升的惊人数字,且已有研究表明网络可以使用 FP4 精度进行训练而不会有显著的精度损失


Blackwell上文生图模型在FP16和FP4精度下推理的对比


Blackwell 适配 FP4 精度有着至关重要的意义和价值。首先,在性能提升方面表现卓越,相较于上一代 H100 GPU 所支持的 FP8 精度,B200 在 FP4 精度下性能能够翻倍。这一性能提升为英伟达在 AI 芯片领域巩固了优势地位。其次,FP4 精度有力地推动了大模型发展,能够满足多模态数据训练更大模型的需求,为构建和运行万亿参数级的实时生成式 AI 大型语言模型创造了条件。再者,从成本角度来看,它有助于大幅降低训练成本,减少计算量和存储需求,以训练 1.8 万亿参数模型为例,使用 Blackwell GPU 仅需 2000 个,耗电量仅 4 兆瓦,相比之下,之前使用 8000 个 H100 GPU 则需要 15 兆瓦功耗。


尤为值得注意的是,FP4 精度的支持彰显了英伟达进军端侧和边缘侧市场的勃勃野心。它使得大规模模型在端侧和边缘侧的部署和推理更加高效,能够在保证模型性能的同时,进一步降低计算和存储需求,为人工智能技术在这些资源受限环境下的大规模数据处理和复杂模型训练应用提供了坚实的支持。FP4 精度不仅是 Blackwell 架构的关键特性,也是英伟达在竞争激烈的 AI 芯片市场保持领先、增强竞争力的重要砝码,同时为模型的压缩和优化开辟了新的思路和方法,持续推动人工智能技术向前发展。


四、总结


FP4 量化的软硬件结合落地对于英伟达和学术界都有着非凡意义。英伟达凭借在 Blackwell 架构中适配 FP4 精度,在软件上运用如 LLM - FP4 论文里的补偿方法实现低精度浮点数量化,硬件上对前代架构升级,使 Blackwell B200 在 FP4 精度下算力大幅提升,巩固其在 AI 芯片领域优势,彰显战略眼光。对学术界而言,FP4 精度为量化研究提供新方向与验证平台,促进学术成果与业界硬件结合,推动量化技术发展,形成学界和业界合作推动 AI 发展的良好范式。


量化对于端侧 AI 发展极为关键。端侧设备受算力和内存限制,量化技术通过调整数据表示形式,如采用 FP4 量化,可减少存储量和计算量,让复杂 AI 任务在端侧高效运行,是实现端侧设备强大本地 AI 功能的关键。而新硬件如 Blackwell 架构与量化技术的融合,能提供更强算力支持,加速模型训练和推理,拓展端侧 AI 应用场景,推动端侧 AI 普及,为端侧 AI 的大规模应用和创新提供有力支撑,对端侧 AI 发展起到强大的推动作用。


总之,FP4 量化的软硬件结合以及其在端侧的应用落地,为 AI 技术的发展注入了新的活力,也为未来更多技术创新和产业变革奠定了坚实基础,我们有理由期待 AI 技术在各领域带来更多的惊喜和突破。


参考文献


[1] Liu, Shih-Yang, Zechun Liu, Xijie Huang, Pingcheng Dong and Kwang-Ting Cheng. “LLM-FP4: 4-Bit Floating-Point Quantized Transformers.” Conference on Empirical Methods in Natural Language Processing (2023). https://arxiv.org/abs/2310.16836


[2] Li, Jinhao, Jiaming Xu, Shan Huang, Yonghua Chen, Wen Li, Jun Liu, Yaoxiu Lian, Jiayi Pan, Li Ding, Hao Zhou, Yu Wang and Guohao Dai. “Large Language Model Inference Acceleration: A Comprehensive Hardware Perspective.” (2024). https://arxiv.org/abs/2410.04466




智见AGI
围绕生成式AI技术的交流社区,与开发者和合作伙伴共同探究有深度的生成式AI技术前沿洞见、技术迭代、案例解析、方法和实践,助力企业的数字化转型
 最新文章