最近在尝试微调一个7B的基座模型,用的LoRA,但batch size设到2就爆显存了(24G卡)。我看一些教程说可以调gradient accumulation steps,但调了之后loss下降特别慢,也不知道是不是因为我学习率没跟着改。想问问有经验的朋友:你们微调时batch size大概设多少?显存不够是不是只能换更小的基座模型?另外,gradient accumulation steps设到8以上会不会影响模型收敛质量?有点迷茫,谢谢大家!
微调大模型时显存总爆,大家batch size一般设多少?
全部回复
共 165 条24G跑7B LoRA的话batch size设1,gradient accumulation开4到8其实挺稳的,loss降得慢大概率是学习率没调。
24G卡跑7B LoRA batch size设2爆显存挺正常的,我一般设1然后gradient accumulation开到4或8,这样等效batch size也够用。关于收敛慢的问题,你可以试试把学习率稍微调高一点,比如从2e-4提到5e-4,同时warmup steps也加一些,效果会好很多。显存不够不一定要换小模型,用deepspeed stage2或者把lora的r值调小一点也能省不少。accumulation设到8以上我试过,只要学习率调好了收敛质量基本不受影响。
24G卡跑7B LoRA,batch size设1加梯度累积8步就行,loss慢可以试试调高学习率。
24G卡跑7B LoRA batch size设2爆显存挺正常的,我一般是设1然后gradient accumulation堆到4或8,这样实际batch size够大,loss下降慢可以试试把学习率稍微调高一点,比如从2e-4提到5e-4。accumulation steps设到8以上我试过,收敛质量没明显变差,但步子别太大,不然梯度更新太滞后。换小模型倒没必要,7B用LoRA调参空间够用了。
24G卡跑7B LoRA batch size设2确实挺极限的,我一般降到1,然后gradient accumulation设4到8,这样实际batch size还是能到8左右。loss降得慢不一定是accumulation的问题,你也可以试试把学习率稍微调高一点,比如从2e-4提到5e-4。另外显存不够不一定非要换模型,试试用bitsandbytes的4bit量化,能省不少显存。
24G卡跑7B LoRA,batch size设2就爆显存确实挺常见的,我自己的经验是batch size设1,然后靠gradient accumulation撑到等效4-8,这样loss曲线会更平滑一些。你提到accumulation steps设到8以上怕影响收敛,其实只要学习率跟着调低一点,比如从2e-4降到1e-4或5e-5,效果通常不会差太多,反而能稳定梯度。不过我也有个疑问:你用的LoRA rank和target modules是哪些?有时候rank设太高或者选了太多线性层,显存压力会明显增大,我试过把rank从64降到16,batch size就能从1提到2了。另外,loss下降慢不一定是accumulation的问题,检查一下学习率调度器是不是没配合好,或者数据集本身噪声太大。如果实在显存吃紧,换7B以下的模型确实是个选项,但7B用LoRA调好的话,性价比其实挺高的,我建议先优化一下超参数组合。你当前用的学习率具体是多少?方便的话贴出来一起看看。
batch size我一般设1,gradient accumulation堆到16,效果没差多少,可以试试。
24G卡跑7B LoRA,batch size设2就爆显存确实有点怪,是不是seq length设太长了?我一般用8,gradient accumulation设4,loss下降挺稳的。accumulation steps设到8以上其实问题不大,关键是学习率按比例调一下,比如accumulation翻倍就把lr减半,不然梯度更新步数少了容易震荡。另外可以试试deepspeed zero2或者offload优化器,显存能省不少,不一定非要换小模型。
我一般7B模型用LoRA,batch size设1,accumulation调4到8,loss下降慢可以试试把学习率稍微提一点。
24G卡跑7B LoRA batch size设1挺正常的,梯度累积8以上没问题,但得把学习率稍微调高一点。
24G显存跑7B LoRA batch size设2其实挺正常的,我一般也是1或者2起步。gradient accumulation steps我习惯设4到8,配合学习率稍微调低一点(比如从2e-4降到1e-4),loss下降慢不一定是accumulation的问题,更可能是学习率没跟上。设到8以上我试过几回,收敛质量影响不大,就是训练速度会慢一些,但比换小模型划算。你可以先试试把accumulation设到4,学习率降到1e-4,看loss曲线有没有改善。
24G卡跑7B LoRA batch size设2爆显存挺正常的,我一般用1配合gradient accumulation调到4或8,效果还行。梯度累积步数设到8以上收敛慢的话,可以试试把学习率稍微调低一点,比如从2e-4降到1e-4,loss下降会稳一些。换小模型也不是必须的,先调调accumulation和lr组合看看,实在不行再考虑6B或者量化版本。
24G卡跑7B LoRA batch size设2就爆的话,可以试试把gradient accumulation设到4或8,但学习率确实得跟着降一点,比如从2e-4调到1e-4左右,不然loss容易飘。我个人经验是accumulation设到8对收敛影响不大,主要是有效batch size翻倍后要同步调低lr。另外检查下是不是开了太多eval或logging,这些也会吃显存。实在不行换4bit量化,能省不少。
24G卡跑7B LoRA batch size设2爆显存挺正常的,我一般用1加gradient accumulation到4或8,这样显存压力小很多。关于loss下降慢的问题,你可以试试把学习率稍微调高一点,比如从2e-4提到5e-4,梯度累积步数大了之后有效batch size变大,学习率确实得跟着动动。另外换个更小的基座模型确实能解决问题,但7B干不了的事3B也够呛,所以调参才是关键。我试过gradient accumulation设到16,收敛质量没感觉有明显下降,主要还是看数据量和任务复杂度。
24G卡跑7B LoRA,batch size设2爆显存挺正常的,我一般用gradient accumulation到4或者8,loss下降慢确实得同步调学习率,可以试试把lr降到1e-4左右。显存不够的话不一定要换小模型,可以开gradient checkpointing或者用更小的LoRA rank。accumulation steps设到8以上我个人感觉收敛质量还行,就是训练时间会拉长,但总比爆显存强。
刚入门,这个对我帮助很大。
Batch size 2加gradient accumulation 8不算大,但记得把学习率也按比例调高些,不然确实收敛慢。
我24G卡跑7B LoRA batch size也只能设1,靠gradient accumulation攒到16,效果还行。
24G卡跑7B LoRA,batch size设2就爆显存其实挺正常的,我自己的经验是单卡基本也卡在这个数附近。gradient accumulation steps调到8以上确实会影响收敛,尤其是学习率没跟着调的话,loss下降慢是必然的——因为有效batch size变了,lr得相应放大或者用warmup重新调整。我个人习惯把accumulation steps控制在4到8之间,然后lr设到1e-4左右,用cosine schedule跑起来感觉还行。不过说实话,如果你只是做指令微调或者特定任务,换4B或者更小的基座模型反而省心,7B在24G卡上做实验空间太局促了。另外可以试试deepspeed stage 2或者qlora,int4量化能省不少显存,batch size提到4甚至8都有可能。至于收敛质量,只要梯度更新频率别太低(比如accumulation steps超过16),一般影响不大,但loss曲线会平滑一点,需要多观察几个epoch再下结论。你用的什么框架和精度?说不定换个bitsandbytes的配置就能缓解。
我24G卡跑7B LoRA,batch size设1加gradient accumulation 4,loss下降挺稳的。