TensorFlow Mac OS GPU支持

35
根据https://www.tensorflow.org/install/install_mac,自版本1.2起,TensorFlow不再支持Mac OS X上的GPU。因此,OS X不再提供GPU支持。然而,我想要使用雷电3连接akitio节点和1080 ti来运行e-gpu设置。需要哪些步骤才能使这个设置工作?目前我知道必须禁用SIP并运行自动化的e-gpu脚本https://github.com/goalque/automate-eGPU,还需要什么才能让CUDA / tensorflow工作?

嗨,乔治,你的设置搞定了吗?怎么弄的?我和你用的是完全一样的硬件,想让TensorFlow工作起来,但不知道从哪里开始 :) - Dennis Zoma
有点吧。但我真的想使用外置显卡,但驱动程序出了一些问题。 - Georg Heiler
4个回答

27
我写了一个小教程,介绍如何在macOS上编译支持GPU的TensorFlow 1.2。我认为将相关部分复制到SO是惯例,所以这里就放上来了:
  1. 如果你之前没有使用过TensorFlow-GPU,我建议先使用TensorFlow 1.0或1.1设置一切,这样你仍然可以使用pip install tensorflow-gpu。一旦你做到了这一点,如果你正在编译TensorFlow,则CUDA设置也将起作用。如果你有外部GPU,YellowPillow的答案(或我的)可能会帮助你设置好一切。
  2. 按照官方教程“从源代码安装TensorFlow”进行操作,但显然要用git checkout r1.2替换git checkout r1.0。 在执行./configure时,注意Python库路径:有时会建议错误的路径。在大多数情况下,我选择了默认选项,除了Python库路径、CUDA支持和计算能力。不要使用Clang作为CUDA编译器:这将导致一个错误“不一致的交叉工具配置;没有与CPU'darwin'相对应的'toolchain' found。”。使用/usr/bin/gcc作为编译器实际上会使用macOS/XCode自带的Clang。以下是我的完整配置。
  3. TensorFlow 1.2需要一个名为OpenMP的C库,在当前的Apple Clang中不可用。它应该加速多CPU机器上的多线程TensorFlow,但也可以在没有它的情况下编译。我们可以尝试使用gcc 4来构建TensorFlow(我没有成功),或者简单地从构建文件中删除包含OpenMP的行。在我的情况下,我注释掉了tensorflow/third_party/gpus/cuda/BUILD.tpl的第98行,其中包含linkopts = [“-lgomp”](但该行的位置可能会发生变化)。一些人遇到了zmuldefs的问题,但我认为那是早期版本的问题;感谢udnaan指出可以注释掉这些行。
  4. 我在使用最新的bazel 0.5.3构建时遇到了一些问题,所以我回退到了我已经安装的0.4.5版本。但是在一个github问题的讨论中提到,bazel 0.5.2也没有这个问题。
  5. 现在使用bazel进行构建,并按照官方安装指南的说明完成安装。在我的3.2 GHz iMac上,这大约需要37分钟。
使用Python库路径:/Users/m/code/3rd/conda/envs/p3gpu/lib/python3.6/site-packages 您希望构建支持MKL的TensorFlow吗?[y/N] N 不会启用TensorFlow的MKL支持 请在编译时指定优化标志,当bazel选项"--config=opt"被指定时使用 [默认为-march=native]: 您希望构建支持Google Cloud Platform的TensorFlow吗?[y/N] 不会启用TensorFlow的Google Cloud Platform支持 您希望构建支持Hadoop文件系统的TensorFlow吗?[y/N] 不会启用TensorFlow的Hadoop文件系统支持 您希望使用XLA即时编译器(实验性)构建TensorFlow吗?[y/N] 不会启用TensorFlow的XLA支持 您希望构建支持VERBS的TensorFlow吗?[y/N] 不会启用TensorFlow的VERBS支持 您希望构建支持OpenCL的TensorFlow吗?[y/N] 不会启用TensorFlow的OpenCL支持 您希望构建支持CUDA的TensorFlow吗?[y/N] y 将启用TensorFlow的CUDA支持 您想将clang作为CUDA编译器吗?[y/N] 将使用nvcc作为CUDA编译器 请指定您要使用的CUDA SDK版本,例如7.0。[留空以使用系统默认值]: 请指定安装CUDA工具包的位置。有关更多详细信息,请参阅README.md。[默认为/usr/local/cuda]: 请指定nvcc要用作主机编译器的gcc。[默认为/usr/bin/gcc]: 请指定您要使用的cuDNN版本。[留空以使用系统默认值]: 请指定安装cuDNN库的位置。有关更多详细信息,请参阅README.md。[默认为/usr/local/cuda]: 请指定一个逗号分隔的Cuda计算能力列表,您想要构建的。 您可以在https://developer.nvidia.com/cuda-gpus找到您设备的计算能力。 请注意,每个额外的计算能力都会显著增加您的构建时间和二进制文件大小。 [默认为:"3.5,5.2"]:6.1 INFO:开始清理(可能需要一段时间)。如果清理需要几分钟以上,请考虑使用--async。 配置完成

