首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Pytorch dataloader 错误 “DataLoader worker (pid xxx) is killed by signal” 解决方法

Pytorch dataloader 错误 “DataLoader worker (pid xxx) is killed by signal” 解决方法

作者头像
为为为什么
发布于 2022-08-05 04:35:14
发布于 2022-08-05 04:35:14
5.4K00
代码可运行
举报
文章被收录于专栏:又见苍岚又见苍岚
运行总次数:0
代码可运行

在使用 pytorch dataloader 时,出现了当把num_workers 设置不为0即报错的问题,本文记录两种此类错误的解决方案。

Dataloader - num_workers

  • Pytorch 中加载数据的模块Dataloader有个参数num_workers,该参数表示使用dataloader时加载数据的进程数量,可以理解为为网络搬运数据的工人数量;
  • 所以如果dataloader比较复杂,工人多的时候自然可以节省大量数据加载时间,他们可以在网络训练时同时进行数据加载工作,等网络训练结束直接从内存中取走加载完成的数据,因此当num_worker大于1时可以对数据加载进行加速,当数量多到网络不需要加载数据的时间时就是工人们为加速训练做工作的极限收益了;
  • 使用大于1的工人会占用更多的内存和cpu,同时也会占用更多的共享内存(share memory);
  • 使用大于1的工人会调用多线程。

问题说明

根据num_worker的工作思路,可能会在工作中出现两种错误(我遇到的两种):

  • 共享内存不足:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error

  • 多线程出现段错误导致死锁,进而导致程序卡住,线程阻塞:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ERROR: Unexpected segmentation fault encountered in worker.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: DataLoader worker (pid 4499) is killed by signal: Segmentation fault. 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: DataLoader worker (pid(s) ****) exited unexpectedly

下面给出两种问题的解决方案。

问题1 RuntimeError: DataLoader worker (pid XXX) is killed by signal: Bus error

问题原因
  • 一般这种问题发生在docker中,由于docker默认的共享内存为64M,导致工人数量多时空间不够用,发生错误。
解决方案
1 自废武功
  • num_workers设置为0
2 解决问题
  • 创建docker时配置较大的共享内存,加入参数--shm-size="15g",设置15g(根据实际情况酌量设置)的共享内存:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nvidia-docker run -it --name [container_name] --shm-size="15g" ...

  • 通过 df -h查看
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# df -h
Filesystem                                          Size  Used Avail Use% Mounted on
overlay                                             3.6T  3.1T  317G  91% /
tmpfs                                                64M     0   64M   0% /dev
tmpfs                                                63G     0   63G   0% /sys/fs/cgroup
/dev/sdb1                                           3.6T  3.1T  317G  91% /workspace/tmp
shm                                                  15G  8.1G  7.0G  54% /dev/shm
tmpfs                                                63G   12K   63G   1% /proc/driver/nvidia
/dev/sda1                                           219G  170G   39G  82% /usr/bin/nvidia-smi
udev                                                 63G     0   63G   0% /dev/nvidia3
tmpfs                                                63G     0   63G   0% /proc/acpi
tmpfs                                                63G     0   63G   0% /proc/scsi
tmpfs                                                63G     0   63G   0% /sys/firmware

  • 其中shm即为共享内存空间

问题2 RuntimeError: DataLoader worker (pid(s) ****) exited unexpectedly

问题原因
  • 由于dataloader使用了多线程操作,如果程序中存在其他有些问题的多线程操作时就有可能导致线程套线程,容易出现死锁的情况
  • 具体的情况可能会根据具体环境不同,我的是由于opencv中的多线程与dataloader的杂糅出现了问题;
  • 此时cv版本 3.4.2,相同的代码在 4.2.0.34 的cv中没有出现问题。
解决方案
1 自废武功
  • num_workers设置为0
