记录一下GPU版本的caffe的安装过程, 路慢慢其修远兮, 吾将上下而求索.
安装opencv
安装需要的两个opencv文件在我的百度云中可以下载,百度云链接地址:链接:链接: https://pan.baidu.com/s/1o8ZK76E 密码: hswb
具体安装教程见百度云中Linux下OpenCV安装PPT所示,讲解的很详细。编译成功之后可以用例子测试一下,PPT中也有具体讲解。
如何测试?
Ubuntu16.04下安装opncv
(1) Create a directory DisplayImagefor test project:
cd DisplayImage
(2) Create DisplayImage.cpp and edit it:
vim DisplayImage.cpp
Then edit the DisplayImage.cpp:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv){
if(argc!= 2){
printf("usage:DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image= imread(argv[1], 1);
if(!image.data)
{
printf("Noimage data\n");
return -1;
}
namedWindow("DisplayImage",CV_WINDOW_AUTOSIZE);
imshow("DisplayImage",image);
waitKey(0);
return 0;
}
(3) Create a CMake file:
vim CMakeLists.txt
Then edit the CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(DisplayImage)
find_package(OpenCV REQUIRED)
add_executable(DisplayImage DisplayImage.cpp)
target_link_libraries(DisplayImage ${OpenCV_LIBS})
(4) Generate the executable file:
cmake .
make
(5) Execute it:
./DisplayImage lena.jpg
lena.jpg is the test image
安装显卡驱动
手动安装
(1)查询NVIDIA驱动型号:
首先去官网 http://www.nvidia.com/Download/index.aspx?lang=en-us 查看适合自己显卡的驱动并下载:
驱动文件后缀名应当是以.run结尾的(即现在选项第一个)。我们要把这个文件移动到家目录下,原因是下面我们要切换到文字界面下,如果放到~/下载下面,我们没有办法进入下载这个目录(没有中文输入法,且中文全部是乱码)
图1.输入显卡型号
图2.显卡驱动搜索结果
(2)禁止集成的nouveau驱动
Ubuntu系统集成的显卡驱动程序是nouveau,它是第三方为NVIDIA开发的开源驱动,我们需要先将其屏蔽才能安装NVIDIA官方驱动。
将驱动添加到黑名单blacklist.conf中,但是由于该文件的属性不允许修改。所以需要先修改文件属性。
查看属性
$sudo ls -lh /etc/modprobe.d/blacklist.conf
修改属性
$sudo chmod 666 /etc/modprobe.d/blacklist.conf
用vim/gedit编辑器打开
$sudo vim /etc/modprobe.d/blacklist.conf
在该文件后添加一下几行:
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb
执行以下命令,重新加载内核:
sudo update-initramfs -u
重启后,执行:lsmod | grep nouveau。如果没有屏幕输出,说明禁用nouveau成功。
(3)接下来就是自己安装显卡驱动了:
1).卸载你电脑中此刻有的nvidia的驱动。(复制命令就行,方便,后面也一样)
sudo apt-get remove –purge nvidia*
或者针对不同的安装方式有不同的卸载方法
sudo chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run --uninstall
运行了这个命令之后,你系统中的NVIDIA的一些驱动就应该被卸载了。
2).添加一个PPA到系统,等一下安装驱动要用的。复制下面的话命令就行(放在这里是因为你现在还在图形界面,复制方便)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
重启电脑
3).上面的准备工作做完,马上就要脱离图形界面进入字符界面了,要是这个时候你看不到教程,还是推荐用手机或者平板边看教程边操作。按CTRL+ATL+F1进入终端1(输入用户名和密码后和终端很相似,可以大胆进去), CTRL+ATL+F7是进入图形页面.
在终端下面运行:
sudo service lightdm stop(关闭图形界面)
查看适合自己的最新版NVIDIA显卡驱动
sudo apt-cache search nvidia*
对照搜索结果和之前下载的文件编号, 然后输入:
sudo apt-get install nvidia-390(你下载的驱动是什么版本这里就写什么)
然后就等待驱动安装好。。。。。
安装好之后,运行sudo service lightdm start来启动图形界面,并且登录。然后,你这个时候应该又回到图形界面了。
这时候你可以运行:nvidia-smi来看是不是能够输出你的GPU的一些信息。要是不能够输出的话,重启。能够输出的话,也建议重启一次。
自动安装
选择系统自动更新即可
输入以下指令进行验证:
sudo nvidia-smi
安装过程可能遇到的问题
如果在安装过程中, 提示驱动与电脑的secure boot模式冲突, 驱动无法生效, 进入bios, 设置 secure boot 为 not enable, 否则即使安装成功了, 也无法正常使用驱动.
关于secure boot和UEIF以及BIOS的种种可以参考这个博客
检查是否安装成功
nvidia-smi #若列出GPU的信息列表,表示驱动安装成功
nvidia-settings #若弹出设置对话框,亦表示驱动安装成功
安装cuda8.0
(1) 首先在官网上(https://developer.nvidia.com/cuda-downloads) 下载CUDA(1G以上那个):
(2)下载完成后执行以下命令:
sudo chmod 777 cuda_8.0.44_linux.run(输入自己下载的cuda文件名,因为软件要进行更新优化,所以过一段时间名字就会略有不同)
特别注意: 下面安装时要注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia367驱动时,一定要选择否:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 390.25
因为前面我们已经安装了更加新的nvidia390,所以这里不要选择安装。其余的都直接默认或者选择是即可。
安装:
sudo sh cuda_9.1.85_387.26_linux.run
(3)环境变量配置
打开~/.bashrc文件: sudo gedit ~/.bashrc
将以下内容写入到~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(4)测试CUDA的samples
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery
如果显示一些关于GPU的信息,则说明安装成功。
cuda版本安装错误, 如何卸载?
在目录:
/usr/local/cuda-7.0/bin
有CUDA自带的卸载工具uninstall_cuda_toolkit_7.0.pl,使用命令:
sudo ./uninstall_cuda_toolkit_7.0.pl
(5)配置cuDNN
首先,看看自己电脑的计算能力,如果自己电脑计算能力不超过3就不要进行这一步了,因为cuDNN仅能在计算能力为3以上的电脑上运行,强行装的话后面安装Caffe时会报错。查看自己电脑显卡的计算能力:https://developer.nvidia.com/cuda-gpus
cuDNN是GPU加速计算深层神经网络的库。
首先去官网 https://developer.nvidia.com/rdp/cudnn-download 下载cuDNN,需要注册一个账号才能下载。下载版本号如下图:
下载cuDNN5.1之后进行解压:
sudo tar -zxvf ./cudnn-8.0-linux-x64-v5.1.tgz
# 把刚刚解压的那个cuda文件更名为cuda-9.0
mv cuda cuda-8.0
然后执行:
cd cuda-8.0
sudo cp lib64/lib* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/
# 建议进行如下操作
cuda-8.0
sudo cp lib64/lib* /usr/local/cuda-8.0/lib64/
sudo cp include/cudnn.h /usr/local/cuda-8.0/include/
更新软连接:
cd /usr/local/cuda-8.0/lib64/
sudo chmod +r libcudnn.so.5.1.10
sudo ln -sf libcudnn.so.5.1.10 libcudnn.so.5
sudo ln -sf libcudnn.so.5 libcudnn.so
sudo ldconfig
sudo ldconfig /usr/local/cuda-8.0/lib64/
请注意,请到自己解压后的lib64文件夹看这个文件libcudnn.so.5.0.5 ,电脑配置不同后面的数字型号不同,进行相应的修改,否则会报错。
安装caffe
目标安装caffe、pycaffe、matcaffe
(1) 安装依赖包
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
参看caffe官网
(2) 设置Makefile.config文件
sudo cp Makefile.config.example Makefile.config
sudo gedit Makefile.config #打开Makefile.config文件
修改如下:
USE_CUDNN := 1 #去掉#号
OPENCV_VERSION := 3
WITH_PYTHON_LAYER := 1 #使用python来编写层
重要的:
将 # Whatever else you find you need goes here. 下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:(主要路径间的空格)
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
matcaffe部分需要修改的是:
$ vim Makefile.config
MATLAB_DIR := /usr/local/MATLAB/R2016b
(3) 修改Makefile文件
修改一:
$ vim Makefile
- opencv_core opencv_highgui opencv_imgproc
+ opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
在位置((LIBRARIES += glog gflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs))处添加 opencv_imgcodecs
修改二:
$ vim examples/cpp_classification/classification.cpp
+ #include <opencv2/imgproc/types_c.h>
+ #include <opencv2/objdetect/objdetect_c.h>
matcaffe部分需要修改的:
vim Makefile
- NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
+ NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
# 这个操作是为了解决版本过低的问题
410 CXXFLAGS += -MMD -MP
在410行下面加上 CXXFLAGS += -std=c++11
引入一下路径:
sudo vim ~/.bashrc
export LD_LIBRARY_PATH="/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
export PATH=$PATH:/usr/local/MATLAB/R2016b/bin
source ~/.bashrc
sudo ldconfig
(4) 编译
查看物理cpu个数
grep 'physical id' /proc/cpuinfo | sort -u
查看核心数量
grep 'core id' /proc/cpuinfo | sort -u | wc -l
查看线程数
grep 'processor' /proc/cpuinfo | sort -u | wc -l
开始编译
cd caffe-master
mkdir build
cd build
cmake ..
cd ..
make all -j6
make test -j6
make runtest -j6
(5) 安装python接口
首先回到caffe的根目录,然后执行安装代码:
cd ~/caffe
sudo apt-get install gfortran
cd ./python
for req in $(cat requirements.txt); do sudo pip install $req; done
安装完成以后,再次回到caffe根目录我们可以执行:
cd ..
sudo pip install -r python/requirements.txt
编译python接口:
make pycaffe
配置环境变量,以便python调用:
sudo gedit ~/.bashrc
将以下内容添加到文件中
export PATH=/user/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/user/local/cuda/lib64:$LD_LIBRARY_PATH
# 以上两个也要有
export PYTHONPATH=/home/caffe/python:$PYTHONPATH
export PYTHONPATH=~/caffe/python
然后执行
source ~/.bashrc
重启
然后就能import caffe了
(6) 安装matcaffe接口
cd /usr/local/MATLAB/R2014a/sys/os/glnxa64/
sudo mv libstdc++.so.6 libstdc++.so.6_back
sudo ldconfig
cd ~/caffe/
sudo make matcaffe -j5
如果执行了上面的命令,提示gcc版本过低的话,不用管它,看/home/weijian/caffe/matlab/+caffe/privat下面,有没有caffe_.mexa64这个文件,如果有的话,可以开始测试了。
测试
打开matlib如何使用matcaffe?
在Caffe根目录启动Matlab之后需要增加路径:
addpath ./matlab
然后执行命令:
savepath
以后就不用每次都输入addpath ./matlabl了
接着,执行:
gpu_id = 0
caffe.set_mode_gpu();
caffe.set_device(gpu_id);
没有报错,意味着编译成功了。
编译mattest
执行
sudo make mattest -j5
如果执行 sudo make mattest -j5出错
执行下面几个句子
export LD_LIBRARY_PATH=/usr/local/R2016b/sys/os/glnxa64
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
再次执行,仍然出错的话,执行下面的句子,注意路径
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-8.0/lib64
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6
参考这个http://blog.csdn.net/rt5rte54654/article/details/54742981
MNIST数据集测试
配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
1.将终端定位到Caffe根目录
cd ~/caffe
2.下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
3.将其转换成Lmdb数据库格式
./examples/mnist/create_mnist.sh
4.训练网络
./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值,如下图:
可以看到最终训练精度是0.9906。
可能遇到的问题
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory
场景1: 在命令行里进入python,输入“import caffe” 或者 直接使用caffe/build/tools/caffe 出现错误: ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory
使用这个命令:
sudo ldconfig /usr/local/cuda/lib64
场景2: 在jupyter中import caffe 报错如下:error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory
解决办法:首先确认/etc/profile中的路径包含了cuda8.0的安装路径及相应的库文件
export PATH=$PATH:/usr/local/cuda-8.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-8.0/lib64
然后
$source /etc/profile
使配置文件生效,再次执行。
然后在当前命令窗下启动jupyter
jupyter notebook --allow-root
若仍提示相同的错误,则执行以下命令,将相应的库文件复制到/usr/lib
sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
ps. ldconfig命令是一个动态链接库管理命令,是为了让动态链接库为系统共享
如果仍然不行, 关掉此终端, 重新开启一个试一试.
.build_release/tools/caffe: error while loading shared libraries: libcudart.
解决方法:在/usr/lib/下建立一个 软链接将 libopenblas.so.0指向/openbls安装目录/lib/ libopenblas.so.0
ImportError: cannot import name cbook
问题描述:caffe环境编译成功,运行具体项目时,出现错误ImportError: cannot import name cbook。后来进入python环境发现,运行import caffe 和 import matplotlib 出现Import: No module named functools_lru_cache
找了好久才找到的解决方法,亲测有效:
卸载之前的matplotlib:
sudo pip uninstall matplotlib
使用该命令重新安装:
sudo apt-get install python-matplotlib
这样就解决了