前言

先说一下写这篇文章的动机,事情起因是笔者在使用pytorch进行多机多卡训练的时候,遇到了卡住的问题,登录了相关的多台机器发现GPU利用率均为100%,而且单卡甚至是单机多卡都没有卡住的现象,这就非常奇怪了。

于是乎开始搜索相关的帖子,发现很多帖子虽然也是卡住话题,但是和笔者的情况都不一样,最后开始去查一些国外的帖子以及pytorch github issue等等,发现了类似问题,而且这个问题确实很严重,截至目前都没有一个很好的快速debug方法解决。

所以这里就记录一下笔者查过的相关帖子以及遇到这个坑的时候大体上该怎么去排查,当然也随便罗列一些常规的卡住问题。最后在文末会说一下笔者排查自己代码的心累历程,而且结果非常滑稽,可以说到现在虽然可以跑通,但是给不出合理的解释。

所以本篇更多的是对相关问题讨论的汇总,如果您也遇到相关问题,希望可以从本篇找到一点蛛丝马迹,进而带来启发进行解决。

卡住位置的定位

卡住这个问题非常讨厌,它不像error等问题会抛出相关报错信息帮助我们进行debug,其就是一直卡住不报错也不往下运行,难受之极。

所以我们第一步就要去定位看看其到底卡在了哪里?这就很简单了,打一写log很快就会发现了。

这里一般会出现多种情况,笔者下面就尽可能的罗列一些查到的,希望能命中您的情况。

第一个 epoch 的最后一个 batch 卡死 & 卡在第一个 epoch

这里基本上就是dataloder的问题,这里的帖子较多,大家搜索一下即可,比如:

PyTorch 训练时中遇到的卡住停住等问题_yyywxk的博客-CSDN博客_pytorch卡住- 问题描述使用 PyTorch 框架训练模型,训练第一个 epoch 时,在最后一个 batch 处卡死,卡了一天都没有动弹,而 CPU 和 GPU 都处于正常运行的状态,程序也没有报错,并且之前训练一直都是正常的。最终,只能通过 Ctrl+C 强制性暂停。如下图所示。- 可能的原因搜索文章发现,有人出现这种问题是和 cv2.imread 有关,用 OpenCV 的接口进行数据读取,而没有用 PIL,导致出现 OpenCV与Pytorch互锁的问题,关闭OpenCV的多线程即可解决问题1 2。但https://blog.csdn.net/yyywxk/article/details/106323049

训练过程卡住

在训练的一开始就卡住,这里可能和一些多进程抢有关,比如time这个

https://github.com/pytorch/pytorch/issues/22834https://github.com/pytorch/pytorch/issues/22834

卡在 nn.parallel.DistributedDataParallel(model)

如果是卡在这一步,首先需要再三确定下是不是真的是这一步卡住了,比如把别的代码都注释掉,就剩下初始化model,然后 nn.parallel.DistributedDataParallel(model)这一步逻辑,看不看是不是依然卡住且稳定复现,如果是那么非常不幸,有可能就是遇到一个最烦的问题了,为什么这么说呢?

大家可以去搜一下相关的帖子,中文的很少,大家可以打“卡住”的英文关键字进行搜索,对应的是hang或者deadlock,笔者这里贴几个高频的:

DistributedDataParallel deadlock - PyTorch ForumsHello, Im trying to use DistributedDataParallel to train a model in a cluster with nodes that each has 2 GPUs K80 and in total Im using 4 GPUs. Im based on this example for the distributed training: https://github.com/p…https://discuss.pytorch.org/t/distributeddataparallel-deadlock/14809https://github.com/pytorch/pytorch/issues/17745https://github.com/pytorch/pytorch/issues/17745https://github.com/pytorch/pytorch/issues/22834https://github.com/pytorch/pytorch/issues/22834

大家顺着这几个帖子摸着看,就会找到相关的讨论,大体上就是说model代码中存在desynchronization同步代码,导致现在互相抢,比如reduce就有可能导致。

