论文状态:已完成

ModuLoRA: Finetuning 2-Bit LLMs on Consumer GPUs by Integrating with Modular Quantizers

发表:2023/09/28
原文链接PDF 下载
价格:0.100000
价格:0.100000
价格:0.100000
已有 2 人读过
本分析由 AI 生成,可能不完全准确,请以原文为准。

TL;DR 精炼摘要

本文提出的`ModuLoRA`是一种内存高效的微调算法,能在24GB的消费级GPU上以2/3/4比特精度微调高达65亿参数的LLM。其模块化设计通过集成任意权重量化器与低秩适配器,首次实现了对2比特和3比特LLM的微调,显著降低内存消耗并在多个任务中表现优秀。

摘要

We propose a memory-efficient finetuning algorithm for large language models (LLMs) that supports finetuning LLMs with 65B parameters in 2/3/4-bit precision on as little as one 24GB GPU. Our method, modular low-rank adaptation (ModuLoRA), integrates any user-specified weight quantizer with finetuning via low-rank adapters (LoRAs). Our approach relies on a simple quantization-agnostic backward pass that adaptively materializes low-precision LLM weights from a custom black-box quantization module. This approach enables finetuning 2-bit and 3-bit LLMs for the first time -- leveraging state-of-the-art 2-bit QuIP# quantization and 3-bit OPTQ quantization -- outperforming finetuning that relies on less sophisticated 4-bit and 8-bit methods. In our experiments, \lplora~attains competitive performance on text classification, natural language inference, and instruction following tasks using significantly less memory than existing approaches, and we also surpass the state-of-the-art ROUGE score on a popular summarization task. We release \lplora~together with a series of low-precision models as part of \llmtune, a user-friendly library for quantizing, running, and finetuning LLMs on consumer GPUs.

思维导图

论文精读

中文精读

1. 论文基本信息

1.1. 标题

ModuLoRA: 通过集成模块化量化器在消费级 GPU 上微调 2 比特 LLM (ModuLoRA: Finetuning 2-Bit LLMs on Consumer GPUs by Integrating with Modular Quantizers)

1.2. 作者

Junjie Yin(约翰霍普金斯大学计算机科学系),Jiahao Dong(康奈尔大学和康奈尔科技计算机科学系),Yingheng Wang(康奈尔大学计算机科学系),Christopher De Sa(康奈尔大学计算机科学系),Volodymyr Kuleshov(康奈尔大学和康奈尔科技计算机科学系)。

1.3. 发表期刊/会议

该论文发布于 arXiv 预印本平台,其发布状态为预印本 (preprint),尚未经过同行评审。arXiv 预印本平台在学术界,尤其是在计算机科学和人工智能领域,是快速分享研究成果的重要渠道。

1.4. 发表年份

2023年。具体发布时间为 UTC 时间 2023年9月28日02:55:01。

1.5. 摘要

这篇论文提出了一种名为 ModuLoRA 的内存高效微调 (finetuning) 算法,该算法能够在一块最小为 24GB 的 GPU 上,以 2/3/4 比特 (bit) 精度微调参数量高达 650 亿 (65B) 的大型语言模型 (LLMs)。ModuLoRA 的核心特点是其模块化设计,它能将任何用户指定的权重量化器 (weight quantizer) 与低秩适配器 (LoRAs) 微调方法集成。该方法依赖于一种简单的、与量化器无关的反向传播 (backward pass) 机制,该机制能够自适应地从一个自定义的黑盒量化模块中实例化低精度 LLM 权重。这使得首次实现了对 2 比特和 3 比特 LLM 的微调——通过利用最先进的 2 比特 QuIP# 量化和 3 比特 OPTQ 量化技术——并超越了那些依赖于 4 比特和 8 比特方法的微调性能。实验结果表明,ModuLoRA 在文本分类 (text classification)、自然语言推理 (natural language inference) 和指令遵循 (instruction following) 任务上取得了有竞争力的性能,且显著降低了内存消耗。在流行的摘要 (summarization) 任务上,它甚至超越了现有最先进的 ROUGE 分数。作者发布了 ModuLoRA 以及一系列低精度模型作为 LLMTooLs 的一部分,这是一个用户友好的库,用于在消费级 GPU 上量化、运行和微调 LLM

1.6. 原文链接

https://arxiv.org/abs/2309.16119

1.7. PDF 链接

https://arxiv.org/pdf/2309.16119v2.pdf

2. 整体概括

2.1. 研究背景与动机

大型语言模型 (LLMs) 在代码生成、指令遵循和推理等多种任务中展现出卓越性能。然而,这些模型庞大的规模(通常包含数千亿参数)使得它们在下游任务中的部署和微调面临巨大挑战,尤其是在消费级硬件(如单张桌面级 GPU)上。传统的全模型微调需要将整个模型(通常是 16 比特或 32 比特浮点数)加载到 GPU 内存中,这对于 650 亿甚至更大规模的模型而言,需要数百 GB 的内存,远超消费级 GPU 的能力。

为了应对这一挑战,研究人员开发了各种参数高效微调 (Parameter-Efficient Finetuning, PEFT) 方法,例如低秩适配器 (LoRA),它通过只训练一小部分新增参数来降低训练成本。然而,即使是 LoRA 也需要将冻结的基座模型权重以全精度加载到内存中,这仍然是限制在消费级硬件上微调超大 LLM 的瓶颈。

与此同时,模型量化 (quantization) 技术通过减少模型权重所需的比特数来降低模型的存储和内存占用,但多数量化方法侧重于推理阶段,而针对量化后的低比特模型进行微调(尤其是 2 比特和 3 比特这种极低比特精度)仍然是一个未充分探索的领域。现有的微调量化模型(如 QLoRA)主要停留在 4 比特精度,且通常采用较为简单的量化方案。

因此,论文的动机在于:

  1. 解决内存瓶颈: 在消费级 GPU 上实现超大 LLM(例如 650 亿参数)的微调,打破硬件限制。
  2. 探索极低比特微调: 首次实现 2 比特和 3 比特 LLM 的微调,以期在保证性能的同时进一步降低内存需求。
  3. 模块化与灵活性: 现有方法通常将量化方案与微调过程紧密绑定,缺乏灵活性。论文旨在开发一种能够与任何先进的黑盒量化器集成的微调框架,从而充分利用最先进的量化技术带来的性能优势。

2.2. 核心贡献/主要发现

这篇论文的核心贡献和主要发现包括:

  1. 提出了 ModuLoRA 算法: ModuLoRA 是一种内存高效的 LLM 微调算法,它能够与用户指定的 黑盒量化模块 集成,从而支持对低精度(2 比特、3 比特、4 比特)权重进行操作。
  2. 实现极低比特 LLM 微调: 首次成功地在一块 24GB GPU 上实现了 2 比特 LLaMA-65B 模型的微调,以及在一块 48GB GPU 上微调 3 比特 LLaMA-65B 模型。这显著降低了 LLM 微调的硬件门槛,使其在消费级 GPU 上变为可能。
  3. 创新的量化器无关反向传播: ModuLoRA 采用了一种简单而有效的 量化器无关的反向传播 机制。该机制在反向传播过程中,按需动态地将低精度 LLM 权重从黑盒量化模块中 实例化(解量化为高精度),然后立即释放,从而避免了同时在内存中存储所有高精度权重。
  4. 利用先进量化器提升性能: 通过与最先进的 2 比特 QuIP# 量化和 3 比特 OPTQ 量化技术集成,ModuLoRA 在多个下游任务上取得了卓越性能。实验证明,其性能优于或媲美基于 4 比特和 8 比特量化的微调方法,甚至在某些任务上(如 SAMSum 摘要)达到了 最先进的 (state-of-the-art) ROUGE 分数。
  5. 发布 LLMTooLs 库和模型: 作者发布了 LLMTooLs 这一用户友好的 Python 库,其中包含了 ModuLoRA 的实现,以及一系列首次公开的低精度 Alpaca 模型(包括 3 比特 Alpaca 模型家族),从而促进了 LLM 在消费级硬件上的量化、运行和微调。
  6. 实证证据: 论文提供了大量实验证据,表明通过高效的量化和微调方法,即使是较小的、高度量化的 LLM 也能在下游任务中实现高水平性能,这挑战了对 LLM 性能所需精度的传统认知。

