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。
量化是一种压缩技术,它减少表示神经网络权重的数字的精度。不是将每个权重存储为32位(FP32)或16位(FP16/BF16)浮点数,而是将它们存储为8位整数(INT8)甚至4位整数(INT4)。
例如:
这意味着一个70亿参数的模型从FP32的约28GB缩小到INT4的仅约3.5GB——减少了8倍。
QLoRA不使用任意量化。它采用先进技术来最小化精度损失:
QLoRA引入了一种新的数据类型:4位NormalFloat (NF4)。与使用均匀分布的标准INT4不同,NF4针对遵循正态分布的数据(如神经网络权重)进行了优化。这使得对零附近值的表示更加精确,而大多数有用信息都集中在这些值附近。
QLoRA在两个层面上应用量化:
这节省了每个参数约0.375位,相当于在7B模型中额外节省315MB。
QLoRA使用"分页"优化器,更有效地管理内存,避免在处理长序列或大批量时出现内存不足(OOM)错误。这在内存受限的环境中特别有用。
QLoRA结合了三个关键组件:
这种方法确保:
bitsandbytes ≥ 0.41.0(实现4位量化的库)。transformers ≥ 4.30.0。accelerate和peft。bitsandbytes和AutoModelForCausalLM兼容的实现。