Я создаю tf.data.Dataset
внутри цикла for и заметил, что память не освобождалась, как можно было ожидать после каждой итерации.
Есть ли способ запросить у TensorFlow освободить память?
Я пытался использовать tf.reset_default_graph()
, я пытался вызвать del
для соответствующих объектов Python, но это не работает.
Единственное, что, кажется, работает - gc.collect()
.К сожалению, gc.collect
не работает на некоторых более сложных примерах.
Полностью воспроизводимый код:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import psutil
%matplotlib inline
memory_used = []
for i in range(500):
data = tf.data.Dataset.from_tensor_slices(
np.random.uniform(size=(10, 500, 500)))\
.prefetch(64)\
.repeat(-1)\
.batch(3)
data_it = data.make_initializable_iterator()
next_element = data_it.get_next()
with tf.Session() as sess:
sess.run(data_it.initializer)
sess.run(next_element)
memory_used.append(psutil.virtual_memory().used / 2 ** 30)
tf.reset_default_graph()
plt.plot(memory_used)
plt.title('Evolution of memory')
plt.xlabel('iteration')
plt.ylabel('memory used (GB)')