Tensorboard启动时面对大量文件存在内存升高问题

Tensorboard OOM隐患

Tensorboard启动时面对大量文件时存在内存过高问题,在启动之后tensorboard是可以正常启动查看的,但是很多人没有发现,tensorboard的内存占用会慢慢增加。

tb
其实这个增长有快有慢。当logdir下的文件越多,内存升高越快。这到底是与文件总大小有关,还是跟个数有关。我们分别进行试验。

1.初始实验

root@web-tb-v1-679948455-x96hd:/tmp/data/test# cd
events.out.tfevents.1592482650.test-tb-v1-6bb74f84db-gphg2.591.0  n01632777/                                                        n01675722/
n01608432/                                                        n01644373/                                                        n01677366/
n01614925/                                                        n01644900/                                                        n01685808/
n01616318/                                                        n01664065/                                                        n01687978/
n01629819/                                                        n01665541/                                                        n01688243/
n01630670/                                                        n01667114/                                                        n01689811/
n01631663/                                                        n01667778/                                                        
n01632458/                                                        n01669191/  

当下文件夹每个约有一千个数kb的文件。再次启动tensorboard。

当下文件数目比左图要高,内存占用增长速度明显比之前快一点。
tb3
我们将所有文件夹打包成tar,那么就造成总容量不变但是总文件数变小了。

root@web-tb-v1-679948455-x96hd:/tmp/data/test# ls
events.out.tfevents.1592482650.test-tb-v1-6bb74f84db-gphg2.591.0  test10.tar  test12.tar  test14.tar  test16.tar  test18.tar  test2.tar   test21.tar  test4.tar  test6.tar  test8.tar
test1.tar                                                         test11.tar  test13.tar  test15.tar  test17.tar  test19.tar  test20.tar  test3.tar   test5.tar  test7.tar  test9.tar

tb3
显然这次初始占用的内存要比之前,零散的大,但是内存增长速度降低了。我们获得结论一,内存增长率跟logdir下数目大小成正比,初始占用内存率与单个文件大小成正比。

2.提出最后一个假设

是否等存在之前零散文件夹环境下,等待内存上升也能实现700mb内存的终点然后稳定。

将所有的压缩包解压,任tensorboard运行。tb4
实际上,任其运行当下的内存占用已经超过之前稳定时候需要占用的内存。也就得到 结论二:尽管数目小的大文件在初始时候会占用比较大的内存,但是之后内存占用会相对稳定,若是离散文件居多,则会引发内存快速增长。

tb5
OOM了

3.总结

根据结论:

  1. 内存增长率跟logdir下数目大小成正比,初始占用内存率与单个文件大小成正比。
  2. 尽管数目小的大文件在初始时候会占用比较大的内存,但是之后内存占用会相对稳定,若是离散文件居多,则会引发内存快速增长。

4. 原因分析与建议

经过查看代码,我怀疑是以下代码段引发的:

# tensorboard/backend/event_processing/directory_watcher.py
def _GetNextPath(self):
        """Gets the next path to load from.

        This function also does the checking for out-of-order writes as it iterates
        through the paths.

        Returns:
          The next path to load events from, or None if there are no more paths.
        """
        paths = sorted(
            path
            for path in io_wrapper.ListDirectoryAbsolute(self._directory)
            if self._path_filter(path)
        )
       
        ......

        next_paths = list(
            path for path in paths if self._path is None or path > self._path
        )
        if next_paths:
            return min(next_paths)
        else:
            return None

尽管拥有_path_filter筛选evnet格式文件(通过命名格式),但是打开文件时还是存在泄露,这个开源社区也有相关issues。建议尽量在干净且文件总数较小的目录启动tensorboard。

有任何问题可以直接留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值