有些炼丹师可能机器不足,只有一张卡,然后训练完成了,想要测试的时候,受限于图像样本size不一致,不能合并到一个batch中。当然解决方案很多,但有一种更自然的办法,既使用任意分辨率的输入,同样使用多进程在单卡上并行执行数据的测试,从而加快测试速度,赶上dideline。

大家都知道Pytorch官方推广大家使用分布式多卡并行计算,其原理是每个进程都使用一个GPU。那我们现在要做的就是多进程都在一个GPU上,每个进程处理一批数据,从而加快处理速度。

前言

  • 模型在GPU上,Pytorch规定:多进程的启动方法必须是"spawn",所以使用map_async或者apply_async这类方法是不行了。

  • 执行这套流程的大致思路是,我们可以先把要处理的数据加入到容器中(比如字典或者元祖列表),然后把容器中的数据分段,分段的数目就是进程数,然后每个进程处理自己对应的那些数据。由于输入的size不一样,所以我们要一张一张的处理,但因为开了多进程,实际的batchsize等于进程数目。

假设我们现在有一批数据,我们先要把这批数据的目录地址加到一个容器中,

    target_loc = make_dataset(os.path.join(img_root, training_subfix), True)target_loc.extend(make_dataset(os.path.join(img_root, val_subfix), False))target_loc.sort(key=lambda x: x[0]) # 保证一致print(len(target_loc))

make_dataset的作用就是把所有的数据的地址加入到target_loc中。target_loc是一个list。
然后开始多进程启动

import multiprocessing as mp # 这里不需要使用pytorch的multiprocessing
mp = mp.get_context('spawn')
pool = []
n_proc = 4  # 开4进程
total_num = len(target_loc)
phrase = total_num // n_proc + 1
for i in range(n_proc):divied_target = target_loc[i*phrase:(i+1)*phrase]  # 所有的数据分成4份process = mp.Process(target=prediction_by_dfsd, args=(divied_target,i)) # 每个进程都执行prediction_by_dfsdprocess.start()pool.append(process)
for p in pool:p.join()  # 等待所有进程执行完毕

prediction_by_dfsd这个函数就是测试数据的函数,这个函数需要完成的是,从分段的容器中读取图像,然后一张张的预测,然后保存结果。
另外我需要说明的是,spawn的启动进程的方式和我们平常使用的map_async等不一样,从spawn启动的进程,是无法访问到主进程的任何变量的。所有我们需要在prediction_by_dfsd完成模型定义,导入参数等操作。当然一些变量可以通过Process的args传进去。
所以和使用分布式训练一样,每个进程都会定义一次模型。只不过我们这个方法,是在单卡上使用多进程,一样能使用并行预测,满足了在一些情况,比如样本size不一样,不能合并到batch中,而一张一张预测又太慢的问题。

最后

当然我后面反应过来了。只用使用dataloader,batchsize为1,一样可以使用标准的pytorch分布式流程使用多进程在单卡上的测试,只不过不需要设置gpu id就行了。所有的模型都往一个gpu上搬运。不过呢,对于简单的任务,没有必要再写一个dataloader,所以我这个办法还是有价值的。

