配置:i7-6700HQ + GTX 965M
系统:ubuntu16.04 64位
安装CUDA 8.0
在存放.deb文件的目录下执行:
sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
安装完成后重启
添加环境变量,在~/.bashrc中添加:
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
使环境变量立即生效,执行 source ~/.bashrc
安装cuDNN
Nvidia官网下载cuDNN
• https://developer.nvidia.com/rdp/cudnn-download
• 注册后选择:
• Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0
• cuDNN v5.1 Library for Linux
安装cuDNN
解压cuDNN安装包
在解压出的cuda目录下执行:
• sudo cp lib64/* /usr/local/cuda/lib64/
• sudo cp include/cudnn.h /usr/local/cuda/include/
更新软链接,在/usr/local/cuda/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
安装CUDA Sample
在/usr/local/cuda/samples/目录下编译例程:
• sudo make all
测试CUDA例程deviceQuery
• 在/usr/local/cuda/samples/bin/x86_64/linux/release目录下执行:
./deviceQuery
• 若能打印出显卡相关信息,则CUDA安装成功,如下图所示:
安装caffe必要的依赖库
sudo apt-get install libprotobuf-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install --no-install-recommends
sudo apt-get install libboost-all-dev
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
安装完成后最好再
sudo apt-get update
sudo apt-get upgrade
安装opencv
到官网http://opencv.org/downloads.html下载压缩包,在/home目录本地解压
进入OpenCV2.4.13所在的文件夹
cd /home/css/opencv-2.4.13
安装依赖库和cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
sudo apt-get install cmake
安装完cmake之后执行命令
cmake .
看清楚cmake后面有一个"."符号!!!且cmake和"."之间有一个空格
执行完上述命令后执行
sudo make
之后就是漫长的编译过程,编译时间的长短和电脑配置有关系
执行完毕后执行命令
sudo make install
执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境
首先将OpenCV的库添加到路径,从而可以让系统找到:
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加:
/usr/local/lib
然后保存退出,执行如下命令使得刚才的配置路径生效
sudo ldconfig
配置bash,执行如下命令
sudo gedit /etc/bash.bashrc
在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
如图所示:
保存退出,然后执行如下命令使得配置生效
sudo source /etc/bash.bashrc
之后更新database
sudo updatedb
至此,Linux\Ubuntu16.04环境下配置OpenCV已经全部完成,下面用一个简单的程序进行测试
在home目录创建opencv.cpp:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("mayuyu.jpg");
imshow("srcIMage",srcImage);
waitKey(0);
return 0;
}
并在相同目录下存放一张mayuyu.jpg
编译OpenCV程序命令为:
g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs`
编译没有错误运行
./opencv
结果应该可以读取mayuyu.jpg并显示该图片
添加CUDA库
• 在/etc/ld.so.conf.d/目录下新建caffe.conf文件
sudo gedit /etc/ld.so.conf.d/caffe.conf
• 在caffe.conf文件(可能是空的)中添加内容:
/usr/local/cuda/lib64
安装Caffe
下载Caffe安装包,执行:
• sudo git clone https://github.com/BVLC/caffe.git
编译Caffe
进入caffe目录下
• 创建编译指导文件,执行
sudo cp Makefile.config.example Makefile.config
• 修改Makefile.config文件,根据运行平台修改配置
(可能要赋予修改权限:sudo chmod 666 Makefile.config)
• 若使用CPU+Caffe,则将第8行CPU_ONLY := 1前的#删除
• 若使用GPU+cuDNN+Caffe,则将第5行USE_CUDNN := 1前#删除
• 依次执行
sudo make all
sudo make test
sudo make runtest
(必要时可以在每条后面加 -j4,使用四线程加快编译速度,如sudo make all -j4)
• 上述过程若都没有报错,则实验完成
如下图所示:(不使用cudnn)
使用cudnn:(多test了几项)
BUG汇总
1.编译caffe,make all时:
“fatal error: hdf5.h: 没有那个文件或目录”解决方法
Step 1
在Makefile.config文件的第94行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
改为
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
Step 2
在Makefile文件的第181行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
2.编译caffe,执行make runtest时:
caffe make runtest error(core dumped)Check failed: status == CUDNN_STATUS_SUCCESS (6 vs. 0)
简单讲就是GPU的加速性能不够,CUDNN只支持CUDA Capability 3.0以上的GPU加速
3.编译cuda samples时
collect2: error: ld returned 1 exit status
Makefile:381: recipe for target 'cudaDecodeGL' failed
make[1]: *** [cudaDecodeGL] Error 1
make[1]: Leaving directory '/usr/local/cuda-8.0/samples/3_Imaging/cudaDecodeGL'
Makefile:52: recipe for target '3_Imaging/cudaDecodeGL/Makefile.ph_build' failed
make: *** [3_Imaging/cudaDecodeGL/Makefile.ph_build] Error 2
解决方法:暂时找不到,可能是版本问题,但是不影响我们运行测试程序deviceQuery
4.libEGL.so.1不是符号连接
/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 is not a symbolic link
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 is not a symbolic link
解决方法:
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1