故障排查 / 装不下
微调训练 CUDA out of memory(QLoRA/LoRA 显存爆)
本站未复现 改写 影响:TRL / PEFT / Unsloth 取决于库版本 · Windows / Linux
报错原文
CUDA out of memory; Tried to allocate... (previous allocation for ...)
这段字符串可以直接粘到 站内搜索 或外部搜索引擎里找。
现象
权重本身不大,用 LoRA/QLoRA 微调跑几个 step 就 OOM。
原因
训练峰值显存远高于推理:除基座权重外,还要存激活值、梯度和优化器状态。batch_size、gradient_accumulation、序列长度、激活检查点都直接拉高峰值。
按这个顺序处理
- 减小 micro-batch_size,用 gradient_accumulation_steps 补偿回等效大 batch;
- 用 4-bit 量化(QLoRA/nf4)+ bitsandbytes 降基座显存;
- 降序列长度 seq_len(激活显存随长度显著增长);
- 开激活检查点(gradient checkpointing)以时间换显存;
- 用 bf16 而非 fp16(fp16 易溢出触发 OOM)
怎么确认解决了
跑通若干 step 且 loss 下降,nvidia-smi 显存占用稳定不一路递增到爆。
来源与可信度
条目性质依据公开事实与社区普遍报告,用本站自己的话重写(未搬运任何他人文章段落)
是否已在本站机器复现否——请把这条当线索而不是结论
- https://unsloth.ai/docs/get-started/fine-tuning-llms-guide/lora-hyperparameters-guide — Unsloth 官方:避免 OOM 优先减小 batch_size、用 gradient_accumulation 补足,对应条目前两条
- https://huggingface.co/docs/trl/en/reducing_memory_usage — HF TRL 官方:LoRA/PEFT 等降显存手段一览,对应'量化+PEFT'处置
- https://discuss.huggingface.co/t/inquiry-regarding-out-of-memory-issue-during-lora-fine-tuning/153432 — HF 社区:LoRA 训练 OOM 时降 gradient_accumulation 与序列长度,对应条目处置
- https://github.com/unslothai/unsloth/issues/4504 — issue:4-bit QLoRA 仍显存不足的实际报告,对应'4bit 也需算清峰值'
相关条目
CUDA out of memory / ggml: failed to allocate装不下 · 加载模型时报显存不足,或者加载成功但第一次生成时崩;nvidia-smi 显示显存已经顶到接近总量。『小模型跑 Q8、大模型跑 Q4、再大跑 Q3』这个说法对不对?方向对,但要按显存档位落地。4B–9B 跑 Q8 确实合适;12B–14B 在 16G 上 Q8 会把上下文挤光,Q6_K 才是甜点;27B+ 在 16G 上 Q4 根本塞不进去。