最近论坛后台收到的私信,一半都在问显存。大家最关心的问题:手里只有一张 3090 (24G),想给 DeepSeek-7B 做垂直领域微调,到底能不能跑起来?
结论先甩出来:能跑,但仅限于 LoRA 或 QLoRA。全参数微调(Full Fine-tuning)想都别想,那是 A100/H100 集群的事。
为了让大家不白花算力费,我把不同模式下的显存占用直接列出来,大家对号入座:
1. 全参数微调:显存碎钞机
DeepSeek-7B 的权重本身占用约 14GB。但微调时你要存梯度(Gradients)和优化器状态(Optimizer States)。
-
显存要求: 至少需要 140GB - 160GB。
-
单卡 3090 现状: 必炸。哪怕你有两张 3090 做分布式,显存依旧不够看。
2. LoRA 微调(目前主流选型)
LoRA 只训练极少量的增量参数(通常 Rank 设为 8 或 16)。
-
显存要求: 训练阶段约占用 18GB - 22GB。
-
单卡 3090 现状: “刚刚好”。如果你不跑长文本(上下文保持在 2k-4k 以内),Batch Size 设为 1,刚好能跑通。但如果你后台开着网页、显卡还接着显示器,极大概率在计算梯度时 OOM(显存溢出)。
3. QLoRA 微调(平民战神)
通过 4-bit 量化加载基座模型,极大压低显存占用。
-
显存要求: 训练阶段约占用 10GB - 12GB。
-
单卡 3090 现状: “非常宽裕”。你可以把 Batch Size 调大一点,或者把 Context Length(上下文长度)拉到 8k 以上,甚至能余出显存来做多轮对话验证。
几个让 3090 更“稳”的避坑细节:
-
梯度累加(Gradient Accumulation): 如果显存不够把 Batch Size 设大,就设为 1,然后用梯度累加步数(比如设为 4)来模拟大 Batch 的效果。这对 3090 玩家是刚需。
-
Unsloth 库: 墙裂推荐用 Unsloth 框架。实测在微调 DeepSeek-7B 时,它能比原生 Transformer 节省近 40% 的显存,且速度快两倍。
-
Flash Attention 2: 务必开启。不光是快,更关键的是它能把注意力机制的显存占用从 O(L²)降到 O(L),对长文本微调至关重要。
总结一下: 如果你只有一张 3090,QLoRA 是最稳的选择,LoRA 可以挑战但需要精细调优。别去折腾全参数,那是算力租赁平台的生意。