突破!LLM 无损压缩技术 DFloat11:模型体积缩小 30%,推理速度大幅提升!

大型语言模型(LLMs)的挑战与机遇:DFloat11 无损压缩方案

大型语言模型(LLMs)在自然语言处理(NLP)领域展现了强大的能力。然而,模型规模的快速增长给高效部署和推理带来了严峻的挑战,尤其是在计算资源或内存受限的环境中。

以 Llama-3.1-405B 为例,它在 BFloat16 格式下拥有 4050 亿个参数,需要约 810GB 的内存才能进行完整推理。这远远超出了典型高端 GPU 服务器(例如配备 8 个 80GB GPU 的 DGX A100/H100)的承载能力。因此,部署如此庞大的模型通常需要多个节点,导致成本高昂且难以实现。

针对这一问题,来自莱斯大学等机构的研究人员提出了一种创新解决方案:DFloat11 可以在保持 100% 准确率的前提下,将任何 BFloat16 模型压缩到原始大小的 70%。

图片

量化 vs. 无损压缩:权衡与选择

为了有效应对 LLM 模型尺寸的爆炸式增长,研究人员通常会采用量化技术,将高精度权重转换为低位表示。这种方法可以显著减少内存占用和计算需求,从而有助于在资源受限的环境中实现更快的推理和部署。然而,量化本质上是一种有损压缩技术,它不可避免地会改变 LLMs 的输出分布,进而影响模型的准确性和可靠性。

相比之下,无损压缩技术能够在有效减小 LLM 规模的同时,精确地保留原始权重,从而确保模型的输出分布与未压缩表示(例如 BFloat16)完全一致。然而,现有的无损方法主要集中在提高 LLMs 的存储效率上,例如缩小模型检查点或优化针对专用硬件(如 FPGA)的性能。

DFloat11:无损压缩的革新

本文提出的 DFloat11(Dynamic-Length Float)是一种创新的无损压缩框架,可以在保持与原始模型完全相同的输出的前提下,将 LLM 的规模缩减 30%

DFloat11 的灵感来源于当前 LLM 模型中 BFloat16 权重表示的低熵问题。这种低熵现象表明现有的存储格式存在显著的效率低下。通过应用熵编码技术,DFloat11 根据权重出现的频率为其分配动态长度编码,从而在不损失任何精度的情况下实现了接近信息理论极限的压缩效果。

为了支持动态长度编码的高效推理,研究团队还开发了定制化的 GPU 内核,以实现快速在线解压缩。该内核的设计包含以下关键要素:

  • 紧凑型查找表(LUT): 将内存密集型的查找表分解为适合 GPU SRAM 的小型查找表。
  • 双阶段内核设计: 采用双阶段内核设计,通过轻量级辅助变量来协调线程的读写位置。
  • Transformer 块级解压缩: 实现 Transformer 块级别的解压缩,以最大限度地减少延迟。

该研究在 Llama-3.1、Qwen-2.5 和 Gemma-3 等最新的 LLM 模型上进行了广泛的实验。实验结果表明,DFloat11 能够在保持比特级精确输出的同时,将模型体积缩减约 30%。与将未压缩模型部分卸载到 CPU 以应对内存限制的方案相比,DFloat11 在 token 生成吞吐量上实现了 1.9–38.8 倍的显著提升。在固定 GPU 内存预算下,DFloat11 支持的上下文长度是不压缩模型的 5.3–13.17 倍。

值得一提的是,基于 DFloat11 方法,Llama-3.1-405B(810GB)可以在配备 8×80GB GPU 的单节点上实现无损推理。

DFloat11 方法详解

LLM 的权重通常使用浮点数表示,例如 BFloat16 或 BF16,这种表示方法在数值精度和内存效率之间取得了良好的平衡。然而,BFloat16 表示的信息效率并非最优。

针对 BFloat16 表示法中存在的信息效率低下问题,本文提出了一种无损压缩框架,通过熵编码技术对浮点参数进行压缩。

具体实现包括:基于语言模型线性投影矩阵中所有 BFloat16 权重的指数分布构建霍夫曼树,对指数部分采用霍夫曼编码压缩,同时保留原始符号位和尾数位。压缩后的指数经过紧密比特打包存入字节数组 EncodedExponent,而未压缩的符号位和尾数则存储在独立的字节数组 PackedSignMantissa 中。下图展示了 DFloat11(Dynamic-Length Float)或 DF11,该格式可实现模型参数的高效紧凑表示。

图片

GPU 高效推理的关键技术

虽然动态长度浮点数能够有效地实现 LLM 的无损压缩,但关键挑战在于如何利用这些压缩权重进行高效的 GPU 推理。接下来,文章详细介绍了解决方案,其中包括三个关键组成部分:

  1. 分解查找表(LUT): 将一个庞大的无前缀查找表(LUT)分解为多个适合 GPU SRAM 的紧凑 LUTs。
  2. 双阶段内核设计: 引入一个两阶段的内核设计,利用轻量级辅助变量来高效协调线程的读写操作。
  3. Transformer 块级别解压缩: 在 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 组合的机器上进行实验。

压缩比:70% 的体积缩减

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。

图片

消融研究:深入分析性能瓶颈

延迟分析:Batch Size 的影响

延迟分析:研究团队以 Llama-3.1-8B-Instruct 为例,对比了其在 BFloat16 与 DF11 格式下不同 batch 大小时的延迟组成,结果如图 5 所示。

图片

相比原始模型,DF11 压缩模型因解压 Transformer 模块与语言建模头引入了额外延迟。但该开销与 batch size 无关,因此通过提升 batch size 可有效摊销解压延迟,使总推理时间之间的差距显著缩小。

解压性能:DF11 的卓越表现

解压性能对比:研究人员将 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 线程利用率。

图片