死亡Error:OSError: [Errno 12] Cannot allocate memory

死亡Error:OSError: [Errno 12] Cannot allocate memory死亡Error:OSError:[Errno12]Cannotallocatememory调试背景:使用的是github上https://github.com/arunmallya/packnet这里的代码。调试的时候,出现Error,如下:main()File”main.py”,line378,inmainmanager.prune()Fi…

大家好,又见面了,我是你们的朋友全栈君。

死亡Error:OSError: [Errno 12] Cannot allocate memory

调试背景:使用的是github上https://github.com/arunmallya/packnet这里的代码。

调试的时候,出现Error,如下:

    main()
  File "main.py", line 378, in main
    manager.prune()
  File "main.py", line 263, in prune
    savename='_final', best_accuracy=accuracy)
  File "main.py", line 217, in train
    self.do_epoch(epoch_idx, optimizer)
  File "main.py", line 174, in do_epoch
    for batch, label in tqdm(self.train_data_loader, desc='Epoch: %d ' % (epoch_idx)):
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/site-packages/tqdm/_tqdm.py", line 1032, in __iter__
    for obj in iterable:
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/site-packages/torch/utils/data/dataloader.py", line 301, in __iter__
    return DataLoaderIter(self)
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/site-packages/torch/utils/data/dataloader.py", line 158, in __init__
    w.start()
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/multiprocessing/process.py", line 105, in start
    self._popen = self._Popen(self)
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/multiprocessing/context.py", line 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/multiprocessing/context.py", line 267, in _Popen
    return Popen(process_obj)
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/multiprocessing/popen_fork.py", line 20, in __init__
    self._launch(process_obj)
  File "/home/rvlg/anaconda3/envs/torch/lib/python3.5/multiprocessing/popen_fork.py", line 67, in _launch
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

遇到这个问题,由于代码本身的额原因先是考虑到运行电脑的内存问题,于是用

watch -n 2 nvidia-smi
watch -n 2 free -m

全程监视电脑CPU、GPU,以及物理内存、交换区内存的变化情况,发现并不是内存的原因。找bug未果。
换了一个思路,从出错的代码以及错误提示上来看,是dataloader.py出了问题,于是Google,关键词:dataloader OSError: [Errno 12] Cannot allocate memory
果然有很多人也是由于在dataload的时候出错,找了很多原因:
1、电脑内存原因(已排除)
2、电脑系统线程数量限制:https://blog.csdn.net/m0_37644085/article/details/92795488:修改最大进程数(尝试无效)
3、设置pin_memory=False;(尝试无效)
4、修改多线程数量:设置num_workers,num_workers是加载数据(batch)的线程数目,系统默认的数量是4,改成1之后,没有效果,后面改成0,问题解决!!!程序可以跑了。

总结:
当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。
(实操时,貌似如果内存交换过多时,置pin_memory = True会卡住,可以将其设为False,对应的num_workers = 0)

特发此帖纪念,认真查了两天多!!!希望可以帮到大家。
转载请注明来源:https://blog.csdn.net/breeze210/article/details/99679048,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152619.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue组件通讯之$attrs

    vue组件通讯之$attrs使用场景我们会遇到这样的场景,比如对element-ui的el-table组件进行二次开发,但是el-table组件有很多属性比如控制高度的height,传入数据的data还有border、size、fit等一个个的去传显然不大现实,这个使用用$attrs处理起来就会特别优雅。举例子组件:自定义组件对el-table进行封装,用$attrs接收父组件传过来的属性<template&g…

    2022年10月18日
    0
  • bug生命周期流程_bug六大要素

    bug生命周期流程_bug六大要素你们公司是如何管理bug的?考查点:缺陷的生命周期常见的流程就不多说了,CSDN上有很多,今天说一些不一样的点:正常流程:打开–接受–已解决-关闭其它状态:拒绝、重新打开、遗留1、线上的bug优先级最高,会要求测试leader亲自协助运营、开发人员定位,邮件报告相关领导:bug分析、开发人员如何修改,有哪些影响范围,bug修改进度,开发和测试的改进措施;2、测试环境的典型b…

    2022年10月20日
    0
  • WPS多个单独excel表合并为多个sheet_wps怎样拆分成多个工作表

    WPS多个单独excel表合并为多个sheet_wps怎样拆分成多个工作表WPS 2019 多个sheet表拆分成独立的excel文件 (VBA工具)

    2022年4月21日
    130
  • windows的定时任务设置

    windows的定时任务设置

    2021年11月15日
    49
  • 忘记 mysql 数据库连接密码(解决方案)「建议收藏」

    由于CSDN的目录只在固定地方显示,并不是很方便阅读,又占空间,所以本文章已同步更新到个人博客上,在个人博客上的文章,有滑动侧边目录栏,阅读体验更加,而且文章的样式也更为丰富,推荐各位同学前往我的个人博客读阅。个人博客地址:http://zwd596257180.gitee.io/blog/2019/04/16/mysql_change_password/…

    2022年4月13日
    71
  • 全网最详细完备的class类文件结构解析

    全网最详细完备的class类文件结构解析写在前面本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定Java虚拟机解答Class文件是一组以8位字节为基础单位的二进制流,不同的数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有任何空隙存在。这些数据项目由无符号数和表来存储数据,按照顺序依次是:1.魔数和Class文件的版本2.常量池3.访问标志4.类索引、父类索引与接口索引集合5.字段表

    2022年5月6日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号