📚 模块4:QLoRA — 高性能量化微调

4.1 QLoRA简介

QLoRA(量化低秩适配)是LoRA的自然且革命性扩展,在论文"QLoRA: Efficient Finetuning of Quantized LLMs"(Dettmers等,华盛顿大学&MBZUAI,2023年)中提出。虽然LoRA减少了可训练参数的数量,但QLoRA更进一步:它降低了基础模型权重的数值精度以适应低内存GPU,同时保持几乎与完整微调相当的性能

QLoRA能够在单个48GB GPU上训练高达700亿参数的模型,以及在24GB GPU上训练30-40B模型。此外,7B-13B模型可以在16GB GPU上训练——例如Google Colab免费提供的GPU。

4.2 什么是量化?

量化是一种压缩技术,它减少表示神经网络权重的数字的精度。不是将每个权重存储为32位(FP32)或16位(FP16/BF16)浮点数,而是将它们存储为8位整数(INT8)甚至4位整数(INT4)。

例如:

  • FP32:每个权重32位 → 4字节
  • INT4:每个权重4位 → 0.5字节

这意味着一个70亿参数的模型从FP32的约28GB缩小到INT4的仅约3.5GB——减少了8倍。

4.3 QLoRA中的量化类型

QLoRA不使用任意量化。它采用先进技术来最小化精度损失:

a) NormalFloat (NF4)

QLoRA引入了一种新的数据类型:4位NormalFloat (NF4)。与使用均匀分布的标准INT4不同,NF4针对遵循正态分布的数据(如神经网络权重)进行了优化。这使得对零附近值的表示更加精确,而大多数有用信息都集中在这些值附近。

b) 双重量化

QLoRA在两个层面上应用量化:

  1. 将模型权重量化为4位。
  2. 还将缩放常数(用于在计算期间反量化)量化为8位。

这节省了每个参数约0.375位,相当于在7B模型中额外节省315MB。

c) 分页优化器

QLoRA使用"分页"优化器,更有效地管理内存,避免在处理长序列或大批量时出现内存不足(OOM)错误。这在内存受限的环境中特别有用。

4.4 QLoRA在实践中如何工作?

QLoRA结合了三个关键组件:

  1. 基础模型量化为4位(NF4) — 仅用于存储和推理。
  2. 在量化权重上应用LoRA — LoRA权重(A和B)在训练期间保持完整精度(BF16/FP16)。
  3. 混合精度计算 — 在前向和反向传递期间,量化权重临时反量化为BF16进行高精度计算,然后重新量化。

这种方法确保:

  • 最小的GPU内存使用。
  • 足够的计算精度以避免性能下降。
  • 仅训练LoRA参数,保持参数效率。

4.5 技术要求和限制

要求:

  • 支持CUDA的NVIDIA GPU。
  • bitsandbytes ≥ 0.41.0(实现4位量化的库)。
  • transformers ≥ 4.30.0。
  • acceleratepeft

限制:

  • 仅兼容解码器-only架构,如GPT、Llama、Mistral、Qwen。不兼容标准配置中的编码器-解码器模型如T5或BART。
  • 并非所有模型都受支持。 模型必须有与bitsandbytesAutoModelForCausalLM兼容的实现。
  • 轻微的计算开销。 临时反量化会增加轻微延迟,但考虑到内存节省是可以接受的。
  • 不适合从头开始训练。 QLoRA专为微调设计。

Course Info

Course: AI-course3

Language: ZH

Lesson: Module4