Ubuntu 1604 + cuda8.0 + caffe
经过长期的验证,本博客装caffe成功,为了方便大家和自己,记录下来,给后来者参考
1、安装依赖包
2、 禁用 原显卡驱动 nouveau
3、下载cuda8.0
4、安装cuda8.0
5、安装cudnn
6、配置环境变量
7、安装opencv
8、安装caffe
9、安装pycaffe 接口环境
第一步 安装依赖包
安装后续步骤或换环境所需要的依赖包和工具,依次输入:
1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler 2 3 sudo apt-get install --no-install-recommends libboost-all-dev 4 5 sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev 6 7 sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev 8 9 sudo apt-get install git cmake build-essential libopencv-dev
有一定几率安装失败导致后面步骤出现问题,要确保安装成功,验证方法是重新运行命令
第二步 禁用nouveau
每个Ubuntu装好以后,会自带显卡驱动 nouveau ,只有禁用掉 nouveau 后才能够安装NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,用一下命令打开,必须用管理员权限才能写入:
1 sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
打开后发现该文件中没有任何内容,其实这个文件是自己建的配置文件,写入:
1 blacklist nouveau option nouveau modeset=0
保存退出后,要执行一下命令时配置文件禁用 nouveau 真正生效:
1 sudo update-initramfs -u
也可以重新启动,重启后会发现桌面分辨率出问题,原因是没有显卡驱动
第三步 下载cuda 8.0
进入 https://developer.nvidia.com/cuda-downloads ,依次选择 CUDA 类型然后下载即可。
第四步 安装cuda8.0
第四步下载的1.4G的 CUDA中包含有 nvidia 显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动,若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动,然后开始安装 CUDA 8.0;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 8.0,在安装过程中选择不再安装 nvidia 显卡驱动。
<卸载驱动的方法>
通过附加驱动安装显卡驱动后有些不满意需要换驱动首先要卸载驱动 以我安装的nvidia-331-updates为例如果你安装的其它版本,请自行更改命令
sudo apt-get remove --purge nvidia-*
1 sudo service lightdm stop
然后通过 Ctrl + Alt + F7 发现已无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的 nvidia 驱动安装尤为重要,必需确保桌面服务已关闭。
Ctrl + Alt + F1 进入文本模式,然后运行 CUDA 安装文件进行安装,直接通过 sh 命令运行安装文件即可:
1 cd 下载cuda的目录 2 3 chmod +x cuda_名字.run 4 5 sudo ./cuda_名字 .run
执行此命令约1分钟后会出现 0%信息,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里的选择对应第5步开头,若未安装则输入 “y”,若确保已安装正确驱动则输入“n”。
剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为未关闭桌面服务或在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启:
1 sudo reboot
第五步 配置环境变量
重启后登录进入系统,配置 CUDA 环境变量,与第3步相同,使用 gedit 命令打开配置文件:
1 sudo gedit ~/.bashrc
在该文件最后加入以下内容并保存:
1 export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 2 3 export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 4 5 export PATH=/usr/local/cuda-8.0/bin:$PATH 6 7 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
是该配置生效
1 source ~/.bashrc
验证cuda安装是否成功
1 cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery 2 3 sudo make 4 5 ./deviceQuery
第六步 安装cudnn
登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录
下载完成后解压,得到一个 cuda 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:
1 sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件
然后命令行进入 cudn/lib64 路径下,运行以下命令:
1 sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库 2 3 cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件 4 5 sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软衔接 6 7 sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接
注意生成软连接这里,一定要对应自己下载的cudnn版本 是5.1.10 还是其他
第七步 安装opencv
进入官网 : http://opencv.org/releases.html , 选择 3.1.0 版本的 source , 下载 opencv-3.1.0.zip
解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.1.0 目录下,执行:
1 mkdir build # 创建编译的文件目录 2 3 cd build 4 5 cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 6 7 make -j8 #编译
在执行 make -j8 命令编译到 92% 时可能会出现以下错误:
1 modules/cudalegacy/src/graphcuts.cpp:120:54: error: 2 ‘NppiGraphcutState’ has not been declared 3 typedef NppStatus (*init_func_t)(NppiSize oSize, 4 NppiGraphcutState** ppState, Npp8u* pDeviceMem);
这是由于opecv3.1与cuda8.0不兼容导致的。解决办法:
修改 /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp 文件内容,如图:
编译成功后安装:
1 sudo make install #安装
安装完成后通过查看 opencv 版本验证是否安装成功:
1 pkg-config --modversion opencv
第八步 安装caffe
首先在你要安装的路径下 clone :
1 git clone https://github.com/BVLC/caffe.git
进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :
1 sudo cp Makefile.config.example Makefile.config
复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。
然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
1 sudo gedit Makefile.config
修改 Makefile.config 文件内容:
1.应用 cudnn
1 将 2 #USE_CUDNN := 1 3 修改成: 4 USE_CUDNN := 1
2.应用 opencv 版本
1 将 2 #OPENCV_VERSION := 3 3 修改为: 4 OPENCV_VERSION := 3
3.使用 python 接口
1 将 2 #WITH_PYTHON_LAYER := 1 3 修改为 4 WITH_PYTHON_LAYER := 1
4.修改 python 路径
1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 2 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 3 修改为: 4 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial 5 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
OK ,可以开始编译了,在 caffe 目录下执行 :
1 make all -j8
这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。
编译成功后可运行测试:
1 sudo make runtest -j8
如果显示结果为上图所示,则表示 caffe 已经成功安装。
第九步 配置pycaffe
在上一步成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只是如果用到自己实现的python层,需要pycaffe接口
首先编译 pycaffe :
1 cd caffe 2 3 sudo make pycaffe -j8
编译出错可能是没有安装python必要的包,如numpy
1 sudo apt-get install python-numpy
编译 pycaffe 成功后,验证一下是否可以在 python 中导入 caffe 包,首先进入 python 环境:
1 python
2 import caffe
报 File "<stdin>", line 1, in <module> ImportError: No module named caffe 错误
解决办法:
1 gedit ~/.bashrc 2 3 export PYTHONPATH="~/caffe/python" 4 5 source ~/.bashrc
如果出现 ImportError: No module named skimage.io 错误
1 pip install -U scikit-image #若没有安装pip: sudo apt install python-pip