ubuntu16.04 + cuda9.1 + cudnn7.1 + OpenCV3.4 + caffe(GPU)

mac2022-06-30  163

//系统平台:Ubuntu16.04.4 LTS//默认安装cuda9.1+cudnn7.1+opencv3.4+caffe(GPU)//同时测试基本兼容了cuda8.0+cudnn6.0+opencv3.2+caffe(GPU)安装//如果还需安装TensorFlow,建议选择cuda9.0+cudnn7.0+opencv3.4+新版本TensorFlow//如需老版本TensorFlow,建议选择cuda8.0+cudnn6.0+opencv3.2(or opencv2)+老版本TensorFlow// 参考博客:// https://blog.csdn.net/jonms/article/details/79318566                     这篇主要讲cuda,cudnn的安装和测试// https://blog.csdn.net/u014696921/article/details/53143176          这篇讲整个caffe的部署// https://blog.csdn.net/tsb831211/article/details/78432206             这篇是童师兄写的教程,里面有详细的常用配置// https://blog.csdn.net/u014696921/article/details/53138327          这篇主要讲caffe-ssd的部署// https://blog.csdn.net/u010678153/article/details/52639083          这篇讲的其实也是caffe-ssd的部署,基本用不上// https://blog.csdn.net/u014696921/article/details/53353896       这篇主要讲使用SSD训练自己的数据// https://blog.csdn.net/qq473179304/article/details/79444609        这篇讲编译使用OpenCV、pycharm的caffe// https://blog.csdn.net/cocoaqin/article/details/78163171        这篇讲OpenCV的安装

1. 安装Ubuntu系统

下载Ubuntu16.04镜像,使用UltraISO制作启动盘;根据Windows安装方案选择legacy或UEFI启动分区划分以实际空间为准,交换分区sawp大于内存容量,/boot至少给1024M,/、/usr、/var、/tmp分区根据教程划分,剩下的尽量多给/home启动之后打开终端执行

sudo apt-get install update sudo apt-get install upgrade

查看系统更新,更新完毕后

sudo reboot

使用:

sudo passwd root

设置root的密码,并用su root 尝试是否成功

2. 更新系统源

进入ubuntu系统设置-软件与更新-ubuntu软件,使用的是中科大的源:

http://mirrors.ustc.edu.cn/ubuntu

 终端输入

cd /etc/apt/ sudo cp sources.list sources.list.bak sudo vi sources.list

把下面的这些源添加到source.list中:

deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

最后更新源和更新已安装的包:终端输入

sudo apt-get updatesudo apt-get upgrade

3. 安装必要的标准库

安装gcc 

sudo apt-get install gcc

验证系统是否安装了kernel header和 package development

uname -rsudo apt-get install linux-headers-$(uname -r)

满足要求后,便可进行下面的正式安装过程。

runfile文件的安装先要安装gcc-multilib

sudo apt install gcc-multilib

4. 安装显卡驱动

官网下载对应显卡的最新版驱动,放在/home文件夹下

sudo chmod a+x NVIDIA.......run sudo ./NVIDIA.......run -no-x-check -no-nouveau-check -no-opengl-files

//以上带参数安装至关重要,分别是关闭x服务,禁用nouveau,不安装opengl

(2018/4/23更新:有时候直接安装新的显卡驱动,会显示不能加载内核的错误,这种情况下,可以选择先使用Ubuntu软件更新自带的驱动进行一次升级,当然大概率会出现循环启动问题,不过内核 确实加载好了)

//如果出现循环启动的问题,进入tty模式,登录管理员帐号,按照以下指令执行:

sudo apt-get remove --purge 'nvidia-*' sudp apt-get install ubuntu-desktop sudo rm /etc/X11/xorg.conf echo 'nouveau' | sudo tee -a /etc/modules

安装过程大概几分钟,就可以看到结果了使用

nvidia-smi

指令,查看驱动版本,出现显卡型号等信息则成功

sudo reboot

5. cuda的安装

去官网下载最新版本的cuda文件,此处以9.1版本为例,选择runfile 文件下载终端输入:

cd 下载/ sudo chmod 777 cuda_9.1.85_387.26_linux.run sudo sh cuda_9.1.85_387.26_linux.run --override

