最近在尝试用DeepSpeed微调一个7B的LLM,显卡是两张3090(24G)。参考了几个开源项目的配置,把ZeRO Stage调到了2,offload_optimizer也开了,但跑起来大概十几个step之后就报CUDA OOM。
我看nvidia-smi,显存占用并没有满,但就是报错。后来试了把train_batch_size降到1,gradient_accumulation设成8,还是不行。
有点迷茫:是ZeRO的partition策略没生效,还是我的模型本身太大,两张卡真的带不动?
或者是不是我漏了offload_param?看网上有人说Stage 2要配合offload_param才能稳,但那样速度会不会太慢?
求有经验的老哥指点一下,这种配置到底该怎么调,或者说7B微调最低需要多少显存?谢谢!
楼主
2026-08-06
用DeepSpeed微调7B模型总是OOM,是ZeRO配置问题还是我显存真不够?
请 登录 后发表回复
全部回复
共 104 条
2楼
25天前
试试加offload_param,Stage 2下不offload参数显存还是吃紧。
3楼
24天前
两张3090跑7B微调,Stage 2加上optimizer offload理论上是够的,但关键得看你的CPU内存扛不扛得住offload的量,内存不够也会间接导致OOM。nvidia-smi没满却报错,很可能是碎片化或者峰值瞬时占用,试试设个max_split_size_mb或者开expandable_segments。offload_param在Stage 2下不是必须的,但如果你序列长度比较长,激活值那块开销也不小,可以考虑配合gradient checkpointing。另外确认下partition有没有真的生效,有时候config写对了但实际没切分,日志里能看出来。
4楼
21天前
两张3090跑7B微调,Stage 2加offload_optimizer理论上够用,但十几步才OOM很像是激活值或者碎片累积炸的。试试把offload_param也开到CPU,再配合activation checkpointing,显存能松不少。另外nvidia-smi没满不代表没超,PyTorch的缓存分配器会预留,看torch.cuda.max_memory_allocated更准。还不行就上Stage 3,虽然慢点但partition更彻底。
5楼
19天前
Stage2开offload_optimizer还不够,试试把offload_param也打开,3090显存确实吃紧。