我只是使用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
答案 0 :(得分:0)
tensorflow的工作方式是在内存(如果需要,则为RAM / GPU内存)中制作图形。因此,删除python对象无济于事,因为它只会清除该python堆栈内存使用的内存,而不是已生成的图形。
仅由代码的 Conv2dLayer()部分(图的一部分)占用的内存,您正在堆栈内存中重新使用它(python列表 rgb_concat )。 ConcatLayer 还将恢复所有已经构建的图形位置,因此将开销降至最低。您的n_sub_layers可能很大,超过了GPU的内存。但是您可以将整个代码粘贴到值上吗?