如何手动从内存中删除张量?

3
我在使用Tensorflow处理内存方面遇到了一些问题。我想在每次迭代这个玩具示例后从我的内存中删除张量。
我正在使用Tensorflow的EagerExecution。我已经尝试使用变量和简单张量。tf.assign不能完成这项工作。越来越多的内存被使用。我猜这是为了能够计算梯度而正常发生的现象。即使我在每次迭代结束时应用一些虚拟优化器,内存也不会被释放(更准确地说,有时会释放,但全局趋势是内存使用量不断增长)。
所以,是否可能手动删除它?
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import numpy as np
import time as ti


tf.enable_eager_execution()

for i in range(150):
    all_subject=tfe.Variable(np.random.rand(200, 500), dtype=tf.float32)
    tf.assign(all_subject, np.random.rand(200,500) )
    ti.sleep(1.0)
    del all_subject
    ti.sleep(0.5)

分配情况如下:

内存概况


不应该在每次迭代中创建一个变量,而是在循环之前创建它一次并在内部重复使用。 - jdehesa
@jdehesa 这在 eager 中应该是可以的。 - P-Gn
1个回答

3
根据急切执行文档,在急切执行期间,状态对象的生命周期由其对应的Python对象的生命周期确定。因此,即使没有显式的del,只需将变量重新分配给其他内容即可释放内存,你不应该在代码中观察到任何内存泄漏。
然而,我观察到与你一样的内存泄漏,这可能是一个(严重的)错误,你可以在这里提交。

同意,删除操作只是为了突出问题。因此,我将会…… - jbayet
1
这个问题解决了吗?还是仍然存在?我目前的代码中没有使用任何 del,但将来可能会使用。 - user10253771

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接