内存相关事项:

多进程模式下,各进程对 Dataset 初始化中得到的数据,采用共享内存而非各自拷贝的方法

该方案是较为高效的解决方案,但同时可能会导致内存泄漏(内存泄漏来源于共享内存)

内存泄漏:算法大赛泄漏场景/其余常见泄漏常见

算法大赛泄漏场景:训练轮内基本不增长,轮之间增长明显,但不会导致 OOM

对象引用泄漏:多 worker 对共享内存的引用导致引用数改变,引起写时复制,会导致 OOM

对象引用泄漏:https://zhuanlan.zhihu.com/p/80689571

补注:

1.第一个场景截至目前暂未成功复现,但推测其原因类似写时复制(worker 创建、消耗时的引用)

仍待以下实验:

待数据集公开后,复现上述问题(小规模内存似乎会被自动回收,暂时没法复现该问题),记录原因

保持 worker 存活,即可验证是否如猜想所料

禁止多进程,判断是否来源于共享内存的写时复制

逐行审阅、验证代码,确定内存泄漏的来源,并记录和思考原因

2.内存泄漏往往来源于引用数、写时复制,这三个场景均和内存底层管理策略存在一定的关联

但对象引用泄漏的理解总体比较浅薄,仍有待继续审阅相关代码、记录相关实验和机理

审阅、复现该问题,并尝试解决该问题

记录相关解决方案,收集更多类似的内存泄漏问题,总结经验