Bootstrap

Caffe 实践 在macOS (版本号10.11) 上安装Caffe

安装Caffe

主要是按照Caffe官方指南安装的,但遇到各种各样的问题。下面把我安装时遇到的问题和教训列出来,做个记录。我安装的cuda版本是7.5,BLAS使用的是openblas,CuDNN版本是5.1

遇到的坑

  1. 无法用brew install 安装snappy和leveldb。后来发现是因为我更新了MacOS的版本,homebrew原有的版本就失效了,原本brew update能够更新到最新的版本,但那个也失效了,于是我只能卸载掉homebrew重新安装它。结果就成功安装snappy和leveldb了
  2. make all的时候遇到protobuf incompatible version 问题。这是因为protobuf更新到3.0.0,与旧版本不兼容。一定要make clean,再make all
  3. make all 遇到/bin/sh: /usr/local/cuda/bin/nvcc: No such file or directory。检查Makefile搜索nvcc,发现其使用的是$(CUDA_DIR)/bin/nvcc 来访问nvcc,研究发现后是因为我只安装了cuda driver没有安装cuda toolkit (https://developer.nvidia.com/cuda-75-downloads-archive) 而nvcc是在cuda toolkit里面的。
  4. BLAS我使用的是openblas (使用brew install homebrew/science/openblas安装,安装完最后会输出include和lib的位置。修改Makefile.config。BLAS := open; BLAS_INCLUDE := $(shell brew --prefix openblas)/include; BLAS_LIB := $(shell brew --prefix openblas)/lib
  5. make all太慢,使用make all -j4用四个线程编译加速
  6. make all 最后出现了link错误ld: -rpath can only be used when targeting Mac OS X 10.5 or later. clang: error: linker command failed with exit code 1 (use -v to see invocation)。意识到可能是因为我的xcode的版本太老,正好MacOs有10.12的更新,就更新了。
  7. make all 在MacOS 10.12上No receipt for 'com.apple.pkg.CLTools_Executables' found at '/' 。发现是Makefile里确定XCODE Client 版本的脚本不兼容了XCODE_CLT_VER := $(shell pkgutil --pkg-info=com.apple.pkg.CLTools_Executables | grep 'version' | sed 's/[^0-9]*\([0-9]\).*/\1/') 只好暂时修改XCODE_CLT_GEQ_7 :=1;来避开这个错误。但编译的时候发现10.12 deprecated掉了很多函数,而protobuf还没有改过来,于是产生了许多警告信息。
  8. make all遇到了nvcc fatal : The version ('80000') of the host compiler ('Apple clang') is not supported,这个时候可能nvcc也没有对应10.12的更新了。。。只好去https://developer.apple.com/download/more/ 装上http://adcdownload.apple.com/Developer_Tools/Command_Line_Tools_OS_X_10.11_for_Xcode_7.3.1/Command_Line_Tools_OS_X_10.11_for_Xcode_7.3.1.dmg 尝试替换回旧的版本。使用sudo xcode-select --switch /Library/Developer/CommandLineTools切换成旧的版本。用clang --version验证是7.3.0版而不是8.0.0版。终于make all成功了!!!!!(把之前第7步对Makefile的更改改回来)
  9. make runtest 遇到了no CUDA-capable device is detected 问题
    E1001 19:56:13.588129 3489002432 common.cpp:113] Cannot create Cublas handle. Cublas won't be available.
    E1001 19:56:14.732020 3489002432 common.cpp:120] Cannot create Curand generator. Curand won't be available.
    F1001 19:56:14.732951 3489002432 test_gradient_based_solver.cpp:462] Check failed: error == cudaSuccess (38 vs. 0) no CUDA-capable device is detected

    搜索了一下,觉得可能是因为cuda driver的版本不够高,只有7.5.26。于是到http://www.nvidia.com/object/mac-driver-archive.html 更新到7.5.30后,问题解决

安装CuDNN

// 从https://developer.nvidia.com/cudnn下载最新的CuDNN
cd install_dir
sudo cp include/cudnn.h /Developer/NVIDIA/CUDA-7.5/include/
sudo cp lib/libcudnn* /usr/local/cuda/lib/
// 修改Makefile.config USE_CUDNN := 1
make clean; make all; make test; make runtest;

安装pycaffe

// 下载Anaconda Python,可能需要重启一下电脑让python路径指向Anaconda
cd caffe
for req in $(cat python/requirements.txt); do pip install $req; done
// 修改Makefile.config文件
// ANACONDA_HOME := $(HOME)/anaconda
// PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ 
                $(ANACONDA_HOME)/include/python2.7 \ 
                $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include                 
// PYTHON_LIB := $(ANACONDA_HOME)/lib               
brew install boost-python
make clean; make all -j4; make pycaffe
export PYTHONPATH=~/caffe/python/:$PYTHONPATH

遇到的坑(未解决)

  1. import caffe的时候遇到以下的问题:
    anaconda/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
    warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
    Illegal instruction: 4
    怀疑是因为MacOS升级成10.12后的不兼容的问题。只能先放弃python了
;