GaLore(梯度低秩投影技术)实现全量微调(Full Fine-tuning),突破大模型训练内存瓶颈
全量微调(Full Fine-tuning)是指在模型训练或微调过程中,对所有参数进行更新调整,而非仅对部分参数进行优化。这与参数效率微调(Parameter-Efficient Fine-Tuning, PEFT)方法如LoRA(低秩适应)形成鲜明对比,后者仅调整或优化模型参数的一个子集,从而降低计算开销。
GaLore通过其创新的梯度低秩投影(Gradient Low-Rank Projection)技术,使得即使在内存资源严重受限的情况下,依然能够高效完成大规模模型的全量微调。该技术能够识别训练过程中梯度呈现的低秩结构,并利用这一特性对梯度进行压缩,从而大幅降低存储梯度所需的内存占用。这意味着,即便是参数规模极其庞大的模型,GaLore也能在普通的消费级硬件上实现全量微调,而无需牺牲模型性能或额外增加计算资源开销。
GaLore提供了一种在资源受限环境下实现大语言模型(LLM)全量微调的高效方案,打破了传统上对高端硬件的依赖。实际应用中,GaLore可在消费级GPU上完成7B规模语言模型的预训练与全面微调:

下面我们来对比一下不同配置下的性能表现:
GaLore引入了以下额外超参数:
秩 Rank r:与LoRA类似,秩越高,内存消耗越大,但模型性能也可能随之提升。如上图所示,秩为1,024时的结果明显优于秩为512时的结果。需要注意的是,GaLore的秩通常高于LoRA的秩。经验表明,128是最低可行的秩。
比例因子 Scale factor α:该参数用于调节低秩更新的强度,与LoRA中的比例因子类似。根据原作者的描述,GaLore对α的变化具有很强的鲁棒性,取值在0.2到2.0之间通常能取得不错的效果。
子空间变化频率 Frequency of subspace change T:虽然T的理想取值会随训练时长和任务复杂度而变化,但将T设置在50到1000之间对最终结果的影响最小,可放心选用。
下面通过五次对比实验,逐一验证不同超参数配置下的实际表现。
实验一:
BS=128;学习率=1e-5;优化器:galore_adamw_8bit_layerwise,秩=512
使用GA-LoRA,在单张H100显卡上对Mistral-7B进行全量微调(可训练参数总数 = 7,241,732,096)。由于显存充足,可将批量大小(BS)从8增加到128:
ds = load_dataset("timdettmers/openassistant-guanaco")
训练过程中H100的资源开销情况如下(若BS=8,显存占用约23GB):
从损失函数曲线来看,训练效果显然不理想。
实验二:
BS=64;学习率=2e-5;优化器:galore_adamw_8bit_layerwise,秩=512
将学习率提高一倍,同时将批量大小减半:
效果有所改善,但依然不够理想。
实验三:
BS=128;学习率=1e-5;优化器:galore_adamw_8bit;秩=512
当使用“galore_adamw_8bit_layerwise”配置进行训练时,模型似乎并未学到有效特征,训练损失没有显著下降,验证损失也几乎没有变化。实际上,针对优化器“optim”,GaLore提供了多种基于AdamW的“增强”选项:
galore_adamw:标准GaLore,参数采用float32精度。不过,该版本对于消费级硬件而言内存消耗仍然偏高。
galore_adamw_8bit(BS=8):此版本将优化器状态参数量化为8位。用于微调Mistral 7B模型时,该配置需要约35 GB的GPU显存;若使用更低的秩(如128),显存需求可降至约30 GB。
galore_adamw_8bit_layerwise(BS=8):与galore_adamw_8bit功能相同,但采用分层更新的方式。此配置仅消耗22.5 GB显存,使得在24 GB的消费级GPU上运行成为可能。
关于超参数“optim_args”,上述实验中我们选择的秩为512。GaLore的作者指出,对于7B规模的模型,采用秩1,024能取得更优的结果,但该配置在不降低批量大小的情况下无法适配24 GB的GPU显存。值得注意的是,GaLore当前的实现尚不支持梯度累积步骤。
我们将“update_proj_gap”设置为200,未尝试其他取值;作者提到50到1,000之间的任何取值均可正常工作。同时将alpha设置为1.8,尽管0.25到2之间的其他取值也同样有效,这表明GaLore对超参数变化具有较好的鲁棒性。
最后,与LoRA类似,我们需要指定应用GaLore的模块。通过“optim_target_modules”来实现。为了尽可能降低内存消耗,应尽量针对大多数模块进行设置。对于Mistral 7B这样的模型,目标应覆盖所有自注意力(Self-Attention)和MLP模块。然而,GaLore只能作用于PyTorch的nn.Linear层。对于Mistral 7B,可以通过设置正则表达式[r"attn.", r"mlp."]来匹配兼容层。所有基于Llama 2架构的模型均可采用相同的配置。
更换优化器后,GPU显存利用率在相同配置下(BS=128)比更换前有所提升。训练效果也显著优于之前,达到了理想状态。
实验四:
BS=128;学习率=1e-5;优化器:galore_adamw_8bit,秩=1024
接下来,在保持BS=128且优化器为galore_adamw_8bit的前提下,将秩从512提升至1024。训练过程中,GPU显存利用率飙升至87 GB,但并未出现OOM(显存溢出),充分体现了大显存容量的优势。从训练结果来看,相比实验三,效果更为理想:损失函数在Step 50时直接降至0.825400,并在Step 100时进一步降低到0.71。
上图显示,随着训练进行,损失函数正常下降,但验证损失(Validation Loss)却出现上升,这提示模型产生了过拟合。因此,我们进行下一个实验以缓解该问题。
实验五:
针对实验四出现的过拟合情况,降低学习率,增加 weight_decay 和 warmup_ratio
BS=128;学习率=1e-6;优化器:galore_adamw,秩=1024
weight_decay=0.05,warmup_ratio=0.2
查看训练结果,过拟合问题已得到有效解决:
