1.问题描述

2.解决方案
(1)Dataloader里面不用cv2.imread进行读取图片,用cv2.imread还会带来一系列的不方便,比如不能结合torchvision进行数据增强,所以最好用PIL 里面的Image.open来读图片。(并不适用本例)
(2)将DataLoader 里面的参变量num_workers设置为0,但会导致数据的读取很慢,拖慢整个模型的训练。(并不适用本例)
(3)如果用了cv2.imread,不想改代码的,那就加两条语句,来关闭Opencv的多线程:cv2.setNumThreads(0)和cv2.ocl.setUseOpenCL(False)。加了这两条语句之后,并不影响模型的训练。(并不适用本例)
(4)这种情况应该是属于pytorch多线程锁死,在github上看到有该问题,但是没有解决的。
参考建议
首先确保num_works数量低于CPU数量(如果使用Kubernetes,则设置为pod),但是设置得足够高,使数据随时可以用于下一次迭代。如果GPU在t秒内运行每个迭代,而每个dataloader worker加载/处理单个批处理需要N*t秒,那么您应该将num_workers设置为至少N,以避免GPU停滞。当然,系统中至少要有N个cpu。

不幸的是,如果Dataloader使用任何使用K个线程的库,那么生成的进程数量就会变成num_workersK = NK。这可能比计算机中的cpu数量大得多。这会使pod节流,而Dataloader会变得非常慢。这可能导致Dataloader不返回批处理每t秒,导致GPU暂停。

避免K个线程的一种方法是通过OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 python train.py调用主脚本。这就限制了每个Dataloader工作程序只能使用一个线程,从而避免了使机器不堪重负。你仍然需要有足够的num_workers来满足GPU的需要。

您还应该在_get_item__中优化您的代码,以便每个worker在较短的时间内完成其批处理。请确保worker完成批处理的时间不受从磁盘读取训练数据的时间(特别是当您从网络存储中读取数据时)或网络带宽(当您从网络磁盘读取数据时)的影响。如果您的数据集很小,并且您有足够的RAM,那么可以考虑将数据集移动到RAM(或/tmpfs)中,并从那里读取数据以进行快速访问。对于Kubernetes,您可以创建一个RAM磁盘(在Kubernetes中搜索emptyDir)。

如果你已经优化了你的_get_item__代码,并确保磁盘访问/网络访问不是罪魁祸首,但仍然会出现问题,你将需要请求更多的cpu(为了一个Kubernetes pod),或者将你的GPU移动到拥有更多cpu的机器上。

另一个选项是减少batch_size,这样每个worker要做的工作就会减少,并且可以更快地完成预处理。后一种选择在某些情况下是不可取的,因为会有空闲的GPU内存不被利用。

你也可以考虑离线做一些预处理,减轻每个worker的负担。例如,如果每个worker正在读取一个wav文件并计算音频文件的谱图,那么可以考虑离线预先计算谱图,只从工作者的磁盘中读取计算的谱图。这将减少每个worker的工作量。
你也可以考虑将dataloader里的设置pin_memory=False。
上述的方法来自here

pytorch锁死在dataloader(训练时卡死)相关推荐

  1. Pytorch使用DistributedDataParallel单机多卡训练时遇到ValueError: sampler option is mutually exclusive with shuff

    Pytorch使用DistributedDataParallel单机多卡训练时遇到 ValueError: sampler option is mutually exclusive with shuf ...

  2. pytorch(4)Pytorch模型训练时从CPU与GPU之间的转换

    1.如何进行迁移 使用Pytorch写的模型: 对模型和相应的数据使用.cuda()处理.通过这种方式,我们就可以将内存中的数据复制到GPU的显存中去.从而可以通过GPU来进行运算了. 另外一种方式, ...

  3. pytorch创建data.DataLoader时,参数pin_memory的理解

    参考链接: pytorch创建data.DataLoader时,参数pin_memory的理解 参考链接: What is the disadvantage of using pin_memory? ...

  4. PyTorch可视化-在PyTorch训练时使用TensorBoard记录Metrics

    导入必要的依赖包: from pathlib import Path import glob import re import numpy as np from torch.utils.tensorb ...

  5. Pytorch中多GPU训练指北

    前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用P ...

  6. pytorch多gpu并行训练操作指南

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 来源:知乎 作者:link-web 链接:https://zhuanlan.zhi ...

  7. python torch exp_Python:PyTorch 保存和加载训练过的网络 (八十)

    保存和加载模型 在这个 notebook 中,我将为你展示如何使用 Pytorch 来保存和加载模型.这个步骤十分重要,因为你一定希望能够加载预先训练好的模型来进行预测,或是根据新数据继续训练. %m ...

  8. 【深度学习】翻译:60分钟入门PyTorch(四)——训练一个分类器

    前言 原文翻译自:Deep Learning with PyTorch: A 60 Minute Blitz 翻译:林不清(https://www.zhihu.com/people/lu-guo-92 ...

  9. 3.2 使用pytorch搭建AlexNet并训练花分类数据集

    文章目录 class_indices.json model.py predict.py train.py 创建自己的数据集 #详解 class_indices.json {"0": ...

最新文章

  1. 简单搭建zookeeper集群分布式/伪分布式
  2. [密码学] 破解维吉尼亚密码
  3. Wireshark的https代理抓包(whistle中间人代理)
  4. oc语言和c语言,C语言及OC语言初期学习心得
  5. 支撑性服务 自动化能力
  6. 2017.10.6 Java命名规范及使用情况
  7. mysql的底层数据结构_MySQL索引底层数据结构实现原理
  8. NFS+rsync+inotify镜像
  9. php 环信easyui_环信easeui集成:坑总结2018
  10. 远程登录软件secureCRT
  11. 程序员必知3大查找(转)
  12. Linux中阶知识总结
  13. vscode vue项目设置代理为locahost 始终无法连接本地项目
  14. 计算机考研408真题(全国统考2009--2020)、985高校计算机考研资料(清北+北理+北邮+武大+华科+浙大+复旦+哈工大+西安交大+华南理工)、王道四件套、天勤四件套---百度网盘免费下载
  15. 如何设置VS的唯美背景
  16. Python - 面向对象编程 - 实战(5)
  17. tp获取执行的sql语句
  18. Excel排序 - C#
  19. java实现一个整数分解为两个质数乘积
  20. highcharts legend图例禁止点击事件以及鼠标移入样式保持不变

热门文章

  1. 前端修改input上传的图片大小
  2. 记:EVE模拟器拓扑配置的保存及导入
  3. 视频会议十大开源项目
  4. Python +SQL Server 框架及返回结果处理
  5. 蜂鸟量化开创全新量化交易
  6. Linux下GPT分区,gdisk修复损坏的分区表
  7. ios友联统计的一些功能
  8. hadoop清理回收站
  9. 语音笔记APP哪个好 用它直接录音并整理很方便
  10. 基于色彩恒常( color constancy)特性的Frankle-McCann Retinex图像增强。