所以我使用 Hydra 1.1来管理我的配置,并在minerl environmenthydra-ax-sweeper==1.1.5
上运行一些超参数优化。为此,我使用多处理(通过 pytorch)将大量数据加载到内存中(加载多处理时峰值约为 50Gb,完全加载后降至 30Gb)。
在正常运行中,这不是问题(我的机器有 90+Gb RAM),一次训练完成没有任何问题。
但是,当我使用-m
选项(和hydra/sweeper: ax
配置)运行相同的代码时,代码在大约 2-3 次清扫器运行后停止,卡在数据加载阶段,因为系统的所有内存(+交换内存)都被占用了。
首先,我认为这是环境代码的一些问题minerl
,它在子进程中启动 java-code。所以我尝试在没有环境的情况下运行我的代码(只有 30Gb 数据),但我仍然遇到同样的问题。所以我怀疑我在 Hydra 清扫器之间有一些内存泄漏。
所以我的问题是,九头蛇扫地机(或斧头扫地机)如何在两次扫地之间工作?我一直有这样的印象,它运行main(cfg: DictConfig)
装饰有@hydra.main(...)
,采用标量返回(分数)并以这个分数运行贝叶斯优化器,main()
调用类似于函数(内部的所有内容都被正确地释放/在每次扫描运行之间收集垃圾)。
不是这样吗?然后我应该将数据加载到外部某处main()
并在扫描之间保存吗?
非常感谢您!