//系统平台: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的安装
下载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 尝试是否成功
进入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安装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官网下载对应显卡的最新版驱动,放在/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去官网下载最新版本的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我们需要尝试编译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的连接情况终端输入 :
./bandwidthTestResult = PASS代表成功,若失败 Result = FAIL
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使链接生效
终端输入
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由于要用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 -j16make过程中又出现找不到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)如果没有报错,那么编译就通过了
下载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说明:如果安装的是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 buildcmake一下
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测试方法,如果测试没问题,则说明完全通过。
安装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