启动安装程序,一直按空格到最后,输入accept接受条款输入n不安装nvidia图像驱动,之前已经安装过了输入y安装cuda 9.1工具回车确认cuda默认安装路径:/usr/local/cuda-9.1输入y用sudo权限运行安装,输入密码输入y或者n安装或者不安装指向/usr/local/cuda的符号链接输入y安装CUDA 9.1 Samples,以便后面测试回车确认CUDA 9.1 Samples默认安装路径:/home/icat(icat是我的用户名),该安装路径测试完可以删除最后你会看到cuda驱动、sample、tookit已经安装成功,但是缺少一些库。添加这些库

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

重启电脑,输入密码登录

sudo reboot

如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了。

检查Device Node Verification

ls /dev/nvidia*

若结果显示

/dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm

或显示出类似的信息,应该有三个(包含一个类似/dev/nvidia-nvm的),则安装成功。接着,设置环境变量。终端中输入

sudo vim /etc/profile

在打开的文件末尾,添加以下两行。64位系统:

export PATH=/usr/local/cuda-9.1/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH

保存文件,并重启。因为source /etc/profile是临时生效,重启电脑才是永久生效。

重启电脑,检查上述的环境变量是否设置成功。验证驱动版本

cat /proc/driver/nvidia/version

验证CUDA Toolkit

nvcc -V

6. cuda Samples测试

我们需要尝试编译cuda提供的例子,看cuda能否正常运行打开终端输入

cd /home/icat/NVIDIA_CUDA-9.1_Samples sudo make all

系统就会自动进入到编译过程,整个过程大概需要十几到二十分钟,请耐心等待。如果出现错误的话,系统会立即报错停止。

error: #error -- unsupported GNU version! gcc versions later than 6 are not supported!

错误的解决方式很简单,就是安装低版本gcc和g++,并创建链接或更改gcc各版本的优先级。此处为以后考虑安装了gcc-6和g++-6,大家可以自行决定版本,只要比错误中提到的支持上限小就没问题

sudo apt-get install gcc-6 sudo apt-get install g++-6

而后二选一推荐第二种选择选择一:创建软链接:

sudo ln -s /usr/bin/gcc-6 /usr/local/cuda/bin/gcc sudo ln -s /usr/bin/g++-6 /usr/local/cuda/bin/g++

选择二:更改gcc各版本的优先级

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6

如果编译成功,最后会显示Finished building CUDA samples。运行编译生成的二进制文件。编译后的二进制文件默认存放在NVIDIA_CUDA-9.1_Samples/bin中。接着在终端中输入 :

cd bin/x86_64/linux/release ./deviceQuery

看到类似如下图片中的显示,则代表CUDA安装且配置成功,其中 Result = PASS代表成功,若失败 Result = FAIL最后再检查一下系统和CUDA-Capable device的连接情况终端输入 :

./bandwidthTest

Result = PASS代表成功,若失败 Result = FAIL

7. cuDNN 的安装

cuDNN的安装是建立在我们成功安装cuda的基础上的,cuDNN同样需要我们去NVIDIA的官网下载适合cuda版本的deb文件或tgz文件。有时候会下载不下来,上传到网盘里了这里我以tgz文件的安装为例(cudnn-9.1-linux-x64-v7.1.tgz),首先解压tgz文件

cd ~/Downloads tar -xzvf cudnn-9.1-linux-x64-v7.1.tgz

接着复制文件到cuda安装路径下,

sudo cp cuda/include/cudnn.h /usr/local/cuda/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

给他们读权限

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

以下至关重要:

建立软连接终端输入

cd /usr/local/cuda/lib64/ sudo rm -rf libcudnn.so libcudnn.so.7 sudo ln -s libcudnn.so.7.1.1 libcudnn.so.7 sudo ln -s libcudnn.so.7 libcudnn.so

设置环境变量,终端输入

sudo gedit /etc/profile

末尾倒数第二行改为:

export PATH=/usr/local/cuda/bin:/usr/local/cuda-9.1/bin:$PATH

保存后,创建链接文件

sudo vim /etc/ld.so.conf.d/cuda.conf

按a进入插入模式,增加下面一行

/usr/local/cuda/lib64

按esc退出插入模式,按:wq保存退出

最后在终端输入sudo ldconfig使链接生效

8. 安装一些依赖项、python-pip、easy_install、科学计算和python所需的部分库以及git

sudo apt-get install build-essential #必要的编译工具依赖 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev sudo apt-get install libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libatlas-base-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

终端输入

cd wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py --insecure wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py

终端输入

sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran python-numpy

终端输入

sudo apt-get install git

9. Caffe的部署(暂时不对matlab作说明)

