python - 如何在 PyTorch 模型训练后清除 GPU 内存而不重新启动内核

标签 python pytorch jupyter

我正在 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/

相关文章:

Python将colorsys RGB坐标转换为十六进制

python - 在python中按两个值对字典列表进行分组

numpy - Pytorch 类型错误 : eq() received an invalid combination of arguments

python-2.7 - 在 jupyter 中导入 unicodecsv 失败

python - 如何使用 pandas 返回前 10 个频繁列值?

python - 在 Odoo 8 中更新上下文

python - Pytorch 几何稀疏邻接矩阵到边索引张量

python - 没有名为 "Torch"的模块

python - 当tkinter中的输入框超过窗口高度时,如何添加滚动条?

python - 在 Jupyter 笔记本中使用 PySpark 时如何包含外部 Spark 库