Pytorch 多进程在单卡上测试相关推荐

  1. pytorch深度学习单卡训练和多卡训练

    单机单卡训练模式 # 设置GPU参数,是否使用GPU,使用那块GPUif config.use_gpu and torch.cuda.is_available():device=torch.devic ...

  2. pytorch 使用DataParallel 单机多卡和单卡保存和加载模型时遇到的问题

    首先很多网上的博客,讲的都不对,自己跟着他们踩了很多坑 1.单卡训练,单卡加载 这里我为了把三个模块save到同一个文件里,我选择对所有的模型先封装成一个checkpoint字典,然后保存到同一个文件 ...

  3. Pytorch分布式训练/多卡训练(二) —— Data Parallel并行(DDP)(2.2)(代码示例)(BN同步主卡保存梯度累加多卡测试inference随机种子seed)

    DDP的使用非常简单,因为它不需要修改你网络的配置.其精髓只有一句话 model = DistributedDataPrallel(model, device_ids=[local_rank], ou ...

  4. pytorch GPU分布式训练 单机单卡、单机多卡

    可以用"watch -n 0.1 nvidia-smi"来查看gpu状态,我用的是3块12G的GPU进行实验 本实验将使用一个简单的瞎写的网络进行,网络训练一个分类任务,当然这个不 ...

  5. ssd2828测试进入测试模式_LOL卡牌推出“远征”轮抽模式 本周再度开启线上测试...

    英雄联盟卡牌游戏Legends of Runeterra,将在11月14日再次开放测试,这次的测试持续到11月19日.在本次测试中包括轮抽模式"远征",此前接触过其他卡牌游戏的玩家 ...

  6. 程序如何在两个gpu卡上并行运行_【他山之石】如何支撑上亿类别的人脸训练?显存均衡的模型并行(PyTorch实现)...

    18年的工作,一直没抽出时间整理出来,模型并行看似神秘,在网上搜索相关资料的时候大部也是以谈原理的居多,唯独少了有人拿出代码来捅破这层窗户纸.这里我放出一个PyTorch版本的Demo供大家参考交流. ...

  7. 关于安卓系统4.0/5.0/6.0获取单卡手机,双卡手机的imei1,imei2,meid(用反射来实现,史上最详细,最全面获取)--binbinyang

    有的人问我要代码跟例子,上次在GITHUB上弄了一个,提供地址 给大家 https://github.com/binbinyYang/GetPhoneInfo https://github.com/b ...

  8. 天猫tf卡速度测试软件,迟到的晒单:天猫5块9包邮的32GBTF卡拆箱评测

    迟到的晒单:天猫5块9包邮的32GBTF卡拆箱评测 2020-03-09 10:00:00 5点赞 6收藏 6评论 创作立场声明:Tony哥的PC日常这是一份迟到的晒单,去年底聚划算神价盘到手的.当时 ...

  9. pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)

    在pytorch加载预训练模型时,可能遇到以下几种情况. 分为以下几种 在pytorch加载预训练模型时,可能遇到以下几种情况. 1.多卡训练模型加载单卡预训练模型 2. 多卡训练模型加载多卡预训练模 ...

最新文章

  1. HDU3440(差分约束+SPFA算法)
  2. 迁移学习(Transfer learning)、重用预训练图层、预训练模型库
  3. visual studio 工具箱(选项卡、无控件、灰图标)
  4. pywinauto 同花顺_东方财富、同花顺、恒生电子,到底谁是互联网金融老大?
  5. CISSP考试通过,现在开始接受各种恭喜。[10-50]
  6. Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'
  7. web前端实战系列[4]——多级菜单
  8. boost::errinfo_errno的用法测试程序
  9. 安卓下拉框获取序号_中文编程:安卓的右上角菜单
  10. Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
  11. python逢7跳过_python实现逢七拍腿小游戏的思路详解
  12. python将json数据集转成voc xml文件
  13. 【微软推荐】结合知识的推荐系统.pdf(附下载链接)
  14. 关于 java jdk 环境变量的配置
  15. CentOS6.5菜鸟之旅:中文编辑器忍痛放弃Sublime
  16. HaaS Python 云端一体AI 车型识别功能
  17. 测试不同体重体型软件样子的,一种智能体型体重测量仪的设计
  18. 【NOIP提高A组模拟2018.8.8】没有硝烟的战争
  19. c 语言图片转字符画,图片转化为字符画(C#版)
  20. Oracle语句详解

热门文章

  1. 关于矩阵乘法运算顺序上的技巧
  2. sql语句中and,or的运算顺序
  3. [漏洞利用]利用五次Shift越权破解win7\win10开机密码
  4. Android自动化测试之Monkey命令使用及monkey脚本编写
  5. 西电南理工计算机学院,【全国六所电子科技大学排名】_电子科学与技术专业:最好的6所大学!有2所仅仅是211!...
  6. 电脑启动 状态 0xc00000e9
  7. 第二个作业:贝叶斯估计
  8. 树莓派系列二(语音识别)
  9. android mp4 转码成mp3,伙伴们告诉你们,怎么把MP4格式转换成MP3格式!
  10. 完美实现如何在安卓设备设置公司outlook等邮箱