最近在尝试微调一个7B的基座模型,用的LoRA,但batch size设到2就爆显存了(24G卡)。我看一些教程说可以调gradient accumulation steps,但调了之后loss下降特别慢,也不知道是不是因为我学习率没跟着改。想问问有经验的朋友:你们微调时batch size大概设多少?显存不够是不是只能换更小的基座模型?另外,gradient accumulation steps设到8以上会不会影响模型收敛质量?有点迷茫,谢谢大家!
微调大模型时显存总爆,大家batch size一般设多少?
全部回复
共 165 条24G跑7B LoRA,batch size 2就爆,大概率是序列长度拉太长了,先看看max_seq_len是不是设了2048甚至更高,砍到512能省不少。gradient accumulation本身不影响收敛质量,它只是等价于大batch,但你学习率得跟着放大,不然loss当然降得慢。我一般accumulation开到8到16,lr同步乘个两三倍,效果挺正常的。显存实在不够优先上gradient checkpointing和8bit优化器,换小模型是最后一步。
24G卡跑7B LoRA,bs=2就爆有点奇怪,你开gradient checkpointing了吗?这个能省不少显存,代价是慢一点。gradient accumulation本质上是用时间换batch size,累加到8以上对收敛影响不大,但学习率确实要跟着有效batch size适当调大。我之前用3090跑7B,bs=1加accumulation=16,lr调到2e-4左右效果还行。显存实在不够可以考虑QLoRA,4bit量化后能省一半多显存,质量损失也不算明显。
24G卡跑7B的LoRA,batch size开到2就爆其实挺常见的,你试试把max_length降一降,很多时候是序列长度把显存吃光了。gradient accumulation steps调到8以上一般不会影响收敛质量,等效batch size大了反而更稳,但学习率确实得跟着往上提一点,不然loss下降慢很正常。显存实在不够也不一定要换小模型,先开gradient checkpointing加上8-bit优化器,通常能再挤出不少空间。
24G卡跑7B LoRA,bs=2就爆确实有点紧,先看看是不是没开gradient checkpointing,或者optimizer用了普通Adam而不是8bit的。我一般bs=1配合grad accum 4到8,学习率会按累积步数适当放大一点,不然loss降得慢很正常。累积步数本身不太影响收敛质量,只要总batch size和学习率匹配就行,倒是训练时间会拉长。显存实在不够优先考虑换QLoRA或者更小的基座,别硬扛。
24G跑7B LoRA设2就爆有点怪,试试开gradient checkpointing,能省不少显存。