Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

                             Ubuntu16.04安装驱动配置Caffe教程

1 电脑配置及软件说明

(1)Ubuntu16.04.1 x64系统,GPU: TITAN XP

(2)NVIDIA驱动:NVIDIA-Linux-x86_64-375.66

(3)CUDA8.0.61

(4)cuDNN V5.1

(5)OpenCV3.4.2

2安装NVIDIA GPU驱动

2.1明确要安装的NVIDIA驱动版本

驱动的版本不仅与你安装的显卡型号有关,还与你所装的系统的内核有关,如果你装的驱动的型号比较老,而你的系统内核比较高,在装驱动时就会出现出现:ERROR : An error occurred while performing the step : ” Building kernel modules “. See /var/log/nvidia-installer.log for details.

问题原因:Linix系统的内核是在不断更新的,而安装的NVIDIA驱动是之前下载好的,没有更新,因此安装过程中无法创建内核。

关于内核的操作可以看这篇博文https://blog.csdn.net/u011304615/article/details/70919711

并且不同的显卡驱动对应不同的CUAD版本,显卡驱动版本与CUAD版本不一样,就会出现cuad drive version 与 cuad runing version 不一致的情况就会出错。它们之间的关系具体可以参考这篇博文https://blog.csdn.net/zl535320706/article/details/83474849

正常的是官网查询GPU驱动,下载安装就好。我的推荐安装显卡驱动版本是384.130对应的是cuda9.0,但是我需要安装cuda8.0,刚开始安装的是Ubuntu16.04.5的系统,内核版本比较高,又重新安装16.04.1的系统核是4.4.0-31-generic

然后装的显卡驱动是NVIDIA-Linux-x86_64-375.66,下载地址是http://us.download.nvidia.com/XFree86/Linux-x86_64/375.66/NVIDIA-Linux-x86_64-375.66.run,将驱动放到Home。

2.2安装GPU驱动

2.2.1屏蔽自带显卡驱动

Ubuntu都预装了开源的nouveau显卡驱动,如果不禁用,则显卡驱动,CUDA驱动不能正确安装,所以要将nouveau加入黑名单。

1) 在终端下输入: sudo gedit /etc/modprobe.d/blacklist.conf

2) 输入密码收在最后一行加上:blacklist nouveau. 这里是将Ubuntu自带的显卡驱动加入黑名单

3) 在终端输入:sudo update-initramfs –u,使修改生效

4)重启电脑

5) 打开终端输入lsmod | grep nouveau,没有输出,则屏蔽成功

2.2.2安装新驱动

1)可以先卸载一下原来的显卡驱动,终端输入sudo apt-get remove –purge nvidia*

2)在终端输入 sudo service lightdm stop

3)按Ctrl+Alt+F1~F6进入命令行界面(安装GPU驱动要求在命令行环境),输入用户名和密码进入用户目录

4)sudo chmod +x ./NVIDIA-Linux-x86_64-384.111.run,修改权限。然后:sudo ./NVIDIA-Linux-x86_64-384.111.run,进入安装程序

5)完成安装后,重启电脑

6)重启电脑后,输入以下指令进行验证:sudo nvidia-smi,若列出了GPU的信息列表则Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细 表示驱动安装成功。

3安装CUDA

CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。

1)首先安装依赖包

sudo apt-get update

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

sudo apt-get install git cmake build-essential

有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:

sudo apt-get install git cmake build-essential

界面提示如下则说明已成功安装依赖包,否则继续安装直到安装成功。

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

2)下载CUDA

首先在官网上https://developer.nvidia.com/cuda-toolkit-archive下载CUDA。下载CUDA时一定要注意CUDA和NVIDIA显卡驱动的适配性。CUDA_8.0支持375.**及以上系列的显卡驱动;CUDA_9.0支持384.**及以上系列的显卡驱动;CUDA_9.1支持389.**及以上系列的显卡驱动。本文下载的是375.66对应的是CUDA Toolkit 8.0 GA2

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

 

