要点速览
将 2:4 稀疏性与量化相结合,为压缩大语言模型(LLM)以实现高效部署提供了一种强有力的方法,它能在精度和硬件加速性能之间取得平衡。然而,要充分发挥其潜力,GPU 库和编程接口中增强的工具支持至关重要。
LLM 压缩技术概述
尽管大语言模型(LLM)在自然语言理解和生成方面取得了成功,但由于其巨大的参数量,运行成本往往令人望而却步。这导致了显著的内存开销和高昂的推理成本,尤其是在部署阶段。为了解决这些挑战,量化和剪枝等模型压缩技术应运而生,旨在减少推理成本的同时尽可能保持模型精度,尽管与它们的密集(dense)版本相比,这通常伴随着权衡。
量化:虽然高精度格式在训练期间至关重要,但 LLM 在推理时通常可以使用低得多的位宽来保持精度。将 LLM 量化为 8 位整数或浮点数相对简单,并且像 GPTQ 和 AWQ 等近期方法即使在 4 位精度下也表现出了令人满意的精度。然而,进一步降低至 4 位以下仍然具有挑战性:像 AQLM 这样的方法在现代 GPU 上往往会遭受推理速度下降的影响,而其他如 QUIP# 等方法则依赖于复杂的自定义预处理内核。这些局限性表明,仅靠量化可能不足以实现激进的压缩,这促使我们需要探索稀疏性等补充技术。
非结构化稀疏性:当量化的收益开始趋于平稳时,稀疏性为压缩 LLM 提供了一条正交的途径。非结构化稀疏性允许非零元素出现在矩阵的任何位置,即使剪枝掉高达 50% 的权重,模型也能保持高精度。SparseGPT 和 Wanda 等近期方法能够以最小的性能下降实现此类剪枝。然而,尽管有压缩优势,由于非结构化稀疏性不规则的内存访问模式,它很难在现代 GPU 上加速。大多数硬件优化方法(如 FlashLLM)只有在极高的稀疏度水平(通常为 80% 或更高)下才能带来推理速度提升。精度与硬件效率之间的这种差距促使我们使用 2:4 等半结构化稀疏格式,它们在性能和可部署性之间提供了更好的权衡。
半结构化稀疏性:由 NVIDIA 和 AMD GPU 支持的 2:4 稀疏性等半结构化稀疏格式,通过与底层硬件对齐,在压缩和加速之间提供了令人满意的平衡。虽然半结构化稀疏性对权重的剪枝位置施加了一些约束,但 MaskLLM 等近期方法使用可学习的掩码来恢复精度,达到了可与非结构化稀疏性相媲美的性能。此外,研究表明,稀疏矩阵乘法,特别是具有零值等可预测模式的矩阵乘法,可以通过最大限度地减少晶体管开关来显著降低 GPU 功耗,从而提高推理过程中的能源效率。这使得 2:4 稀疏性成为部署压缩 LLM 的一种实用替代方案,尤其是在与其他技术(如量化)结合使用时。
预训练中的稀疏性:尽管本文重点在于降低推理成本,但值得注意的是,稀疏性也是一种强大的训练工具。预训练中的权重稀疏性已在 SLoPe 和 FST 等前人工作中进行了探索,PyTorch 团队最近的贡献表明,2:4 权重稀疏性可以在不损失模型质量的情况下加速训练。此外,Meta 最近的工作表明,激活稀疏性可以在无损地恢复模型精度的同时,加速 LLM 的训练和推理。这些工作强调了稀疏性是整个模型生命周期的基础工具。在确立了其在训练中的价值后,我们现在将重点转向量化其对推理的影响,在推理中,将稀疏性与量化相结合为当前的部署挑战提供了强大的解决方案。
推理时的稀疏性与量化
为了实证比较单纯量化与“量化+稀疏性”结合的效果,我们在 LLaMA-2 7B 模型上进行了实验。我们的目标是在理论上等效的 8 倍压缩比下评估这两种方法,具体对比 2 位量化与 4 位量化结合 50% 稀疏性(包括非结构化和 2:4 格式)的效果。
我们的实验利用了最先进的方法来表示每种策略。对于纯粹的 4 位以下量化,我们选择了 AQLM 和 QUIP#。对于混合方法,我们使用了 SparseGPT 进行非结构化稀疏,使用 MaskLLM 进行硬件友好的 2:4 结构化格式,两者均结合了 4 位量化。最后,为了展示组合技术的强大之处,我们还在稀疏模型之上应用了 SLiM(一种零样本低秩适配器),以衡量进一步恢复精度的潜力。
我们在 LLaMA-2-7B 上的实验表明,将 4 位量化与 50% 稀疏性相结合,在精度上始终优于单纯的 2 位量化,尽管两者都达到了 8 倍的等效理论压缩比。在稀疏方法中,2:4 结构化稀疏性(特别是在结合 SLiM 等低秩适配器进行增强时)不仅能保持精度,还能利用现代 GPU 上的硬件加速支持。这使得 2:4 稀疏性不仅对于模型精度,而且对于使用现有 GPU 硬件的实际部署而言,都是一个极具吸引力的选择。
LLaMA-2-7B
| 量化 | 剪枝 | 位宽 | 稀疏性 | 压缩比 | ArcC | ArcE | PiQA | Wino | 平均 |
| – | Dense | 16 | – | 1.0 | 40.0 | 69.3 | 78.5 | 67.3 | 63.8 |
| AQLM | – | 2 | – | 0.18 | 33.6 | 62.8 | 73.5 | 64.6 | 58.6 |
| QUIP# | – | 2 | – | 0.18 | 34.6 | 64.6 | 75.1 | 64.9 | 59.8 |
| GPTQ | SparseGPT* | 4 | 非结构化 | 0.18 | 35.3 | 68.1 | 74.2 | 67.7 | 61.3 |
| AbsMax | MaskLLM** | 4 | 2:4 | 0.18 | 33.2 | 68.4 | 74.5 | 65.0 | 60.3 |
| AbsMax | MaskLLM + SLiM-LoRA (r=0.1) | 4 | 2:4 | 0.22 | 38.0 | 70.9 | 77.2 | 70.6 | 64.2 |
* 最先进的非结构化稀疏方法。
** 最先进的 2:4 稀疏方法。
虽然低位量化提供了令人瞩目的压缩效果,但在针对更新、更复杂的模型实现激进压缩比时,其有效性可能会面临局限。例如,对于 LLaMA-3-8B,2 位 AQLM 量化方法在试图保持可接受精度时仅能实现 0.25 倍的压缩比。(注:QUIP# 没有开源检查点可供直接对比。)相比之下,通过结合稀疏性、4 位量化和低秩近似,我们可以在相同的 LLaMA-3-8B 模型上以相同的 0.25 倍压缩比实现更高的精度,如下表所示。这个有力的例子强调了仅依赖量化可能是实现当代 LLM 激进压缩和高精度之间平衡的限制因素。这种将稀疏性与量化相结合的明显优势,凸显了对强大软硬件工具的迫切需求,以便有效地部署此类压缩技术,我们将在下一节中探讨。
LLaMA-3-8B
| 量化 | 剪枝 | 位宽 | 稀疏性 | 压缩比 | ArcC | ArcE | PiQA | Wino | 平均 |
| – | Dense | 16 | – | 1.0 | 50.4 | 80.1 | 79.7 | 72.6 | 70.7 |
| AQLM | – | 2 | – | 0.25 | 41.3 | 74.3 | 77.8 | 72.0 | 66.4 |
| AbsMax | MaskLLM + SLiM-LoRA (r=0.2) | 4 | 2:4 | 0.25 | 42.9 | 75.2 | 77.8 | 71.2 | 66.8 |
可用的模型加速工具
现在,一些 GPU 库通过高效的矩阵乘法内核支持 2:4 稀疏性,简化了压缩模型的部署。值得注意的是,通过 cuSPARSELt 和 CUTLASS 模板库,现在可以使用标准数据类型获得对 2:4 稀疏性的高性能支持。torchao 团队已将这些内核集成到 PyTorch 框架中,无需自定义 CUDA 或 C++ 扩展,简化了采用流程。
然而,尽管目前已有支持,但这些库存在一些限制,特别是在扩展混合压缩的内核支持方面。一个重大挑战是它们目前缺乏对融合量化和反量化操作的支持,而这对于最大限度地减少内存带宽使用并降低现代模型压缩流水线中的延迟至关重要。目前的稀疏和量化推理方法通常需要将具有不同或不兼容数据类型的张量加载到共享内存中。在张量核心上执行高效矩阵乘法之前,这些张量需要显式的反量化和转换到通用格式。此外,关于 CUTLASS 和 cuSPARSELt 中 2:4 稀疏性元数据的全面文档稀缺,使得为集成量化和稀疏性开发自定义 CUDA 内核成为一项非常耗时耗力的工作。因此,2:4 稀疏性在大多数自定义量化内核中仍然得不到支持,从而阻止用户充分利用在建模方面取得的精度改进,并阻碍了新型压缩技术的快速发展。
为了解决上述挑战,SGLang 和 vLLM 等外部库添加了像 Sparse Marlin 这样的自定义量化内核。这些内核独特地为量化方法增加了稀疏性支持,并旨在平滑集成到 PyTorch 框架中,旨在为用户提供更即插即用的稀疏量化推理体验。然而,这些解决方案非常有针对性,并不能覆盖所有用例。它们通常只支持有限的数据类型范围(例如 Sparse Marlin 的 W4A16)和量化方案(例如一维组量化)。此外,它们在高度专业化的自定义 CUDA 代码中的实现方式,使其天生难以扩展或适应新方法。更糟糕的是,将这些内核迁移到更新的硬件一代所带来的巨大维护开销,意味着这些库通常会滞后,仅支持较旧的架构;例如,Sparse Marlin 的高性能表现仍局限于 Ampere 架构。
此外,所有上述压缩方法都面临一个持续存在的挑战,即准备矩阵及其相关元数据所需的巨大预处理开销。这种巨大的预处理成本在本质上将其效用主要限制在静态稀疏性和量化方法上,从而大大降低了它们在对未来 LLM 至关重要的动态或自适应压缩场景中的适用性。为了应对这一特定挑战,PyTorch 团队积极开发了自定义内核,旨在显著降低权重稀疏性和激活稀疏性的这种开销。然而,在这些新内核中对量化的全面支持仍处于开发阶段,这凸显了持续改进的一个关键领域。
结论
鉴于上述全面讨论,我们坚信 2:4 稀疏性与量化的协同组合在突破大语言模型压缩边界方面具有巨大的潜力。然而,如前所述,现有的工具生态系统和基础 GPU 编程接口仍然是充分发挥这一潜力的重大限制因素。具体而言,许多常用的灵活 GPU 编码接口(如 Triton 和 ThunderKittens)目前缺乏对 2:4 稀疏性的稳健、原生支持,并且它们与许多量化方法的集成仍然非常有限。因此,增强这些工具以原生支持 2:4 稀疏性和多样的量化方法,对于释放这一潜力并加速模型压缩领域的创新至关重要。