我目前正在使用PyTorch运行深度学习程序,并希望为特定张量释放GPU内存。
我想到过del
和torch.cuda.empty_cache()
之类的方法,但是del
似乎无法正常工作(我什至不确定是否完全释放了内存),并且torch.cuda.empty_cache()
似乎释放了所有未使用的内存,但是我只想为特定的张量释放内存。
PyTorch中是否有提供此功能的功能?
谢谢。
答案 0 :(得分:1)
del
运算符可以工作,但是您不会看到所使用的GPU内存减少,因为该内存没有返回到cuda设备。这是一种优化技术,从用户的角度来看,内存已被“释放”。也就是说,该内存现在可用于制作新的张量。
答案 1 :(得分:0)
obj = None
或del obj
都相似,除了del
将删除引用。
但是,您需要调用gc.collect()
来释放Python内存而无需重新启动笔记本电脑。
如果您想从PyTorch缓存中清除obj,请运行:
torch.cuda.empty_cache()
在执行最后一条命令后,Nvidea smi或nvtop会注意到您的操作。
答案 2 :(得分:0)
PyTorch会将张量存储在计算图中(如果它是用requires_grad = True
初始化的),以备日后执行自动微分时使用。如果您不想再使用特定的张量进行梯度计算,则可以使用detach
方法告诉PyTorch它不再需要存储该张量的值用于梯度计算。这将有助于释放一些内存(仅删除该特定张量而不删除整个计算图)。
例如-my_tensor.detach()