微调一个LLM到底吃多少显存?答案是个范围
先说结论:方法决定一切,模型大小只是骨架。同一个7B模型,你用LoRA还是全参微调,显存开销能差出十几倍。网上一堆人开口就是"A100 80G起步",那是拿数据中心的标准吓唬人。
我踩过最坑的一次:拿全参微调跑7B,optimizer state没算对,爆显存爆得莫名其妙。后来统一用梯度检查点+AdamW 8bit,显存直接掉一半。
全参微调(Full Fine-tuning): 基准线大概是这样——7B模型要60-80GB,13B直接破百,70B就别想了,那是A100/H100的领地。为什么这么吃显存?你要同时存下模型权重、优化器状态(AdamW要存两份动量)、梯度、激活值。光优化器状态就占掉3倍模型大小,这还没算前向传播里的中间张量。
LoRA/QLoRA系: 这才是平民玩家的活路。LoRA冻结原模型,只训练低秩矩阵,7B模型从80GB降到20GB左右。QLoRA更狠,把基座模型压成4bit再挂LoRA,7B能做到12-16GB——一张消费级4090/3090就能跑,甚至32G内存的MacBook + llama.cpp都能凑合。
关键差异在哪: 一来是参数量,训练参数从几十亿砍到几千万;二来是量化,从FP16降到NF4,省的是大头。
我的建议很直接:
- 手头只有一张卡,16GB以下: QLoRA,梯度检查点开着,batch size调小点,跑得动
- 有24GB(4090/3090): LoRA随便玩,选更大的基座模型
- 有48GB以上(A6000/双卡): 才能考虑全参微调,但还是建议先从LoRA起步
我踩过最坑的一次:拿全参微调跑7B,optimizer state没算对,爆显存爆得莫名其妙。后来统一用梯度检查点+AdamW 8bit,显存直接掉一半。
单卡用户别碰全参微调这个执念。LoRA调好的效果,很多任务能到全参的95%以上,代价小到不值一提。
事件追踪 · 相关报道
开源权重模型已经足够好:从代码生成聊到本地化部署
3天前
