DFloat11:大型语言模型无损压缩至70%,保持100%准确率

DFloat11无损压缩框架,可将LLM压缩至70%体积,同时保持100%准确率。定制GPU内核实现快速解压缩,显著提升推理效率。

原文标题:模型压缩到70%,还能保持100%准确率,无损压缩框架DFloat11来了

原文作者:机器之心

冷月清谈:

来自莱斯大学等机构的研究者提出了一种名为DFloat11的无损压缩框架,该框架可以将大型语言模型(LLMs)压缩到原始大小的70%,同时保持任务上的100%准确性。DFloat11通过应用熵编码技术,根据权重出现频率为其分配动态长度编码,在不损失任何精度的情况下实现了接近信息理论极限的压缩效果。此外,该研究还开发了定制化的GPU内核来实现快速在线解压缩,并设计了双阶段内核和Transformer块级解压缩等策略以优化性能。实验结果表明,DFloat11能在Llama-3.1、Qwen-2.5和Gemma-3等模型上实现约30%的体积缩减,同时在token生成吞吐量上实现了显著提升,并支持更长的上下文长度。

怜星夜思:

1、文章中提到DFloat11依赖于BFloat16权重表示的低熵特性,那么对于那些权重分布更加均匀或者熵更高的模型,DFloat11的压缩效果会受到怎样的影响?
2、文章提到DFloat11在GPU上实现了快速解压缩,但具体实现细节比较技术化。有没有更通俗易懂的解释,让非专业的同学也能理解这个“快速解压缩”的关键?
3、DFloat11虽然实现了无损压缩,但引入了额外的解压缩步骤。在哪些场景下,这种解压缩开销会抵消掉压缩带来的优势?或者说,DFloat11更适合哪些应用场景?

原文内容

机器之心报道

编辑:陈萍、+0


大型语言模型(LLMs)在广泛的自然语言处理(NLP)任务中展现出了卓越的能力。然而,它们迅速增长的规模给高效部署和推理带来了巨大障碍,特别是在计算或内存资源有限的环境中。


例如,Llama-3.1-405B 在 BFloat16(16-bit Brain Float)格式下拥有 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 能在保持比特级(bit-for-bit)精确输出的同时,将模型体积缩减约 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 推理。接下来,文章详细介绍了解决方案,其中包括三个关键组成部分:


  1. 将一个庞大的无前缀查找表(LUT)分解为多个适合 GPU SRAM 的紧凑 LUTs;

  2. 引入一个两阶段的内核设计,利用轻量级辅助变量来高效协调线程的读写操作;

  3. 在 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 线程利用率。




© THE END 

转载请联系本公众号获得授权

投稿或寻求报道:liyazhou@jiqizhixin.com

同意楼上的说法,本质上DFloat11是找到了现有模型的冗余信息。如果模型设计本身就非常紧凑,信息分布均匀,那无损压缩的空间肯定会变小。但这反过来说明,DFloat11其实也为我们提供了一个优化模型设计的思路,减少冗余,让模型更高效。

简单来说,可以把解压缩想象成查字典。没压缩的时候,每个词(权重)都是标准长度,GPU可以并行查找。压缩后,词的长度不一,查起来就慢了。DFloat11的关键在于,它把这个“大字典”拆成了很多“小字典”,而且GPU可以同时查多个“小字典”,相当于提升了并行查找的效率。另外,它还优化了查找的方式,尽量减少GPU线程之间的冲突,进一步提升速度。

我来抖个机灵!你可以把DFloat11的解压缩过程想象成快递分拣。原始模型是所有包裹都一样大,分拣员直接按顺序扔就行了。DFloat11是包裹大小不一,需要先查一个“包裹大小表”(LUT),再根据大小分拣。为了提高效率,DFloat11把“包裹大小表”放到了分拣员手边(GPU SRAM),还安排了两个“调度员”(双阶段内核)来指挥,避免分拣员互相撞车。

可以考虑一下混合使用的策略。对于模型中不敏感的部分,可以使用有损压缩进一步减小模型体积;对于模型中对精度要求高的部分,使用DFloat11进行无损压缩。这样可以兼顾压缩率和精度,适用于更广泛的场景。

我感觉DFloat11在对延迟要求非常高的场景下可能不太适用。毕竟多了一道解压缩的工序,会增加延迟。但是在对吞吐量要求高,可以容忍一定延迟的场景下,DFloat11就能发挥优势,比如大规模的离线推理任务。

我觉得可以这样理解,原始的解压缩需要频繁地从内存中读取数据,速度慢。DFloat11相当于把一部分常用的“字典”(LUT)放到了GPU的“缓存”(SRAM)里,这样读取速度就快多了。同时,它还设计了一个高效的“调度员”(双阶段内核),负责协调各个“工人”(线程)的工作,避免他们互相等待,从而提高整体效率。

主要看计算与访存的比例。如果模型主要瓶颈在于计算,那解压缩带来的额外计算开销,可能可以接受。但如果模型主要瓶颈在于访存(比如带宽受限),那压缩后减少了数据量,就能显著加速。所以,DFloat11更适合那些访存瓶颈比较明显的场景,比如在边缘设备上部署大型模型。

问题提的很好!如果模型权重分布更均匀,信息熵更高,意味着每个权重的出现概率差异不大,霍夫曼编码的效果会变差,压缩率自然会降低。极端情况下,如果每个权重都只出现一次,那就没法压缩了。所以,DFloat11的优势在于利用了现有LLM权重分布的特点,对于某些特殊设计的模型,可能效果就没那么显著了。

我觉得这个要结合实际情况看。虽然理论上说熵越高压缩率越低,但实际模型中,即使整体熵高,局部可能还是存在一些冗余信息。DFloat11还是有可能在局部进行压缩。此外,如果模型权重分布是某种特定的高熵分布(比如均匀分布),也可以考虑针对这种分布设计特定的压缩算法。