3. 预备知识与相关工作

3.1. 基础概念

3.1.1. 大型语言模型 (LLMs)

LLM 是指具有数亿到数千亿参数的深度学习模型,通常基于 Transformer 架构。它们通过在海量文本数据上进行预训练,学习到丰富的语言知识和模式,从而能够在各种自然语言处理 (NLP) 任务中表现出色,如文本生成、问答、翻译等。由于其参数量巨大,LLM 在存储、计算和内存方面都有极高的要求。论文中提到的 LLaMABLOOMOPT 都是典型的 LLM 家族。

3.1.2. 微调 (Finetuning)

微调 (finetuning) 是一种迁移学习 (transfer learning) 技术,用于将预训练好的模型(通常在通用、大规模数据集上训练)适应到特定的下游任务或数据集上。在微调过程中,模型的参数会根据特定任务的数据进行少量更新,使其能够更好地执行该任务。与从头开始训练模型相比,微调通常需要更少的数据和计算资源,并且能够达到更好的性能。

3.1.3. 低秩适配 (LoRA: Low-Rank Adaptation)

LoRA 是一种参数高效微调 (Parameter-Efficient Finetuning, PEFT) 方法,旨在显著减少微调 LLM 时需要训练的参数数量。其核心思想是,在预训练模型的权重矩阵 W0\mathbf{W}_0 旁边,添加一个低秩 (low-rank) 的可训练矩阵 AB\mathbf{AB}^\top。在微调过程中,只训练这个低秩适配器 (low-rank adapter) 的参数 A\mathbf{A}B\mathbf{B},而原始的预训练权重 W0\mathbf{W}_0 则保持冻结。 LoRA 将权重矩阵 W\mathbf{W} 分解为原始冻结基座模型权重 W0Rd×d\mathbf{W}_0 \in \mathbb{R}^{d \times d} 和一个小的附加低秩适配器 AB\mathbf{AB}^\top,其中 A,BRd×r\mathbf{A}, \mathbf{B} \in \mathbb{R}^{d \times r},且 rdr \ll dW=W0+AB \mathbf{W} = \mathbf{W}_0 + \mathbf{AB}^\top 其中 rr秩 (rank)LoRA 通过这种方式将需要训练的参数数量从 d×dd \times d 减少到 2×d×r2 \times d \times r,从而大大降低了存储和计算开销。然而,LoRA 仍然需要将基座权重 W0\mathbf{W}_0 以全精度形式加载到内存中,这对于超大 LLM 仍然是一个内存瓶颈。

3.1.4. 量化 (Quantization)

量化 (quantization) 是指将模型权重(或激活值)从高精度表示(如 32 比特浮点数)转换为低精度表示(如 8 比特整数或更低比特数),以减少模型大小和内存占用,并加速推理。一个 bb 比特 (bit) 量化方法通常包含量化函数 Q\mathcal{Q} 和解量化函数 D\mathcal{D}(W^q,z,s)=Q(W)W^=D(W^q,z,s) (\hat{\mathbf{W}}_q, \mathbf{z}, \mathbf{s}) = \mathcal{Q}(\mathbf{W}) \quad \quad \hat{\mathbf{W}} = \mathcal{D}(\hat{\mathbf{W}}_q, \mathbf{z}, \mathbf{s}) 这里,量化算法 Q\mathcal{Q} 接收权重矩阵 WRd×d\mathbf{W} \in \mathbb{R}^{d \times d} 并输出量化后的版本 W^q{0,1,,2b1}d×d\hat{\mathbf{W}}_q \in \{0, 1, \dots, 2^{b-1}\}^{d \times d}(使用 bb 比特表示每个条目),以及零点 (zero point) z\mathbf{z} 和比例因子 (scale) sRd\mathbf{s} \in \mathbb{R}^d(以全精度存储)。解量化算法 D(W^q,z,s)\mathcal{D}(\hat{\mathbf{W}}_q, \mathbf{z}, \mathbf{s}) 通过按比例缩放量化权重来恢复近似值 W^Rd×d\hat{\mathbf{W}} \in \mathbb{R}^{d \times d},公式为 W^=sW^q+z\hat{\mathbf{W}} = \mathbf{s} \odot \hat{\mathbf{W}}_q + \mathbf{z},其中 \odot 表示 Hadamard 积 (Hadamard product)(逐元素乘积),+\odot 操作通过 numpy 风格的广播 (broadcasting) 扩展。

3.1.5. OPTQ

OPTQ (Optimal Quantization for Generative Pre-trained Transformers) 是 Frantar 等人 (2023) 提出的一种针对现代 LLM 的量化算法。它通过迭代地对权重列执行两个步骤:1) 使用最近舍入 (nearest rounding) 进行量化并计算误差;2) 使用缩放误差更新剩余权重。OPTQ 是一种 数据驱动 (data-driven)后训练量化 (post-training quantization, PTQ) 方法,通过少量校准数据来优化量化过程,以最小化量化误差。

3.1.6. QuIP / QuIP#

QuIP (Quantization with Incoherence Processing) 是 Chee 等人 (2023) 提出的一种量化算法,首次使得 2 比特 LLM 压缩变得可行。它采用两步过程:1) 一个自适应舍入 (adaptive rounding) 程序,最小化二次代理目标函数;2) 一个高效的预处理和后处理程序,通过乘以随机正交矩阵 (random orthogonal matrices) 确保权重和 Hessian 不相干性 (incoherence)。QuIP# (QuIP with Lattice Codebooks) 是 Tseng 等人 (2023) 提出的进一步改进,它将 QuIP 的不相干性处理与 格码本 (lattice codebooks) 结合,创建了最先进的 2 比特量化模型。

3.2. 前人工作

3.2.1. QLoRA

QLoRA (Quantized LoRA) 是 Dettmers 等人 (2023) 提出的一种并发工作,它也旨在微调量化 LLMQLoRA 通过引入 4 比特 NormalFloat (NF4) 量化、双重量化 (double quantization) 和分页优化器 (paged optimizers) 等技术,使得在单个 GPU 上微调 650 亿参数模型成为可能。与 ModuLoRA 不同,QLoRA 定义了自己的量化方案,该方案相对简单。QLoRA 目前主要支持 4 比特微调。

3.2.2. 其他参数高效微调方法

除了 LoRAQLoRA,还有许多其他 参数高效微调 (PEFT) 方法:

  • 提示调优 (Prompt Tuning) (Lester et al., 2021; Li & Liang, 2021; Liu et al., 2022b): 通过学习小的连续 提示 (prompt) 向量来引导模型行为,而不修改模型权重。
  • 适配器 (Adapter) (Houlsby et al., 2019): 在预训练模型的每一层中插入小的、可训练的神经网络模块。
  • 偏置调优 (Bias Tuning) (Zaken et al., 2021): 仅微调模型中的偏置 (bias) 参数。
  • 前缀调优 (Prefix-tuning) (Li & Liang, 2021): 优化连续的 前缀 (prefix) 作为输入。
  • 输入调优 (Input-tuning) (An et al., 2022): 调整输入以适应冻结的预训练模型。 这些方法的一个共同局限是它们仍然需要将大量的冻结基座模型参数存储在内存中,这限制了它们在消费级 GPU 上微调最大 LLM 的能力。

