安装Caffe
主要是按照Caffe官方指南安装的,但遇到各种各样的问题。下面把我安装时遇到的问题和教训列出来,做个记录。我安装的cuda版本是7.5,BLAS使用的是openblas,CuDNN版本是5.1
遇到的坑
- 无法用brew install 安装snappy和leveldb。后来发现是因为我更新了MacOS的版本,homebrew原有的版本就失效了,原本brew update能够更新到最新的版本,但那个也失效了,于是我只能卸载掉homebrew重新安装它。结果就成功安装snappy和leveldb了
- make all的时候遇到protobuf incompatible version 问题。这是因为protobuf更新到3.0.0,与旧版本不兼容。一定要make clean,再make all
- 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里面的。 - 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
make all
太慢,使用make all -j4
用四个线程编译加速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的更新,就更新了。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还没有改过来,于是产生了许多警告信息。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的更改改回来)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
遇到的坑(未解决)
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.
怀疑是因为MacOS升级成10.12后的不兼容的问题。只能先放弃python了
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
Illegal instruction: 4