再者大家可以试一试将torch.nn.parallel.DistributedDataParallel中find_unused_parameters参数置True:

pytorch 并行训练之DistributedDataParallel(代码样例和解释) - 知乎全网看了很多关于torch多gpu训练的介绍,但运行起来始终有各种问题。遂记录下来,力求简单。 不建议使用“torch.nn.DataParallel”这种并行方式,这种方式实际加速效果很差,gpu负载不均衡,常常是“一个gpu干活,…https://zhuanlan.zhihu.com/p/350301395

调试nn.parallel.DistributedDataParallel API

经过上面分析,我们知道想快速定位一下到底是哪里的代码出现了desynchronization,或者说就很想有个工具能不能调试nn.parallel.DistributedDataParallel 这个API,最好是进去一步一步运行直到定位到模型卡住的地方,很遗憾,目前没有,至少笔者没有找到,有相关的帖子也在这里进行了讨论:

Best way to debug DistributedDataParallel code? - distributed - PyTorch ForumsHey, I’m having an issue that my code randomly hangs when using DistributedDataParallel. It is completely random when this occurs, and it does not always occur. I suspect that it has something to do with the Distribut…https://discuss.pytorch.org/t/best-way-to-debug-distributeddataparallel-code/57962

有人建议是使用gdb,说实话这个非常麻烦,要看C++。

于是乎有人也在pytorch中提出了相关的问题,希望可以支持一个类似debug的参数,方便大家debug,具体可以看:

https://github.com/pytorch/pytorch/issues/22071https://github.com/pytorch/pytorch/issues/22071

笔者心路历程

笔者遇到的场景是:单卡以及单机多卡都没有问题,多机多卡偶尔卡住且卡住比例较高,都是卡在nn.parallel.DistributedDataParallel(model)这一步,卡的时候GPU利用率100%。

笔者也尝试去使用gdb调试,说实话看不懂。

这个时候怎么办?那就是先给代码瘦身或者说找一个最简单的可以跑通的demo,然后在其基础上一点点叠加你代码的逻辑,直到复现出卡的情况,那么恭喜,你定位到了出问题的代码地方。

这个办法虽笨且费力,但是一定是可以定位到的。

非常的尴尬,笔者的情况是带有随机性的,也就是说同样一段代码有时候可以跑通,有时候卡住,这就加大了debug的难度,而且不管笔者怎么调试写的代码都不能定位出问题,这一度让人奔溃。

最后突然想到,有可能是不是启动脚本sh的问题呢?而并不是写的py文件问题,因为是在平台运行的,笔者就一步一步对比给的demo,最后发现只有一点不同,那就是笔者在启动的时候多加了个sudo,这应该不是啥大事吧,加了后权限按说更大,只可能说不加有问题,还没遇到过说加了有事,不加没事的情况。

抱着试一试的心态,去掉sudo发现居然不卡了,而且实验了多次都不卡,那加上sudo后再实验确实又卡住了,这就非常郁闷了。

到现在虽然跑通了,但是给不出解释,而且问了平台相关的同学也给不出解释,或许后面再慢慢追一下这个问题吧~

当代研究生应当掌握的5种Pytorch并行训练方法(单机多卡)

关注

欢迎关注,下期再见啦~

欢迎关注笔者微信公众号:

github:

Mryangkaitong · GitHubhttps://github.com/Mryangkaitong

知乎:

小小梦想 - 知乎ML/NLP研究员,欢迎关注微信公众号“算法让生活更美好” 回答数 113,获得 368 次赞同https://www.zhihu.com/people/sa-tuo-de-yisheng/posts

