译:在 OS X 安装Caffe(即:在Mac上配置Caffe环境,含关键词句说明)

原文链接(此为Caffe官方安装指南)

http://caffe.berkeleyvision.org/install_osx.html

Caffe

查看Github
BAIR(Berkeley Artificial Inteligence Research) 开发的 深度学习框架
作者:贾扬清
首席开发:Evan Shelhamer

OS X 安装指南

我们强力推荐使用 Homebrew 包管理工具,而且期望你可以从一个 空的/usr/local/ 目录开始配置,毕竟这样可以最大程度地避免冲突。
那么我们假定您已经拥有和 Anaconda PythonHomebrew 的环境。

译者的温暖说明
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 当做 CUDAPython 以及 其他相关库 查找目录(比如:/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中安装了。OpenBLASMKL 是为了支持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相关的配置修改。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容