Tensorboard OOM隐患

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


其实这个增长有快有慢。当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。

当下文件数目比左图要高,内存占用增长速度明显比之前快一点。

我们将所有文件夹打包成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


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

2.提出最后一个假设

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

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


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 iteratesthrough the paths.Returns:The next path to load events from, or None if there are no more paths."""paths = sorted(pathfor 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。

有任何问题可以直接留言

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

  1. oracle查询数据库启动时的参数文件,【Oracle】数据库启动阶段参数文件、控制文件的问题处理...

    Oracle启动分三个阶段: nomount: 首先查找参数文件(pfile/spfile),根据文件创建实例.Nomount的过程是启动数据库实例的过程. 没有参数文件无法nomount mount ...

  2. qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码

    提要 程序编号后自己模拟的数据程序在生成和解析json时都正常,但是换了一组数据,生成的json文件中部分中文乱码,且出现json文件的格式被混乱的现象. 效果 上述出现的不正确的json文件,如下: ...

  3. vue 修改文件怎么启动_Jupyter Notebook如何修改启动时的默认文件路径(Windows系统)...

    打开Anaconda Prompt 输入命令jupyter notebook --generate-config,此命令会在C:Users你的用户名.jupyter文件夹下生成一个jupyter_no ...

  4. Linux环境中ElasticSearch启动时常见错误、解决

    ● ES启动常见报错及解决措施 说明    文章基于ElasicSearch版本:7.3.2,Linux版本:CentOS-7.7.供其他版本参考. 启动报错  报错1-- [xpack.ml.ena ...

  5. RocketMQ源码(4)—Broker启动加载消息文件以及恢复数据源码【一万字】

    详细介绍了Broker启动加载消息文件以及恢复数据源码. 此前我们学习了Broker的启动源码:RocketMQ源码(3)-Broker启动流程源码解析[一万字],Broker的启动过程中,在Defa ...

  6. img文件制作linux启动u盘,如何在Linux系统中制作可启动img/iso镜像文件

    img/iso文件是镜像文件,在Linux系统操作中有时需要制作镜像文件,那么制作镜像文件的方法有哪些呢?下面小编就给大家介绍下如何下Linux下制作可启动img/iso文件. 制作镜像文件有三种方法 ...

  7. linux系统做成iso镜像文件,如何在Linux系统中制作可启动img/iso镜像文件

    img/iso文件是镜像文件,在Linux系统操作中有时需要制作镜像文件,那么制作镜像文件的方法有哪些呢?下面小编就给大家介绍下如何下Linux下制作可启动img/iso文件. 制作镜像文件有三种方法 ...

  8. mac在启动时出现问号如何解决

    Mac在启动时出现问号文件夹如何解决 1.Mac关机 2.按住command+R键开机,看到地球时松开按键 3.选择互联网,输入密码连接 4.进度条结束后,进入 macOS 恢复功能 如果出现带有闪烁 ...

  9. Qt关闭程序的时候创建json文件,再次启动时重新加载到界面上

    提要 当程序关闭后再次打开程序需要加载上一次的按钮名称设置. 思路 关闭程序的时候保存此刻界面按钮的文本,正常情况下只需在程序退出时调用的析构函数的内部实现,将界面所有的按钮文本生成一个文件,在程序下 ...

  10. web项目的启动时文件加载顺序

    web项目的启动时文件加载顺序 转自:http://www.cnblogs.com/yw-ah/p/5751509.html 一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xm ...

最新文章

  1. ALD对照CVD淀积技术的优势
  2. python爬虫库的功能_Python学习爬虫掌握的库资料大全和框架的选择的分析
  3. graduation wishes from professor Youmin Xi
  4. c语言选择排序_冒泡、插入、选择排序(C语言)
  5. 电商项目整体介绍-尚硅谷大数据培训
  6. 机器学习:最小二乘支持向量机(Least Squares Support Vector Machine)
  7. 【栈】实现逆波兰计算器
  8. 电脑维修常用检修软件技术
  9. ionic 项目文件下载总结
  10. 二十四小时不插电生活方案
  11. 一万年太久,只争朝夕,男儿有泪不轻弹,只是未到伤心处!!!!!!
  12. 平面上点和直线的齐次表示
  13. Spring Cache缓存技术,Cacheable、CachePut、CacheEvict、Caching、CacheConfig注解的使用
  14. 一文讲解灰光模块和彩光模块
  15. python生成等值线_在python中生成X,Y数据的等值线图
  16. Java(13)- 抽象类
  17. 华为OD面试——机试算法
  18. R语言 trim=0.1 tirm=0.2 什么意思呢?
  19. 10以内加减法口诀表
  20. 查找MySQL文件的所在的真实地址(一行sql语句就欧克~)

热门文章

  1. 基于有道API的命令行词典(golang版)
  2. Your local changes to the following files would be overwritten by merge
  3. 2020抖音最新上热门技巧你知道多少?
  4. android 多个 前台 挂机,安卓手机如何进行多开挂机?
  5. 像素越多越好?像元的面积越小越好?为何底大一级压死人?
  6. 华旭 身份证读卡器测试软件_华旭身份证读卡器阅读软件8.0版本 支持免驱
  7. 什么是存储过程?用什么来调用?
  8. 设置共享后其他计算机无法访问,Win7局域网共享设置疑难大全(无法访问,没有访问权限,看不到共享电脑)...
  9. KEIL C51 程序编译
  10. word页码上加横线word删除单页页眉