pytorch 多机多卡卡住问题汇总相关推荐

  1. 脑机接口20年论文集汇总

    目录 卷一 基础部分(The Foundation) 基本方法(Essential Methods) 啮齿动物和灵长类动物的实验性脑机接口研究(Experimental Brain-Machine I ...

  2. 计算机三级分类汇总,计算机三级网络考试机试100道分类汇总-整数各位数字运算排序统计.doc...

    计算机三级网络考试机试100道分类汇总-整数各位数字运算排序统计.doc (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 ☆ 题目2 ...

  3. 电大计算机基础知识机考题,电大《计算机应用基础》网考机考单选题大汇总

    电大<计算机应用基础>网考机考单选题大汇总 一.计算机基础知识 1.一般认为,世界上第一台电子数字计算机诞生于______.A 1946年 2.计算机当前已应用于各种行业.各种领域,而计算 ...

  4. 时之歌 服务器维护,时之歌抽卡卡住了怎么办 时之歌手游招募吞卡解决方法

    时之歌游戏时,不少玩家会遇到招募抽卡卡住问题,那么时之歌抽卡卡住了怎么办.时之歌手游招募吞卡解决方法呢,跑跑车手游网为您介绍. *时之歌抽卡卡住了怎么办? 时之歌抽卡界面卡住,是因为开服服务器问题,官 ...

  5. PyTorch 多机多卡训练:DDP 实战与技巧

    作者丨996黄金一代@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/250471767 编辑丨极市平台 零. 概览 想要让你的PyTorch神经网络在多卡环境上跑得又 ...

  6. PyTorch 多机多卡训练:分布式实战与技巧

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx DistributedDataParallel(DDP)是一个支持多机多卡.分布式训练的深度学 ...

  7. 华科计算机考研复试机试【零散大汇总】

    [1] 屏幕的格式化输出:给出一幅图形,用程序实现.如下所示. 我的代码: #include<stdio.h> int main(){ char c; int sum,i,j; while ...

  8. 电脑死机故障解决方法全面汇总

    电脑死机是我们在日常生活中遇到最多的电脑故障之一,因为电脑死机既有软件故障,也有硬件故障,所以解决起来比较麻烦,比较耗时间,也是我们最头疼的问题. 一.按故障类型分类 (一) 硬件 1.CPU (1) ...

  9. 华为机试真题分类汇总

    1. 字符串 类别 题目 知识点 题目分值 / 难度 字符串 [华为机试真题 JAVA]TLV解析Ⅰ-100 字符串分隔.拼接.搜索 100/中等 字符串 [华为机试真题 JAVA]寻找相同子串-10 ...

最新文章

  1. 内存分配器memblock【转】
  2. 手机号码格式验证和 FASTDFS 工具类
  3. Koadic的安装和使用---http c2远控工具
  4. 澳大利亚科学家研发智能袜子SoPhy,帮助患者进行理疗
  5. 算法数据结构(一)-B树
  6. java ora 00911_ORA-00911错误
  7. php接口开发 安全_PHP开发api接口安全验证的实例讲解
  8. Linux kernel 中模块化的平台驱动代码介绍
  9. IIS 5,6,7区别
  10. seqkit根据基因id_基因家族成员的鉴定/基因在染色体上的位置
  11. Windows 7 64位系统下安装Cy+NS2经验(成功安装)
  12. 划分子网(计算机网络)
  13. FSA(有限状态自动机)python代码实现 自然语言处理作业
  14. 题8:二叉树的下一个结点
  15. 毕业设计日志(18)
  16. 基础攻防实验-DVWA-秋潮-网络配置
  17. python实现贪吃蛇小游戏
  18. Windows 2003全面优化
  19. B2C电子商务基础系统架构解析
  20. 动态内存分配与智能指针

热门文章

  1. 解决微信小程序输入框聚焦时内容被上推致布局错乱
  2. 第六章 C语言数组_C语言变长数组:使用变量指明数组的长度
  3. 来自CSDN的js代码大全,害怕忘了(上)
  4. ESP-01S刷固件
  5. spark 线性回归算法(scala)
  6. TASM、TCC和TLINK实现汇编和C的混编
  7. Android有官方的GPS定位API,为什么还要使用百度/高德定位SDK ?
  8. 【毕设参考】ESP32 + HaaS Python 打造的噪音检测系统,远离喧嚣,安享静谧
  9. 图雅的婚事 真实的残酷
  10. DIP关键算法-去噪算法评价标准