我正在图像上训练 CNN 模型。最初,我在大小为
(256, 256)
的图像块上进行训练,一切都很好。然后我更改了数据加载器以加载全高清图像(1080, 1920)
,并在经过一些处理后裁剪图像。在这种情况下,GPU 内存会随着每个批次而不断增加。为什么会出现这种情况?
PS:在跟踪损失时,我正在做
loss.detach().item()
,以便损失不会保留在图表中。
按照建议here,删除输入、输出和损失数据会有所帮助。
此外,我还有字典形式的数据。仅删除字典是不够的。我必须迭代 dict 元素并删除所有元素。
我有一个类似的问题,但它积累得慢得多,经过数百万次迭代后,使用了大量内存(正如你想象的那样很难调试)。我认为这是因为我在开始运行之前运行了
export CUDA_LAUNCH_BLOCKING=1 export TORCH_USE_CUDA_DSA=1
打开调试标志。
对于有此问题的人来说,另一件值得尝试的事情是清除每个时期的内存。
import gc
import torch
gc.collect()
torch.cuda.empty_cache()