参考(这里面有各种方法):
https://cloud.tencent.com/developer/article/2374407
最近训一个程序,发现训了一半突然 out of memory
了。
正常来说, out of memory
第一个 batch 就应该出现了,而不是训练一半再报错,感觉有些中间变量没有回收的锅。
通常情况下,数据先存在内存上,然后把每个 batch 的数据移到 cuda 上,丢进模型。
移到 cuda 上的数据 input, lables, 还包括一些中间的 loss 和 和 output,都是可以清除的,即 del 掉。
但是会发现一个问题,即使把它 del 掉了,用 nvidia-smi
查看,会发现显存占用还是没变化,这个时候需要
torch.cuda.empty_cache()
来手动让 pytorch 去回收一遍显存,当然由于显存的特性,这样也不一定能保证能够回收干净。
在临时用完了一些很大的临时变量时,就可以这样回收一下。
标签:显存,变量,清除,回收,pytorch,del,cuda From: https://www.cnblogs.com/coldchair/p/18091306