• Ubuntu Anaconda3 环境下安装caffe


    安装Python环境

    本人环境为Anaconda3 ,可参照 https://blog.csdn.net/ctwy291314/article/details/86571198 完成安装Python2.7环境安装与多Python环境切换。

    安装依赖包

    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
    

    安装显卡驱动与CUDA 、cuDNN

    请参照 https://blog.csdn.net/ctwy291314/article/details/80951148 进行CUDA 、cuDNN进行安装。

    安装protoc

    命令 whereis protoc可以查看哪些路径下安装了protoc
    命令which protoc可以查看默认选用protoc的路径
    命令 protoc --version可以查看当前protoc版本
    在这里插入图片描述
    安装protobuf2.6.1

    下载文件
    https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
    解压安装

    tar -zxvf protobuf-2.6.1.tar.gz
    sudo apt-get install build-essential
    cd protobuf-2.6.1/
    ./configure
    make
    make check
    sudo make install
    

    指定protoc的版本

    在Makefile 中修改这两句:
    我的protobuf路径为/usr/local/bin/protoc

    $(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
    $(Q)protoc --proto_path=src --python_out=python $<
    为
    $(Q)/usr/local/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
    $(Q)/usr/local/bin/protoc --proto_path=src --python_out=python $<
    

    即把开头的"protoc"补全路径即可 (/usr/bin/protoc即为自己向指定给的版本路径)
    注:这种修改不会影响系统默认的protoc版本,只会在caffe编译的时候调用相应的proto版本

    安装 caffe

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

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

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

    cd caffe
    sudo cp Makefile.config.example Makefile.config
    

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

    然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

    sudo gedit Makefile.config
    

    修改 Makefile.config 文件内容:

    1. 应用 cudnn
        #将
        #USE_CUDNN := 1
        #修改成: 
        USE_CUDNN := 1
    
    1. 应用 opencv 版本
        #将
        #OPENCV_VERSION := 3 
        #修改为: 
        OPENCV_VERSION := 3
    
    1. 使用 python 接口
    	#将
    	#WITH_PYTHON_LAYER := 1 
    	 #修改为 
    	WITH_PYTHON_LAYER := 1
    
    1. 修改 python 路径

      修改PYTHON_INCLUDE、PYTHON_LIB路径
      本人安装的是Anaconda3多Python版本切换,python2.7 目录为:/home/hylink/anaconda3/envs/python27
      在这里插入图片描述
      再修改INCLUDE_DIRS、LIBRARY_DIRS 路径

      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     
      
    2. 修改 caffe 目录下的 Makefile 文件

      #将:
      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
      
    3. 开始编译
      make all -j8

      编译出现问题1:

      NVCC src/caffe/layers/bnll_layer.cu  
      nvcc fatal   : Unsupported gpu architecture 'compute_20'  
      Makefile:594: recipe for target '.build_release/cuda/src/caffe/layers/bnll_layer.o' failed  
      make: *** [.build_release/cuda/src/caffe/layers/bnll_layer.o] Error 1  
      make: *** Waiting for unfinished jobs....  
      

      仔细查看了一下 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.0所以把下面这两行删除就可以了

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

      编译出现问题2:

      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 update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10
      sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10	
      

      编译出现问题3:

      error while loading shared libraries: libcudart.so.9.0: cannot open shared object file: No such file
      error while loading shared libraries: libcudnn.so.7: cannot open shared object file: No such file

      解决方法

      sudo cp /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/local/lib/libcudart.so.9.0 && sudo ldconfig
      sudo cp /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/local/lib/libcublas.so.9.0 && sudo ldconfig
      sudo cp /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/local/lib/libcurand.so.9.0 && sudo ldconfig
      sudo cp /usr/local/cuda-9.0/lib64/libcudnn.so.7 /usr/local/lib/libcudnn.so.7 && sudo ldconfig
      

    编译成功后可运行测试:
    sudo make runtest -j8
    在这里插入图片描述

    安装 pycaffe

    首先编译 pycaffe :

    cd caffe
    sudo make pycaffe -j8
    

    编译 pycaffe 成功后,验证一下是否可以在 python 中导入 caffe 包,首先进入 python 环境:

    python
    

    然后导入 caffe :

    >>> import caffe
    

    错误1:
    ModuleNotFoundError: No module named 'caffe._caffe'
    正确编译 pycaffe后,会在caffe/python/caffe目录下生成_caffe.so的文件
    解决方式一:
    每次在程序里加一句 sys.path.append('path to cafferoot/python')
    例如:sys.path.append('/home/hylink/eclipse-workspace/caffe/python')
    解决方式二:

    sudo gedit ~/.bashrc
    export PYTHONPATH=/home/hylink/eclipse-workspace/caffe/python:$PYTHONPATH
    source~/.bashrc
    

    至此caffe环境安装完成。

  • 相关阅读:
    c 的内存分配与释放原则: 通常应遵循“谁malloc,谁free”的原则。
    总算知道怎样从ImageMagick生成的数据转换成HICON: MagickGetImageBlob & LookupIconIdFromDirectoryEx
    收藏:Non-direct与direct ByteBuffer区别
    java NIO 直接与非直接缓冲区
    [收藏]:[算法]LRU和LFU的区别
    异步IO的并发能力:backlog的配置很重要
    ByteBuffer: 当由一个byte[]来生成一个固定不变的ByteBuffer时,使用ByteBuffer.wrap(byte[]);
    ByteBuffer的allocate与allocateDirect2013-01-11
    Windows完成端口与Linux epoll技术简介
    Java并发——Fork/Join框架与ForkJoinPool
  • 原文地址:https://www.cnblogs.com/gmhappy/p/11863995.html
Copyright © 2020-2023  润新知