【问题标题】:Optuna - Memory IssuesOptuna - 内存问题
【发布时间】:2020-11-03 16:38:22
【问题描述】:

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

【问题讨论】:

    标签: memory-leaks optuna


    【解决方案1】:

    我在使用 pytorch 时遇到了类似的问题。按照 optuna docs 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 包,但您可能需要更新相应的包以防上述行不起作用。

    【讨论】:

      【解决方案2】:

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

      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()])```
      

      基于此issue的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        • 2010-09-22
        • 2014-12-19
        • 2021-10-06
        • 2015-05-03
        • 2012-07-22
        • 2016-03-25
        相关资源
        最近更新 更多