由于要用weiliu大神的ssd模型,故从他的github主页下载caffe,下的会比较慢,可以溜达十几分钟

git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd

(出现“分支”则说明copy-check成功)终端输入下述指令安装pip

sudo apt-get install python-pip cd ~/caffe/python for req in $(cat "requirements.txt"); do sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

如果有一个报错:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-GxreLV/ipython/那么

sudo pip install --upgrade --force pip sudo pip install ipython

再重复一遍上面这句就好了

(没错,我又来更新了,每一次部署caffe都让人头大啊,这回解决的还是如上的问题,错误原因是Ubuntu默认装Python2,有的库需要pip3来装,操作如下:

sudo apt-get install python3-pip for req in $(cat "requirements.txt"); do sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

甚至我觉得上面那条指令就直接改了吧...)进入下载好的caffe目录,复制配置文件,

cd /home/icat/caffe cp Makefile.config.example Makefile.config gedit Makefile.config

将USE_CUDNN := 1取消注释,INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面打上一个空格 然后添加

/usr/include/hdf5/serial

如果没有这一句可能会报一个找不到hdf5.h的错误执行

sudo make all -j16

make过程中又出现找不到lhdf5_hl和lhdf5的错误,

解决方案:在计算机中搜索libhdf5_serial.so.10.1.0,找到后右键点击打开项目位置该目录下空白处右键点击在终端打开,打开新终端输入

sudo ln libhdf5_serial.so.10.1.0 libhdf5.so sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

最后在终端输入sudo ldconfig使链接生效重新执行

sudo make clean sudo make all -j16

如果出现nvcc fatal   : Unsupported gpu architecture 'compute_20'

仔细查看了一下 Makefile.config 中 CUDA_ARCH 设置未按规定设置:

# CUDA architecture setting: going with all of them. # For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility. # For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility. # For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility. CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \     -gencode arch=compute_20,code=sm_21 \ -gencode arch=compute_30,code=sm_30 \ -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_50,code=sm_50 \ -gencode arch=compute_52,code=sm_52 \ -gencode arch=compute_60,code=sm_60 \ -gencode arch=compute_61,code=sm_61 \ -gencode arch=compute_61,code=compute_61

因为我装的是CUDA9.1所以把下面这两行删除就可以

-gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=sm_21 \

如果出现 /usr/bin/ld: cannot find -lopenblas

那么 

sudo apt-get install liblapack-dev liblapack3 libopenblas-base libopenblas-dev

继续:

sudo make test -j16 sudo make runtest -j16

如果出现错误[  FAILED  ] BatchReindexLayerTest/3.TestGradient, where TypeParam = caffe::GPUDevice<double>

这里的报错信息里面显示的是“GPUDevice”而不是“CPUDevice”,这种情况可能是因为配置了多显卡环境,可以使用安装CUDA时运行./deviceQuery时标注的0号GPU("Device 0")跑跑测试试试看。使用如下命令:

export CUDA_VISIBLE_DEVICES=0

如果还是有报错,没事,不影响后面的编译

但是如果出现错误cudasuccess(8vs0)这样的百度说是由于显卡计算能力不匹配造成的仔细查看了一下 Makefile.config 中 CUDA_ARCH 设置未按规定,设置有没有这一条:

-gencode arch=compute_60,code=sm_60 \

Tesla p100的计算能力是60,少了这条不能用

(更新一下,makefile里的use_opencv要取消注释)如果出现.build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’或者类似的问题,说明opencv用了opencv 3.x的缘故,只需在Makefile的最后一行加上:

LIBRARIES += glog gflags protobuf leveldb snappy \ lmdb boost_system boost_filesystem hdf5_hl hdf5 m \ opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio

继续:

sudo make pycaffe -j16 sudo make distribute

至此,编译基本完成,下面测试:

cd python/ python import caffe

(好的,我又来更新了,因为出了新问题,头一回import caffe也报错:

ImportError: No module named skimage.io

方案是

sudo pip install scikit-image sudo apt-get install python-skimage)

如果没有报错,那么编译就通过了

10. mnist测试

下载mnist数据集,终端输入

cd /home/icat/caffe/data/mnist/./get_mnist.sh

获取mnist数据集在/home/pawn/caffe/data/mnist/目录下会多出训练集图片、训练集标签、测试集图片和测试集标签等4个文件mnist数据格式转换,终端输入

cd /home/icat/caffe/./examples/mnist/create_mnist.sh

