[原创] 如何在 Mac 电脑上面编译 GPU 版本 TensorFlow

2016-09-05 19:52:17 +08:00
 AssKicker

前段时间学习 DQN ,用 CPU 做 CNN 的 training 慢得像蜗牛。刚好家里 iMac 是 2012 款的带 N 卡 GT640M , compute capabilities 是 3.0 , google 官方提供的 whl 必须是>=3.5 ,所以只能自己重新编译 TensorFlow 。中途踩了非常多的坑,最后一个大 boss 是一个 tensorflow 的 open issue ,我的内心是崩溃的。死马当成活马医的心态最后编译成功了,所以整理出来以供大家参考下;)

补充:如果你是 A 卡 Mac 还是想做加速,建议选择 Theano 或者 Caffe ,通过 OpenCL 实现加速。
TensorFlow 据说已经在尝试加入 OpenCL 的支持: https://github.com/tensorflow/tensorflow/issues/22

###1. 准备工作

###2. 配置编译环境

补上 google 官方的步骤,可供参考点这里传送

如果以下某些包或者工具你以前已经安装过, brew 会有提示,请务必将版本升级到最新版,尤其 bazel ,升级命令 brew upgrade ...

#####开始 $ brew install bazel swig $ sudo easy_install -U six $ sudo easy_install -U numpy $ sudo easy_install wheel $ sudo easy_install python $ brew install coreutils 下面两步是安装 cud toolkit , 1G 的大小,而 nvidia 的下载速度非常坑,国内用户可以到百度网盘下载,cuda_7.5.27_mac.dmg (md5sum: cfdcbbef8941764e764ecd40dd7a49a8) ,直接安装后可以跳过下面这两步

$ brew tap caskroom/cask
$ brew cask install cuda

好了,现在用文本工具打开~/.bash_profile ,添加环境变量

export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"

然后去 nvidia 官方下载 cudnn 的包(前面安装的事 cuda toolkit ,别搞混),官方下载地址在这里,需要有 nvidia 账号,如果嫌麻烦,你可以在这里下载 cudnn4.0 或者 cudnn5.0

$ sudo mv include/cudnn.h /Developer/NVIDIA/CUDA-7.5/include/
$ sudo mv lib/libcudnn* /Developer/NVIDIA/CUDA-7.5/lib
$ sudo ln -s /Developer/NVIDIA/CUDA-7.5/lib/libcudnn* /usr/local/cuda/lib/

选择 Xcode

$ sudo xcode-select -s /Applications/Xcode.app

拉取最新代码(笔者已测试 r0.9 , r0.10 和最新 master 2016-09-04 )

git clone https://github.com/tensorflow/tensorflow.git

$ cd tensorflow

$ ./configure

(网上有种说法是 TF_UNOFFICIAL_SETTING=1 ./configure ,前面加了一个参数,然而亲测并没什么卵用,在 r0.10 依然编译错误)

按照提示输入你的配置要求:

Please specify the location of python. [Default is /usr/bin/python]: Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N No Google Cloud Platform support will be enabled for TensorFlow Do you wish to build TensorFlow with GPU support? [y/N] y GPU support will be enabled for TensorFlow Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]: Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 7.5 Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: Please specify the cuDNN version you want to use. [Leave empty to use system default]: 5 Please specify the location where cuDNN 5 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: Please specify a list of comma-separated Cuda compute capabilities you want to build with. 3.0 ...... ......

如果是 r0.9 ,会比较快,如果是 r0.10 会非常慢,要下载很多依赖包具体取决于你的翻墙网速。我的办法就是用迅雷单独下载好,然后通过修改本地 hosts 文件指向到从本地下载包,嫌麻烦的同学还是老实等待吧,如果报错了注意看提示,这步基本都是因为网速不给力导致的,多试几次

###3. 编译安装 TF 完成了上面步骤以后,真正的大 boss 才来。 直接开始 build pip 包吧

$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

编译大概会花 50 分钟, r0.10 或者 master 代码 100%会在 40 多分钟的时候报错,注意看错误提示,可以在编译命令行后面加上--verbose_failures 来查看详细出错信息

如果在编译过程报错,又不想重新下载依赖,手动修改 configure 文件,在最后几行找到 bazel clean 的代码
,注释掉。只要你没修改配置参数(记得前面 configure 地方输入的 7.5 , 5 , 3.0 吗?),不需要 clean 。

安装

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-0.10.0rc0-py2-none-any.whl

###4. 测试 请随意,也可以到 tensorflow 的 sample 里面跑教程

$ cd tensorflow/models/image/mnist
$ python convolutional.py

###5. 遇到的各种坑(欢迎大家补充,公众号: TensorData )

好了,到这里就愉快的结束了,如果你想要编译好的 whl 包,我这里有 r0.9 和 r0.10 的。站内联系我吧:)或者搜 tensordata 的公众号。

471 次点击
所在节点    分享发现
3 条回复
20015jjw
2016-09-06 08:30:35 +08:00
我比较好奇 为啥这时候的正确姿势不是换电脑...
AssKicker
2016-09-06 11:02:42 +08:00
@20015jjw

因为用来学习足够了,如果运算量非常大我会选择直接租 HPC 更划算
bearqq
2016-09-06 11:59:50 +08:00
买了个 1070 在 ubuntu 16.04 下装 tensorflow 也是个深坑。。放个链接吧,感兴趣的人可以看一下。 https://zhuanlan.zhihu.com/p/22281061

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX