PyTorch下RTX2060 6G运行gpt2-large报CUDA out of memory求助
错误原因判定
这个报错是GPU显存不足导致的,和系统内存无关。
报错信息明确标注为CUDA运行时错误,同时给出了GPU显存的实时状态:你所用的RTX 2060总显存为6GiB,当前PyTorch已经预留了4.57GiB显存,其中已分配使用3.91GiB,剩余可用空间为0,连12MiB的小内存块都无法分配。而你的系统内存峰值仅为9GB,远低于16GB的总容量,不存在系统内存不足的问题。
你当前场景下显存占用超标的核心原因是:GPT2-Large的FP32精度权重本身就占3.25GiB左右,再叠加推理时的注意力缓存、beam search的多副本开销(你设置了num_beams=5,每个beam都要单独占用显存)、500长度的生成序列缓存,6GiB显存自然不够用。
可落地的优化方案
如果你必须用GPU运行,可按优先级尝试以下调整:
- 半精度加载模型
把模型加载代码修改为如下,用FP16半精度加载,可直接将模型本身的显存占用砍半,且几乎不影响生成质量,还能提升推理速度:model = GPT2LMHeadModel.from_pretrained('gpt2-large' , pad_token_id = tokenizer.eos_token_id, torch_dtype=torch.float16) - 调低生成参数的显存开销
- 把
num_beams从5调低到2,或者直接删除该参数用默认的贪心搜索(beam数为1),beam search的显存占用和beam数成正比,调低后能节省大量显存 - 如无必要,把
max_length从500调低到200或更低,生成序列越长,注意力缓存占用的显存越高
- 把
- 启用低显存生成选项
调用model.generate时添加low_memory=True参数(需transformers版本≥4.28),可进一步优化生成过程的显存分配逻辑 - 更换小尺寸模型
如果以上调整还是不够,把gpt2-large替换为gpt2-medium或基础版gpt2,基础版gpt2的FP32权重仅500MB左右,6G显存可轻松运行。
内容的提问来源于stack exchange,提问作者Medo Zeus
相关产品推荐
相关产品推荐

