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 中删除模型的主要内容,如果未能解决你的问题,请参考以下文章

将Pytorch模型从CPU转换成GPU

强烈推荐浅谈将Pytorch模型从CPU转换成GPU

PyTorch在GPU上训练模型

PyTorch——Python 优先的深度学习框架|软件推荐

模型finetuning

pytorch - 如何从 DistributedDataParallel 学习中保存和加载模型