pytorch 从 gpu 中删除模型
Posted
技术标签:
【中文标题】pytorch 从 gpu 中删除模型【英文标题】:pytorch delete model from gpu 【发布时间】:2019-04-20 09:53:43 【问题描述】:我想在我的项目中基于 Pytorch 进行交叉验证。 而且我没有找到pytorch提供的删除当前模型并清空GPU内存的任何方法。你能告诉我该怎么做吗?
【问题讨论】:
我需要做同样的事情,因为我想在同一个过程中训练一些模型(一个接一个)。你找到答案了吗? 【参考方案1】:在 PyTorch 中释放内存的工作方式与普通 Python 垃圾收集器一样。这意味着一旦对 Python-Object 的所有引用都消失了,它将被删除。
您可以使用del
运算符删除引用:
del model
您必须确保没有对相应对象的引用,否则内存将不会被释放。
因此,一旦您删除了对 model
的所有引用,就应该删除它并释放内存。
如果您想了解有关内存管理的更多信息,可以查看此处: https://pytorch.org/docs/stable/notes/cuda.html#cuda-memory-management
【讨论】:
是否将模型/张量/损失移动到 cpu,例如:model.cpu()
从 GPU 中删除它们?
@drevicko 不是直接的,但是当你删除所有对 GPU model
的引用时,它应该会被自动释放。这与所有其他 Python 变量一样。
hmm.. 好的.. 我觉得这有点奇怪.. 我猜如果你把它发回去,torch 就不必在 GPU 上重新分配它的内存,但如果你想保留它值(例如:在 cpu 上或将它们传递给另一个 GPU)并且在原始 GPU 上不再需要它,您需要一种方法来释放该内存。
@drevicko 你可以看看here:“在CPU内存中返回这个对象的副本。” (如果尚未在 CPU 上)。如上所述:如果你想释放 GPU 上的内存,你需要摆脱所有指向 GPU 对象的引用。然后它将被自动释放。因此,假设model
在 GPU 上:model=model.cpu()
将释放 GPU 内存,如果您不保留对模型的任何其他引用,但 model_cpu=model.cpu()
将保留您的 GPU 模型。
啊,是的。说得通。可能很方便提到您可以使用model.cpu()
IF 释放 GPU 内存,这是对其 GPU 数据的唯一引用。可能其他人会有与我类似的用例(即:想要保留数据但将其从 GPU 中取出)。顺便说一句,反向传播信息会保留参考吗?以上是关于pytorch 从 gpu 中删除模型的主要内容,如果未能解决你的问题,请参考以下文章