关于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实例整个流程

四个类别:第0类 train:10000张 test:1685张   第1类:train:10000张  test:1250张  第2类:train:10000张 test:3553张 第3类:tra...

Ubuntu+caffe+python(No GPU)配置及CentOS+Caffe+python+GPU配置

本来是想直接在Linux上装caffe按照这个人的教程:http://www.cnblogs.com/cj695/p/4498270.html 他的sudo apt-get install XXX我全...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

LINQ专栏----LINQ中的分页技术

在asp.net中,我们已经有很多成熟性的分页控件了,比如吴旗镇的AspnetPage,再结合PageQuery类,它们之间的配合简直就是天衣无缝。今天在这里我与大家一起分享关于如何用LINQ技术实现...
  • aganar
  • aganar
  • 2011-03-27 00:05
  • 6247

Caffe学习笔记(1)--Python接口

前言使用caffe也有一小段时间了,但是对于caffe的python接口总是一知半解,最近终于能静下心来,仔细阅读了caffe官方例程,并写下此博客。博文主要对caffe自带的分类例程00-class...

资产组合优化原理与实例 Portfolio Optimization

在前一片文章(SkLearn 对上证50成分股聚类 )中简单介绍了投资组合优化理论,在此进一步介绍下该理论,以及如何进行Portfolio Optimization。1. Markowitz投资组合理...

如何用Python一门语言通吃高性能并发、GPU计算和深度学习

【CTO讲堂】如何用Python一门语言通吃高性能并发、GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 ...

PyCUDA教程(二):教程

启程 在使用PyCUDA之前我们需要导入并且初始化: import pycuda.driver as cuda import pycuda.autoinit from pycuda.compile...

GPU和python

今天看到一篇大数据的文章,分析了python作为机器学习语言的优势,其中提到在2010年python的Theano库在CPU上运行时,其速度是Numpy的1.8倍, 而在GPU上运行时,其速度是Num...
  • h5y6w8
  • h5y6w8
  • 2015-09-11 09:17
  • 3254

PyCUDA学习日记1

通过PyCUDA可以让Python对CUDA进行操作,进行高性能计算,可以用于图形图像、模式识别、机器视觉等。自己在Ubuntu 14.04 Desktop LTS上面进行实验,导入pycuda之前需...

【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA

Python实现的CUDA – pyCUDANvidia的CUDA 架构为我们提供了一种便捷的方式来直接操纵GPU 并进行编程,但是基于 C语言的CUDA实现较为复杂,开发周期较长。而python ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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