关于caffe的python写的层多GPU训练

原创 2016年08月29日 19:49:12

之前训练faster的时候一直没有办法进行多GPU训练,以为是自己的错,今天看了/include/caffe/layers/python_layer.h发现原来这是caffe的缘故。
python_layer.h
原来caffe在写的时候就不允许python使用多GPU训练。

深入分析:

其是主要的是python的缘故。
这里提到一个GIL。这里的GIL是 Python 的Global Interpreter Lock (全局解释器锁) 一次只允许一个thread在python解释器中运行。

什么是全局解释器锁呢?

Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时至于一个线程在执行,就像但CPU的系统中运行多个进程那样,内存中可以存放多个程序,但在任意时刻,只有一个程序在CPU中运行。同样地,虽然Python解释器可以“运行”多个线程,但在任意时刻,只有一个线程在解释器中运行。

对Python虚拟机的访问由全局解释器锁(global interpreter lock GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。在多线程环境中,Python虚拟机按以下方式执行。

  1. 设置GIL
  2. 切换到一个线程运行。
  3. 运行:
    a. 指定数量的字节码的指令,或者
    b. 线程主动让出控制(可以调用time.sleep(0))

  4. 把线程设置为睡眠状态。

  5. 解锁GIL。
  6. 再次重复以上所有步骤。
    在调用外部代码(如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中多GPU的使用方法

由于在ubuntu中使用caffe的程序时,都使用.sh文件,该文件中常见的命令为:./build/tools/caffe train --solver=examples/testXXX/solver...

服务器(多GPU)caffe安装和编译

一. 前提 多GPU交互在神经网络是常见的,所以在安装caffe之前需要安装NCCL,来保证多GPU之间的相互交流。 多GPU,这里指的是2个及2个以上英伟达显卡,而不是笔记本中的集显和独显。 ...

tensorflow 使用多块GPU同时训练多个模型

转自:http://stackoverflow.com/questions/34775522/tensorflow-mutiple-sessions-with-mutiple-gpus Te...

caffe python layer

caffe的大多数层是由c++写成的,借助于c++的高效性,网络可以快速训练。但是我们有时候需要自己写点输入层以应对各种不同的数据输入,比如你因为是需要在图像中取块而不想写成LMDB,这时候可以考虑使...
  • thesby
  • thesby
  • 2016年04月27日 21:04
  • 17066

在使用caffe的时候,如何设置GPU的ID号

有两种情况设置GPU的ID号: 1、如果使用caffe的源码(即非Python和matlab接口) add parameter --gpu=ID; 例如 "--gpu=1",如果不设置默认使用过的ID...

Caffe下多GPU性能问题

单机多卡的版本中,发现Caffe在多卡的效率,并比单卡更快。 在4X1080TI的机器上,使用gpu -all 的效率反而不如指定设备 gpu 0,这个是什么原因? 多卡带来了数据交换,导致性能下...

caffe,gpu ID号使用方法

由于在ubuntu中使用caffe的程序时,都使用.sh文件,该文件中常见的命令为:./build/tools/caffe train --solver=examples/testXXX/solver...

Caffe for Python 官方教程(翻译)

导言       本教程中,我们将会利用Caffe官方提供的深度模型——CaffeNet(该模型是基于Krizhevsky等人的模型的)来演示图像识别与分类。我们将分别用CPU和GPU来进行演示,并对...
  • jnulzl
  • jnulzl
  • 2016年07月31日 14:45
  • 26839

Caffe学习:使用pycaffe进行网络训练与测试

Caffe学习:使用pycaffe进行网络训练与测试

Caffe-Python接口常用API参考

本文整理了pycaffe中常用的API Packages导入 1 2 3 import caffe from caffe import layers as L from caffe i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于caffe的python写的层多GPU训练
举报原因:
原因补充:

(最多只允许输入30个字)