最近在调一个图像分割的模型,训练倒是正常,但到了验证阶段每次加载权重后一跑前向就OOM。我用的是PyTorch 2.0,显卡是4090 24G,batch size已经降到1了,输入图片也resize到256x256。诡异的是,训练时同样的batch size和分辨率都没事,就验证的时候爆。我怀疑是不是我用了torch.no_grad()但忘记把模型切到eval()模式,导致BN层还在更新?还是说DataLoader的pin_memory=True在验证时反而占用更多显存?另外,我加载的是保存的完整checkpoint(包含optimizer状态),会不会是optimizer的动量缓冲也占了一部分显存?有遇到过类似情况的朋友吗?求指点一下排查思路。
楼主
2026-08-28
PyTorch模型加载到一半显存爆了,是不是我数据预处理有毛病?
请 登录 后发表回复
全部回复
共 22 条
2楼
23天前
验证时不更新BN也会占显存,试试torch.inference_mode(),比no_grad更省。
3楼
22天前
验证阶段爆显存跟数据预处理关系不大,pin_memory那点开销也不至于。你提到的eval模式确实要检查,BN在train模式下会存batch统计量,验证时还占着计算图就麻烦了。不过更可疑的是你加载了完整checkpoint,optimizer状态里动量缓冲会额外占一份模型大小的显存,验证时根本用不上,建议只load模型权重试试。另外检查下验证循环里有没有不小心把loss或输出累加进list没释放,这个坑挺常见的。