为何Torch在eval模式下内存占用过高?大图像推理内存溢出疑问
问题解答
是的,即便开启model.eval()并用torch.no_grad()关闭反向传播,模型前向运行时依然需要为中间层的输出张量分配内存,这大概率就是你遇到内存不足的核心原因。
具体到你的场景:
- 输入张量仅占约13GB,但模型前向传播过程中,每一层的输出(比如卷积层生成的特征图、池化层结果等)都会暂时占用内存,直到整个前向计算流程结束。如果模型结构较深、中间层特征图尺寸不小,这些中间张量的总内存占用会远远超过输入本身的大小。
- 你设置的batch size为12000,这个规模会把所有中间层的内存需求直接放大12000倍,最终导致总内存需求突破212GB,超过了你机器164GB的内存上限。
可以尝试的优化方案:
- 进一步拆分batch size,把12000分成更小的批次分批处理,每完成一批计算就释放对应中间张量的内存,再处理下一批
- 检查模型结构,移除冗余层,或者用更轻量化的结构替换原有模块
- 在模型的前向传播代码中,手动删除不再需要的中间张量(使用
del关键字,随后调用gc.collect()触发垃圾回收)
内容的提问来源于stack exchange,提问作者Mastiff
相关产品推荐
相关产品推荐

