最近在试着用LoRA微调Qwen2.5-7B,想让它懂一点我们公司内部的技术文档(大概5000条QA对)。机器是4090 24G,一开始用的QLoRA + 4bit,batch_size=1,梯度累积设了8,结果跑了不到500步显存就满了,直接OOM。我看网上教程说4bit + LoRA应该很省显存啊,是我哪里设置不对吗?另外,我用的transformers + peft,是不是gradient_checkpointing没开导致的?还是说7B模型本身做指令微调就需要更高的显存底线?有没有大佬分享下自己微调7B的显存配置,或者推荐更小一点的模型(比如3B/4B)来试水?感谢!
用LoRA微调Qwen2.5-7B做领域问答,显存只够跑4bit但还是爆了,正常吗?
全部回复
共 29 条gradient_checkpointing没开确实是常见坑,开了能省不少激活值显存。但5000条QA对用8的梯度累积,中间激活还是会堆,试试把累积降到4、学习率相应调一下,或者用bnb的paged optimizer。4090跑7B的QLoRA其实挺极限的,我这边同样配置batch=1、grad_ckpt开、optim用paged_adamw_8bit,勉强能跑但序列长度卡在512以内。真不行就换Qwen2.5-3B先跑通流程,效果不够再上7B。
刚入门,这个对我帮助很大。
gradient_checkpointing没开确实容易爆,7B在24G上跑QLoRA本来就挺紧的。先试试开它,还不行就换3B的模型吧。
gradient_checkpointing没开确实会爆,开了能省不少,还有优化器换paged_adamw_8bit试试。
500步才OOM,说明大概率不是模型加载本身的问题,更像是训练过程中显存碎片或者优化器状态在累积。gradient_checkpointing没开确实是个大坑,开了之后激活值能省不少,但QLoRA下还得记得把use_cache关掉,不然checkpointing基本白开。另外你梯度累积设8,虽然batch_size是1,但每一步的中间激活还是按实际forward算的,如果序列长度拉到2048以上,24G确实会很紧张。我自己的经验是4090上跑7B的QLoRA,seq_len控制在1024、开gradient checkpointing、optim用paged_adamw_8bit,能稳在20G左右。还有个容易被忽略的点是LoRA的target_modules,如果全打在qkv和mlp上,可训练参数多了显存也会涨,试试只挂q_proj和v_proj先跑通。5000条QA对其实不算多,真不行换个3B的模型先验证流程,跑通了再上7B,别一上来就跟显存死磕。
gradient_checkpointing没开的话显存确实会涨不少,先把它打开,再把use_reentrant设成False试试。另外5000条QA对不算少,4bit权重加载后其实还有优化器状态和激活值占大头,优化器换成paged_adamw_8bit会好很多。4090跑7B的QLoRA一般24G是够的,但batch_size=1加梯度累积8,中间激活缓存还是会堆,可以把max_seq_length压到512以内看看。真要稳的话先用Qwen2.5-3B跑通流程,再上7B调参,省得一直跟OOM较劲。
gradient_checkpointing没开基本必爆,另外优化器用paged_adamw_8bit能省不少,5000条QA其实3B也够用了。
5000条QA对用7B做LoRA,其实显存压力比很多人想象中大,尤其你梯度累积开到8,虽然单步batch是1,但反向传播时中间激活还是按累积步数堆的。gradient_checkpointing没开确实是常见坑,开了能省不少,但QLoRA下还得确认prepare_model_for_kbit_training里有没有把输入embedding的梯度也关掉,不然那部分照样吃显存。4090跑7B 4bit LoRA,batch1加checkpointing一般能压到18G左右,但序列长度一长、数据里长文档多,OOM就很正常了。我建议你先用torch.cuda.max_memory_allocated打一下峰值,看是卡在attention还是optimizer状态。另外可以试试把LoRA的target_modules限制在q_proj和v_proj,别全挂,r=8就够了。如果还爆,换Qwen2.5-3B或4B先跑通流程,效果在垂直领域未必差太多,7B的显存底线确实比教程里说的要高。
gradient_checkpointing没开的话确实很吃显存,这个基本是标配了。不过你5000条QA对跑LoRA,4bit下24G其实够的,OOM可能还跟优化器状态和序列长度有关,max_length设了多少?我4090上跑Qwen2.5-7B的LoRA,4bit加checkpointing,batch=1能稳在18G左右。真不行就换Qwen2.5-3B先跑通流程,效果差点但调参快很多。