关于caffe的python写的层多GPU训练
来源:互联网 发布:类似此岸歌声d 淘宝 编辑:程序博客网 时间:2024/06/07 05:02
之前训练faster的时候一直没有办法进行多GPU训练,以为是自己的错,今天看了/include/caffe/layers/python_layer.h发现原来这是caffe的缘故。
原来caffe在写的时候就不允许python使用多GPU训练。
深入分析:
其是主要的是python的缘故。
这里提到一个GIL。这里的GIL是 Python 的Global Interpreter Lock (全局解释器锁) 一次只允许一个thread在python解释器中运行。
什么是全局解释器锁呢?
Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时至于一个线程在执行,就像但CPU的系统中运行多个进程那样,内存中可以存放多个程序,但在任意时刻,只有一个程序在CPU中运行。同样地,虽然Python解释器可以“运行”多个线程,但在任意时刻,只有一个线程在解释器中运行。
对Python虚拟机的访问由全局解释器锁(global interpreter lock GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。在多线程环境中,Python虚拟机按以下方式执行。
- 设置GIL
- 切换到一个线程运行。
运行:
a. 指定数量的字节码的指令,或者
b. 线程主动让出控制(可以调用time.sleep(0))把线程设置为睡眠状态。
- 解锁GIL。
- 再次重复以上所有步骤。
在调用外部代码(如C/C++扩展函数)的时候,GIL将会被锁定,知道这个函数结束为止(由于在这期间没有Python的字节码被运行,所以不会有线程切换)。编写拓展的程序员可以主动解锁GIL。不过,Python的开发人员则不用担心在这些情况下你的Python代码会被锁住【1】。
那解决办法是什么呢?就这样认命么?NO!
高手总是有的。
方案1:https://github.com/BVLC/caffe/issues/2936
提供者:naibaf7 Berkeley Vision and Learning Center member
release the GIL for the forward/backward passes in the OpenCL branch。
方案2:https://github.com/BVLC/caffe/pull/4360
提供者:alessandroferrari
Added ScopedGILRelease for easy GIL release. Modified _caffe.cpp in pycaffe accordingly.
参考文献:
【1】Python核心编程(第二版)
- 关于caffe的python写的层多GPU训练
- caffe下多gpu训练,NCCL的配置
- Caffe训练mnist数据遇到的问题(GPU版)
- 多GPU 训练的问题
- caffe多GPU训练用自己的data layer被rand坑了
- caffe训练GPU配置
- caffe中多GPU的使用方法
- 迁移学习之caffe训练的层设置
- caffe中Python层的使用
- caffe中Python层的使用
- caffe 定义自己的python层
- caffe中Python层的使用
- 关于caffe innerproduct层的理解
- 利用caffe训练的模型,写一个测试程序
- 手把手教你用python写脚本看caffe训练好的网络测试单张图片的输出
- 手把手教你用python写脚本看caffe训练好的网络测试单张图片的输出
- 用caffe在notebook(gpu/cpu性能有限)上训练数据出现的错误
- Intel caffe 安装及用gpu训练即去掉CPU-Only的方法
- 增加一个panel的流程
- poj1308——Is It A Tree?(判断是否为树)
- FashJson报错JsonException:except:'[' ,but 4
- LSD:一种直线检测算法简介
- 程序员进阶学习书籍参考指南
- 关于caffe的python写的层多GPU训练
- 接口的定义
- 应用的生命周期
- numpy array transpose
- Linux 学习总结(五)
- Volley 数据缓存分析
- RippleDrawable
- iptables--SNAT
- 3.vc从零开始 -- Win32项目hello world(一)