非常感谢你写这篇文章,Mattias - 正是我所需要的 :) - Steven Schmatz
您在bazel-build命令中是否包含了 --config=cuda? 这似乎是指令要求的,但我会收到如下错误信息: ERROR: Config value cuda is not defined in any .rc file。 我想知道是否编译出来的只是 CPU 版本。 - Bob
我已经尝试过了,但在TensorFlow的新版本中可能需要进行一些调整。更详细和最新的说明可以在https://gist.github.com/pavelmalik/d51036d508c8753c86aed1f3ff1e6967找到,但是您可能需要针对TensorFlow的新版本进行特定的调整。 - Mattias Arro

8
我最终通过以下设置使其工作:

硬件

软件版本

  • macOS Sierra 版本 10.12.6
  • GPU驱动程序版本:10.18.5 (378.05.05.25f01)
  • CUDA驱动程序版本:8.0.61
  • cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0: 需要注册并下载
  • tensorflow-gpu 1.0.0
  • Keras 2.0.8
我写了一个gist来说明具体过程:

https://gist.github.com/jganzabal/8e59e3b0f59642dd0b5f2e4de03c7687


你如何让Nvidia工作?我只看到通用的Nvidia芯片型号,而不是我的1080 ti。 - Georg Heiler
基本上,在我的2017款MacBook Pro上,第7步失败了,因为GPU无法识别。你有任何想法是什么出了问题吗? - Georg Heiler
@GeorgHeiler 我也遇到了同样的问题。我只看到了通用的Nvidia芯片型号,但是当我执行sudo ~/桌面/automate-eGPU/./automate-eGPU.sh -a,第5步,我最终能够看到正确的Nvidia显卡型号。也许你应该在运行第五步之前插上你的eGPU。如果可以的话,请告诉我是否有效。记得重新启动你的Mac。 - Julian
你的意思是你要运行 automate-egpu 脚本两次? - Georg Heiler
我尝试过了,但我仍然只看到通用的Nvidia芯片型号。 - Georg Heiler
显示剩余5条评论

8
假设您已经设置好了eGPU盒子,并将TB3电缆连接到eGPU和TB3端口:

1. 下载自动化eGPU脚本并运行它

。这个脚本可以帮助您更方便地使用eGPU。请按照以下步骤操作:
curl -o ~/Desktop/automate-eGPU.sh
https://raw.githubusercontent.com/goalque/automate-eGPU/master/automate-eGPU.sh
&& chmod +x ~/Desktop/automate-eGPU.sh && cd ~/Desktop && sudo
./automate-eGPU.sh

你可能会看到一个错误提示:
"引导进入恢复分区,然后键入:csrutil disable"
现在你只需要重新启动电脑,并在重启时按住“cmd + R”以启用恢复模式。然后,在恢复模式下找到终端并输入以下内容:
csrutil disable

然后重新启动计算机并重新运行automate-eGPU.sh脚本。

2:下载和安装CUDA

运行cuda_8.0.61_mac.dmg文件,按照安装步骤进行操作。然后,您需要设置路径。

进入终端并键入:

vim ~/.bash_profile

或者您已经存储了环境变量,然后添加以下三行:

export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$CUDA_HOME/lib:$CUDA_HOME:$CUDA_HOME/extras/CUPTI/lib"
export LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH

3. 下载并安装cuDNN

下载cuDNN需要先注册成为Nvidia开发者,然后才能进行下载。请确保下载的是cuDNN v5.1 Library for OSX,因为Tensorflow v1.1只支持该版本。注意,由于Mac系统不支持GPU,所以无法使用Tensorflow v1.2。

[![enter image description here][1]][1]

现在你需要下载一个名为cudnn-8.0-osx-x64-v5.1.tgz的压缩文件,解压后会生成一个名为cuda的文件夹,通过终端进入该文件夹。假设该文件夹位于Downloads目录下,打开终端并输入以下命令:

cd ~/Downloads/cuda

