Ubuntu16.04+Cuda9.1+Cudnn7.5+Anaconda3(Python3.6)+opencv3.4.1+caffe编译安装(多坑已排!)

我第一次装ubuntu16.04的时候由于是小白,分区的时候分的不合理,所以空间不够用了,索性重装了一次,装ubuntu16.04双系统这里不再赘述,可参考文章 https://blog.csdn.net/demonliuhui/article/details/77483523          注意不要挂载/boot,而是换成efi系统分区。


第一步:安装依赖包

这一步是为了接下来的操作而安装必要的工具

在终端中输入

sudo apt-get install git vim cmake build-essential linux-headers$(uname -r)

安装git  vim  cmake  最新内核以及当前内核的headers文件

如果有安装包下载失败,可以输入

sudo apt-get upgrade

然后再重新安装软件包


第二步:安装显卡驱动

1、卸载原有的NVIDIA 驱动(如果没装过NVIDIA驱动,则忽略这一步)

sudo apt remove --purge nvidia*

2、禁用ubuntu自带的nouveau显卡驱动只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动   

禁用nouveau驱动
终端中运行:    lsmod | grep nouveau

如果有输出,则代表nouveau正在运行, 需要我们手动禁掉nouveau。

在Ubuntu16.04中,我们可以通过以下操作禁用nouveau:

a.在/etc/modprobe.d中创建文件blacklist-nouveau.conf

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

在文件中输入以下内容:
blacklist nouveau
options nouveau modeset=0

b.执行

$ sudo update-initramfs -u

c.查看nouveau是否已经成功禁用

$ lsmod | grep nouveau
若无内容输出,则禁用成功,若仍有内容输出,请重启系统,再检查。

          

3、安装最新NVIDIA驱动

从官网下载最新的显卡驱动,需要注意的是,Cuda9.1至少需要390版本以上的驱动,此处下载runfile类型并放到/home文件夹下,便于安装

sudo service lightdm stop

关闭图形界面,并ctrl+alt+F1进入命令行模式,登陆后输入

sudo chmod a+x NVIDIA-linux-x86_64-390.48.run
给run文件赋予执行权限,注意这里要对应自己的驱动版本号,然后输入
sudo ./NVIDIA-linux-x86_64-390.48.run -no-x-check -no-nouveau-check -no-opengl-files
sudo reboot

-no-x-check 安装驱动时关闭X服务    -no-nouveau-check 安装驱动时禁用nouveau  -no-opengl-files 不安装OpenGl文件(这句一定要加上,不然会出现循环登陆的问题)

安装过程中有几个警告,无视掉,一路安装就行。重启后再命令行输入nvidia-smi就能看见安装驱动的详细信息


第三步:安装 CUDA 9.1

下载cuda9.1的runfile文件,关闭图形界面并进入命令行界面

sudo sh cuda_9.1.85_387.26_linux.run
单击回车,直到提示“是否为NVIDIA安装驱动?”
选择否,因为已经安装好驱动程序,其他都是默认。

最后你会看到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 service lightdm start

同时按住Alt + ctrl +F7,返回到图形化登录界面,输入密码登录。
如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了
重启电脑,检查Device Node Verification

$ sudo reboot
$ ls /dev/nvidia*


a、若结果显示

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

或显示出类似的信息,应该有三个(包含一个类似/dev/nvidia-nvm的),则安装成功。
b、大多数结果可能会是这样

ls: cannot access/dev/nvidia*: No such file or directory

或是这样的,只出现

/dev/nvidia0    /dev/nvidiactl

a中的一个或两个,但没有/dev/nvidia-num,即文件显示不全。

解决方法:

添加一个启动脚本rc.local  ,附上rc.local的百度云链接:

https://pan.baidu.com/s/1HU9QL6Qut3NubJw4RClmIQ,密码:r7j4

下载后放在/home目录下,然后输入

sudo cp rc.local /etc/

保存文件并重启,再次查看,这时你应该能直接看到/dev目录下的三个nvidia的文件
输入:
$ ls /dev/nvidia*

结果显示:

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

成功!

接着,设置环境变量。

终端中输入

sudo gedit ~/.bashrc

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

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

32位系统:

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

使该配置生效:

 source  ~/.bashrc
验证CUDA Toolkit
 nvcc -V


第四步:安装cuDNN v7

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

$ tar -xzvf cudnn-9.1-linux-x64-v7.tgz

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

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


第五步:安装 Anaconda3

