一、背景介绍:为什么需要 LISA?
在大语言模型微调中,显存往往是最大的门槛。
以一个常见的7B 参数量模型为例,如果采用全参数微调(Full Fine-tuning),显存占用通常在80GB 左右,基本需要一张完整的A100 80G显卡。这对于大多数研究者和工程团队来说成本较高。
因此,社区中逐渐出现了以LoRA为代表的轻量化微调方法,通过引入低秩矩阵来减少可训练参数,从而显著降低显存需求。但 LoRA 也并非完美:
- 参数更新空间受限
- 在某些任务上性能仍与全参微调存在差距
LISA(Layerwise Importance Sampling for Memory-Efficient Large Language Model Fine-Tuning)正是在这一背景下提出的一种新方法。
它的核心目标是:
在保持“全参数训练表达能力”的前提下,大幅降低显存占用和训练开销。
实际效果非常亮眼:
- 全参训练 7B 模型:≈80GB 显存
- 使用 LISA 后:≈30GB 显存
这意味着:
👉40G A100、24G A10,甚至 RTX 3090 都有可能进行“近似全参”的训练
论文地址:
https://arxiv.org/abs/2403.17919
二、技术背景:理解 LISA 前需要知道什么?
如果你对深度学习和大模型训练还不够熟悉,建议先快速浏览以下入门教程:
本文默认读者已具备以下基础认知:
- Transformer 的 layer 结构
- 全参数训练 vs LoRA 微调
- 反向传播与梯度更新
三、LISA 的核心思想:并不是所有 Layer 都“同样重要”
1️⃣ 一个关键观察:不同 Layer 的“更新强度”差异很大
LISA 的作者首先做了一件非常直观、但很少有人系统分析的事情:
对比 LoRA 训练与全参数训练时,各个 layer 参数更新的 L2 范数
作者在GPT-2和LLaMA-2-7B上统计了不同训练 step 中,各层参数更新的平均 L2 范数。
(图示:不同 layer 在 LoRA / Full FT 下的 L2 范数对比)
得到的重要结论是:
- 在LoRA 训练中,由于低秩矩阵的限制
👉 参数更新集中在“特定方向” - 在全参数训练中
👉 虽然所有参数都可训练,但并不是所有 layer 的更新幅度都很大
特别是:
- 中间层的参数更新 L2 范数明显更小
- 底层和顶层对模型行为影响更显著
这说明一个事实:
即便在全参数训练中,大量 layer 的“实际贡献”是有限的
2️⃣ 一个大胆假设:能否“只训练一部分 Layer”?
基于上述观察,作者提出了一个非常自然的想法:
如果在全参数训练中,只让一部分 layer 参与反向传播,
是否能模拟 LoRA 的更新特性,同时保留全参模型的表达能力?
于是,LISA 的基本策略就诞生了:
- 每隔 K 个 step
- 随机选取 γ 个 layer
- 只对这些 layer 执行反向传播,其余 layer 冻结
(图示:LISA 的 layer 采样与更新流程)
从长期训练视角来看:
- 所有 layer 都会被更新
- 但每一时刻,显存中只需维护少量 layer 的梯度
👉显存需求 ≈ γ / 总 layer 数
四、LISA 的算法流程
可以将 LISA 理解为一种:
“时间维度上的 Layer 轮流训练”策略
具体流程如下:
- 初始化模型(与全参数训练完全一致)
- 每训练 K 个 step:
- 随机采样 γ 个 Transformer layer
- Forward:
- 所有 layer 都参与前向计算
- Backward:
- 只对被选中的 layer 计算梯度
- 其他 layer 参数保持冻结
- 重复以上过程直至训练结束
这样做带来的直接收益是:
- 显存显著降低
- Backward 计算更快
- 无需额外参数结构(不同于 LoRA)
五、官方实验结果:显存、速度、效果全面对比
1️⃣ 显存占用对比
(图示:Full FT / LoRA / LISA 显存占用)
结论非常直观:
LISA 的显存占用甚至低于 LoRA
2️⃣ 训练速度对比
(图示:Forward / Backward 时间对比)
由于反向传播的 layer 更少:
- LISA 的Backward 时间显著短于 LoRA
- 整体训练速度更快
3️⃣ 微调效果对比
在不同规模的微调任务中发现:
- LISA 在多个数据集上
👉性能优于 LoRA - 在部分设置下
👉接近甚至达到全参训练效果
六、LISA 的两个关键超参数
LISA 只有两个非常直观的超参数:
| 参数 | 含义 |
|---|---|
| γ | 每次参与反向传播的 layer 数 |
| K | 重新采样 layer 的步数间隔 |
消融实验结果表明:
(图示:γ、K 不同取值的性能对比)
最佳组合为:
γ = 8,K = 5
七、实测实验:基于 SWIFT 框架
为了验证 LISA 在真实工程环境中的效果,我们基于魔搭社区 SWIFT 框架进行了实验:
SWIFT 已原生支持 LISA,并提供以下参数:
lisa_activated_layers→ γlisa_step_interval→ K
1️⃣ 训练命令
# pip install ms-swift -U sft.py \ --model_type qwen-7b-chat \ --dataset ms-agent \ --train_dataset_mix_ratio 2.0 \ --batch_size 1 \ --max_length 2048 \ --use_loss_scale True \ --gradient_accumulation_steps 16 \ --learning_rate 5e-05 \ --use_flash_attn True \ --eval_steps 2000 \ --save_steps 2000 \ --train_dataset_sample -1 \ --val_dataset_sample 5000 \ --num_train_epochs 2 \ --check_dataset_strategy none \ --gradient_checkpointing True \ --weight_decay 0.01 \ --warmup_ratio 0.03 \ --save_total_limit 2 \ --logging_steps 10 \ --sft_type full \ --lisa_activated_layers 2 \ --lisa_step_interval 20 对比实验包括:- 全参数训练(无 LISA)
- Full + LISA(不同 γ)
- LoRA(r=8)
2️⃣ 实验结果汇总
| exp_name | memory | trainspeed | train_loss | eval_loss | gsm8k | arc | ceval |
|---|---|---|---|---|---|---|---|
| full | 73.53GiB | 1.43 | 0.54 | 0.95 | 0.343 | 0.536 | 0.495 |
| full+lisa_2 | 31.11GiB | 2.66 | 0.62 | 1.06 | 0.349 | 0.653 | 0.592 |
| full+lisa_4 | 31.87GiB | 2.63 | 0.63 | 1.06 | 0.377 | 0.656 | 0.607 |
| lora (r=8) | 32.35GiB | 0.95 | 0.53 | 1.01 | 0.462 | 0.676 | 0.304 |
八、实验现象与分析
🔹 显存
- 全参 ≈ 2 × LISA / LoRA
- γ 越小,显存越低
🔹 训练速度
- LISA > LoRA
- γ 增大会略微降低速度
🔹 训练 Loss
- 全参最低
- LISA 略高但可接受
(图示:LISA vs LoRA loss 曲线)
可以观察到:
LISA 的 loss 曲线更“抖动”
推测原因是:
- 每次反向传播的 layer 是随机采样的
- 梯度路径存在随机性
九、总结与思考
LISA 是一种非常“工程友好”的新型 tuner:
- ✅ 不引入额外参数结构
- ✅ 显存占用极低
- ✅ 训练速度快
- ✅ 在多个任务上达到甚至超过 LoRA
它也引出了许多值得进一步研究的问题:
- 能否基于参数范数 / 特征值智能选择 layer?
- 是否可以在更细粒度(QKV / MLP / LN)上控制反向传播?
- 是否能与 LoRA、Adapter 等方法结合?
如果你已经在实际项目中尝试过 LISA,欢迎一起交流讨论。
推荐继续阅读我的文章,点击合集:
大模型原理
照着做玩转大模型
一张图讲透大模型
玩转智能体
由于篇幅所限,后续会介绍更多大模型基础知识,喜欢的朋友可以点赞、收藏、转发,有什么的不懂的,欢迎在留言评论区提问!
🚀欢迎加入我的知识星球——大模型公社!
这里不仅有我亲自整理的大模型学习视频和代码资料,还会定期分享前沿技术实践与经验心得。
如果你想深入理解大模型、提升实战能力,这里会是你最值得加入的学习社群。和一群志同道合的伙伴一起进步,少走弯路,快速掌握核心知识。现在就加入,开启你的大模型成长之旅!
🎯 目前星球已分享了大量视频学习资料和代码资料,永久有效!进群即可学习!
小提示:领取优惠券更划算哦~!
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。