PyTorch 训练时中遇到的卡住停住等问题
目录
- 前言
- 1. PyTorch 训练时在第一个 epoch 的最后一个 batch 卡死
- - 问题描述
- - 可能的原因
- - 解决方法
- 2. 使用命令行运行时,卡在第一个 epoch
- - 问题描述
- - 原因分析
- - 解决方法
前言
在实际训练中遇到了各种各样的卡住问题,在此总结一下,PyTorch 训练时遇到的卡住停住等问题可以从以下几个方面根据情况具体分析 (参考PyTorch训练时,Dataloader卡死、挂起,跑一个epoch停了,问题解决方案):
- 前一进程还未处理完,又进入下一个导致互锁:在每个Epoch后,或每个 batch 后暂停一下:
time.sleep(0.003)
; - 内存问题:使用开关,
pin_memory=True/False
- 多进程导致互锁问题:减少进程数或者不用,
num_workers=0/1
- OpenCV与Pytorch互锁;
- batch size 的设置;
1. PyTorch 训练时在第一个 epoch 的最后一个 batch 卡死
- 问题描述
使用 PyTorch 框架训练模型,训练第一个 epoch 时,在最后一个 batch 处卡死,卡了一天都没有动弹,而 CPU 和 GPU 都处于正常运行的状态,程序也没有报错,并且之前训练一直都是正常的。最终,只能通过 Ctrl+C
强制性暂停。如下图所示。
- 可能的原因
- 搜索文章发现,有人出现这种问题是和
cv2.imread
有关,用 OpenCV 的接口进行数据读取,而没有用 PIL,导致出现 OpenCV与Pytorch互锁的问题,关闭OpenCV的多线程即可解决问题1 2。 - 但是我们的代码中并没有使用 OpenCV,通过 Debug 发现,出现问题的时候,最后一个 batch =1,而我们使用的是四块 GPU 进行训练,原因就在此。
- 解决方法
Pytorch 的多 GPU 处理接口是 torch.nn.DataParallel(module, device_ids),具体并行机制可参考:Pytorch多GPU并行处理。
该接口还要求输入数据的 batch 数量要不小于所指定的 GPU 数量。另根据官网的解释和注释 (The batch size should be larger than the number of GPUs used.),batch的数量会均分到每块GPU上进行处理,因此要保证一个整数的关系。
故,一定要注意在使用多块 GPU 训练时,注意 batch_size 的取值,避免出现最后一个 batch 的实际size小于所指定的 GPU 数量的情况。
多 GPU 并行训练中其他比较坑的地方可参考:pytorch多GPU数据并行模式 踩坑指南,和nn.DataParallel说再见。
2. 使用命令行运行时,卡在第一个 epoch
- 问题描述
使用 PyTorch 框架训练模型,在 Pycharm 里面可以正常运行,但是在命令行中运行时,在第一个 epoch 处卡死。
- 原因分析
经过定位,发现卡死的地方是PyTorch自带的 DataLoader 处有问题, 使用batch和 num_works参数的原理可参考此文3,DataLoader的函数定义如下4:
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
num_workers=0, collate_fn=default_collate, pin_memory=False,
drop_last=False)
其中 num_workers 表示使用多进程加载的进程数,0代表不使用多进程,pin_memory 表示是否将数据保存在pin memory区,pin memory中的数据转到GPU会快一些。
- 解决方法
把 num_workers 改为 0 即可正常运行,如何设置还是要靠具体实验。
Pytorch dataloader在加载最后一个batch时卡死 ↩︎
在PyTorch训练一个epoch时,模型不能接着训练,Dataloader卡死 ↩︎
pytorch dataloader 使用batch和 num_works参数的原理是什么? - 孟paper的回答 - 知乎 ↩︎
pytorch DataLoader num_workers 出现的问题 ↩︎
PyTorch 训练时中遇到的卡住停住等问题相关推荐
- PyTorch训练中Dataset多线程加载数据,比Dataloader里设置多个workers还要快
PyTorch训练中Dataset多线程加载数据,而不是在DataLoader 背景与需求 现在做深度学习的越来越多人都有用PyTorch,他容易上手,而且API相对TF友好的不要太多.今天就给大家带 ...
- 【PyTorch训练中Dataset多线程加载数据,比Dataloader里设置多个workers还要快】
文章目录 一.引言 二.背景与需求 三.方法的实现 四.代码与数据测试 五.测试结果 5.1.Max elapse 5.2.Multi Load Max elapse 5.3.Min elapse 5 ...
- matlab杀毒扫描不动,我的电脑每次用360查杀木马扫描的时候,到其中一个文件的时候都会停住,然后进度条就一直不动,这是中毒了吗...
我的电脑每次用360查杀木马扫描的时候,到其中一个文件的时候都会停住,然后进度条就一直不动,这是中毒了吗以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内 ...
- 让PyTorch训练速度更快,你需要掌握这17种方法
选自efficientdl.com 作者:LORENZ KUHN 机器之心编译 编辑:陈萍 掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练. 近日,Reddit 上一个帖 ...
- PyTorch训练加速17种技巧
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文自 机器之心 作者:LORENZ KUHN 编辑:陈萍 掌握这 ...
- Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷)
Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷) 参见了很多方法,都没有用. 简单点,直接把gpu设成-1
- 送你9个快速使用Pytorch训练解决神经网络的技巧(附代码)
来源:读芯术 本文约4800字,建议阅读10分钟. 本文为大家介绍9个使用Pytorch训练解决神经网络的技巧 图片来源:unsplash.com/@dulgier 事实上,你的模型可能还停留在石器时 ...
- 若使用numba.cuda.jit加速pytorch训练代码会怎样
也许没有察觉 在使用pytorch训练数据的时候cuda 显卡总是发挥不到最大性能 这就是你的cpu程序拖住了你的显卡 怎么办 目前我能想到的最好方法就是 使用numba.cuda.jit这样你也不用 ...
- pytorch训练过程中loss出现NaN的原因及可采取的方法
在pytorch训练过程中出现loss=nan的情况 1.学习率太高. 2.loss函数 3.对于回归问题,可能出现了除0 的计算,加一个很小的余项可能可以解决 4.数据本身,是否存在Nan,可以用n ...
最新文章
- 通过进程ID获得该进程主窗口的句柄
- [Linux]配置网络
- A Tutorial on Clustering Algorithms-聚类小知识
- Codechef SEAARC Sereja and Arcs (分块、组合计数)
- 【NLP】Prompt-Tuning这么好用?
- restful api上传文件(基础)-springboot
- VMware ubuntu 上网
- 前端学习(2588):前端权限的控制思路
- 电信业务分类目录_第五大运营商!中信网络获基础电信业务牌照
- java中fmt标签库_jsp fmt标签详解
- windows下命令行发送邮件blat.exe
- Linux Mint开发环境安装整理
- H.264 AVC 编解码标准
- 如何处理计算机显卡故障,显卡出现故障怎么办
- 怎样在你的团队做 Code Review ?
- linux cgroup 学习的一些总结
- 打造一个基于机器学习的图像解码平台
- IDEA springboot 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun
- java获取微信公众号二维码
- SSD1315驱动的OLED