【问题标题】:How to free GPU memory for a specific tensor in PyTorch?如何为 PyTorch 中的特定张量释放 GPU 内存?
【发布时间】:2020-03-14 10:52:58
【问题描述】:

我目前正在使用 PyTorch 运行一个深度学习程序,并希望为特定张量释放 GPU 内存。

我想过像deltorch.cuda.empty_cache() 这样的方法,但del 似乎不能正常工作(我什至不确定它是否完全释放内存)和torch.cuda.empty_cache() 似乎释放所有未使用的内存,但我只想为特定的张量释放内存。

PyTorch 中是否有提供此功能的功能?

提前致谢。

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    del 运算符可以工作,但您不会看到使用的 GPU 内存减少,因为内存不会返回到 cuda 设备。这是一种优化技术,从用户的角度来看,内存已被“释放”。也就是说,内存现在可用于生成新张量。


    来源:Pytorch forum

    【讨论】:

    • 有什么办法可以释放内存,同时还给设备?
    【解决方案2】:

    obj = Nonedel obj 都相似,除了 del 将删除引用。

    但是,您需要调用 gc.collect() 来释放 Python 内存,而无需重新启动笔记本。

    如果你想从 PyTorch 缓存中清除 obj,也可以运行:

    torch.cuda.empty_cache()
    

    在最后一个命令 Nvidea smi 或 nvtop 之后会注意到你做了什么。

    【讨论】:

      【解决方案3】:

      PyTorch 会将张量存储在计算图中(如果它是用requires_grad = True 初始化的),以防您稍后想要执行自动微分。如果您不想再使用特定张量进行梯度计算,可以使用detach 方法告诉 PyTorch 它不再需要存储该张量的值来进行梯度计算。这将有助于释放一些内存(仅删除该特定张量而不删除整个计算图)。

      例如 - my_tensor.detach()

      【讨论】:

        猜你喜欢
        • 2022-01-27
        • 2020-11-18
        • 2019-02-11
        • 2017-04-23
        • 2016-01-01
        • 2018-09-04
        • 2022-06-21
        • 2018-09-07
        • 2020-01-16
        相关资源
        最近更新 更多