趋近智
低秩自适应 (LoRA) 减少了训练期间更新的参数 (parameter)数量,但基础模型本身仍然占用大量显存 (VRAM)。一个以 16 位精度加载的标准 70 亿参数语言模型,仅在闲置状态下就需要约 14 GB 的内存。一旦加上优化器状态、梯度和批次数据,显存需求会迅速超过标准 24 GB 消费级 GPU 的限制。量化 (quantization) LoRA 正是为了解决这个显存瓶颈。
量化通过降低表示模型权重 (weight)所用数字的精度来发挥作用。量化不再将每个参数存储为 16 位或 32 位浮点数,而是将这些值映射到更低位的表示形式,如 8 位或 4 位整数。从 16 位降低到 4 位可以使模型的内存占用减少近 75%。然而,标准的量化可能会导致信息丢失,从而降低模型的性能。
QLoRA 引入了一种优化方法,可以在严格的内存限制下运行,同时保持原有的性能水平。它的工作原理是将预训练 (pre-training)的基础模型以特殊的 4 位格式加载并冻结其权重。然后,将标准的 16 位 LoRA 适配器附加到这些冻结层上。在前向传播过程中,4 位权重会临时反量化为 16 位,以便与输入进行矩阵乘法,并将结果与 16 位 LoRA 适配器的输出合并。
为了在不降低文本生成质量的情况下实现这一点,QLoRA 采用了三种特定的技术:
4 位正态浮点数 (NF4) 神经网络 (neural network)的权重通常遵循以零为中心的止正态分布。NF4 是一种专门为此分布设计的、信息论上最优的数据类型。它在权重最集中的零附近分配了更多的位表示,从而确保了最常用值的更高精度。
双重量化 量化模型需要缩放因子(称为量化常数)来进行数值的往返映射。在数百万个参数块中存储这些常数会消耗额外的内存。双重量化对这些常数进行第二次量化,将其内存占用从 32 位降低到 8 位。
分页优化器 优化器状态可能会在训练期间导致显存突然激增。QLoRA 集成了分页优化器,当显存达到上限时,它会自动在 GPU 显存和系统 CPU 内存之间传输数据。这可以防止在剧烈的梯度更新期间出现显存溢出错误。
QLoRA 中的前向传播架构,其中冻结的 4 位权重被临时反量化,以便与 16 位 LoRA 适配器的输出合并。
标准的 LoRA 前向传播接收输入向量 (vector) ,并同时应用基础权重矩阵 以及适配器矩阵 和 。标准等式如下:
在 QLoRA 中,基础权重 被量化为 4 位,表示为 。在前向传播过程中,反量化函数会将 转换回更高精度的计算格式(如 bfloat16)来进行数学运算。更新后的等式为:
在这里, 作为 4 位数据固定在内存中。适配器 和 保持 16 位浮点格式,以便在反向传播 (backpropagation)期间准确地累积梯度。
在 Python 中实现这一点需要将 bitsandbytes 库与 Hugging Face Transformers 结合使用。在代码中设置量化配置对象时,需要指定四个主要参数:
这种配置可以确保你的训练脚本能够适应标准硬件的内存限制。通过将 4 位基础模型量化与低秩自适应相结合,你可以在严格执行硬件效率的同时,保持参数化语言模型的高性能。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•