BitStack: Any-Size Compression of Large Language Models in Variable Memory Environments

📄 arXiv: 2410.23918v3 📥 PDF

作者: Xinghao Wang, Pengyu Wang, Bo Wang, Dong Zhang, Yunhua Zhou, Xipeng Qiu

分类: cs.CL, cs.AI, cs.CV, cs.LG

发布日期: 2024-10-31 (更新: 2025-02-17)

备注: ICLR 2025

🔗 代码/项目: GITHUB


💡 一句话要点

BitStack:一种在可变内存环境中对大语言模型进行任意大小压缩的训练方法。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 大语言模型压缩 权重分解 动态模型大小 免训练压缩 内存管理

📋 核心要点

  1. 现有大语言模型压缩方法通常需要预先确定压缩率,且不同配置需单独压缩,难以适应可变内存环境。
  2. BitStack通过权重分解,动态调整模型大小,在内存使用和模型性能间实现细粒度的权衡,无需重新训练。
  3. 实验表明,BitStack在提供细粒度大小控制的同时,性能与现有量化方法相当甚至更好,尤其是在高压缩率下。

📝 摘要(中文)

大型语言模型(LLMs)彻底改变了众多应用,但其部署仍然受到本地设备内存限制的挑战。虽然缩放定律增强了LLM的能力,但主要瓶颈已从能力转移到可用性,强调了高效内存管理的必要性。传统的压缩方法,如量化,通常需要预定义的压缩率和针对每个设置的单独压缩过程,这使得在可变内存环境中部署变得复杂。在本文中,我们介绍了一种新颖的、免训练的权重压缩方法 extbf{BitStack},它能够在内存使用和模型性能之间实现兆字节级别的权衡。通过利用权重分解,BitStack可以动态调整模型大小,同时最大限度地减少运行内存和存储设备之间的传输。我们的方法迭代地分解权重矩阵,同时考虑每个参数的重要性,从而在每次分解迭代中产生大约1比特/参数的残差块。这些块被排序并作为基本传输单元堆叠在存储中,并根据当前内存可用性加载不同数量的块。广泛的实验表明,尽管提供了细粒度的大小控制,但BitStack始终匹配或超过了强大的量化基线,尤其是在极端压缩率下。据我们所知,这是第一个基于分解的方法,有效地弥合了与量化等实际压缩技术之间的差距。代码可在https://github.com/xinghaow99/BitStack获取。

🔬 方法详解

问题定义:论文旨在解决大语言模型在内存受限设备上的部署问题。现有压缩方法(如量化)需要预先设定压缩比例,无法灵活适应不同内存环境,且每次调整都需要重新压缩模型,效率低下。

核心思路:BitStack的核心思路是利用权重分解,将模型权重分解为多个残差块,每个块贡献约1比特/参数的信息。通过控制加载的残差块数量,可以动态调整模型大小,从而适应不同的内存限制。这种方法无需重新训练,即可实现模型大小的灵活调整。

技术框架:BitStack的整体框架包括以下几个阶段:1) 权重分解:迭代地分解权重矩阵,每次分解产生一个残差块。2) 重要性排序:根据参数的重要性对残差块进行排序。3) 存储堆叠:将排序后的残差块堆叠存储,作为基本的传输单元。4) 动态加载:根据当前内存可用性,动态加载不同数量的残差块。

关键创新:BitStack的关键创新在于其基于权重分解的动态模型大小调整机制。与传统的量化方法不同,BitStack无需预先设定压缩比例,可以根据实际内存情况灵活调整模型大小。此外,BitStack是一种免训练的方法,避免了重新训练带来的时间和资源消耗。

关键设计:BitStack的关键设计包括:1) 迭代权重分解策略,确保每次分解产生的残差块包含约1比特/参数的信息。2) 基于参数重要性的残差块排序方法,优先加载重要性高的残差块,保证在低内存情况下模型性能。3) 残差块的存储和加载机制,确保高效的内存管理和模型大小调整。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,BitStack在各种任务上均能与强大的量化基线相媲美,尤其是在极端压缩率下,甚至超越了这些基线。例如,在某些任务上,BitStack在压缩到极小尺寸时,仍能保持较高的模型性能,证明了其在内存受限环境下的有效性。代码已开源。

🎯 应用场景

BitStack适用于需要在内存受限设备上部署大语言模型的场景,例如移动设备、嵌入式系统和边缘计算设备。该方法可以帮助开发者在不同内存环境下灵活部署大语言模型,提高模型的可用性和适用性。此外,BitStack还可以用于模型压缩和加速,降低模型的存储空间和计算复杂度。

📄 摘要(原文)

Large language models (LLMs) have revolutionized numerous applications, yet their deployment remains challenged by memory constraints on local devices. While scaling laws have enhanced LLM capabilities, the primary bottleneck has shifted from \textit{capability} to \textit{availability}, emphasizing the need for efficient memory management. Traditional compression methods, such as quantization, often require predefined compression ratios and separate compression processes for each setting, complicating deployment in variable memory environments. In this paper, we introduce \textbf{BitStack}, a novel, training-free weight compression approach that enables megabyte-level trade-offs between memory usage and model performance. By leveraging weight decomposition, BitStack can dynamically adjust the model size with minimal transmission between running memory and storage devices. Our approach iteratively decomposes weight matrices while considering the significance of each parameter, resulting in an approximately 1-bit per parameter residual block in each decomposition iteration. These blocks are sorted and stacked in storage as basic transmission units, with different quantities loaded based on current memory availability. Extensive experiments across a wide range of tasks demonstrate that, despite offering fine-grained size control, BitStack consistently matches or surpasses strong quantization baselines, particularly at extreme compression ratios. To the best of our knowledge, this is the first decomposition-based method that effectively bridges the gap to practical compression techniques like quantization. Code is available at https://github.com/xinghaow99/BitStack.