## 2.4 Caffe环境搭建 ### 注意:如果您的Ubuntu是20.04版本的 * 请参考《[如何在Ubuntu20.02 上面搭建caffe环境](https://gitee.com/wgm2022/wu_guiming.gitee.io/blob/master/01%20%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E7%9B%B8%E5%85%B3/%E5%A6%82%E4%BD%95%E5%9C%A8Ubuntu20.02%20%E4%B8%8A%E9%9D%A2%E6%90%AD%E5%BB%BAcaffe%E7%8E%AF%E5%A2%83.md)》 ### 如果您的Ubuntu是18.04版本的,请继续往下操作 * 1、在Ubuntu系统中,分步执行下面的命令,对Ubuntu里面的软件进行更新。 ```sh sudo apt-get update sudo apt-get upgrade ``` * 2、分步执行下面的命令,安装所需的依赖软件。 ```sh sudo apt-get install -y libopencv-dev -y sudo apt-get install -y build-essential cmake git pkg-config -y sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler -y sudo apt-get install -y liblapack-dev -y sudo apt-get install -y libatlas-base-dev -y sudo apt-get install -y --no-install-recommends libboost-all-dev -y sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev -y sudo apt-get install -y python-numpy python-scipy -y sudo apt-get install -y python3-pip -y sudo apt-get install -y python3-numpy python3-scipy -y ``` * 3、执行下面的命令,下载caffe开源软件 ```sh git clone https://github.com/BVLC/caffe.git ``` * 4、进入caffe/python/目录下,执行下面的命令,下载依赖的软件 ```sh cd caffe/python for req in $(cat requirements.txt); do pip3 install $req; done ``` * 5、进入caffe目录下,执行下面的命令,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ```sh cp Makefile.config.example Makefile.config ``` * 6、接下来是修改Makefile.config里面的配置,使用vim工具打开Makefile.config。 ```sh vim Makefile.config ``` * ① 将CPU_ONLY前面的注释去掉。 ```sh # 将 # CPU_ONLY := 1 # 改为 CPU_ONLY := 1 ``` * ② 将OPENCV_VERSION前面的注释去掉 ```sh # 将 # OPENCV_VERSION := 3 # 改为 OPENCV_VERSION := 3 ``` * ③ 因为我们Ubuntu的环境是python3.6,所以请把PYTHON_INCLUDE = python2.7这个配置前面加上注释,且把PYTHON_INCLUDE=python3.5的注释打开,把所有的3.5都改成3.6,具体修改如下: * 注意:如果您的python3是其他的版本,就把python3.5改成您Ubuntu对应的python3版本即可 ![](./figures/hispark_taurus_ai_sample/028%E4%BF%AE%E6%94%B9python%E7%89%88%E6%9C%AC%E5%A5%BD.png) * ④ 将WITH_PYTHON_LAYER := 1前面的注释去掉 ```sh # 将 # WITH_PYTHON_LAYER := 1 # 改为 WITH_PYTHON_LAYER := 1 ``` * ⑤ 修改INCLUDE_DIRS和LIBRARY_DIRS ```sh # 将 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 ## Refer to http://caffe.berkeleyvision.org/installation.html # Contributions simplifying and improving our build system are welcome! # cuDNN acceleration switch (uncomment to build with cuDNN). # USE_CUDNN := 1 # CPU-only switch (uncomment to build without GPU support). CPU_ONLY := 1 # uncomment to disable IO dependencies and corresponding data layers # USE_OPENCV := 0 # USE_LEVELDB := 0 # USE_LMDB := 0 # USE_HDF5 := 0 # uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary) # You should not set this flag if you will be reading LMDBs with any # possibility of simultaneous read and write # ALLOW_LMDB_NOLOCK := 1 # Uncomment if you're using OpenCV 3 OPENCV_VERSION := 3 # To customize your choice of compiler, uncomment and set the following. # N.B. the default for Linux is g++ and the default for OSX is clang++ # CUSTOM_CXX := g++ # CUDA directory contains bin/ and lib/ directories that we need. CUDA_DIR := /usr/local/cuda # On Ubuntu 14.04, if cuda tools are installed via # "sudo apt-get install nvidia-cuda-toolkit" then use this instead: # CUDA_DIR := /usr # 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 # BLAS choice: # atlas for ATLAS (default) # mkl for MKL # open for OpenBlas BLAS := atlas # Custom (MKL/ATLAS/OpenBLAS) include and lib directories. # Leave commented to accept the defaults for your choice of BLAS # (which should work)! # BLAS_INCLUDE := /path/to/your/blas # BLAS_LIB := /path/to/your/blas # Homebrew puts openblas in a directory that is not on the standard search path # BLAS_INCLUDE := $(shell brew --prefix openblas)/include # BLAS_LIB := $(shell brew --prefix openblas)/lib # This is required only if you will compile the matlab interface. # MATLAB directory should contain the mex binary in /bin. # MATLAB_DIR := /usr/local # MATLAB_DIR := /Applications/MATLAB_R2012b.app # NOTE: this is required only if you will compile the python interface. # We need to be able to find Python.h and numpy/arrayobject.h. # PYTHON_INCLUDE := /usr/include/python2.7 \ # /usr/lib/python2.7/dist-packages/numpy/core/include # Anaconda Python distribution is quite popular. Include path: # Verify anaconda location, sometimes it's in root. # ANACONDA_HOME := $(HOME)/anaconda # PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ # $(ANACONDA_HOME)/include/python2.7 \ # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include # Uncomment to use Python 3 (default is Python 2) PYTHON_LIBRARIES := boost_python3 python3.6m PYTHON_INCLUDE := /usr/include/python3.6m \ /usr/lib/python3.6/dist-packages/numpy/core/include # We need to be able to find libpythonX.X.so or .dylib. PYTHON_LIB := /usr/lib # PYTHON_LIB := $(ANACONDA_HOME)/lib # Homebrew installs numpy in a non standard path (keg only) # PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include # PYTHON_LIB += $(shell brew --prefix numpy)/lib # Uncomment to support layers written in Python (will link against Python libs) WITH_PYTHON_LAYER := 1 # Whatever else you find you need goes here. 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 # If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies # INCLUDE_DIRS += $(shell brew --prefix)/include # LIBRARY_DIRS += $(shell brew --prefix)/lib # NCCL acceleration switch (uncomment to build with NCCL) # https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0) # USE_NCCL := 1 # Uncomment to use `pkg-config` to specify OpenCV library paths. # (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.) # USE_PKG_CONFIG := 1 # N.B. both build and distribute dirs are cleared on `make clean` BUILD_DIR := build DISTRIBUTE_DIR := distribute # Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171 # DEBUG := 1 # The ID of the GPU that 'make runtest' will use to run unit tests. TEST_GPUID := 0 # enable pretty build (comment to see full commands) Q ?= @ ``` * 7、修改Makefile文件里面的一些配置,使用vim 打开Makefile,进行修改。 ``` vim Makefile ``` * ① 修改DYNAMIC_VERSION_REVISION的值 ```sh # 将 DYNAMIC_VERSION_REVISION := 0 # 改为 DYNAMIC_VERSION_REVISION := 0-rc3 ``` * ② 修改LIBRARIES的值 ```sh # 将 LIBRARIES += glog gflags protobuf boost_system boost_filesystem m # 改为 LIBRARIES += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_hl hdf5 ``` ![](./figures/hispark_taurus_ai_sample/029%E4%BF%AE%E6%94%B9libraries.png) ```sh # 将 LIBRARIES += opencv_imgcodecs # 改为 LIBRARIES += opencv_imgcodecs opencv_videoio ``` ![](./figures/hispark_taurus_ai_sample/030%E4%BF%AE%E6%94%B9libraries2.png) * ③ 将# NCCL acceleration configuration下面的四行注释掉 ```sh # 将 # NCCL acceleration configuration ifeq ($(USE_NCCL), 1) LIBRARIES += nccl COMMON_FLAGS += -DUSE_NCCL endif # 改为 # NCCL acceleration configuration # ifeq ($(USE_NCCL), 1) # LIBRARIES += nccl # COMMON_FLAGS += -DUSE_NCCL # endif ``` ![](./figures/hispark_taurus_ai_sample/031%E6%B3%A8%E9%87%8ANCCL.png) * 8、在caffe目录下,分步执行下面的命令,来编译caffe。 ```sh make -j4 make pycaffe ``` * 9、执行下面的命令,将caffe的python路径设置为环境变量,并更新环境变量。 ​ 执行下面的命令,打开.bashrc ```sh sudo vim ~/.bashrc ``` 把下面的命令,添加到.bashrc文件的末尾,主要/home/hispark/code/caffe/python是我自己Ubuntu的caffe/python路径,这里请填写为您自己Ubuntu中的caffe/python路径。 ```shell 在文件的末尾加上下面的语句 export PYTHONPATH=/home/hispark/code/caffe/python:$PYTHONPATH ``` ![](./figures/hispark_taurus_ai_sample/032python%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png) ​ 在执行下面的命令,更新环境变量 ```sh source ~/.bashrc ``` * 10、测试caffe环境是否OK,在Ubuntu的任意目录下,执行 python3,当出现”>>>”的提示符后,再输入import caffe,如果没有任何报错信息,说明caffe环境已经搭建成功了。 ```sh python3 import caffe ```