必须要在第一行之后运行第二行,即必须要在caffe根目录下运行create_mnist.sh此时在/caffe/examples/mnist/目录下生成mnist_test_lmdb和mnist_train_lmdb两个LMDB格式的训练集和测试集LeNet-5模型描述在/caffe/examples/mnist/lenet_train_test.prototxtSolver配置文件在/caffe/examples/mnist/lenet_solver.prototxt训练mnist,执行文件在/caffe/examples/mnist/train_lenet.sh终端输入

cd /home/icat/caffe/ ./examples/mnist/train_lenet.sh

可能会遇到这样一个问题:

Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0)  CUDNN_STATUS_INTERNAL_ERROR别被忽悠了,加个sudo 就能解决问题但是如果出现这个问题Check failed: status == CUDNN_STATUS_SUCCESS (11 vs. 0)  invalid argument还没找到好的解决方案,把caffe的Makefile和Makefile.config文件检查一下重新编译caffe能跑起来迭代的就是成功另附:动态查gpu 利用率的指令:每0.1s刷新一次

watch -n 0.1 nvidia-smi

 (补充说明,建议将Pythonpath添加到环境变量中,以免import caffe失败)

sudo vim ~/.bashrc export PYTHONPATH=$PYTHONPATH:/root/caffe/python

//说明:/root换成你的caffe路径保存并退出

source ~/.bashrc

11. 补充:OpenCV的安装和使用

说明:如果安装的是CUDA9.1和cudnn7.1版本的话,OpenCV最高可以装3.4.1版本的鉴于需要安装TensorFlow和其他平台,上述安装可以不装CUDA9.1和cudnn7.1可以采取安装CUDA9.0和cudnn7.0的组合,搭配OpenCV 3.4.1,安装方式亲测与上述基本相同如果安装CUDA8.0,则搭配cudnn6.0和OpenCV 3.2.0,安装过程几乎相同,少数位置需要更改gcc和g++版本参数,可以百度解决去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工。下载链接http://opencv.org/releases.html,选择sources版本解压下载下来的zip包,并进入解压后的文件夹

unzip opencv-3.4.1.zip cd opencv-3.4.1

安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限,再sudo apt-get update,然后在执行下面命令

sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev sudo apt-get install libswscale-dev libjasper-dev

安装完cmake之后执行命令 ,创建编译文件夹

mkdir build cd build

cmake一下

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

期间可能会下载一个东西,等待一会儿就OK

执行命令,漫长的编译过程

sudo make -j16

在97%的时候会等很久很久,属于正常现象。编译过程很顺利,编译成功后安装:

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

保存,执行如下命令使得配置生效

source /etc/bash.bashrc

更新

sudo updatedb

至此所有的配置都已经完成,下面用一个小程序测试一下

cd到opencv-3.4.0/smaples/cpp/example_cmake目录下我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下按顺序执行

cmake . make ./opencv_example

如果出权限问题,那就加sudo

即可看到打开了摄像头,在左上角有一个hello opencv,即表示配置成功重新编译带OpenCV的caffe:在Makefile.config文件中,将:  #OPENCV_VERSION := 3   修改为:   

OPENCV_VERSION := 3

并将USE_OPENCV=0这一句注释掉

使用 python 接口将:  #WITH_PYTHON_LAYER := 1   修改为   

WITH_PYTHON_LAYER := 1

修改 python 路径

将:  

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

此python路径为系统自带python的路径,假如想使用Anaconda的python的话需要在其他地方修改。    

然后修改 caffe 目录下的 Makefile 文件(修改的地方找起来比较困难的话可以用gedit打开):将:  NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)  替换为:  

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

将:  

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

然后重新

sudo make clean sudo make all -j32 (PS,不是所有服务器都可以-j32) sudo make test -j32 sudo make runtest -j32 (这一步可以不做) sudo make pycaffe sudo make distribute

注意:runfile那一步可能最后会有一两个项目测试failed,Google了一下,貌似使用CUDA9.1加双显卡的都有这个错误,暂且不管它,目前不影响使用。

python import caffe

不报错说明再次编译成功,可以重复上面的mnist测试方法,如果测试没问题,则说明完全通过。

12. 说明:

安装anaconda等python发行版本会对原有的环境变量、设置路径造成干扰,出现问题自行百度解决。

转载于:https://www.cnblogs.com/Davey/p/10272662.html

相关资源:cudnn-9.0-linux-x64-v7.tgz及cudnn-9.0-linux-x64-v7.1.tgz

最新回复(0)