#6777·optuna

在长期研究中,TPESampler RSS 随试次数的增长是无限的(对 #3050 的跟进)

作者: aquaresima创建于 2026年7月28日更新于 2026年8月30日

跟进 #3050。 该问题已被关闭,作为一个通用的“内存随着 `n_trials` 的增长”报告,没有确认原因是 `TPESampler` 本身,而非用户的目标函数。我们将其与任何目标函数成本分离重现了该问题。 **重现**: `TPESampler(multivariate=True, constant_liar=True)`, ~36 个参数的搜索空间, `JournalStorage`, 多个并行工作程序。用一个简单的 `return random.random()` 代替真实的目标函数仍然会产生与试验次数相近线性的 RSS 增长,在足够多的试验累积后会出现内存溢出。`gc_after_trial=True` 会减慢但不会阻止它 — 保留的历史记录被引用,而不是垃圾。这表明 `TPESampler` 在内存中保留了完整的试验历史记录,以便在每次采样调用时重新拟合其 KDE 模型,没有对研究长度的限制。 **是否有支持的方法来限制此问题?** — 例如,窗口化到最近的 N 个试验进行 KDE 拟合,或定期旋转采样器状态 — 除了重新启动研究并使用新的采样器之外。我很乐意分享最小的重现脚本。