故障排查 / 装不下

微调训练 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、序列长度、激活检查点都直接拉高峰值。

按这个顺序处理

  1. 减小 micro-batch_size,用 gradient_accumulation_steps 补偿回等效大 batch;
  2. 用 4-bit 量化(QLoRA/nf4)+ bitsandbytes 降基座显存;
  3. 降序列长度 seq_len(激活显存随长度显著增长);
  4. 开激活检查点(gradient checkpointing)以时间换显存;
  5. 用 bf16 而非 fp16(fp16 易溢出触发 OOM)

怎么确认解决了

跑通若干 step 且 loss 下降,nvidia-smi 显存占用稳定不一路递增到爆。

来源与可信度

条目性质依据公开事实与社区普遍报告,用本站自己的话重写(未搬运任何他人文章段落)
是否已在本站机器复现否——请把这条当线索而不是结论

相关条目

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 根本塞不进去。

装不下 · 其他条目

CUDA out of memory / ggml: failed to allocate刚装上好好的,聊十几轮就崩或开始忘事参数调到最低还是装不下:权重本身就超容量Ollama 上下文被限 4096 / OLLAMA_CONTEXT_LENGTH 不生效
回到故障排查首页查容量是否本来就不够上传实测数据
这条内容有帮助吗?