2 解决问题
  • 在dataloader 的 __getitem__ 方法中禁用opencv的多线程:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __getitem__(self, idx):
	import cv2
	cv2.setNumThreads(0)
	...

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年12月3日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyTorch入门教程:下载、安装、配置、参数简介、DataLoader(数据迭代器)参数解析与用法合集
【摘要】 PyTorch入门教程、PyTorch下载与安装、PyTorch配置环境、PyTorch参数设置、PyTorch 2.7 CUDA 12.8 完整指南、深度学习框架对比、Python深度学习零基础快速上手、DataLoader数据迭代器详解、BatchSize优化、num_workers最佳实践、GPU加速训练、CUDA驱动安装、cuDNN版本匹配、torch.compile性能优化、PyTorch分布式训练、PyTorch可复现性设置、模型训练调参、图像分类实战、CIFAR-10示例、ImageNet预处理、数据增强、随机种子、Pin Memory技巧、Prefetch提升吞吐、PyTorch常见错误解决、invalid device ordinal、显存不足排查、Windows多进程死锁、OPENCV_DISABLE_THREADING、深度学习代码开源、AI工程化部署、PyTorch Lightning升级、torchvision transform用法——本文一站式汇总,从下载、安装、环境变量配置到 DataLoader 参数解析与高阶用法,手把手带你完成 PyTorch 环境搭建与高效数据加载,为深度学习研究与生产部署奠定坚实基础。
猫头虎
2025/05/27
1.2K0
PyTorch入门教程:下载、安装、配置、参数简介、DataLoader(数据迭代器)参数解析与用法合集
PyTorch学习笔记(6)——DataLoader源代码剖析
作为CSDN的忠实用户,最近发现CSDN学院上了一些对新手比较友好的课程。以我的切身体会来看,对于想要了解机器学习算法或者python编程语言的同学,非常有帮助。还记得我最开始学习python的时候,看的是一本写给小孩子的书《趣学Python——教孩子学编程》。
全栈程序员站长
2022/06/29
7400
PyTorch学习笔记(6)——DataLoader源代码剖析
pytorch报错RuntimeError: DataLoader worker (pid(s) xxx) exited unexpectedly
pytorch报错RuntimeError: DataLoader worker (pid(s) ... exited unexpectedly
狼啸风云
2021/03/17
12.8K0
得物AI平台-KubeAI推理训练引擎设计和实践
KubeAI是得物AI平台,是我们在容器化过程中,逐步收集和挖掘公司各业务域在AI模型研究和生产迭代过程中的需求,逐步建设而成的一个云原生AI平台。KubeAI以模型为主线提供了从模型开发,到模型训练,再到推理(模型)服务管理,以及模型版本持续迭代的整个生命周期内的解决方案。
得物技术
2023/05/16
1.1K0
得物AI平台-KubeAI推理训练引擎设计和实践
深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析
(ps:对于如何在Intel CPU,ARM架构CPU,以及Jetson TensorRT上部署深度学习模型,以及部署遇到的速度问题,该如何解决。请查看我的另外一篇文章。如何定制化编译Pytorch,TensorFlow,使得CNN模型在CPU,GPU,ARM架构和X86架构,都能快速运行,需要对每一个平台,有针对性的调整。如何做到最大化加速深度学习在不同平台部署性能。请看我的这篇文章。)
全栈程序员站长
2022/07/01
6.3K1
深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析
[源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader
为了更好的介绍参数服务器Paracel的数据加载,我们临时插入两篇PyTorch的数据加载,主要是从分布式的角度进行切入。本文只算是开胃甜点,后续会有专门系列分析PyTorch分布式。
罗西的思考
2021/08/23
1.8K0
[源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader
pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类
Pytorch深度学习框架优势之一是python优先,源代码由python代码层和C语言代码层组成,一般只需要理解python代码层就可以深入理解pytorch框架的计算原理。所以学习pytorch源码需要熟练掌握python语言的各种使用技巧。
全栈程序员站长
2022/08/24
1.1K0
pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类
Pytorch数据加载的分析
Pytorch数据加载的效率一直让人头痛,此前我介绍过两个方法,实际使用后数据加载的速度还是不够快,我陆续做了一些尝试,这里做个简单的总结和分析。
公众号机器学习与AI生成创作
2020/07/15
1.6K0
Pytorch数据加载的分析
PyTorch 源码解读之 torch.utils.data:解析数据处理全流程
来源丨https://zhuanlan.zhihu.com/p/337850513
BBuf
2021/07/01
1.7K0
【深度学习】Pytorch 教程(十四):PyTorch数据结构:6、数据集(Dataset)与数据加载器(DataLoader):自定义鸢尾花数据类
  Tensor(张量)是PyTorch中用于表示多维数据的主要数据结构,类似于多维数组,可以存储和操作数字数据。
Qomolangma
2024/07/30
4150
【深度学习】Pytorch 教程(十四):PyTorch数据结构:6、数据集(Dataset)与数据加载器(DataLoader):自定义鸢尾花数据类
Docker疑难杂症汇总一
来源:https://www.escapelife.site/posts/43a2bb9b.html
入门笔记
2022/06/03
8280
Docker疑难杂症汇总一
PyTorch消除训练瓶颈 提速技巧
【GiantPandaCV导读】训练大型的数据集的速度受很多因素影响,由于数据集比较大,每个优化带来的时间提升就不可小觑。硬件方面,CPU、内存大小、GPU、机械硬盘orSSD存储等都会有一定的影响。软件实现方面,PyTorch本身的DataLoader有时候会不够用,需要额外操作,比如使用混合精度、数据预读取、多线程读取数据、多卡并行优化等策略也会给整个模型优化带来非常巨大的作用。那什么时候需要采取这篇文章的策略呢?那就是明明GPU显存已经占满,但是显存的利用率很低。
BBuf
2021/01/08
2K0
彻夜怒肝!17 个 Docker 常见疑难杂症解决方案汇总!
[问题起因] 今天通过监控系统,发现公司其中一台服务器的磁盘快慢,随即上去看了下,发现 /var/lib/docker 这个目录特别大。由上述原因,我们都知道,在 /var/lib/docker 中存储的都是相关于容器的存储,所以也不能随便的将其删除掉。
杰哥的IT之旅
2021/04/20
6.3K0
【Pytorch 】笔记十:剩下的一些内容(完结)
疫情在家的这段时间,想系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这样学习起来感觉很不踏实, 对 Pytorch 的使用依然是模模糊糊, 跟着人家的代码用 Pytorch 玩神经网络还行,也能读懂,但自己亲手做的时候,直接无从下手,啥也想不起来, 我觉得我这种情况就不是对于某个程序练得不熟了,而是对 Pytorch 本身在自己的脑海根本没有形成一个概念框架,不知道它内部运行原理和逻辑,所以自己写的时候没法形成一个代码逻辑,就无从下手。这种情况即使背过人家这个程序,那也只是某个程序而已,不能说会 Pytorch, 并且这种背程序的思想本身就很可怕, 所以我还是习惯学习知识先有框架(至少先知道有啥东西)然后再通过实战(各个东西具体咋用)来填充这个框架。而这个系列的目的就是在脑海中先建一个 Pytorch 的基本框架出来, 学习知识,知其然,知其所以然才更有意思;)。
阿泽 Crz
2020/09/14
2.1K0
【Pytorch 】笔记十:剩下的一些内容(完结)
分布式深度学习最佳入门(踩坑)指南
本文主要介绍了分布式深度学习的各框架以及一些分布式深度学习训练中的常见问题,如:docker及ssh环境问题、nccl多机通信问题等。
计算机视觉
2021/01/14
3.6K0
分布式深度学习最佳入门(踩坑)指南
24个Docker常见问题处理技巧
1Docker 迁移存储目录默认情况系统会将 Docker 容器存放在 /var/lib/docker 目录下[问题起因] 今天通过监控系统,发现公司其中一台服务器的磁盘快慢,随即上去看了下,发现 /var/lib/docker 这个目录特别大。由上述原因,我们都知道,在 /var/lib/docker 中存储的都是相关于容器的存储,所以也不能随便的将其删除掉。那就准备迁移 docker 的存储目录吧,或者对 /var 设备进行扩容来达到相同的目的。更多关于 dockerd 的详细参数,请点击查看 官方文档
星哥玩云
2022/06/23
2.8K0
24个Docker常见问题处理技巧
玩转服务器常用命令
//who -b 查看最后一次系统启动的时间。 //who -r 查看当前系统运行时间
格姗知识圈
2019/07/19
9400
Linux下查看CPU型号,内存大小,硬盘空间的命令(详解)
cat /proc/cpuinfo | grep “physical id” | uniq | wc -l 96 #一共96核
互联网-小阿宇
2022/11/21
10.4K0
技能篇:开发必备linux命令大全-稳赚不亏
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须。接下来将一一详细介绍一些常用的linux的命令
潜行前行
2021/08/20
4.5K0
技能篇:开发必备linux命令大全-稳赚不亏
【他山之石】Pytorch/Tensorflow-gpu训练并行加速trick(含代码)
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2021/01/28
1.6K0
【他山之石】Pytorch/Tensorflow-gpu训练并行加速trick(含代码)
推荐阅读
相关推荐
PyTorch入门教程:下载、安装、配置、参数简介、DataLoader(数据迭代器)参数解析与用法合集
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验