现在我们需要将 cuDNN 文件复制到存储 CUDA 的位置,因此:
sudo cp include/* /usr/local/cuda/include/
sudo cp lib/* /usr/local/cuda/lib/

4. 现在在您的conda/virtualenv中安装Tensorflow-GPU v1.1

对于我来说,由于我使用conda,我使用终端创建了一个新环境:

conda create -n egpu python=3
source activate egpu
pip install tensorflow-gpu # should install version 1.1

5. 确认其有效性

首先,您需要重新启动计算机,然后:

在终端中输入python,然后按Enter键:

import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

with tf.Session() as sess:
    print (sess.run(c))

如果您有GPU,则应该可以轻松运行此程序,如果出现问题,则应该得到一个堆栈跟踪(一堆错误消息),其中应包含以下内容:

无法将设备分配给节点“MatMul”:无法满足显式设备规范“/device:GPU:0”,因为在此进程中未注册与该规范匹配的设备。

如果没有出现问题,则已完成设置,祝贺您!我今天刚完成设置并且一切正常 :)

听起来不错。接下来几天会试一下。那么目前的1.2版本的TensorFlow官方已经停止支持Mac上的GPU了怎么办? - Georg Heiler
你目前使用的是哪个驱动程序?我遇到了https://egpu.io/forums/mac-setup/no-drivers-found-for-os-x-10-12-5/#post-14343这个问题,因为该驱动程序似乎不适用于我的1080-ti pascal GPU。 - Georg Heiler

4
这是我在Mac上安装e-gpu的解决方案。Tensorflow不再支持tensorflow-gpu,因此有更好的方法让它工作:
我的配置:
  • IMac 27' late 2012
  • Aktio Node
  • GTX 1080 ti
  • 3个屏幕:其中一个连接到GTX 1080,其他直接插入Mac。
Windows Bootcamp安装的优点:
  • 您可以使用pip安装tensorflow-gpu。
  • 良好的GPU 1080 ti支持(可下载显示驱动程序)
如何操作:
  • 使用Bootcamp安装Windows 10。暂时不要连接Akito节点。
  • NVIDIA下载页面下载并安装gpu的显示驱动程序。
  • 安装Visual Studio
    • 如果要使用CUDA 9.x,则可以安装Visual Studio 2017
    • 否则安装Visual Studio 2015
  • 安装CUDA和CuDNN
    • 请注意,tensorflow-gpu版本必须与您的Cuda和CudNN版本匹配。在此处查看可用的tensorflow版本。
    • CUDA安装后,您可以将解压缩的CuDNN文件移动到CUDA文件夹中:C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v9.0。 将lib文件移动到lib文件夹,bin文件移动到bin文件夹,将include文件移动到include文件夹。
  • 安装Python 3.5+
    • 您需要64位版本才能使用pip安装tensorflow-gpu
    • Python 2.7不起作用。
  • 使用pip安装tensorflow:

命令:

pip install tensorflow-gpu==1.5.0rc0

检查您的安装

当您可以将屏幕连接到GTX 1080 ti卡时,显示驱动程序已正确安装。

调用C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe以检查您的视频卡是否可用于CUDA。

执行以下tensorflow命令以查看可用设备:

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

故障排除和提示:

  • Windows想要更新你的GTX 1080驱动程序。绝不允许这样做,因为你将无法再次启动计算机!在你登录到Windows之前,会出现一个带有移动点的黑屏。游戏结束!只使用NVIDIA下载页面上的显示驱动程序。
  • 如果你不能再OSX上启动Windows,请在启动时按下alt键重新安装Windows。

Ubuntu解决方案:

我找不到一个可行的解决方案,但是有一些方法:

似乎我的GTX 680(iMac)和GTX 1080 ti不能共同工作。通过apt-get安装显示驱动程序后,Ubuntu不能再启动:Ubuntu不再启动。尝试从NVIDIA下载页面下载官方显示驱动程序。

OSX解决方案: Tensorflow GPU仅支持tensorflow 1.1。我尝试安装了一个更新版本,但无法构建支持cuda的tensorflow-gpu。以下是一些方法:

  • 安装OSX Sierra以使用e-gpu脚本。High Sierra无法工作(截至2018年1月13日)。通过删除所有分区来降级到Sierra。然后在启动时按Command + R加载互联网恢复。不要忘记先备份数据。
  • 安装e-gpu脚本
  • 如果tensorflow-gpu 1.1已经足够,你可以通过pip直接安装,否则需要用bazel构建你的pip。

结论: Windows安装比OSX或Ubuntu安装更容易,因为显示驱动程序正常工作,而且tensorflow不必自己构建。始终检查你所使用的软件版本。它们必须完全匹配。

我希望这能帮助到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接