Ubuntu14.04配置cuda-convnet

系统 1737 0

转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/39722999

在上一个链接中,我配置了 cuda ,有强大的 GPU ,自然不能暴殄天物,让资源白白空暇着,所以配置一下卷积神经网络跑一下程序喽。至于卷积神经网络的原理,容后再写。打算先写库的使用方法,再写原理,以行动带动对理论的追求。

话不多说,步入正题。

1. 预说明

关于 cuda-convnet ,起源于一篇经典论文 ①,论文中针对 ILSVRC-2010 的数据进行实验,然后发布了事实上验使用的代码,链接为 ②。可是,事实往往跟论文是有差距的,链接②中的代码根本不能重现论文中的结果。在下不才,在使用这个链接的库非常久之后才发现的,认为非常坑,希望后来者慎之。

之所以说它坑,首先,论文中提到特性中, multi-GPU dropout 就没有实现,并且也没有给出论文中 8 层卷积神经网络的配置文件。总之不能直接拿来用,须要自己探索。

尽管如此,但有总比没有好,毕竟这个库实现的卷积神经网络封装的非常好,论文中的大神的贡献非我等小菜所能企及的。给大神点 32 个赞。

本文仅仅对 cuda-convnet cuda-convnet2 的配置进行说明,论文中的作者还发布了其它版本号的库,尚未用到,故且按下不提。

2. Cuda-convnet 配置

2.1. 源代码下载

參考链接②,先将源代码下载下来。

      svn checkout http://cuda-convnet.googlecode.com/svn/trunk/ cuda-convnet-read-only
    

取出的版本号是 562

2.2. 安装必要的库

然后,安装必须的库,我使用的是 ubuntu 系统。所以命令为

      sudo apt-get install python-dev python-numpy python-magic python-matplotlib libatlas-base-dev
    

当然,还要确认你安装了 cuda ,我安装的是 cuda6.5 ,在 /usr/local/ 文件夹下,例如以下所看到的:

      $ ls /usr/local
bin  cuda  cuda-6.5  etc  games  include  lib  man  sbin  share  src
    

2.3. 更改 build.sh

进入到刚才下载的 cuda-convnet-read-only 文件夹,更改 build.sh 文件里的配置路径。例如以下所看到的:

      # CUDA toolkit installation directory.
export CUDA_INSTALL_PATH=/usr/local/cuda
 
# CUDA SDK installation directory.
export CUDA_SDK_PATH=/usr/local/cuda-6.5/samples/common/inc
 
# Python include directory. This should contain the file Python.h, among others.
export PYTHON_INCLUDE_PATH=/usr/include/python2.7
 
# Numpy include directory. This should contain the file arrayobject.h, among others.
export NUMPY_INCLUDE_PATH=/usr/lib/python2.7/dist-packages/numpy/core/include/numpy
 
# ATLAS library directory. This should contain the file libcblas.so, among others.
export ATLAS_LIB_PATH=/usr/lib/atlas-base
 
make $*
    


依照官网的教程,配置完 build.sh 后就能够进行编译了。可是会错误发生,还须要改例如以下几个地方才干够。

2.4. 头文件加入

直接编译会发生找不到 cutil_inline.h 头文件的错误。分析原因可能是原来有这个头文件,后来这个头文件的功能被实现到其它头文件里去了。

include 子目录下田间 cutil_inline.h 文件,并输入内容。

      #include "helper_cuda.h"
#define cutilCheckMsg(a) getLastCudaError(a)
#define cutGetMaxGflopsDeviceId() gpuGetMaxGflopsDeviceId()
#define MIN(a,b) (a) < (b) ? (a) : (b)
    

2.5. MakeFile 文件更改

MakeFile 3 行,原文例如以下:

      INCLUDES :=  -I$(PYTHON_INCLUDE_PATH) -I$(NUMPY_INCLUDE_PATH) -I./include -I./include/common -I./include/cudaconv2 -I./include/nvmatrix
    

加入 cuda 的路径后例如以下:

      INCLUDES :=  -I$(PYTHON_INCLUDE_PATH) -I$(NUMPY_INCLUDE_PATH) -I$(CUDA_SDK_PATH) -I./include -I./include/common -I./include/cudaconv2 -I./include/nvmatrix
    

保存之。

2.6. 最后的库链接错误

做完上述修改后,能够编译了,但到最后会发生一个库链接的错误,不用管,直接将那个库凝视掉。

common-gcc-cuda-4.0.mk 文件的 332 行。直接用 # 号凝视。

      # LIB += -lcutil_$(LIB_ARCH) $(LIBSUFFIX) -lshrutil_$(LIB_ARCH) $(LIBSUFFIX)
    

至此,就能够完毕 cuda-convnet 的编译了。

3. Cuda-convnet2 配置