3)运行安装程序

CUDA中包含有 nvidia 显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动,若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动(卸载方法链接),然后开始安装 CUDA 8.0;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 8.0,在安装过程中选择不再安装 nvidia 显卡驱动。

为了方便开始安装过程的路径查找,把下载的 CUDA 安装文件移动到 HOME 路径下,然后通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录,通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:sudo service lightdm stop

执行命令:sudo sh cuda_8.0.61_375.26_linux.run –no-opengl-libs

其中 cuda_8.0.61_375.26_linux.run 是我的 CUDA 安装文件名,而你需替换为自己的 CUDA 安装文件名,若此时忘记可直接通过 ls 文件查看文件名,这也是我建议把 CUDA 安装文件移动到 HOME 下的另一个原因。

执行此命令约1分钟后会出现 0%信息,Ctrl+ C 到100%,然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,这里的选择对应第3步开头,若未安装则输入 “y”,若确保已安装正确驱动则输入“n”。

剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为未关闭桌面服务或在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启:sudo reboot

4)环境变量设置

sudo gedit ~/.bashrc

在该文件最后加入以下两行并保存:

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

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

使该配置生效:source ~/.bashrc

5)测试CUDA是否安装成功

执行以下命令:

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

sudo make

sudo ./deviceQuery

若看到类似以下信息则说明 cuda 已安装成功:

 

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

 

4配置cuDNN

cuDNN是GPU加速计算深层神经网络的库。

1)登录官网:https://developer.nvidia.com/rdp/cudnn-download ,下载对应 cuda 版本且 linux 系统的 cudnn 压缩包,注意官网下载 cudnn 需要注册帐号并登录,不想注册的可从这个网盘下载:https://pan.baidu.com/s/1c2xPVzy

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

2)下载完成后解压,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件

3)然后命令行进入 cudn/lib64 路径下,运行以下命令:

sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库

cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件 sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5 #生成软衔接

sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接

4)安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

5安装OpenCV3.4.2

1)下载

进入官网 : http://opencv.org/releases.html , 选择 3.4.2版本的 source , 下载 opencv-3.4.2.zip

2)安装前准备,创建编译文件夹

解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.4.2 目录下,执行:

mkdir build # 创建编译的文件目录

cd build

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

make -j8 #编译

3)安装

以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:

sudo make install

安装完成后通过查看 opencv 版本验证是否安装成功:

pkg-config --modversion opencv

6配置Caffe

1)下载Caffe

首先在你要安装的路径下 clone :

git clone https://github.com/BVLC/caffe.git

2)修改Makefile.config

进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,也可以在 caffe 目录下直接调用以下命令完成复制操作 :

sudo cp Makefile.config.example Makefile.config

复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

打开并修改配置文件:

sudogedit Makefile.config #打开Makefile.config文件 根据个人情况修改文件:

a. 若使用cudnn,则将

#USE_CUDNN:= 1

修改成:

USE_CUDNN:= 1

b. 若使用的opencv版本是3的,则将

#OPENCV_VERSION:= 3

修改为:

OPENCV_VERSION:= 3

c. 若要使用python来编写layer,则将

#WITH_PYTHON_LAYER:= 1

修改为WITH_PYTHON_LAYER := 1

d. 重要的一项,将

#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

这是因为Ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径。

3)修改Makefile文件

打开Makefile文件,做如下修改,将:

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

替换为:

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

4)编辑/usr/local/cuda/include/host_config.h

将其中的第115行注释掉,将

#error-- unsupported GNU version! gcc versionslater than 4.9 are not supported!

改为:

//#error-- unsupported GNU version! gcc versionslater than 4.9 are not sup

5)编译

OK,可以开始编译了,在 caffe 目录下执行 :

make all -j8 #-j根据自己电脑配置决定

这是如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。

6)测试

