我正在 Jupyter-Lab 笔记本上训练 PyTorch 深度学习模型,在 Tesla K80 GPU 上使用 CUDA 进行训练。在进行训练迭代时,会使用 12 GB GPU 内存。我通过保存模型检查点完成训练,但想继续使用笔记本进行进一步分析(分析中间结果等)。
但是,在完成训练后,这 12 GB 继续被占用(从 nvtop
可以看出)。我想释放此内存,以便我可以将其用于其他笔记本。
到目前为止,我的解决方案是重新启动此笔记本的内核,但这并不能解决我的问题,因为我无法继续使用相同的笔记本及其迄今为止计算的相应输出。
最佳答案
到目前为止,Cuda 方面的答案是正确的,但 ipython 方面也存在问题。
当您在笔记本环境中出现错误时,ipython shell 会存储异常的回溯,以便您可以使用 %debug
访问错误状态。问题是,这需要将导致错误的所有变量保存在内存中,并且它们不会被 gc.collect()
等方法回收。基本上所有变量都会卡住并且内存泄漏。
通常,引发新异常将释放旧异常的状态。因此尝试像 1/0
这样的东西可能会有所帮助。然而,Cuda 变量的情况可能会变得很奇怪,有时在不重新启动内核的情况下无法清除 GPU 内存。
有关更多详细信息,请参阅以下引用资料:
https://github.com/ipython/ipython/pull/11572
How to save traceback / sys.exc_info() values in a variable?
关于python - 如何在 PyTorch 模型训练后清除 GPU 内存而不重新启动内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858433/