配置: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
