存成4-bit,不等于全程4-bit计算
L02/b0 · 低位存储
QLoRA:把存储精度、计算精度和更新对象分开。
不是所有计算和梯度都变成 4-bit。
接下来切回:稠密模型预训练/全参数 Adam 训练。
LoRA已经让我们不用更新整个底座,但底座权重仍然要放在设备或可访问的内存里。QLoRA进一步把冻结底座用低位格式保存。比如说四bit,是在描述这里的权重表示,比每参数两个字节更省空间;实际还会有分组常数、元数据和其他状态,所以不能只用一个除法就当成完整训练显存。原论文采用NF4这种四位数值格式,并用双重量化进一步压缩量化常数。它们解决的是如何表示和保存这些数值,详细编码放在主题阅读和Lab。低位保存会把一段连续数值映射到有限表示值,恢复时通常不能逐个还原原始权重。所以它是一种近似压缩,省下存储之后仍要检查输出和任务表现。
教师备课:指图与模拟问答
指图与推进 · 不朗读指存储框上的4-bit;把量化常数作为小旁注保留。
L02/b1 · 反量化计算与LoRA更新
QLoRA:把存储精度、计算精度和更新对象分开。
不是所有计算和梯度都变成 4-bit。
接下来切回:稠密模型预训练/全参数 Adam 训练。
计算时并不是把所有乘法、累加和梯度都变成四bit。底座权重按需要反量化,参与较高精度的计算;旁边的LoRA参数仍按自己的精度计算和更新。训练的梯度经过整个所需计算路径,最后更新的是适配参数,冻结底座没有因此变成可训练的四bit权重。分页优化器则处理另一类问题:训练过程中内存压力怎样管理。工具名称也可以放回这些位置,PEFT组织适配模块,bitsandbytes提供相关低位实现和优化器。名称很多,但各自在解决具体的一段工作。
教师备课:指图与模拟问答
指图与推进 · 不朗读沿低位存储→反量化→主路输出;只将更新箭头画到LoRA。
L02/b2 · 切回全参数
QLoRA:把存储精度、计算精度和更新对象分开。
不是所有计算和梯度都变成 4-bit。
接下来切回:稠密模型预训练/全参数 Adam 训练。
量化并非完全无损,低秩更新也不是任何任务都够用,所以省下资源之后仍要做任务评价。现在第一课时走完了:我们看到了预训练怎样形成能力,后训练怎样让任务信号继续塑造行为,以及已有模型怎样以更少可训练参数适配。休息之后镜头会退回大模型预训练的设计阶段,讨论参数多大、材料读多少,以及更新全部参数需要什么资源。请特别记住这个切换:后面混合精度Adam的全参数账本,不是刚才LoRA必需的状态。接下来先休息。
教师备课:指图与模拟问答
指图与推进 · 不朗读回到三种模式:全参数训练/冻结底座适配/使用;点亮将切回全参数。
补充推导、边界与来源
QLoRA把冻结底座以低位格式保存,在参与矩阵计算时按需反量化,并在较高精度计算路径中训练LoRA增量。低位存储、计算精度和可训练参数是三个不同选择,不能把示意图全部标成“4-bit梯度”。原论文使用NF4格式、双重量化及分页优化器,分别处理量化表示、量化常数存储和内存压力问题。
量化会引入近似误差,LoRA也限制更新形式,两者都需在目标任务上验证。PEFT等工具组织适配参数与训练接口,bitsandbytes等实现低位算子和相关优化器。下一段切换到稠密预训练及全参数Adam训练,之后的128 GB状态账本不属于LoRA必需占用。
本页证据与条件
QLoRA论文;存储、反量化与梯度路径的机制图