深度学习测试时显存爆炸

请问我单卡,训练的时候显存都没有炸,测试的时候torch.load就显示THCudaCheck FAIL file=/pytorch/aten/src/THC/THCCachingHostAllocator.cpp line=278 error=2 : out of memory,最后又报错RuntimeError: CUDA error: out of memory,测试代码也加了with torch.no_grad():。

img

您好,这种情况通常是由于测试时模型参数或输入数据过大,导致显存不足,可以考虑以下几种解决方案:

减少batch size或缩小输入图像的尺寸,以降低显存占用。

将测试数据分批次处理,以降低显存占用。

检查是否有未释放的显存,可以在代码中添加torch.cuda.empty_cache()命令来释放显存。

尝试减小模型的大小,比如减小网络深度、减少卷积核数量等。

如果您有多张显卡,可以尝试使用多卡并行来提高显存利用率。

另外,可以使用nvidia-smi命令来监控显存使用情况,查看哪些进程占用了显存过多。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    针对该问题,可以采取以下解决方案:

    1. 减少batch_size,可以迭代一定次数后再更新参数来保证训练效果;
    2. 在测试代码中使用with torch.no_grad()来减少分配参数梯度的空间;
    3. 在训练前使用torch.cuda.empty_cache()释放CUDA内存;
    4. 检查是否有其他python应用占用了CUDA内存,如果有可以使用killall python将其杀死;
    5. 分批次加载数据集,可以使用SubsetRandomSampler函数;
    6. 在Dataloader中的pin_memory=True来加快主机到设备的传输速度;
    7. 考虑使用降精度训练或混合精度训练来减少显存占用;
    8. 使用负载均衡的方式来避免GPU负载不均衡问题;

    具体可以根据情况选择合适的解决方案,综合多种方法来优化该问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^