【发布时间】:2019-04-20 09:53:43
【问题描述】:
我想在我的项目中基于 Pytorch 进行交叉验证。 而且我没有找到pytorch提供的删除当前模型并清空GPU内存的任何方法。你能告诉我该怎么做吗?
【问题讨论】:
-
我需要做同样的事情,因为我想在同一个过程中训练一些模型(一个接一个)。你找到答案了吗?
我想在我的项目中基于 Pytorch 进行交叉验证。 而且我没有找到pytorch提供的删除当前模型并清空GPU内存的任何方法。你能告诉我该怎么做吗?
【问题讨论】:
在 PyTorch 中释放内存的工作方式与普通 Python 垃圾收集器一样。这意味着一旦对 Python-Object 的所有引用都消失了,它将被删除。
您可以使用del 运算符删除引用:
del model
您必须确保没有对相应对象的引用,否则内存将不会被释放。
因此,一旦您删除了对 model 的所有引用,就应该删除它并释放内存。
如果您想了解有关内存管理的更多信息,可以查看此处: https://pytorch.org/docs/stable/notes/cuda.html#cuda-memory-management
【讨论】:
model.cpu() 从 GPU 中删除它们?
model 的引用时,它应该会被自动释放。这与所有其他 Python 变量一样。
model 在 GPU 上:model=model.cpu() 将释放 GPU 内存,如果您不保留对模型的任何其他引用,但 model_cpu=model.cpu() 将保留您的 GPU 模型。
model.cpu() IF 释放 GPU 内存,这是对其 GPU 数据的唯一引用。可能其他人会有与我类似的用例(即:想要保留数据但将其从 GPU 中取出)。顺便说一句,反向传播信息会保留参考吗?