为什么即使使用TensorFlow中的delete命令,CNN模型仍会超出GPU内存?

时间:2019-05-09 15:56:24

标签: python tensorflow

我只是使用TensorFlow来实现CNN模型。在训练过程中,有一个中间变量占用了很大的GPU内存,我想清除该变量的内存。

此变量称为“ rgb_concat”,我只是尝试使用“ del rgb_concat”,但该模型仍然超出了GPU内存。我不确定使用'del'命令是否可以释放GPU内存?请问是否需要将其他命令与“ del”组合使用以释放此“ rgb_concat”的GPU内存?

非常感谢!

一个名为“ rgb_concat”的中间变量,它占用较大的GPU内存,我想清除它,并将GPU内存保存给CNN模型中的其他层。似乎只有使用'del'命令才能释放内存,我不确定它是否有效以及如何释放内存。

x = input_image
for j in range(n_sub_layers):
    nn = Conv2dLayer(x, j)     #
    rgb_concat.append(nn)
    x = nn
rgb_concat_sublayer = ConcatLayer([rgb_concat[0], rgb_concat[1]], 
concat_dim=3, name='rgb_concat_sublayer_{}_{}'.format(i,1))
for sub_layer in range(2, n_sub_layers): #Second 'for' loop!!!
    rgb_concat_sublayer = ConcatLayer([rgb_concat_sublayer, 
    rgb_concat[sub_layer]], concat_dim=3, 
    name='rgb_concat_sublayer_{}_{}'.format(i,sub_layer))
del rgb_concat #try to use 'del' to delete variable 'rgb_concat' after the second 'for' loop

1 个答案:

答案 0 :(得分:0)

tensorflow的工作方式是在内存(如果需要,则为RAM / GPU内存)中制作图形。因此,删除python对象无济于事,因为它只会清除该python堆栈内存使用的内存,而不是已生成的图形。

仅由代码的 Conv2dLayer()部分(图的一部分)占用的内存,您正在堆栈内存中重新使用它(python列表 rgb_concat )。 ConcatLayer 还将恢复所有已经构建的图形位置,因此将开销降至最低。您的n_sub_layers可能很大,超过了GPU的内存。但是您可以将整个代码粘贴到值上吗?