在macosx上面安装深度学习框架caffe是个相对比较麻烦的过程。如果根据caffe项目的install_osx文件指引去安装,会遇到一些问题。所以我决定把自己的安装过程记录下来。
硬软件环境
电脑:iMac
系统:OX EI Caption 版本10.11.4
Homebrew
官方推荐使用Homebrew来管理依赖项的下载,安装。
##Anaconda Python Anaconda是python的一个常用的科学计算发行版,自带包管理器conda。从 https://store.continuum.io/cshop/anaconda/ 下载并安装Anaconda Python。安装成功之后,记得在PATH添加ananconda执行文件的路径:
export PATH=~/anaconda/bin:$PATH
CUDA
从 https://developer.nvidia.com/cuda-downloads 下载并安装CUDA 8.0 (for OSX)
从 http://www.nvidia.com/object/mac-driver-archive.html 下载并安装最新的CUDA独立驱动。
同样我们把驱动的可执行文件路径添加到PATH环境变量中(注意下载安装的CUDA的版本号):
export PATH=/Developer/NVIDIA/CUDA-8.0/bin/$PATH
export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-8.0/lib:$DYLD_LIBRARY_PATH
BLAS
网上搜索到的教程中都是使用Intel MKL,查看网站会发现intel-mkl收费很贵,所以我安装的时候选择了OpenBLAS
brew install openblas
关于 intel-mkl 和 openblas 的优劣,没有做过比较。在校大学生可通过学校邮箱在页面 https://software.intel.com/en-us/qualify-for-free-software/student 申请安装包。
##cuDNN
从 https://developer.nvidia.com/cudnn 页面下载并安装cuDNN库,安装过程如下:
tar -xzvf cudnn-8.0-osx-x64-v5.1.tgz
cd cuda
sudo cp lib/* /usr/local/cuda/lib
sudo cp include/cudnn.h /usr/local/cuda/include/
##安装依赖项 via Homebrew
首先我们需要修改下homebrew安装 opencv 时需要用到的opencv.rb文件
brew edit opencv
将下面两行:
args << "-DPYTHON_LIBRARY=#{py_lib}/libpython2.7.#{dylib}"
args << "-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7"
替换为:
args << "-DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib"
args << "-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7"
然后开始安装依赖项:
brew install --fresh -vd snappy leveldb gflags glog szip lmdb homebrew/science/opencv
brew install --build-from-source --with-python --fresh -vd protobuf
brew install --build-from-source --fresh -vd boost boost-python
brew install hdf5
安装过程有点漫长,可能会出现一些错误,需要耐心的修复掉。
如果你把电脑升级到最新的 macOS Sierra 10.12,会由于新系统不内置QTKit导致opencv编译失败。
##下载Caffe代码
git clone https://github.com/BVLC/caff.git
cd caffe
cp Makefile.config.example Makefile.config
##Makefile.config
修改Makefile.config
BLAS:=open
BLAS_INCLUDE := $(shell brew --prefix openblas)/include
BLAS_LIB := $(shell brew --prefix openblas)/lib
取消CUDDNN的注释
USE_CUDNN := 1
检查设置Python路径
# 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 \
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.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
# /usr/lib/python3.5/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
##环境变量
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:/Users/cp/anaconda/lib:/usr/local/lib:/usr/local/Cellar/:/usr/local/cuda/lib:~/anaconda/lib:/usr/local/lib:/usr/lib:$DYLD_FALLBACK_LIBRARY_PATH
##编译caffe make clean make all -j8 make runtest
runtest 相对会花些时间
make pycaffe
make distribute
就大功告成了
##References: