Soup全参数微调指南:GaLore/LISA如何在有限显存下逼近Full FT效果
2026/9/2 12:49:35 网站建设 项目流程

Soup全参数微调指南:GaLore/LISA如何在有限显存下逼近Full FT效果

【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/Soup

Soup 是一个「一个 YAML 文件微调 LLM」的开源工具,而它的 GaLore 与 LISA 两大特性,正是让全参数微调(Full Fine-Tuning)不再被显存卡脖子的关键:在 4 GB 的笔记本显卡上训练 8B 模型、在单张 80 GB 卡上跑下传统需要约 120 GB 显存的完整微调。本文用实测数据讲清楚两者的原理、配置与选型建议,帮你用最少的显存拿到最接近 Full FT 的效果。

上图是 Soup 在 4 GB 显卡上训练 Llama-3.1-8B 的实测演示:基座权重固定在内存中,逐层送入 GPU,峰值显存仅 3.32 GB。

一、为什么需要 GaLore / LISA?先看一组真实显存账单

全参数微调的效果上限通常高于 LoRA,但显存开销是「模型参数 + 梯度 + 优化器状态」的三重叠加。Soup 在单张 H100 80 GB 上的实测结果(记录于 benchmarks/gate-h100-validation.md):

Llama-3.1-8B-Instruct(Alpaca,200 步)

训练方式峰值显存验证集损失
全参数微调❌ 73.94 GB 时 OOM(batch=1 也放不下)
LISA(2 层 / 20 步)52.14 GB1.294
LoRA r=1634.56 GB1.275

Qwen2.5-3B-Instruct

训练方式峰值显存验证集损失
全参数微调57.60 GB1.2905
LISA19.37 GB1.2463
LoRA r=1615.93 GB1.2420

两个值得注意的结论:

  • LISA 在两个学习率下都压过了全参数微调的质量——「低显存 = 低质量」在 7B+ 规模上不成立;
  • ⚠️ 但 LISA 的显存只有 LoRA 的 1.22~1.51 倍,且随模型规模差距扩大,原因见下文「常驻开销」。

二、GaLore:梯度低秩投影,让优化器不再吃满显存

🔍原理一句话:全参数微调的大头往往不是参数本身,而是 AdamW 为每个参数维护的一份一阶+二阶动量状态。GaLore 把梯度先投影到低秩空间(源码注释:优化器显存从 O(n·m) 降到 O(n·r + m·r)),训练时所有参数仍然更新,但优化器状态只为低秩分量维护。

最小配置(完整文档见 docs/peft-and-efficiency.md):

training: quantization: none # 必须:GaLore 与量化互斥 use_galore: true galore_rank: 128 # 低秩维度,默认 128 galore_update_proj_gap: 200 # 每 200 步重算投影 galore_scale: 0.25

三个必须记住的约束(gaLore 校验逻辑):

  • quantization: none—— 4bit/8bit 会与 GaLore 冲突,直接报错;
  • backend: transformers—— 不支持 unsloth 后端;
  • 作用在attnmlp模块,优化器为galore_adamw

适合谁:想保持「真·全参数」语义、又不想上多卡 ZeRO 的训练者。它压缩的是优化器显存,不改变「每个参数都被更新」这一事实。

三、LISA:每 20 步只训 2 层,用轮换来换显存

🔍原理一句话:LISA(Layerwise Importance Sampled AdamW)不一次性挑定要训的层,而是每隔 N 步随机抽取一小撮 decoder 层进行全精度更新,其余层冻结(实现)。训练足够长的时间后,每一层都会轮到——效果接近全参数微调,但同一时刻只有少数层携带优化器状态,峰值显存因此骤降。

training: quantization: none # LISA 是活跃层的全参数训练,不叠加量化 lisa_enabled: true lisa_num_layers: 2 # 每个区间激活的层数(默认 2) lisa_interval_steps: 20 # 每 20 步重新抽样一次 lisa_train_embeddings: true # 默认 true,可改为 false 见下

那个「常驻开销」:为什么 8B 上 LISA 是 52 GB

Soup 的实测发现:默认的 embeddings + LM head + final norm 在每个区间都保持可训练,在 8B 模型里它们占了 LISA 全部训练量的70.7%(3B 上为 66.9%)——这部分开销 LoRA 根本不需要支付,而且随「词表 × 隐藏维度」线性增长。

所以 Soup 提供了lisa_train_embeddings: false:冻结该常驻组,只训被抽中的层,显存才能真正逼近 LoRA 量级。代价是质量可能波动(官方建议两种方式都实测一遍再定,详见 LISA 完整章节)。

调参的两个实测结论

  • 📉lisa_num_layers越大越差(3B 验证集损失:2 层 1.2504 → 8 层 1.2673 → 16 层 1.2950),且 8B 上超过 8 层直接 OOM 一张 80 GB 卡。默认值 2 就是最优区;
  • 📊lisa_interval_steps在 1~50 之间几乎无差异,只有 200(全程仅抽样一次)才会退化。默认 20 稳。

LISA 的适用边界:仅限sft/pretrain+ transformers 后端 + 纯文本 + 无量化,且与 LoRA、freeze_layers等互斥(配置校验 会在启动前拦住误配)。

四、选型清单:GaLore、LISA 还是 LoRA?

需求推荐理由
显存极小(4~12 GB 级)LoRA(可叠加 Soup 层流式)显存最省,实测质量打平
8B 模型、单张 80 GB、要「全参数级」更新LISAFull FT 约需 120 GB,LISA 52 GB 拿下,质量反超
显存适中、追求纯正全参数语义GaLore优化器显存降一个量级,所有参数照常更新
极致压缩优化器状态GaLore + 调小galore_rank显存与 rank 线性相关

一句话决策:在 7B 以上规模,LISA 的质量已验证不低于全参数微调,而 LoRA 用约三分之一的显存追平甚至反超 LISA——所以「显存不够时」首选 LISA,「显存真的极少时」选 LoRA,GaLore 则是「必须全参数、又不想上多卡」的中间解。

五、延伸阅读

  • 训练主文档:docs/training.md
  • GaLore / LISA 完整章节:docs/peft-and-efficiency.md
  • H100 显存与质量实测记录:benchmarks/gate-h100-validation.md
  • GaLore 优化器构建:src/soup_cli/utils/galore.py
  • LISA 回调实现:src/soup_cli/utils/lisa.py

【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/Soup

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询