顾名思义,这是 cuda-convnet 2.0 版本号,支持多 GPU 执行。

3.1. 源代码下载

git clone  https://code.google.com/p/cuda-convnet2/

3.2. 必要的库

      sudo apt-get install python-dev python-numpy python-scipy python-magic python-matplotlib libatlas-base-dev libjpeg-dev libopencv-dev
    

3.3. 配置

我仅仅能说,这个版本号的比上个版本号人性化多了,这个版本号的 build.sh 直接如此。

      # CUDA toolkit installation directory.
export CUDA_INSTALL_PATH=/usr/local/cuda
 
# Python include directory. This should contain the file Python.h, among others.
export PYTHON_INCLUDE_PATH=/usr/include/python2.7
 
# Numpy include directory. This should contain the file arrayobject.h, among others.
export NUMPY_INCLUDE_PATH=/usr/lib/python2.7/dist-packages/numpy/core/include/numpy/
 
# ATLAS library directory. This should contain the file libcblas.so, among others.
export ATLAS_LIB_PATH=/usr/lib/atlas-base
 
# You don't have to change these:
export LD_LIBRARY_PATH=$CUDA_INSTALL_PATH/lib64:$LD_LIBRARY_PATH
export CUDA_SDK_PATH=$CUDA_INSTALL_PATH/samples
export PATH=$PATH:$CUDA_INSTALL_PATH/bin
    

假设是在 ubuntu 下的话,这样就直接已经基本把路径都配置对了。

3.4. 链接错误

可是直接编译的话还是会遇到错误,例如以下所看到的:

      cd ./bin/ && g++  -O3   -DNUMPY_INTERFACE -shared -Wl,-no-undefined -o libutilpy.so src/matrix.o -L/usr/lib/atlas-base -latlas -lcblas -lpython2.7
/usr/bin/ld: cannot find -latlas
/usr/bin/ld: cannot find -lcblas
collect2: error: ld returned 1 exit status
    

主要是由于 atlas 库中没有 libatlas.so libctlas.so 。查看 atlas 的文件夹发现结构如此:

      :/usr/lib/atlas-base$ ls -l
总用量 4292
drwxr-xr-x 2 root root    4096  9月 22 11:41 atlas
lrwxrwxrwx 1 root root      15  2月  4  2014 libatlas.so.3 -> libatlas.so.3.0
-rw-r--r-- 1 root root 3746968  2月  4  2014 libatlas.so.3.0
lrwxrwxrwx 1 root root      15  2月  4  2014 libcblas.so.3 -> libcblas.so.3.0
-rw-r--r-- 1 root root  135376  2月  4  2014 libcblas.so.3.0
lrwxrwxrwx 1 root root      17  2月  4  2014 libf77blas.so.3 -> libf77blas.so.3.0
-rw-r--r-- 1 root root  131000  2月  4  2014 libf77blas.so.3.0
lrwxrwxrwx 1 root root      22  2月  4  2014 liblapack_atlas.so.3 -> liblapack_atlas.so.3.0
-rw-r--r-- 1 root root  369472  2月  4  2014 liblapack_atlas.so.3.0
    

加入两个软链接,运行命令:

      sudo ln -s libatlas.so.3.0 libatlas.so
sudo ln -s libcblas.so.3.0 libcblas.so
    

文件夹结构变为如此:

      /usr/lib/atlas-base$ ls -l
总用量 4292
drwxr-xr-x 2 root root    4096  9月 22 11:41 atlas
lrwxrwxrwx 1 root root      15 10月  1 22:35 libatlas.so -> libatlas.so.3.0
lrwxrwxrwx 1 root root      15  2月  4  2014 libatlas.so.3 -> libatlas.so.3.0
-rw-r--r-- 1 root root 3746968  2月  4  2014 libatlas.so.3.0
lrwxrwxrwx 1 root root      15 10月  1 22:36 libcblas.so -> libcblas.so.3.0
lrwxrwxrwx 1 root root      15  2月  4  2014 libcblas.so.3 -> libcblas.so.3.0
-rw-r--r-- 1 root root  135376  2月  4  2014 libcblas.so.3.0
lrwxrwxrwx 1 root root      17  2月  4  2014 libf77blas.so.3 -> libf77blas.so.3.0
-rw-r--r-- 1 root root  131000  2月  4  2014 libf77blas.so.3.0
lrwxrwxrwx 1 root root      22  2月  4  2014 liblapack_atlas.so.3 -> liblapack_atlas.so.3.0
-rw-r--r-- 1 root root  369472  2月  4  2014 liblapack_atlas.so.3.0
    

然后就能够正常编译了。

參考文献

① ImageNet Classification with Deep Convolutional Neural Networks

②  https://code.google.com/p/cuda-convnet

③  https://code.google.com/p/cuda-convnet2

Ubuntu14.04配置cuda-convnet


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论