系统:MacOS sierra 10.12.6
tf版本:1.2.1
最近在安装tensorflow的时候,遇到了下面的问题:
实际上就是因为我们直接用官方编译好的,并不能完美的与本地的指令集兼容,有点强迫症,所以决定从源码进行编译。
基本的环境主要包括这几步:
安装bazel
安装python依赖
NVIDIA 的包(如果有显卡)
mac并没有NVIDIA显卡,所以这一步省略。
基本的科学环境使用的是anaconda,如果不太熟的话,参见参考文献中的anaconda博客,网上也有很多相关教程。
brew是一个非常好用的mac的包管理器,能够自动的帮助我们解决依赖问题,安装卸载都非常方便。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果还没有git的话,建议使用brew安装git。
brew install git
经常能到大家抱怨使用git或者brew的时候,速度很慢,实际上可以使用代理来加快速度,如果已经使用s搭建了代理服务器,那就好了,只需要简单的配置即可。
需要说明的是,在mac下,新版本的系统开启了SIP(System Integrity Protection),所以proxychains不好用,除非关闭,不过这样还是有点麻烦,简单的来说,直接用下面的配置简单快捷。
在环境变量中导出下面的变量:
export ALL_PROXY=socks5://127.0.0.1:1086
这样的话,在命令行中就可以使用代理了,经过测试,git最高速度差不多到4MB左右。
使用brew安装bazel很简单:
brew install bazel
➜ ~ bazel version
Build label: 0.5.3-homebrew
Build target: bazel-out/darwin_x86_64-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Sun Aug 6 12:54:10 2017 (1502024050)
Build timestamp: 1502024050
Build timestamp as int: 1502024050
请参考参考文献中的bazel官方文档。
首先确认我们已经准备好了anaconda的环境,然后创建一个环境,我的环境是python3.6.2版本,环境名为py36,首先使用下面的命令激活环境:
source activate py36
然后使用conda命令安装相关依赖:
conda install six numpy wheel
在编译的时候,需要调用这些包,所以,建议是先激活环境,防止出错。
使用git下载tensorflow的源码:
git clone https://github.com/tensorflow/tensorflow
cd tensorflow
ls
ACKNOWLEDGMENTS AUTHORS CONTRIBUTING.md LICENSE RELEASE.md bazel-bin bazel-out bazel-testlogs configure tensorflow tools
ADOPTERS.md BUILD ISSUE_TEMPLATE.md README.md WORKSPACE bazel-genfiles bazel-tensorflow bower.BUILD models.BUILD third_party util
然后看一下tag:
git tag
0.12.0-rc0
0.12.0-rc1
0.12.1
0.5.0
0.6.0
v0.10.0
v0.10.0rc0
v0.11.0
v0.11.0rc0
v0.11.0rc1
v0.11.0rc2
v0.12.0
v0.6.0
v0.7.0
v0.7.1
v0.8.0
v0.8.0rc0
v0.9.0
v0.9.0rc0
v1.0.0
v1.0.0-alpha
v1.0.0-rc0
v1.0.0-rc1
v1.0.0-rc2
v1.0.1
v1.1.0
v1.1.0-rc0
v1.1.0-rc1
v1.1.0-rc2
v1.2.0
v1.2.0-rc0
v1.2.0-rc1
v1.2.0-rc2
v1.2.1
v1.3.0
v1.3.0-rc0
v1.3.0-rc1
v1.3.0-rc2
选择我们想要的版本,切换过去:
git checkout v1.2.1
这样我们就把环境准备好了。
在tensorflow的目录中,运行下面的命令:
./configure
会出现一些提示,包括python的库的位置,根据实际情况填写,参考参考文献中的官方文档。
编译,创建pip包:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
这个是cpu的版本,没有GPU。
大约20多分钟以后,终于编译完成。
接下来打包成wheel包,以便安装:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
然后,我们在/tmp/tensorflow_pkg
目录下就能看到这样的文件:
tensorflow-1.2.1-cp36-cp36m-macosx_10_7_x86_64.whl
然后使用下面的命令,安装到当前的anaconda的环境:
pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp36-cp36m-macosx_10_7_x86_64.whl
然后,再也不会有烦人的提示了!
[官方文档]:https://www.tensorflow.org/install/install_sources
[anaconda博客]:http://www.jianshu.com/p/2f3be7781451
[brew官网]:https://brew.sh/index_zh-cn.html
[homebrew替换中科大的源]:https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git
[中科大homebrew源]:https://lug.ustc.edu.cn/wiki/mirrors/help/homebrew-bottles
[bazel官方文档]:https://docs.bazel.build/versions/master/install-os-x.html