清华镜像站下载最新的Anaconda3.5.1,下载成功后执行

bash ~/Downloads/Anaconda3-5.1.0-Linux-x86_64.sh

安装过程中会问你是否添加anaconda3的环境变量,直接输yes,这样就不用额外手动配环境变量了


第六步:安装 OpenCV 3.4.0

命令行进入已解压的文件夹 opencv-3.4.1 目录下,执行:
mkdir build # 创建编译的文件目录  
  
cd build  

cmake -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=~/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.6m -D PYTHON3_LIBRARY=~/anaconda3/lib/libpython3.6m.so.1.0 -D PYTHON_NUMPY_PATH=~/anaconda3/lib/python3.6/site-packages ..

然后执行

    make -j4   #开始编译  
    sudo make install  #安装
    sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'  
    sudo ldconfig  

编译时间较长,请耐心等待,我的电脑大概花费了50分钟。安装完成后输入以下指令验证OpenCv版本:

pkg-config --modversion opencv 


第七步:安装 Caffe

首先要安装一堆依赖项,不然编译的时候会报错

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 libatlas-base-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-de

然后下载caffe

git clone https://github.com/BVLC/caffe.git
然后
    cd caffe //进入到刚刚git下来的caffe   
    sudo cp Makefile.config.example Makefile.config   //将Makefile.config.example的内容复制到Makefile.config 
 sudo cp ~/anconda3/bin/libpython3.6m*  /usr/lib/x86_64-linux-gnu  #配置Makefile.config文件,在这之前先复制几个文件
  sudo vim Makefile.config //打开Makefile.config文件 修改以下内容:

    #取消以下注释  
    USE_CUDNN := 1  
    OPENCV_VERSION := 3  
    WITH_PYTHON_LAYER := 1  
      
    #将Python有关目录修改为  
    PYTHON_LIBRARIES := boost_python-py35 python3.6m      #这里需要建立boost_python3链接,详细介绍可看https://blog.csdn.net/lien0906/article/details/51784191  
    ANACONDA_HOME := /path/to/anaconda3           #改成自己anaconda的路径  
    PYTHON_INCLUDE := $(ANACONDA_HOME)/include \  
                    $(ANACONDA_HOME)/include/python3.6m \  
                    $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include  
      
    PYTHON_LIB := $(ANACONDA_HOME)/lib  
      
    LINKFLAGS := -Wl,-rpath,$(ANACONDA_HOME)/lib  
      
    #最后修改INCLUDE_DIRS,LIBRARY_DIRS  
    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  
修改Makefile文件
vim Makefile

用/检索NVCCFLAGS,找到后将

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

然后再在大概181行的地方做修改
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
替换为
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui


最后

make all -j4
make test -j4
make runtest
make pycaffe -j4

在我经历了多次失败后终于成功用上了caffe和opencv,本文已经排了很多的坑,但即便如此,编译过程中出现错误也很正常,把错误拿到百度上搜基本都能解决,祝大家编译一次成功!


最后的最后,还有两个问题补充一下

1、在make runtest后,出现两个失败

**[  FAILED  ] 2 tests, listed below:
[  FAILED  ] BatchReindexLayerTest/2.TestGradient, where TypeParam = N5caffe9GPUDeviceIfEE
[  FAILED  ] BatchReindexLayerTest/3.TestGradient, where TypeParam = N5caffe9GPUDeviceIdEE**
这个问题https://github.com/BVLC/caffe/issues/6164上可以完美解决,我在此翻译一下
vim Makefile
然后用/搜索NVCCFLAGS,知道搜到下面这一段

...
# Debugging
ifeq ($(DEBUG), 1)
        COMMON_FLAGS += -DDEBUG -g -O0
        NVCCFLAGS += -G
else
        COMMON_FLAGS += -DNDEBUG -O2
endif
...
修改为
...
# Debugging
ifeq ($(DEBUG), 1)
        COMMON_FLAGS += -DDEBUG -g -O0
        NVCCFLAGS += -G
else
        COMMON_FLAGS += -DNDEBUG -O2
        NVCCFLAGS += -G
endif
...
也就是加一句NVCCFLAGS += -G
然后重新编译,那么所有test都能成功


2、在所有工作完成后import caffe,出现ImportError: No module named google.protobuf.internal
这是因为在anaconda3中没有装protobuf库,执行指令:

cd ~/anaconda3/bin
pip install protobuf
这时候再import caffe就没有问题了


至此大功告成





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值