要释放内存,我想知道是否可以在模型的正向方法中删除中间张量。这是一个最小化的示例场景:
def forward(self, input):
x1, x2 = input
x1 = some_layers(x1)
x2 = some_layers(x2)
x_conc = torch.cat((x1,x2),dim=1)
x_conc = some_layers(x_conc)
return x_conc
基本上,模型使两个张量通过两个单独的块,然后将结果连接起来。进一步的操作应用于该级联张量。创建x_conc后运行del x1
和del x2
会影响计算图吗?
答案 0 :(得分:2)
如果以后要执行自动微分,PyTorch会将x1, x2
张量存储在计算图中。另外,请注意,使用del
运算符删除张量是可行的,但不会看到GPU内存减少。为什么?因为内存已释放但没有返回到设备。这是一种优化技术,从用户的角度来看,内存已“释放”。也就是说,该内存现在可用于制作新的张量。
因此,不建议删除张量以释放GPU内存。