3.3. 技术演进

从全模型微调(需要大量内存和计算)到 参数高效微调 (PEFT) 方法(如 LoRA,减少了训练参数但仍需全精度存储基座模型)再到模型量化(减少了模型存储和推理时的内存占用)。ModuLoRA 的出现代表了这一演进链条上的一个重要里程碑:它将 PEFT(具体是 LoRA)与先进的 量化技术 结合起来,不仅降低了训练参数,更通过对基座模型进行极低比特量化,并配合创新的 量化器无关反向传播,大幅降低了基座模型在内存中的占用,从而使得在资源受限的消费级硬件上微调超大 LLM 成为可能。特别地,它推动了微调的比特数极限,首次实现了 2 比特和 3 比特 LLM 的微调。

3.4. 差异化分析

ModuLoRA 与现有工作的主要区别和创新点在于:

  1. 模块化与量化器无关: ModuLoRA 不像 QLoRA 那样定义自己的量化方案,而是作为一种通用的框架,能够与任何用户指定的 黑盒量化模块 集成。这意味着它可以利用当前和未来最先进的量化技术(如 OPTQ, QuIP#),而 QLoRA 则受限于其内置的 NF4 量化。
  2. 支持极低比特微调: ModuLoRA 首次将 LLM 微调的精度推向 2 比特和 3 比特,而 QLoRA 目前主要支持 4 比特微调。更低的比特数意味着更小的内存占用。
  3. 性能优势: 通过利用更复杂的 数据驱动量化器(如 OPTQQuIP#),ModuLoRA 在许多任务上表现出优于或至少媲美 4 比特 QLoRA 和 8 比特 BitsAndBytes 方法的性能,尤其是在内存受限的低比特设置下。论文指出,使用先进量化器能够带来性能提升。
  4. 内存效率: ModuLoRA 通过其 量化器无关的反向传播 策略,动态地、按需地解量化权重,并在使用后立即释放,从而显著减少了微调超大模型(如 650 亿参数)所需的 GPU 内存,使其能在单张 24GB 或 48GB 消费级 GPU 上运行。

4. 方法论

4.1. 方法原理

ModuLoRA (Modular Low-Rank Adaptation) 的核心思想是实现 低精度大型语言模型 (LLMs) 的内存高效微调。它通过将 低秩适配器 (LoRA) 应用于一个已经被 黑盒量化模块 量化到低比特(如 2 比特、3 比特或 4 比特)的冻结基座 LLM。其关键创新在于设计了一个 量化器无关 (quantization-agnostic) 的反向传播机制,该机制能够按需、自适应地将低精度 LLM 权重解量化到高精度以进行计算,并在计算完成后立即释放内存,从而避免了在 GPU 内存中同时存储所有高精度基座权重。这种方法使得在消费级 GPU 上微调参数量巨大的 LLM 成为可能。

4.2. 核心方法详解

4.2.1. 低精度模型与低秩适配

ModuLoRA 的第一步是对预训练 LLM 的权重进行量化。它不指定具体的量化过程,而是作为一种通用框架,能够与任何用户定义的 黑盒量化算法 Q\mathcal{Q} 集成。对于模型中的每个权重矩阵 W(i)\mathbf{W}^{(i)},量化器 Q\mathcal{Q} 会生成一组量化后的表示: (W^q(i),z(i),s(i))=Q(W(i)) (\hat{\mathbf{W}}_q^{(i)}, \mathbf{z}^{(i)}, \mathbf{s}^{(i)}) = \mathcal{Q}(\mathbf{W}^{(i)}) 其中,W^q(i)\hat{\mathbf{W}}_q^{(i)} 是以低精度(例如 2 比特、3 比特或 4 比特)存储的量化权重,而 z(i)\mathbf{z}^{(i)}s(i)\mathbf{s}^{(i)} 是全精度的零点 (zero point) 和比例因子 (scale)。 然后,ModuLoRA 修改网络的每个线性层。原始的线性层操作为 xx(W(i))+b(i)x \mapsto x (\mathbf{W}^{(i)})^{\top} + \mathbf{b}^{(i)}。在 ModuLoRA 中,它被替换为图 1 中所示的 ModuLoRALinear 层,其前向传播 (forward pass) 操作为: xx(W^(i))+xB(i)(A(i))+b(i) x \mapsto x (\hat{\mathbf{W}}^{(i)})^{\top} + x \mathbf{B}^{(i)} (\mathbf{A}^{(i)})^{\top} + \mathbf{b}^{(i)} 这里,W^(i)=D(W^q(i),z(i),s(i))\hat{\mathbf{W}}^{(i)} = \mathcal{D}(\hat{\mathbf{W}}_q^{(i)}, \mathbf{z}^{(i)}, \mathbf{s}^{(i)}) 是解量化回高精度的近似权重矩阵。A(i),B(i)Rd×r\mathbf{A}^{(i)}, \mathbf{B}^{(i)} \in \mathbb{R}^{d \times r} 是可学习的 LoRA 适配器参数,它们以高精度存储,并且在微调过程中进行更新。b(i)\mathbf{b}^{(i)} 是偏置 (bias)。

4.2.2. 量化器无关的反向传播结构

微调的核心挑战在于如何高效地计算 LoRA 适配器参数 A(i)\mathbf{A}^{(i)}B(i)\mathbf{B}^{(i)} 的梯度,即 dL/dA(i)\mathrm{d}L/\mathrm{d}\mathbf{A}^{(i)}dL/dB(i)\mathrm{d}L/\mathrm{d}\mathbf{B}^{(i)}。根据链式法则,梯度的计算会涉及到与基座模型权重(或其转置)的乘法。 dLdA(i)=dLdyˉidyˉidA(i) \frac{\mathrm{d}L}{\mathrm{d}\mathbf{A}^{(i)}} = \frac{\mathrm{d}L}{\mathrm{d}\bar{\mathbf{y}}_i} \cdot \frac{\mathrm{d}\bar{\mathbf{y}}_i}{\mathrm{d}\mathbf{A}^{(i)}} 其中,yˉi\bar{\mathbf{y}}_i 是第 ii 层未经过激活函数的前激活输出,且 dL/dyˉi\mathrm{d}L/\mathrm{d}\bar{\mathbf{y}}_i 是来自上游层的梯度。yˉi\bar{\mathbf{y}}_i 的计算依赖于组合权重 Wl(i)=W^(i)+A(i)(B(i))\mathbf{W}_l^{(i)} = \hat{\mathbf{W}}^{(i)} + \mathbf{A}^{(i)} (\mathbf{B}^{(i)})^{\top}。反向传播过程中,还需要计算梯度通过当前层的传播,例如 dLdyˉi\frac{\mathrm{d}L}{\mathrm{d}\bar{\mathbf{y}}_i} 的计算涉及到: dLdyˉi=dLdyˉi+1dyˉi+1dyidyidyˉi \frac{\mathrm{d}L}{\mathrm{d}\bar{\mathbf{y}}_i} = \frac{\mathrm{d}L}{\mathrm{d}\bar{\mathbf{y}}_{i+1}} \cdot \frac{\mathrm{d}\bar{\mathbf{y}}_{i+1}}{\mathrm{d}\mathbf{y}_i} \cdot \frac{\mathrm{d}\mathbf{y}_i}{\mathrm{d}\bar{\mathbf{y}}_i} 其中,dyˉi+1dyi=(Wl(i))=(W^(i))+B(i)(A(i))\frac{\mathrm{d}\bar{\mathbf{y}}_{i+1}}{\mathrm{d}\mathbf{y}_i} = (\mathbf{W}_l^{(i)})^{\top} = (\hat{\mathbf{W}}^{(i)})^{\top} + \mathbf{B}^{(i)} (\mathbf{A}^{(i)})^{\top}。 这表明,在反向传播中,无论是计算 LoRA 适配器的梯度还是传播梯度到前一层,都需要与高精度的 (W^(i))(\hat{\mathbf{W}}^{(i)})^{\top} 进行矩阵乘法。

4.2.3. 高效的混合精度计算

如果在内存中预先计算并存储所有解量化后的高精度权重矩阵 W^(i)\hat{\mathbf{W}}^{(i)} 及其转置,虽然可以解决计算问题,但这将消耗与原始全精度 LLM 相同的内存,从而违背了内存高效的目标。传统的反向传播机制会存储前向传播中产生的所有中间结果(包括 W^(i)\hat{\mathbf{W}}^{(i)})以供反向传播使用。

ModuLoRA 的解决方案是 动态重计算 (recompute)

  1. 前向传播 (Forward Pass): 对于每个 ModuLoRALinear 层,它会从低精度的量化权重 W^q(i)\hat{\mathbf{W}}_q^{(i)} 动态地解量化得到高精度权重 W^(i)\hat{\mathbf{W}}^{(i)},然后执行矩阵乘法 x(W^(i))x (\hat{\mathbf{W}}^{(i)})^{\top}。一旦计算完成,W^(i)\hat{\mathbf{W}}^{(i)} 就会被立即释放。

  2. 反向传播 (Backward Pass): 在反向传播中,当需要 W^(i)\hat{\mathbf{W}}^{(i)} 或其转置 (W^(i))(\hat{\mathbf{W}}^{(i)})^{\top} 时,它会再次从低精度的 W^q(i)\hat{\mathbf{W}}_q^{(i)} 动态地解量化得到高精度权重 W^(i)\hat{\mathbf{W}}^{(i)},执行所需的梯度计算,然后同样立即释放 W^(i)\hat{\mathbf{W}}^{(i)}

    这种策略确保在任何给定时间点,内存中只保留当前正在处理的单个 W^(i)\hat{\mathbf{W}}^{(i)} 的高精度版本,从而极大地减少了内存峰值。

下图展示了 ModuLoRAModuLoRALinear 层的实现伪代码,特别是 LPLinearforwardbackward 方法,体现了上述动态重计算策略。

class ModuLoRALinear(Module): 
    "Linear ModuLoRA Layer"   
    def __init__(self, ...): 
        self.hatWq_z_s = quantize(pretrained_W) 
        (self.A, self.B) = lora_init(...) 
    def forward(self, x): 
        (hatWq, z, s) = self.hatWq_z_s 
        return LPLinear.apply(x, hatWq, z, s) \ 
            + x @ self.B @ self.A.t() \ 
            + self.bias   

              class LPLinear(Function):
    "Low-Precision Linear Map"   
    @staticmethod   
    def forward(ctx, input, hatWq, z, s): 
        ctx.save_for_backward(hatWq, z, s) 
        hatW = dequantize(hatWq, z, s) 
        output = input @ hatW.t() 
        return output # hatW is deallocated   
    @staticmethod   
    def backward(ctx, grad_output): 
        hatWq, z, s = ctx.saved_tensors # we recompute hatW 
        hatW = dequantize(hatWq, z, s) 
        grad_input = grad_output @ hatW 
        return grad_input, None, None, None

伪代码解读:

  • ModuLoRALinear 类:
    • __init__:初始化时,首先对预训练权重 pretrainedWpretrained_W 进行量化,得到 (hatWq, z, s),并存储为 self.hatWq_z_s。然后初始化 LoRA 适配器 AABB
    • forward:前向传播时,从 self.hatWq_z_s 中获取量化参数,并将其传递给自定义的 LPLinear.apply 函数,同时加上 LoRA 适配器和偏置的贡献。
  • LPLinear 类 (torch.autograd.Function 的子类):
    • 这是一个自定义的 PyTorch 自动求导函数,用于处理低精度线性映射的复杂性。
    • forward(ctx, input, hatWq, z, s)
      • ctx.save_for_backward(hatWq, z, s):保存量化后的权重及其参数,供反向传播使用,而不是保存解量化后的高精度 hatW
      • hatW = dequantize(hatWq, z, s)按需解量化,将低精度 hatWq 及其参数 z, s 解量化回高精度 hatW
      • output = input @ hatW.t():执行实际的矩阵乘法。
      • return output # hatW is deallocated:计算完成后,hatW 超出作用域,内存被释放。
    • backward(ctx, grad_output)
      • hatWq, z, s = ctx.saved_tensors:从 ctx 中恢复量化后的权重及其参数。
      • hatW = dequantize(hatWq, z, s)再次按需解量化,重新生成高精度 hatW
      • grad_input = grad_output @ hatW:计算输入 input 的梯度,这需要 hatW 的转置(或直接使用 hatW)。
      • return grad_input, None, None, None:返回梯度,然后 hatW 再次被释放。

进一步提高效率:

  • 行式实例化 (Row Materialization): 对于许多量化算法,可以每次只解量化 W^(i)\hat{\mathbf{W}}^{(i)} 的一行,并立即与输入向量 x\mathbf{x} 的对应部分相乘。这进一步减少了 GPU 内存中高精度权重的瞬时存在量。
  • 直接向量-量化矩阵乘积子程序: 如果量化器 Q\mathcal{Q} 能够提供直接计算向量与量化矩阵乘积的子程序(例如,专门的 CUDA 内核 (CUDA kernels)),那么甚至无需实例化 W^(i)\hat{\mathbf{W}}^{(i)} 的任何部分,直接在量化域进行乘法。ModuLoRA 天然支持这种更高效的范式。

4.2.4. LLMTooLs 库

ModuLoRA 作为 LLMTooLs 库的一部分发布。LLMTooLs 旨在提供一个用户友好的平台,方便用户在消费级硬件上进行 LLM 的量化、运行和微调。它支持 2 比特、3 比特和 4 比特精度的微调,并提供了易于使用的 Python API

  • OPTQ 的集成: LLMTooLs 提供了高效的 CUDA 实现,用于混合精度矩阵-向量乘法,包括行式和权重实例化。为了最大化效率,它将 W^q(i)\hat{\mathbf{W}}_q^{(i)} 的元素实例化为 float16。基座的量化 LLM 权重 W^q(i)\hat{\mathbf{W}}_q^{(i)} 以 3 或 4 比特存储,而比例因子 s(i)\mathbf{s}^{(i)}、零点 z(i)\mathbf{z}^{(i)} 以及偏置 b(i)\mathbf{b}^{(i)} 都以 float16 存储。
  • QuIP# 的集成: LLMTooLs 也为 QuIP# 提供了 CUDA 内核,用于权重重新实例化 (re-materialization) 和正交矩阵乘法,以支持 2 比特量化模型。

5. 实验设置

5.1. 数据集

5.1.1. 文本分类 (Text Classification)

  • 数据集:MNLI (Multi-Genre Natural Language Inference) 数据集 (Williams et al., 2018) 中提取的文本片段。
  • 规模: 392,702 个训练样本,9,815 个测试样本。
  • 特点: 每个片段最长 50 个词,分为五种体裁 (genre)。这是一个具有挑战性的分类任务。
  • 目标: 将短文本片段分类到其所属的体裁(例如,小说、电话聊天等)。

5.1.2. 自然语言推理 (Natural Language Inference, NLI)

  • 数据集: Multi-Genre Natural Language Inference (MNLI) Corpus (Williams et al., 2018)。
  • 特点: 包含前提 (premise) 和假设 (hypothesis) 语句对。
  • 目标: 模型需要预测标签:蕴含 (entailment)矛盾 (contradiction)中立 (neutral)
  • 评估: 在匹配的测试集 (in-domain examples) 上进行评估。

5.1.3. 抽象摘要 (Abstractive Summarization)

  • 数据集: SAMSum 数据集 (Gliwa et al., 2019)。
  • 规模: 14,732 个 (文本, 摘要) 训练对,819 个测试对。
  • 特点: 包含对话文本及其对应的抽象摘要。
  • 目标: 根据输入的对话文本生成简洁准确的摘要。

5.1.4. 指令遵循 (Instruction Following)

  • 数据集:
    • Alpaca 数据集 (Taori et al., 2023): 包含 52,000 条指令。
    • CodeAlpaca 数据集 (Chaudhary, 2023): 包含 20,000 条代码生成指令。
  • 目标: 微调 LLM 以遵循人类指令,执行各种任务。
  • 评估:BigBenchHard (BBH) 基准 (benchmark) (Suzgun et al., 2022) 上进行评估,该基准包含 23 个 LLM 难以超越人类性能的挑战性任务。采用 3-shot 提示 (prompting) 和 answer-only 模式。

5.2. 评估指标

5.2.1. 准确率 (Accuracy)

  • 概念定义: 准确率是最常见的分类任务评估指标,它衡量模型正确预测的样本数量占总样本数量的比例。高准确率表示模型在分类任务上表现良好。
  • 数学公式: Accuracy=Number of Correct PredictionsTotal Number of Predictions \text{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}}
  • 符号解释:
    • Number of Correct Predictions: 模型做出正确分类预测的样本数量。
    • Total Number of Predictions: 模型进行分类预测的总样本数量。

5.2.2. ROUGE (Recall-Oriented Understudy for Gisting Evaluation)

  • 概念定义: ROUGE 是用于评估自动文本摘要和机器翻译质量的指标集。它通过比较模型生成的摘要(或翻译)与一个或多个参考摘要(或翻译)之间的重叠程度来衡量质量。其中,ROUGE-N 关注 N-gram (连续的 N 个词) 的重叠,ROUGE-L 关注最长公共子序列 (Longest Common Subsequence, LCS) 的重叠。
  • 数学公式:
    • ROUGE-N (N-gram Recall): ROUGE-N=Reference SummariesN-gramReferenceCountmatch(N-gram)Reference SummariesN-gramReferenceCount(N-gram) \text{ROUGE-N} = \frac{\sum_{\text{Reference Summaries}} \sum_{\text{N-gram} \in \text{Reference}} \text{Count}_{\text{match}}(\text{N-gram})}{\sum_{\text{Reference Summaries}} \sum_{\text{N-gram} \in \text{Reference}} \text{Count}(\text{N-gram})}
    • ROUGE-L (Longest Common Subsequence Recall): ROUGE-L=LCS(Reference,Generated)Length(Reference) \text{ROUGE-L} = \frac{\text{LCS}(\text{Reference}, \text{Generated})}{\text{Length}(\text{Reference})}
  • 符号解释:
    • Reference Summaries: 人工编写的参考摘要集合。
    • N-gram: 连续的 N 个词组成的序列。
    • Count_match(N-gram): 在模型生成的摘要中与参考摘要重叠的 N-gram 的数量(取两者中的最小值)。
    • Count(N-gram): 在参考摘要中 N-gram 的总数量。
    • LCS(Reference, Generated): 参考摘要和模型生成摘要之间的最长公共子序列的长度。
    • Length(Reference): 参考摘要的长度(通常按词数计算)。
  • ROUGE-1: 衡量单个词 (unigram) 的重叠。
  • ROUGE-2: 衡量两个词序列 (bigram) 的重叠。
  • ROUGE-L: 衡量最长公共子序列的重叠,对词序有一定敏感性。

5.2.3. 精确匹配准确率 (Exact Match Accuracy)

  • 概念定义: 精确匹配准确率是一种严格的评估指标,要求模型的输出与参考答案完全一致才算正确。通常用于评估问答、指令遵循等任务,其中答案是离散且明确的。
  • 数学公式: Exact Match Accuracy=Number of Exactly Matched OutputsTotal Number of Outputs \text{Exact Match Accuracy} = \frac{\text{Number of Exactly Matched Outputs}}{\text{Total Number of Outputs}}
  • 符号解释:
    • Number of Exactly Matched Outputs: 模型输出与参考答案完全一致的样本数量。
    • Total Number of Outputs: 模型生成输出的总样本数量。

5.3. 对比基线

论文将 ModuLoRA 与以下基线方法进行了比较:

  • LoRA (8-bit quantization with BitsAndBytes): 使用 PEFT 库实现的 LoRA,结合 BitsAndBytes 库进行 8 比特量化 (LLM.int8())。这是当前流行的低内存微调方案。
  • QLoRA (4-bit quantization with BitsAndBytes): Dettmers 等人 (2023) 提出的 QLoRA,采用 4 比特量化,通常使用 BitsAndBytes 库实现。
  • 全精度 (Full-Precision) LoRA: 作为内存基线,显示在不进行任何量化时 LoRA 所需的巨大内存。
  • 全模型微调 (Full Finetuning): 文献中报道的 GPT-3T5 等模型的全模型微调结果,用于提供最高性能上限的参考。
  • 仅适配器 (Adapter) 和 LoRA for GPT-3: 来自 Huetal.(2022)Hu et al. (2022)GPT-3 基线,用于比较不同 PEFT 方法的性能。
  • Round-to-Nearest (RTN) 量化: 作为 OPTQ 的消融对比,展示先进量化器带来的优势。

5.4. 训练细节

  • 模型: 主要使用 LLaMA 模型家族(7B、13B、30B、65B),以及开源的 BLOOMOPT 模型。
  • 量化方案:
    • OPTQ (Frantar et al., 2023): 用于 3 比特和 4 比特量化,使用 C4 数据集中的 128 个样本进行校准。
    • QuIP# (Chee et al., 2023; Tseng et al., 2023): 用于 2 比特量化,采用 E8E_8 格码本 (lattice codebooks)。
  • 硬件:NVIDIA TITAN3090A6000 GPU 上进行微调,具体取决于模型大小。
  • LoRA 配置: LoRA 秩 (rank) r=8r=8LoRA alpha α=32\alpha=32
  • 训练过程:
    • 遵循 Huetal.(2022)Hu et al. (2022) 的训练程序,并根据特定 LLM 进行调整。
    • 为公平比较,与并发工作 QLoRA 使用相同的超参数设置。
    • 超参数详情在附录 C 中给出,包括 AdamW 优化器、学习率调度器(如 CosineLinear)、批次大小、训练步数等。
    • 所有结果均基于 3 个随机种子运行,并报告了平均值和标准差。每次运行的结果取自验证损失最低的训练步骤。

6. 实验结果与分析

6.1. 核心结果分析

6.1.1. 文本分类 (Text Classification)

下表展示了在文本分类任务上,使用 LoRAModuLoRA 微调 LLaMA 模型(3 比特、4 比特、8 比特)的准确率。

以下是原文 Table 1 的结果:

LLAMA Tuning 13B 30B 65B
LLMTOOLS (3-bit) 93.5 ± 0.7 97.0 ± 0.9 97.2 ± 0.8
LLMTOOLS (4-bit) 92.9 ± 0.7 96.3 ± 1.0 98.0 ± 0.9
Bits&Bytes 8-bit (LLM.int8()) 93.0 ± 0.7 93.7 ± 1.0 98.6 ± 1.0

分析:

  • 模型规模效应: 随着 LLM 参数量的增加(从 13B 到 65B),分类准确率普遍提高,这符合 LLM 的规模定律。
  • 低比特 ModuLoRA 的竞争力: ModuLoRA 结合 3 比特或 4 比特 LLM 能够提供与 8 比特 Bits&Bytes 微调相当的性能。例如,LLaMA-65B 的 4 比特 ModuLoRA (98.0%) 甚至接近 8 比特 Bits&Bytes (98.6%) 的性能,而 3 比特 ModuLoRA (97.2%) 也非常接近。这表明 ModuLoRA 能够在显著减少内存消耗的同时,保持强大的分类能力。
  • 先进量化器的价值: ModuLoRA 能够利用 OPTQ 等先进量化器,可能解释了其在低比特下依然表现良好的原因。

6.1.2. 自然语言推理 (Natural Language Inference)

下表展示了在 MNLI-m 数据集上,不同模型和微调方法在自然语言推理任务上的分类准确率。

以下是原文 Table 2 的结果:

Models Finetuning Adaptation Model Size # Trainable Parameters MNLI-m (accuracy)
GPT-3 Full Finetuning 175B 175,255.8M 89.5 ± 0.1
GPT-3 Adapter 175B 40.1M 91.5 ± 0.1
GPT-3 LoRA 175B 4.7M 91.7 ± 0.1
T5 Full Finetuning 11B 11,307.4M 92.2 ± 0.1
LLaMA Finetuning Quantizer 7B 13B 30B
LLMTooLS (2-bit) QuIP#(E8) 88.50 ± 0.3 89.72 ± 0.3 91.30 ± 0.3
LLMTOOLS (3-bit) OPTQ 88.98 ± 0.2 90.20 ± 0.2 91.09 ± 0.2
LLMTOOLS (4-bit) OPTQ 89.31 ± 0.2 90.41 ± 0.2 91.31 ± 0.1
Bits&Bytes (4-bit) QLoRA 89.28 ± 0.2 89.67 ± 0.2
Bits&Bytes (8-bit) LLM.int8() 88.95 ± 0.1 90.08 ± 0.1 91.22 ± 0.1 91.15 ± 0.1

分析:

  • 低比特模型的优异表现: ModuLoRA 的 2 比特和 3 比特 LLaMA-65B 模型性能接近甚至超越了全精度 GPT-3 + LoRA 基线。令人注目的是,使用 QuIP# 量化的 2 比特 65B 模型达到了 91.30 ± 0.3 的准确率,表现最佳。
  • 超越高比特基线: LLMTooLS 的 3 比特和 4 比特模型在整个模型尺寸范围内,都优于 Bits&Bytes 库的 8 比特模型。例如,LLaMA-30B 的 4 比特 ModuLoRA (91.31 ± 0.1) 明显优于 8 比特 LLM.int8() (91.15 ± 0.1)。
  • QLoRA 的比较: ModuLoRA 的 2 比特、3 比特和 4 比特模型要么与 4 比特 QLoRA 持平,要么表现更好,并且由于采用了更低的精度模型而使用更少的内存。这再次凸显了 ModuLoRA 模块化设计带来的优势,使其能够利用更先进的量化器。

6.1.3. 抽象摘要 (Abstractive Summarization)

下表展示了在 SAMSum 数据集上,不同模型和微调方法在抽象摘要任务上的 ROUGE-1/2/L 分数。

以下是原文 Table 3 的结果:

Models Finetuning Adaptation
GPT-3 Full Finetuning 175,255.8M 52.0 28.0/ 44.5
GPT-3 Adapter 53.2 29.0 / 45.1
GPT-3 LoRA 40.1M 4.7M 53.8 / 29.8 / 45.9
Pegasus SliC 2B 54.4 / 29.9 / 45.9
LLAMA Finetuning Quantizer 30B 65B
LLMTOOLS (2-bit) QuIP# (E8) 7B 51.3 / 27.3 / 43.7 / 46.0 54.0/ 30.6 / 46.2
LLMTOOLS (3-bit) OPTQ 51.2 / 28.2 / 44.0 52.3 / 29.0 / 45.0 52.4 / 29.6 / 45.1 53.3 / 30.2 53.6 / 30.8 / 46.3 54.1 / 30.9 / 46.5
LLMTOOLS (4-bit) OPT 51.7 / 28.3 / 44.4 53.2 / 30.2 / 46.1 53.9 / 31.2 / 46.9 54.8 / 31.3 / 47.2
Bits&Bytes (4-bit) QLoRA
Bits&Bytes (8-bit) LLM.int8() 51.6 / 28.3 3/ 44.5 51.9 / 28.1 / 44.5 51.3 / 28.1 / 44.1 51.3 / 28.2 / 43.6 53.0 / 30.2 50.8 / 28.4 / 45.7 53.8 / 44.1 53.9 3 / 30.5 /4 45.9 / 30.4 / 46.3

分析:

  • 刷新 SOTA 纪录: ModuLoRA 的 4 比特 LLaMA-65B 模型(ROUGE-L: 47.2)超越了 GPT-3 基线(最高 ROUGE-L: 45.9)和 Pegasus (45.9),在 SAMSum 数据集上取得了新的 最先进的 (state-of-the-art) ROUGE 分数。

  • 低比特模型的优越性: ModuLoRA 模型(3 比特或 4 比特)在 7B 到 65B 的模型尺寸范围内,普遍优于 BitsAndBytes 中的 8 比特 LoRA (LLM.int8()) 和 4 比特 LoRA (QLoRA)。这表明 ModuLoRA 采用的先进 数据驱动量化方案 优于简单的 零点量化器 (zero-shot quantizer)

  • 极低比特的性能保留: 从 4 比特降至 3 比特,再从 3 比特降至 2 比特,ROUGE 分数仅下降约 1%,这证明了 ModuLoRA 在极端压缩下仍能保持良好的性能。

  • OPT 模型家族的泛化性: LLMTooLsOPT 模型家族上的表现(Table 5)也与 LLaMA 上的结果一致,即 ModuLoRA 在 3 比特和 4 比特精度下,能够匹配或超越 4 比特和 8 比特基线的 ROUGE 分数,进一步验证了方法的泛化性。

    下表展示了在 SAMSum 数据集上,OPTQRound-to-Nearest (RTN) 量化在不同 LLaMA 模型尺寸下的 ROUGE-1/2/L/L-Sum 性能对比。

以下是原文 Table 4 的结果:

SAMSum Performance Quantizer 7B 13B
LLMTOOLS (3-bit) OPTQ 51.2 / 28.2 / 44.0 / 44.2 52.4 / 29.6 / 45.1 / 45.1
RTN OPTQ 51.7 50.7 / 27.2 / 28.3 43.6 / 43.6 44.4/ 44.4 51.1/ 28.7 / 44.3 / 44.5 46.1
LLMTOOLS (4-bit) RTN / 51.2 / / 28.5 / 44.2 / 44.2 53.2 52.5 / 30.2 / 29.9 46.1 45.5 45.5

分析:

  • 先进量化器的重要性: OPTQ 在 3 比特和 4 比特量化下的性能普遍优于简单的 Round-to-Nearest (RTN) 量化,例如 3 比特 LLaMA-7BOPTQ (ROUGE-L: 44.0) 优于 RTN (ROUGE-L: 43.6)。这强调了选择先进的、数据驱动量化器 对于在低比特下保持性能的关键作用。

    下表展示了在 SAMSum 数据集上,ModuLoRAOPT 模型家族上的 ROUGE-1/2/L 性能。

以下是原文 Table 5 的结果:

OPT Finetuning Quantizer 13B 30B
LLMTOOLS (3-bit) OPTQ 48.8 / 26.7 / 41.9 49.9 / 27.1 / 42.5
LLMTOOLS s (4-bit) OPTQ 49.3/ 26.8 / 42.0 49.6 27.1 42.4 1 /
Bits&Bytes (4-bit) QLoRA 49.2 / 27.0 / 42.1 49.9 / 27.0 / 42.5
Bits&Bytes (8-bit) LLM.int8() 48.8 26.5 / 41.7 49.3 | 27.1 / 42.3

分析:

  • OPT 模型的泛化性: 尽管 OPT 模型家族的整体性能低于 LLaMA,但 ModuLoRA 在 3 比特和 4 比特精度下,依然能够匹配或超越 4 比特 QLoRA8 比特 LLM.int8() 基线的 ROUGE 分数。这进一步证明了 ModuLoRA 方法在不同 LLM 架构上的有效性和泛化能力。

6.1.4. 指令遵循 (Instruction Following)

下表展示了在 BigBenchHard (BBH) 基准上,对 Alpaca 数据集进行指令微调的 LLaMA 模型性能。

以下是原文 Table 6 的结果:

Model Method Quantizer BASE (250M) L (780M) XL (3B) XXL (11B)
FLAN-T5 No Finetuning None 30.8 30.3 39.9 47.4
Model Methods Quantizer 7B 30B 65B
LLaMA LLMToOLS (2-bit) QuIP# (E8) 30.8 ± 0.5 38.3 ± 0.6 43.5 ± 0.5
LLMTOOLS (3-bit) OPTQ 31.1 ± 0.4
35.3 ± 0.2 37.2 ± 0.6 43.3 ± 0.4
LLMTOOLS (4-bit) OPTQ 36.2 ± 0.4 40.4 ± 0.2 43.7 ± 0.4
Bits&Bytes (4-bit) QLoRA 35.4 ± 0.2 39.0 ± 0.4 43.5 ± 0.5
Bits&Bytes (8-bit) LLM.int8() 31.9 ± 0.1 36.8 ± 0.2 37.1 39.1 ± 0.5 44.7 ± 0.4
No Finetuning None 33.3 ± 0.3 30.9 39.3 42.6

分析:

  • 极低比特的性能韧性: 2 比特、3 比特和 4 比特模型的性能相对于 8 比特模型仅有轻微下降。值得注意的是,2 比特模型尽管进行了激进的压缩,但在所有模型尺寸下都匹配了 4 比特 QLoRA 的性能。

  • 低比特大模型优于高比特小模型: 4 比特和 3 比特 65B 模型(如 43.7 和 43.3)的性能优于 8 比特 30B 模型(39.1),尽管前者使用的总比特数更少。这支持了在给定计算预算下,使用更大但量化更激进的模型可能优于使用较小但精度较高的模型的观点。

  • ModuLoRAQLoRA 的比较: 4 比特 ModuLoRA 与 4 比特 QLoRA 相比表现良好,并提供了持续的性能提升,尤其是在较小的模型尺寸上。这表明 ModuLoRA 使用的更复杂的 数据驱动量化器 带来了更大的益处。

  • CodeAlpaca 结果 (Table 9):CodeAlpaca 数据集上的额外实验也证实了这一趋势:ModuLoRA 的性能优于或至少与更高精度的 8 比特模型相当。

    以下是原文 Table 9 的结果:

    Code Alpaca Per- formance 13B 30B
    LLMTOOLS LLMTOOLS (3-bit) 53.6 / 36.3 54.6 37.2 50.7 51.4 57.0 40.0 / 40.6 53.3 58.1 40.7 | 54.3 60.0 44.1 58.8
    Bits&Bytes (LLM.int8()) (4-bit) 8-bit 54.0 / 36.3 50.9 57.4 57.7 / 54.3 / 41.3 / 54.9 59.0 / 41.4 60.6 √ 43.5/ 57.5 60.2 57.5 61.1/ 43.5 44.1 / 58.0 / 56.8

6.1.5. 内存需求 (Memory Requirements)

下表展示了在 MNLI-M 任务上微调不同 LLaMA 模型尺寸所需的内存。

以下是原文 Table 7 的结果:

LLaMA Finetuning 7B 13B 30B 65B
LLMTOOLS (2-bit) 3.2 GB 5.4 GB 11.4 GB 21.8 GB
QLoRA (4-bit) 5.2 GB 8.6 GB 19.5 GB 36.7 GB
Full Precision (LoRA) 38.4 GB 73.9 GB 183.3 GB 360.4 GB

分析:

  • 显著的内存削减: ModuLoRA 显著降低了微调所需的内存。对于 65B 模型,ModuLoRA (2 比特) 仅需要 21.8 GB 内存,而全精度 LoRA 需要 360.4 GB,QLoRA (4 比特) 需要 36.7 GB。这意味着 ModuLoRA 仅使用了全精度 LoRA 内存的约 6%。

  • 消费级 GPU 的可行性: ModuLoRA 使得在单张 24GB GPU 上微调 65B 模型(21.8 GB)成为可能,这极大地降低了 LLM 微调的硬件门槛,实现了在消费级硬件上的微调。

    下图形象地展示了不同方法在不同模型尺寸下的内存需求对比。

以下是原文 Figure 2 的结果: VLM 描述: 该图像是一个示意图,展示了不同模型参数大小下所需的内存情况。X轴表示模型参数大小(十亿),Y轴表示所需内存(GB)。不同的曲线代表了2-bit和4-bit量化方法以及全精度的方法,其中LLMTools(2-bit)显著减少了内存需求。

Figure 2: Visualization of memory requirements with different methods. 该图像是一个示意图,展示了不同模型参数大小下所需的内存情况。X轴表示模型参数大小(十亿),Y轴表示所需内存(GB)。不同的曲线代表了2-bit和4-bit量化方法以及全精度的方法,其中LLMTools(2-bit)显著减少了内存需求。

6.1.6. 微调与推理延迟 (Finetuning & Inference Latency)

下表展示了 LLaMA-7B 模型在 MNLI-m 基准上,不同方法的每迭代微调速度。

以下是原文 Table 10 的结果:

Precision LLMTools (2-bit) QLoRA (4-bit) LoRA (Full Precision)
Seconds/Iteration 0.61 s/it 0.80 s/it 1.50 s/it

分析:

  • 微调速度提升: ModuLoRA (2 比特) 在微调速度上显著优于全精度 LoRA,将训练时间缩短了约 59.3%,这主要归因于 GPU 内存中数据移动的减少。它甚至比 QLoRA (4 比特) 还要快。

    下表展示了 LLaMA-7B 模型在 MNLI-m 基准上,不同方法的每迭代推理速度。

以下是原文 Table 11 的结果:

Precision LLMTools (2-bit) QLoRA (4-bit) LoRA (Full Precision)
Seconds/Iteration 0.68 s/it 0.52 s/it 0.52 s/it

分析:

  • 推理速度略慢: ModuLoRA 在推理速度上略低于 LoRAQLoRA,这归因于当前使用的 CUDA 内核 (CUDA kernels) 尚未像 QLoRA 那样经过充分优化。这表明未来仍有优化空间。

6.1.7. BBH 性能与困惑度 (Perplexity, PPL) 对比

下表展示了 LLaMA 模型在 BBH 上的性能和在 Wiki2 上的困惑度 (PPL) 对比。

以下是原文 Table 8 的结果:

Models Quantization BBH PPL
LLAMA (13B) 3-bit 35.3 6.63
4-bit 36.2 5.36
LLAMA (65B) 3-bit 43.3 5.04
4-bit 43.7 3.84

分析:

  • BBHPPL 的弱相关性: 尽管 PPL 普遍被认为是衡量 LLM 质量的指标,但实验结果显示 BBH 性能与 PPL 之间并非完全正相关。例如,13B 模型 3 比特量化的 PPL 为 6.63,4 比特为 5.36(更低更好),而 BBH 性能分别为 35.3 和 36.2。65B 模型也有类似趋势。这意味着 PPL 的显著差异可能只导致下游任务 BBH 性能的微小差异。
  • LLM 评估的启示: 这一发现对 LLM 的评估提出了疑问,尤其是当目标是微调时。它暗示可能需要探索新的训练策略或评估指标,而不仅仅依赖于 PPL

6.2. 消融实验/参数分析

论文中最重要的消融实验是 OPTQRound-to-Nearest (RTN) 量化的对比 (Table 4)。结果清晰地表明,OPTQSAMSum 摘要任务上始终优于 RTN,这凸显了 ModuLoRA 的模块化设计能够利用更先进的、数据驱动量化器 所带来的性能优势。简单的 RTN 方法在低比特量化下会造成更大的信息损失,而 OPTQ 通过校准数据和迭代优化,能够更精准地保留模型能力。

此外,论文还通过比较不同比特精度(2 比特、3 比特、4 比特)下的性能,实际上也进行了一种参数分析。结果表明,即使是 2 比特这种极端低精度,在集成 QuIP# 之后也能保持与 8 比特模型相当的性能,并且性能下降并不剧烈(约 1% 的 ROUGE 分数下降)。这验证了 ModuLoRA 及其所集成先进量化器在极端量化设置下的鲁棒性。

7. 总结与思考

7.1. 结论总结

这篇论文成功提出了一种名为 ModuLoRA 的内存高效微调算法,极大地降低了 大型语言模型 (LLMs) 在消费级 GPU 上进行微调的硬件门槛。ModuLoRA 的核心创新在于其模块化设计,允许它与任何用户指定的 黑盒量化模块 集成,并采用一种巧妙的 量化器无关反向传播 机制,通过动态、按需地解量化和释放权重,将 LLaMA-65B 模型在单张 24GB GPU 上以 2 比特精度进行微调。

实验结果表明,ModuLoRA 在文本分类、自然语言推理和指令遵循任务上取得了有竞争力的性能,甚至在 SAMSum 摘要任务上创造了新的 最先进的 (state-of-the-art) ROUGE 分数。这些成绩是在 2 比特和 3 比特这种前所未有的低精度微调下实现的,且性能优于或媲美现有的 4 比特和 8 比特微调方法。论文还发布了 LLMTooLs 库和一系列低精度 Alpaca 模型,进一步促进了 LLM 社区的发展。

总的来说,ModuLoRA 的灵活性和卓越性能使得 LLM 微调变得更易于访问和更具成本效益,特别是在资源受限的环境中,这将有助于开源模型开发和科学研究的民主化。

7.2. 局限性与未来工作

论文作者指出了 ModuLoRA 的以下局限性:

  1. 推理开销 (Inference Overhead): LoRA 的一个优势是其适配器可以轻松地“合并”到全精度的权重矩阵中,从而在推理时没有额外开销。然而,ModuLoRA 的低秩适配器是高精度的,而基座模型是量化的。因此,适配器不能直接与量化权重矩阵融合,推理时仍需要图 1 所示的动态解量化和计算过程,这可能引入额外的推理延迟。

  2. 安全问题 (Safety Concerns): 使得在广泛可用的商品硬件上微调 LLM 变得过于容易,可能会带来与 LLM 安全相关的潜在问题,例如恶意微调或滥用。

  3. 超大型模型限制: 即使是 2 比特量化,对于目前最大的 LLM(例如 GPT-4 这种可能包含万亿参数的模型),即使每个参数仅占用 1 比特,也需要 125GB 内存,这仍然超出了消费级 GPU 的内存限制。因此,ModuLoRA 仍无法在商品硬件上微调这些超大规模模型。

    对于未来工作,论文暗示了以下方向:

  • 优化 CUDA 内核 (CUDA kernels) 以进一步减少推理延迟。
  • 探索新的训练策略和评估方法,因为 困惑度 (PPL) 与下游任务的微调性能之间存在弱相关性。
  • 将方法扩展到更大的 LLM 架构,或结合其他内存优化技术来应对万亿参数模型的挑战。

7.3. 个人启发与批判

7.3.1. 个人启发

  1. 模块化设计的强大力量: ModuLoRA 最主要的启发在于其对 量化器 的模块化、黑盒 集成处理。这使得该微调框架能够快速采纳并受益于未来出现的任何先进量化算法,大大提升了其生命力和普适性。在其他领域,这种解耦不同组件的设计模式同样具有借鉴意义。
  2. 低比特的潜力远超预期: 论文有力地证明了,通过巧妙的算法设计(如动态解量化和先进的量化器),即使是 2 比特和 3 比特这种极端低精度的 LLM,也能在微调后取得与高精度模型媲美的性能。这挑战了许多人对模型精度不可或缺的传统观念,为资源受限环境下的 LLM 应用开辟了广阔前景。这对于边缘设备、移动端部署以及更广泛的 LLM 民主化具有深远影响。
  3. 内存管理与性能的平衡艺术: 动态重计算 (recompute) 策略是解决内存瓶颈的优雅方案。它在计算开销和内存效率之间找到了一个良好的平衡点,通过牺牲少量重复计算来大幅降低内存占用,对于现代 GPU 而言,这种权衡是划算的。
  4. 评估指标的再思考: PPL 与实际下游任务性能的弱相关性是一个重要的警示。它提醒研究者,不能仅仅依赖单一的、间接的指标来评估 LLM 的“好坏”,尤其是当模型用于微调特定任务时,直接在目标任务上进行评估更为关键。

7.3.2. 批判

  1. 推理开销的实际影响: 尽管论文指出了推理开销是其局限性,但其当前 CUDA 内核 “不够优化”导致推理速度慢于 QLoRALoRA 的事实,在实际部署中可能是一个重要的瓶颈。对于需要低延迟响应的应用,即使训练内存效率高,推理效率不足也可能限制其广泛采用。未来需投入大量精力优化推理端的 CUDA 内核
  2. 安全性讨论不足: 论文简要提到了“使得微调过于容易可能带来安全问题”,但这仅仅是一个警示,缺乏更深入的讨论或潜在的缓解方案。考虑到 LLM 滥用的风险日益增加,一个能如此便捷地微调 LLM 的工具,应该更积极地思考和探讨相关的伦理和安全维度。
  3. 量化器黑盒的潜在风险: 虽然模块化是一个优势,但将量化器作为 黑盒 处理也可能带来挑战。如果选择的量化器本身存在缺陷、不透明或与微调过程产生意外的交互,可能会难以调试和优化。此外,量化器可能需要自己的校准数据,这增加了整个流程的复杂性。
  4. 通用性与特定性之间的权衡: ModuLoRA 的通用性使其能够集成多种量化器,但 QLoRA 等自研量化方案可能能够更紧密地将量化与微调过程结合,从而进行更深层次的端到端优化。这两种范式在实际应用中如何权衡,值得进一步研究。例如,对于特定的量化器,是否能设计出更定制化的 ModuLoRA 版本以获得更优性能?

相似论文推荐

基于向量语义检索推荐的相关论文。

暂时没有找到相似论文。