编译成功后可运行测试:sudo make runtest -j8

可能会出现出现error while loading shared libraries: libcudnn.so.5,参考https://blog.csdn.net/weixin_43439673/article/details/84198228,通过sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudo ldconfig指令解决

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

表示安装成功。

7安装pycaffe notebook接口环境

在上一步成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只不过需要在命令行下通过 caffe 命令进行操作,而这一步 pycaffe 的安装以及 notebook 环境配置只是为了更方便的去使用 caffe ,实际上大多数都是通过 python 来操作 caffe 的,而 notebook 使用浏览器作为界面,可以更方便的编写和执行 python 代码。

1)编译pycaffe

cd caffe

sudo make pycaffe -j8

下是我编译 pycaffe 时出现的错误:python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录

解决方法:

sudo apt-get install python-numpy

2)python 中导入 caffe 包

首先进入 python 环境:

python

然后导入 caffe :

>>> import caffe

若不报错则表示 caffe 的 python 接口已正确编译,但是应该不会那么顺利,以下是我导入 caffe 时出现的错误:

错误1:

解决方法:

sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc

source ~/.bashrc

错误2:

ImportError: No module named skimage.io

解决方法:

pip install -U scikit-image #若没有安装pip: sudo apt install python-pip

可能需要升级pip:pip install --upgrade pip

3)配置notebook环境

首先要安装python接口依赖库,在caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了需要的依赖库,按照这个清单安装就可以了。

在安装scipy库的时候,需要fortran编译器(gfortran),如果没有这个编译器就会报错,因此,我们可以先安装一下。

首先进入 caffe/python 目录下,执行安装代码:

sudo apt-get install gfortran

for req in $(cat requirements.txt); do sudo pip install $req; done

安装完成以后执行:

sudo pip install -r requirements.txt

就会看到,安装成功的,都会显示Requirement already satisfied, 没有安装成功的,会继续安装。

然后安装 jupyter :

sudo pip install jupyter

安装完成后运行 notebook :

jupyter notebook

ipython notebook

可能出错:nicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 10: ordinal not

解决:

cd /usr/lib/python2.7/

sudo gedit posixpath.py

然后加上三行代码:

import sys

reload(sys)

sys.setdefaultencoding('utf8')

参考博文:https://blog.csdn.net/w5688414/article/details/76679982

再jupyter notebook可能还出错:Bad config encountered during initialization

解决: Ubuntu如果是中文的话,将系统语言 改成英文即可

打开 /etc/default/locale 文件 sudo gedit /etc/default/locale

将原来的配置内容修改为

LANG=”en_US.UTF-8″

LANGUAGE=”en_US:en”

sudo gedit /etc/environment

PATH原先存在,不做修改

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

LANG=“en_US.UTF-8”

LANGUAGE=“en_US.UTF-8

sudo dpkg-reconfigure locales使设置生效,用locale查看 ,若没有warning则设置成功,然后 reboot 重启即可。

改了系统语言后,运行终端

jupyter notebook

就会在浏览器中打开notebook, 点击右上角的New-python2, 就可以新建一个网页一样的文件,扩展名为ipynb。在这个网页上,我们就可以像在命令行下面一样运行python代码了。输入代码后,按shift+enter运行,更多的快捷键,可点击上方的help-Keyboard shortcuts查看,或者先按esc退出编辑状态,再按h键查看。

参考博文:https://blog.csdn.net/qq_31163325/article/details/83051075

安装完成之后一定不要更新软件啥的,一更新NVIDIA驱动就不好用了。在系统设置->软件和更新->更新中把对号都点去,自动检查更新从不,新版本从不。。。

8MNIST数据集测试

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

训练的时候可以看到损失与精度数值,如下图所示:

Ubuntu16.04安装NVIDIA驱动配置Caffe教程 史上超级无敌详细

参考博文:https://blog.csdn.net/yggaoeecs/article/details/79163789