创建模型后在 python 循环中清理内存
Clear up memory in python loop after creating a model
我是 运行 python 中的一个 for 循环,其中每个循环都需要根据不同的数据创建模型(摘录如下所示)。每次创建的模型都不会从内存中删除,导致每次循环变慢。
import gc
for s in range(0, 5):
X, Y = get_data()
m = make_dgp_model(X, Y, Z_100, L)
del m
gc.collect()
print('memory: {}'.format(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1000000))
给出输出:
memory: 460.025856
memory: 470.310912
memory: 486.764544
memory: 493.457408
memory: 499.523584
我知道 python 对其内存使用指针引用,并且在重用变量时它不会重写内存中的内容。出于这个原因,我尝试了 del m 然后使用垃圾收集器。这似乎不起作用。难道我做错了什么?有没有一种方法可以在循环完成后完全删除 m
中存储的内容?
我解决这个问题的方法是添加以下内容以便在每个循环中重置图形。
tf.reset_default_graph()
graph = tf.get_default_graph()
gpflow.reset_default_session(graph=graph)
如 this github 问题所示(见最后一条评论)。
GPflow 的自述文件页面有一个 link 漂亮的 提示和技巧 笔记本。您可以在第一个项目中找到您的问题的答案:)
https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/tips_and_tricks.ipynb
我是 运行 python 中的一个 for 循环,其中每个循环都需要根据不同的数据创建模型(摘录如下所示)。每次创建的模型都不会从内存中删除,导致每次循环变慢。
import gc
for s in range(0, 5):
X, Y = get_data()
m = make_dgp_model(X, Y, Z_100, L)
del m
gc.collect()
print('memory: {}'.format(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1000000))
给出输出:
memory: 460.025856
memory: 470.310912
memory: 486.764544
memory: 493.457408
memory: 499.523584
我知道 python 对其内存使用指针引用,并且在重用变量时它不会重写内存中的内容。出于这个原因,我尝试了 del m 然后使用垃圾收集器。这似乎不起作用。难道我做错了什么?有没有一种方法可以在循环完成后完全删除 m
中存储的内容?
我解决这个问题的方法是添加以下内容以便在每个循环中重置图形。
tf.reset_default_graph()
graph = tf.get_default_graph()
gpflow.reset_default_session(graph=graph)
如 this github 问题所示(见最后一条评论)。
GPflow 的自述文件页面有一个 link 漂亮的 提示和技巧 笔记本。您可以在第一个项目中找到您的问题的答案:)
https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/tips_and_tricks.ipynb