在这个链接中(http://www.linuxidc.com/Linux/2014-10/107501.htm),我配置了cuda,有强大的GPU,自然不能暴殄天物,让资源白白空闲着,所以配置一下卷积神经网络跑一下程序喽。至于卷积神经网络的原理,容后再写。打算先写库的用法,再写原理,以行动带动对理论的追求。话不多说,步入正题。
1. 预说明
关于cuda-convnet,起源于一篇经典论文①,论文中针对ILSVRC-2010的数据进行实验,然后公布了其实验使用的代码,链接为②。但是,事实往往跟论文是有差距的,链接②中的代码根本不能重现论文中的结果。在下不才,在使用这个链接的库很久之后才发现的,觉得很坑,希望后来者慎之。之所以说它坑,首先,论文中提到特性中,multi-GPU和dropout就没有实现,而且也没有给出论文中8层卷积神经网络的配置文件。总之不能直接拿来用,需要自己探索。虽然如此,但有总比没有好,毕竟这个库实现的卷积神经网络封装的很好,论文中的大神的贡献非我等小菜所能企及的。给大神点32个赞。本文只对cuda-convnet和cuda-convnet2的配置进行说明,论文中的作者还公布了其他版本的库,尚未用到,故且按下不提。
Ubuntu 12.04 下 CUDA 编程 http://www.linuxidc.com/linux/2014-06/103056.htm Ubuntu 12.04 安装 CUDA-5.5 http://www.linuxidc.com/Linux/2013-10/91101.htm Ubuntu 11.10 上安装CUDA开发环境 http://www.linuxidc.com/Linux/2012-04/58913.htm Fedora 15系统下配置CUDA环境 http://www.linuxidc.com/Linux/2011-12/49874.htm Ubuntu 11.04 安装 NVIDIA CUDA 4.0 RC2 http://www.linuxidc.com/Linux/2011-10/46304.htm Linux Mint 13/Ubuntu 12.04 配置CUDA 4.2 & OpenCV 2.4.2 方法 http://www.linuxidc.com/Linux/2013-10/91102.htm CUDA入门教程 http://www.linuxidc.com/Linux/2014-07/104328.htm
2. Cuda-convnet配置
2.1. 源码下载
参考链接②,先将源码下载下来。
- svn checkout http://cuda-convnet.googlecode.com/svn/trunk/ cuda-convnet-read-only
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
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
$ ls /usr/localbincudacuda-6.5etcgamesincludelibmansbinsharesrc2.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 $*
# 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)
#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
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
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)
# LIB += -lcutil_$(LIB_ARCH) $(LIBSUFFIX) -lshrutil_$(LIB_ARCH) $(LIBSUFFIX) 至此,就可以完成cuda-convnet的编译了。
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-10/107500p2.htm
Linux基础教程:如何在CentOS或RHEL 7上修改主机名Ubuntu 14.04 安装配置CUDA相关资讯 CUDA cuda-convnet Ubuntu 14.04配置CUDA
- Ubuntu 16.04 LTS+NVIDIA@GT620M+ (今 14:03)
- Ubuntu15.10_64位安装Theano+CUDA7 (08月10日)
- Ubuntu 16.04系统下CUDA7.5配置 (07月03日)
| - Caffe配置简明教程 ( Ubuntu 14.04 (09月08日)
- Ubuntu下安装Torch并配置CUDA和 (07月16日)
- Ubuntu 14.04安装Nvidia CUDA7.5并 (09/26/2015 10:22:41)
|
本文评论 查看全部评论 (0)