记录caffe在ubuntu16.04系统上面的安装全程

前端之家收集整理的这篇文章主要介绍了记录caffe在ubuntu16.04系统上面的安装全程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

经过两天坚持不懈,终于在Ubuntu16.04系统上将caffe成功配置。过程中踩过无数个坑,遇到很多错误,幸运的是这些错误解决了,因此撰写该博客记录caffe的配置过程,以及对配置过程中遇到的错误提供解决办法,避免今后再配置caffe时又踩坑。

电脑配置

  • 系统:Ubuntu16.04
  • GPU:NVIDIA GTX1080

安装过程

1.安装相关依赖项

      • 1
      • 2
      • 3
      • 4
        • 1
        • 2
        • 3
        • 4
        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

      2.安装NVIDIA驱动

      (1)查询NVIDIA驱动

      首先去官网(http://www.nvidia.com/Download/index.aspx?lang=en-us)查看适合自己显卡的驱动:

      图1.显卡驱动查询
      例如本人电脑的显卡驱动如下图:

      图2.显卡驱动版本

      (2)安装驱动

      安装之前先卸载已经存在的驱动版本:

      1. 1
          • 1
          sudo apt-get remove --purge nvidia*

        若电脑是集成显卡(NVIDIA独立显卡忽略此步骤),需要在安装之前禁止一项:

        1. 1
        2. sudo service lightdm stop

        执行以下指令安装驱动:

        1. 1
        2. 2
        3. 3
            • 1
            • 2
            • 3
            sudo add-apt-repository ppa:xorg-edgers/ppa
          • sudo apt-get update
          • sudo apt-get install nvidia-367 #注意在这里指定自己的驱动版本!

          安装完成之后输入以下指令进行验证:

          1. sudo nvidia-smi

          若列出了GPU的信息列表则表示驱动安装成功。

          3.安装CUDA

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

          (1)下载CUDA

          首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:

          图3.CUDA下载

          (2)安装CUDA

          下载完成后执行以下命令:

          1. sudo sh cuda_8.0.27_linux.run

          注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否:

          1. 1
          2. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?

          因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。
          可能出现的错误
          当出现“unsupport complier”错误时,说明gcc版本太高,需要降低gcc版本。解决办法如下:
          以gcc4.9与g++4.9为例
          安装低版本gcc与g++:

          1. sudo apt-get install gcc-4.9 g++-4.9

          之后进入/usr/bin:

          1. cd /usr/bin

          删除和gcc5.0关联的gcc:

          1. 1
          2. 2
              • 1
              • 2
              sudo rm gcc
            • sudo rm g++

            再建个软连接

            1. sudo ln -s gcc-4.9 gcc
            2. sudo ln -s g++-4.9 g++

            然后重新安装。

            (3)环境变量配置

            打开~/.bashrc文件

            1. sudo vim ~/.bashrc

            将以下内容写入到~/.bashrc尾部:

            1. 1
            2. 2
            3. export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
            4. export LD_LIBRARY_PATH=/cuda8.0/lib64${LD_LIBRARY_PATH${LD_LIBRARY_PATH}}

            (4)测试CUDA的sammples

            1. cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery #由自己电脑目录决定
            2. make
            3. sudo ./deviceQuery

            如果显示一些关于GPU的信息,则说明安装成功。

            4.配置cuDNN

            cuDNN是GPU加速计算深层神经网络的库。
            首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,可能需要注册一个账号才能下载。由于本人的显卡是GTX1080,所以下载版本号如下图:

            图4.cuDNN下载
            下载cuDNN5.1之后进行解压,cd进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:

            1. 1
            2. sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件

            再将cd进入lib64目录下的动态文件进行复制和链接

            1. 1
            2. 2
            3. 3
            4. 4
            5. sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接
            6. cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件
            7. sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5 #生成软衔接
            8. 5 libcudnn.so #生成链接

            5.安装opencv3.1

            从官网(http://opencv.org/downloads.html)下载OpenCV,并将其解压到你要安装的位置,假设解压到了/home/opencv。
            安装前准备,创建编译文件夹:

            1. cd ~/opencv
            2. mkdir build
            3. cd build

            配置:

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

            编译:

            1. make -j8 #-j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make

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

            1. sudo make install

            可能会出现的错误
            错误内容1:

            1. 1
            2. 2
            3. gcc-4.9: error trying to exec 'cc1plus': execvp:
            4. 没有那个文件或目录

            说明gcc与g++版本不兼容,解决办法跟gcc版本太高时一样:
            安装低版本gcc与g++:

            1. 错误内容2

            2.   
            3.   
            4. 1
            5.   
            6.   
            7. 2
            8.   
            9.   
            10. 3
            11.   
            12.   
            13. 4
            14.  
            15.  modules/cudalegacy/src/graphcuts.cpp:120:54: error: 
            16. NppiGraphcutState has not been declared
            17. typedef NppStatus (*init_func_t)(NppiSize oSize,NppiGraphcutState** ppState,Npp8u* pDeviceMem);
            18. 这是因为opecv3.0cuda8.0不兼容导致的。解决办法:
              修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:

              5.文件修改

            19. 6.配置caffe

            20. 1)将终端cd到要安装caffe的位置。
              2)从github获取caffe

            21.   
            22.   
            23. 1
            24.  
            25.  git clone https://github.com/BVLC/caffe.git
            26. 注意:若没有安装Git,需要先安装Git

            27. sudo apt-get install git
            28. 3)因为make指令只能make Makefile.config文件,而Makefile.config.examplecaffe给出的makefile例子,因此,首先将Makefile.config.example内容复制到Makefile.config

            29.   
            30.   
            31. 1
            32.  
            33.  sudo cp Makefile.config.example Makefile.config
            34. 4)打开并修改配置文件

            35. sudo gedit Makefile.config #打开Makefile.config文件
            36. 根据个人情况修改文件
              a.若使用cudnn,则

            37.   
            38.   
            39. 1
            40.   
            41.   
            42. 2
            43.   
            44.   
            45. 3
            46.   
            47.   
            48. 4
            49.  
            50.  
            51. #USE_CUDNN := 1
            52. 修改成: 
            53. USE_CUDNN := 1
            54. b.若使用的opencv版本是3的,则

            55. #OPENCV_VERSION := 3 
            56. 修改为: 
            57. OPENCV_VERSION := 3
            58. c.若要使用Python来编写layer,则

            59. #WITH_PYTHON_LAYER := 1 
            60. 修改 
            61. WITH_PYTHON_LAYER :=  d. 重要的一项:
              将# Whatever else you find you need goes here.下面的

            62.   
            63.   
            64. 1
            65.   
            66.   
            67. 2
            68.   
            69.   
            70. 3
            71.   
            72.   
            73. 4
            74.   
            75.   
            76. 5
            77.  
            78.  
            79.  
            80.  
                • 1
                • 2
                • 3
                • 4
                • 5
                INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
              • LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
              • 修改为: 
              • INCLUDE_DIRS local/include /usr/include/hdf5/serial
              • LIBRARY_DIRS local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
              • 这是因为ubuntu16.04文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.
                5修改makefile文件
                打开makefile文件,做如下修改

              •   
              •   
              • 1
              •   
              •   
              • 2
              •   
              •   
              • 3
              •   
              •   
              • 4
              •  
              •  将:
              • NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
              • 替换为:
              • NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
              • 6)编辑/usr/local/cuda/include/host_config.h
                将其中的第115行注释掉:

              •   
              •   
              • 1
              •   
              •   
              • 2
              •   
              •   
              • 3
              •   
              •   
              • 4
              •  
              •  
              • #error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
              • 改为
              • //#-- unsupported GNU version! gcc versions later than 4.9 are not supported!
              • 7)编译

              •   
              •   
              • 1
              •  
              •  make all -j8 #-j根据自己电脑配置决定
              • 编译过程中可能会出现如下错误
                错误内容1

              •   
              •   
              • 1
              •  
              •  "fatal error: hdf5.h: 没有那个文件或目录"
              • 解决办法:
                step1:Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码

              •   
              •   
              • 1
              •   
              •   
              • 2
              •   
              •   
              • 3
              •   
              •   
              • 4
              •  
              •  将:
              • INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
              • 替换为:
              • INCLUDE_DIRS include /usr/include/hdf5/serial/
              • stept2:Makefile文件的第173行,把 hdf5_hl hdf5修改hdf5_serial_hl hdf5_serial,也就是把下面第一行代码改为第二行代码

              •   
              •   
              • 1
              •   
              •   
              • 2
              •   
              •   
              • 3
              •   
              •   
              • 4
              •  
              •  将:
              • 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

              •   
              •   
              • 1
              •  
              •  "libcudart.so.8.0 cannot open shared object file: No such file or directory"
              • 解决办法是将一些文件复制到/usr/local/lib文件夹下:

              •   
              •   
              • 1
              •   
              •   
              • 2
              •   
              •   
              • 3
              •   
              •   
              • 4
              •  
              •  #注意自己CUDA的版本号!
              • sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.0 && sudo ldconfig
              • sudo 8.0/lib64/libcublas.0 /usr/local/lib/libcublas8.0/lib64/libcurand.0 /usr/local/lib/libcurand.0 && sudo ldconfig
              • 8测试

              • sudo make runtest
              • 如果运行之后出现下图,说明caffe配置成功。

                6.caffe测试结果
                到此caffe配置完毕!

              • MNIST数据集测试

              • 配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
                1.将终端定位到Caffe根目录

              • cd ~/caffe
              • 2.下载MNIST数据库并解压缩

              •   
              •   
              • 1
              •  
              •  ./data/mnist/get_mnist.sh
              • 3.将其转换成Lmdb数据库格式

              •   
              •   
              • 1
              •  
              •  ./examples/mnist/create_mnist.sh
              • 4.训练网络

              •   
              •   
              • 1
              •  
              •  ./examples/mnist/train_lenet 训练的时候可以看到损失与精度数值,如下图:

                7.MNIST数据集训练
                可以看到最终训练精度是0.9914

              • 参考文献

              • [1] (http://www.jb51.cc/article/p-cwiuorwk-qg.html)
                [2] (http://www.th7.cn/system/lin/201608/176823.shtml)
                [3] (http://www.tuicool.com/articles/JvUvQjZ)
                [4] (http://www.linuxidc.com/Linux/2015-11/124913.htm)

              猜你在找的Ubuntu相关文章