1

我正在尝试在 Optuna 优化运行之间释放内存。我正在使用 python 3.8 和最新版本的 Optuna。发生的情况是我运行命令:optuna.create_study(),然后我在循环中调用 optuna.optimize(...),每次都有一个新的目标函数。当我监视我的内存使用情况时,每次调用命令 optuna.create_study() 时,内存使用量都会不断增加,以至于我的处理器最终会杀死程序。只是为了更清晰的画面,第一次运行会占用 3% 以上的内存,最终会增加到 >80%。关于如何在连续调用 create_study() 之间从内存中删除研究的任何想法?

4

2 回答 2

0

我在使用 pytorch 时遇到了类似的问题。按照 optuna 文档https://optuna.readthedocs.io/en/stable/faq.html#how-do-i-avoid-running-out-of-memory-oom-when-optimizing-studies,我尝试了这个解决方案:

study.optimize(objective, n_trials=n_trials, gc_after_trial=True)

这应该类似于

import gc

study.optimize(objective, n_trials=n_trials, callbacks=[lambda study, trial: gc.collect()])

但是,它们都不适合我。我可以修复它的唯一方法是将 pytorch 版本升级到最新版本。我不知道您是否正在使用 pytorch 或其他 ML 包,但您可能需要更新相应的包以防上述行不起作用。

于 2021-05-14T14:25:23.027 回答
0

我在运行我的试用版时遇到了类似的问题(尽管我没有循环多次优化)。创建一个在每个时期结束时释放垃圾的回调解决了我的问题,并且可能已经帮助你释放了相当多的空间。尝试以下操作:

import tensorflow as tf
import gc

class MyCustomCallback(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs=None):
    gc.collect()
...
_ = model.fit(x_train, y_train, ...
          callbacks=[MyCustomCallback()])```

基于这个问题的解决方案。

于 2022-03-04T11:11:51.680 回答