pytorch多进程加速及代码优化方法


Posted in Python onAugust 19, 2019

目标:优化代码,利用多进程,进行近实时预处理、网络预测及后处理:

本人尝试了pytorch的multiprocessing,进行多进程同步处理以上任务。

from torch.multiprocessing import Pool,Manager

为了进行各进程间的通信,使用Queue,作为数据传输载体。

manager = Manager()
  input_queue = manager.Queue()
  output_queue = manager.Queue()

  show_queue = manager.Queue()

即将预处理进程处理后的图像放进 input_queue,而网络预测进程实时获取 input_queue队列中的数据,一旦放入,就从中取出,输入网络:

while 1:

  input = input_queue.get()

同理,将网络输出放入output_queue,再由后处理进程实时获取并进行后处理,处理后,放入show_queue

从而实现了多进程同步进行预处理、网络预测及后处理,加速了网络实时预测的表现。

问题及解决方案:

1. pytorch cuda报错,re-initialization报错问题:

习惯了在一开始将模型先加载进来放入gpu中,所以模型在主线程就完成了初始化,但是调用网络是在网络预测子进程进行的,就会导致跨进程重复初始化失败。

解决方案:

直接在子进程开始时初始化,其他进程可以设置个延时,等网络初始化好后再开始运行。

同理,数据输入网络也是同样的在子进程进行。

2. python3多进程编程,子进程不报错问题:

一开始总是代码运行起来什么都不出现,就开始各种debug,但因为python3中子进程不报错,出错了就卡在那里,就每次自己找bug很麻烦,所以就急需子进程的报错信息。

解决方案:

用try except组合,来打印子进程中某段程序错误,如下:

try:
        out = forward(input_img,model,1)
      except Exception as error:
        print(error)

3.进程完全不运行时,考虑是否是输入设置的问题,即当单变量输入时,后面要加都好,如:

pool.apply_async(load_frame,args=(input_queue,))

如果是pool.apply_async(load_frame,args=(input_queue))则该进程不会启动运行。

4. 一开始想优化cv2.resize,想用gpu下的tensor的resize_代替,但发现这种方式和numpy.resize一脉相承啊,根本不是我们想要的resize,如果是变大的话,这种resize会直接按顺序填,然后剩下的就填0,实在是太草率了。。。

解决方案:还没有很好的替代方案,只找了一下,cuda::resize,但是好像貌似没有python接口,要是混合编程好像有点小题大做,得不偿失了。如果各位有较好的方案,欢迎指点迷津。

以上这篇pytorch多进程加速及代码优化方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python版简单工厂模式
Oct 16 Python
Python求出0~100以内的所有素数
Jan 23 Python
Python处理中文标点符号大集合
May 14 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Python代码太长换行的实现
Jul 05 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
Python中内建模块collections如何使用
May 27 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 #Python
python opencv实现证件照换底功能
Aug 19 #Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 #Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 #Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 #Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 #Python
pytorch使用指定GPU训练的实例
Aug 19 #Python
You might like
使用PHP编写发红包程序
2015/07/22 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python使用Tesseract库识别验证
2018/03/21 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
体育教育专业毕业生自荐信
2013/11/15 职场文书
情况说明书格式范文
2014/05/06 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Python list列表删除元素的4种方法
2021/11/01 Python
SQL SERVER触发器详解
2022/02/24 SQL Server