死亡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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法

    MySQL删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法背景因为测试过程中,几套环境都是用的同一个库,数据有点冲突,需要删库。执行truncatetablexxx时提示:[Err]1701-Cannottruncateatablereferencedinaforeignkeyconstraint….解决办法删除之前先执行删除外键约束SETforeign_key_checks=0删除完之后再执行启动外

    2022年6月26日
    46
  • Linux常用命令大全(非常全!!!)

    Linux常用命令大全(非常全!!!)Linux常用命令大全(非常全!!!)最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:系统信息arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本d…

    2022年4月27日
    34
  • GPIB的未来_GPI是什么意思

    GPIB的未来_GPI是什么意思转自http://zone.ni.com/devzone/cda/pub/p/id/448目录在GPIB中有什么新特性?软件和仪器驱动程序更新新型仪器控制总线技术更多资源 有时候您可能会考虑在未来如何与测试测量设备进行通信。到时候是否还能够连接到GPIB仪器呢?LXI是否会替代GPIB呢?高速USB总线是不是能够比LXI提供更高

    2025年6月14日
    5
  • Django之HttpRequest和HttpReponse

    当一个web请求链接进来时,django会创建一个HttpRequest对象来封装和保存所有请求相关的信息,并且会根据请求路由载入匹配的试图函数,每个请求的试图函数都会返回一个HttpResponse

    2021年12月29日
    55
  • 浏览器渲染原理解析建议收藏

    Web页面运行在各种各样的浏览器当中,浏览器载入、渲染页面的速度直接影响着用户体验简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程。先来大致了解一下浏览器都是

    2021年12月21日
    46
  • jsoncpp官方教程_jsoncpp用法

    jsoncpp官方教程_jsoncpp用法本文主要介绍使用JsonCpp库,通过C++编程语言实现JSON文件读写操作的具体方法。1写入JSON文件这里编写一个示例程序,该程序将JSON字符串写入到JSON文件中。示例代码(json_file_oper_write.cpp)的内容如下:#include<jsoncpp/json/json.h>#include<fstream>usingnamespacestd;intmain(){Json::Value

    2022年10月10日
    4

发表回复

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

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