大语言模型(LLMs)虽然在自然语言处理任务中有卓越能力,但因其规模增长给部署和推理带来巨大障碍。莱斯大学等机构的研究者提出了DFloat11这种无损压缩框架,可将BFloat16模型压缩到原始大小的70%且任务准确性达100%。文中还详细介绍了DFloat11的提出缘由、实现方式、实验情况,包括在多个主流大语言模型上的压缩比、无损特性验证、推理性能以及消融研究等内容。
大型语言模型(LLMs)在自然语言处理(NLP)任务里表现非凡。不过,其规模的快速扩张给有效部署与推理造成了极大阻碍,尤其在计算或内存资源有限的环境下。
像Llama - 3.1 - 405B,在BFloat16格式下有4050亿个参数,完整推理需要约810GB内存,这超出了典型高端GPU服务器(例如DGX A100/H100,配备8个80GB GPU)的能力。所以,部署这个模型需要多个节点,这既昂贵又难以实现。
来自莱斯大学等机构的研究者提出了一个解决办法,能把任何BFloat16模型压缩到原始大小的70%,并且在任务上还能保持100%的准确性。
论文题目为《70% Size, 100% Accuracy: Lossless LLM Compression for Efficient GPU Inference via Dynamic - Length Float》,论文地址是https://arxiv.org/pdf/2504.11651,项目地址为https://github.com/LeanModels/DFloat11。
为了应对LLM不断增大的模型尺寸,通常会采用量化技术,把高精度权重转换为低位表示。这能大大减少内存占用和计算需求,有助于在资源受限环境里实现更快速的推理和部署。但是,量化本质上是有损压缩技术,有个基本缺陷:必然会改变LLMs的输出分布,从而影响模型的准确性和可靠性。
无损压缩技术在有效减小LLM规模的同时,能保留精确的原始权重,确保模型输出分布和未压缩表示(如BFloat16)完全相同。不过,现有的无损方法主要集中在提高LLMs的存储效率上,比如缩小模型检查点或者优化针对专用硬件(如FPGA)的性能。
本文提出的DFloat11(Dynamic - Length Float)是一种无损压缩框架,在保持和原始模型完全相同输出的情况下,可将LLM的规模减少30%。
DFloat11的提出是因为当前LLM模型中BFloat16权重表示存在低熵问题,这表明现有存储格式效率很低。通过应用熵编码技术,DFloat11依据权重出现频率为其分配动态长度编码,在不损失精度的情况下实现接近信息理论极限的压缩效果。
为了支持动态长度编码的高效推理,研究人员还开发了定制化的GPU内核来实现快速在线解压缩。其设计包含以下几个方面:
把内存密集型查找表(LUT)分解为适应GPU SRAM的紧凑型查找表;采用双阶段内核设计,通过轻量级辅助变量协调线程读写位置;实现Transformer块级解压缩以减少延迟。
研究人员在Llama - 3.1、Qwen - 2.5和Gemma - 3等最新模型上做了实验:DFloat11能在保持比特级精确输出的同时,把模型体积缩减约30%。与把未压缩模型部分卸载到CPU以应对内存限制的方案相比,DFloat11在token生成吞吐量上提高了1.9 - 38.8倍。在固定GPU内存预算下,DFloat11支持的上下文长度是未压缩模型的5.3 - 13.17倍。
值得一提的是,基于这个方法,Llama - 3.1 - 405B(810GB)在配备8×80GB GPU的单节点上实现了无损推理。
LLM的权重通常用浮点数表示,包括BFloat16或BF16,这种表示在数值精度和内存效率之间取得了平衡。然而,BFloat16表示信息的效率并不高。
针对BFloat16表示法中存在的信息效率低下问题,本文提出一种无损压缩框架,通过熵编码技术对浮点参数进行压缩。
具体做法包括:基于语言模型线性投影矩阵中所有BFloat16权重的指数分布构建霍夫曼树,对指数部分采用霍夫曼编码压缩,同时保留原始符号位和尾数位。压缩后的指数经过紧密比特打包存入字节数组EncodedExponent,未压缩的符号位和尾数则存储在独立字节数组PackedSignMantissa中。图2展示了DFloat11(Dynamic - Length Float)或DF11这种可实现模型参数高效紧凑表示的格式。
虽然动态长度浮点数能有效实现LLM的无损压缩,但关键挑战仍然存在:如何利用这些压缩权重进行高效的GPU推理。接下来,文章详细介绍了解决方案,其中包括三个关键组成部分:
把一个庞大的无前缀查找表(LUT)分解为多个适合GPU SRAM的紧凑LUTs;引入一个两阶段的内核设计,利用轻量级辅助变量来高效协调线程的读写操作;在transformer块级别执行解压缩,以提高吞吐量并减少延迟。
算法1是将DFloat11解压缩为BFloat16的GPU内核过程。
研究人员评估了DF11压缩方法在GPU上的有效性和推理效率,将多个主流大语言模型(包括LLaMA、Qwen、Gemma等)从BFloat16压缩为DF11格式,并报告其压缩比和性能表现。
在软硬件环境方面,研究人员使用CUDA和C++实现了DF11解压缩内核,并集成至Transformers推理框架。实验基于HuggingFace Accelerate框架评估未压缩模型在CPU分流(CPU offloading)和多GPU场景下的性能。
为全面分析DF11内核在不同硬件配置下的表现,团队在多种GPU和CPU组合的机器上进行实验。
实验结果如下:
DF11压缩比:DF11能将大语言模型压缩至原始大小的约70%(等效位宽为11位)。
表2展示了DF11在LLaMA、Qwen、Gemma等模型上的压缩效果。所有模型的线性投影层参数均被压缩为DF11格式,压缩比稳定在70%。
无损特性验证:为验证DF11的无损特性,研究人员使用lm - evaluation - harness工具在MMLU、TruthfulQA、WikiText和C4数据集上评估模型性能。
结果表明,压缩后的模型在准确率和困惑度(Perplexity)上与原始BFloat16模型一致(见表3)。此外,研究人员逐位对比DF11解压后的权重矩阵与原始矩阵,确认二者完全相同。
推理性能:研究人员在多个硬件平台上比较了DF11与BFloat16模型的推理效率。对于BFloat16模型,当模型超出单GPU显存时,需将部分计算分流至CPU,而DF11模型可完全加载至单GPU。
评估指标包括延迟(Latency)和吞吐量(Throughput),结果显示DF11模型的性能显著优于BFloat16模型,延迟减少1.85至38.83倍(见图3)。
节省的显存可支持更长生成序列:DF11的显存节省使模型能够支持更长的生成序列。如图4所示,在batch size为1时,DF11模型的显存消耗显著降低,相比BFloat16模型最多可生成5.33至13.17倍的tokens。
消融研究:
延迟分析:研究团队以Llama - 3.1 - 8B - Instruct为例,对比了其在BFloat16与DF11格式下不同batch大小时的延迟组成,结果如图5所示。
相比原始模型,DF11压缩模型因解压Transformer模块与语言建模头引入了额外延迟,但该开销与batch size无关,因此通过提升batch size可有效摊销解压延迟,使总推理时间之间的差距显著缩小。
解压性能对比:研究人员将DF11解压内核的延迟与吞吐表现分别与两种基线方案进行对比:
将模型权重存储于CPU内存并在需要时传输到GPU;使用NVIDIA的nvCOMP库中的ANS(不对称数值系统,Asymmetric Numeral System)解压方法。
实验以Llama - 3.1 - 8B - Instruct语言建模头权重矩阵为例,结果如图6所示,DF11的解压吞吐量最高分别为CPU - GPU传输和ANS解码的24.87倍和15.12倍。此外,DF11的压缩比为70%,优于nvCOMP的78%。值得注意的是,随着权重矩阵规模的增大,DF11的解压吞吐呈上升趋势,原因是更好的GPU线程利用率。
本文介绍了大语言模型规模增长带来的部署和推理难题,重点阐述了DFloat11这种无损压缩框架。该框架可有效压缩大语言模型,同时保持任务准确性,在多个模型上的实验结果显示其在压缩比、无损特性、推理性能等方面表现优异,为大语言模型在资源有限环境下的部署和推理提供了一种很有潜力的解决方案。
原创文章,作者:Admin,如若转载,请注明出处:https://www.camerich.net/archives/202.html