原文链接(此为Caffe官方安装指南)
http://caffe.berkeleyvision.org/install_osx.html
Caffe
查看Github
BAIR(Berkeley Artificial Inteligence Research) 开发的 深度学习框架
作者:贾扬清
首席开发:Evan Shelhamer
OS X 安装指南
我们强力推荐使用 Homebrew 包管理工具,而且期望你可以从一个 空的/usr/local/ 目录开始配置,毕竟这样可以最大程度地避免冲突。
那么我们假定您已经拥有和 Anaconda Python 和 Homebrew 的环境。
译者的温暖说明
1. Homebrew:这是Mac系统下一个常用的包(也可以理解为应用)管理工具,使用它可以通过brew命令简单地安装很多开发包;
2. Homebrew 需要单独安装。安装方法
*3. 所谓的 空的/usr/local/,个人建议不用太可以,一些安装不理想的包使用brew reinstall就好了
4. Anaconda Python 是一个开源的 Python 发型版本,其中包含了大量的科学包和依赖项
5. Anaconda Python,需要单独安装。下载链接
CUDA:通过 NVIDIA 的软件包安装 CUDA 和对应的驱动。我们推荐使用CUDA 7。因为OS X 10.9以上的系统已经将 clang++ 作为默认的编译器,将libc++作为默认的标准库,而 旧版的CUDA 则需要依赖 libstdc++。存在这样的不一致是的我们对依赖项的编译配置变得复杂,从而极易出错。
译者的温暖说明
6. libstdc++,mac系统废弃了这个库并使用libc++替代,但老版本的CUDA对其有依赖。
7. 很多新版的macBook都没有配备 NCIDIA 的 GPU,而是Intel 或 AMD 的,针对这样的Mac,可以直接放弃编译GPU版本的Caffe
Library Path:不设置 $LD_LIBRARY_PATH。同时,将 $DYLD_FALLBACK_LIBRARY_PATH 当做 CUDA、Python 以及 其他相关库 查找目录(比如:/usr/local/cuda/lib:$HOME/anaconda/lib:/usr/local/lib:/usr/lib),这样是可以成功编译的。
其他的环境设置方式,我们不保证编按照期望进行。
译者的温暖说明
8. 例子中的 /usr/local/cuda/lib 是CUDA相关库的目录位置(设置时候最好进入到对应目录确认下目录的正确性);
9. /usr/local/lib 与 /usr/lib,一般通过brew安装的lib会在这两个目录中有对应的链接;
10. 设置方法:进入用户目录,打开 .bash_profile 文件(没有则创建),添加一行 “export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/lib:/usr/lib”,然后退出 source .bash_profile 使配置生效,再使用“echo $DYLD_FALLBACK_LIBRARY_PATH”测试一下是否设置成功即可。
通用依赖
brew install -vd snappy leveldb gflags glog szip lmdb
# need the homebrew science source for OpenCV and hdf5
brew tap homebrew/science
brew install hdf5 opencv
译者的温暖说明
11. -v 显示更多中间信息,-d 显示debug信息;
12. snappy:一个C++用来 压缩&解压缩 的开发包;
13. leveldb:Google实现的一个高效的kv数据库;
14. gflags:一个命令行参数解析工具;
15. glog:一个与记录日志相关的工具;
16. szip:显然与zip压缩、解压相关;
17. lmdb:一个轻量级的内存映射数据库;
18. brew tap homebrew/science:这一步已经不需要再做了(你也成功不了),因为hormbrew/science这个仓库已经被迁移了,直接brew tap, 看到有homebrew/core 这一项,没有就添加。
19. brew tap管理的像是一个软件商店列表,有些软件没有在主商店中存在,想购买(下载)它就需要去一些深巷子中的小商店了(第三方)
20. hdf5:Hierarchical Data Format 5,其可以存在不同类型的图像、数码数据文件格式,他的安装很慢,要耐心……我这边大概一个半小时……也可能因“机”而异
21. opencv:图像操作库,安装也要费点时间
如果使用了Anaconda Python,针对openCv的配置 可能会需要做对应的修改,使用brew edit opencv并参照下面的例子修改对应的变量。
-DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib
-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7
译者的温暖说明
22. 可能需要修改,就是也可能不修改,依次检查下python2、python3对应的目录设置,再命令行中敲一敲,保证对应的目录存在即可。
如果使用了Anaconda Python,HDF5则已绑定安装了,所以hdf5相关的配置可以跳过。
遗留配置,with / without Python
# with Python pycaffe needs dependencies built from source
brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python
# without Python the usual installation suffices
brew install protobuf boost
译者的温暖说明
23 --with-python 这个选项貌似无效了,直接去掉就好
BLAS:已经在Accelerate / vecLib Framework中安装了。OpenBLAS 和 MKL 是为了支持CPU加速计算的,可选择安装。
译者的温暖说明
24 BLAS:Basic Linear Algebra Subprograms,基础线性代数子程序
Python(可选):推荐使用Anaconda Python。如果你拒绝,请使用 homebrew。并且保证 caffe 和 相关的依赖 连接到同一个python。
继续 编译 吧!
译者的温暖说明
25 后面内容基本可以跳过,解决低版本的兼容问题。
26 编译部分内容很简单,就不翻译了。(我指篇幅短,不是指没有坑...)
libstdc++ 安装指南
走这条路需要强大的勇气。针对 OS X 10.10 和 10.9 系统,您需要安装 低于 CUDA 7 并不可调和的话。深呼一口气吧,然后继续……
在 OS X 10.9+系统中,clang++ 是默认的 C++编译器,libc++ 是默认的标准库。然而,英伟达的 CUDA--直到6.0版本--只依赖了libstdc++,这致使我们需要针对每一个依赖修改编译配置。
我们通过 在安装这些依赖前 修改 homebrew formulae 的方式 来达成目的。要确保homebrew没有在我们视线外安装任何依赖,即保证所有的包必须链接到 libstdc++.
需要 提前配置 homebrew formulae 的 依赖包如下:
boost snappy leveldb protobuf gflags glog szip lmdb homebrew/science/opencv
针对每个配置项,使用brew edit [配置项] 去添加环境宏,像下面这样
def install
# ADD THE FOLLOWING:
ENV.append "CXXFLAGS", "-stdlib=libstdc++"
ENV.append "CFLAGS", "-stdlib=libstdc++"
ENV.append "LDFLAGS", "-stdlib=libstdc++ -lstdc++"
# The following is necessary because libtool likes to strip LDFLAGS:
ENV["CXX"] = "/usr/bin/clang++ -stdlib=libstdc++"
...
依次 修改每个规则(formulae),然后执行:
for x in snappy leveldb protobuf gflags glog szip boost boost-python lmdb homebrew/science/opencv; do brew edit $x; done
在这之后,执行:
for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew uninstall $x; brew install --build-from-source -vd $x; done
brew uninstall protobuf; brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python
如果上述过程没有做好,链接错误将会不断叨扰你。
homebrew版本控制:homebrew像一个独立的git仓库一样管理它自己,使用brew edit [软件包名] 会更改 你本地拷贝的 homebrew master分支 的内容。默认情况下,它会防止你使用brew update 去更新 homebrew,如果你那么做,会看到如下错误:
$ brew update
error: Your local changes to the following files would be overwritten by merge:
Library/Formula/lmdb.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
(如果想要保存我们的修改)一个解决的办法是 将你的 homebrew 配置提交到一个独立的分支,并在该分之下执行brew update,并将你的更改放置到这个分支上。你需要在 /usr/local (HomeBrew 主仓库)和 /usr/local/Library/Taps/homebrew/homebrew-science(含OpenCV的仓库)分别做这件事情。
cd /usr/local
git checkout -b caffe
git add .
git commit -m "Update Caffe dependencies to use libstdc++"
cd /usr/local/Library/Taps/homebrew/homebrew-science
git checkout -b caffe
git add .
git commit -m "Update Caffe dependencies"
那么,当你想要更新homebrew的时候,切回主分支,执行update,并将主分支的更新同步到caffe 分支,然后解决冲突
# Switch batch to homebrew master branches
cd /usr/local
git checkout master
cd /usr/local/Library/Taps/homebrew/homebrew-science
git checkout master
# Update homebrew; hopefully this works without errors!
brew update
# Switch back to the caffe branches with the formulae that you modified earlier
cd /usr/local
git rebase master caffe
# Fix any merge conflicts and commit to caffe branch
cd /usr/local/Library/Taps/homebrew/homebrew-science
git rebase master caffe
# Fix any merge conflicts and commit to caffe branch
# Done!
这样,你既可以 同步homebrew的最新版本,又可以保留Caffe相关的配置修改。