折腾了一周多,踩了好多坑,终于搞定了。步骤如下:
安装NIVIDIA的GPU web驱动程序
cuda不推荐使用苹果的系统自带驱动,所以安装NIVIDIA出的GPU型号(GeForce GT 650M)对应的WebDriver-387.10.10.10.40.118。
下载地址 https://www.nvidia.com/download/driverResults.aspx/142160/en-us
安装NIVIDIA的CudaDriver
从这里下载 https://www.nvidia.com/object/mac-driver-archive.html
安装xcode
因为当前最新版cuda10.0不支持最新的xcode10,所以必须安装xcode9.4
我把两个版本都安装了,用如下命令可以切换使用不同版本的xcode:
sudo xcode-select -s /Applications/xcode10.1.app 或者 sudo xcode-select -s /Applications/xcode9.4.1.app
实际只需要安装xcode9.4即可
旧版本xcode需要下载之后才能安装,下载地址https://download.developer.apple.com/Developer_Tools/Xcode_9.4.1/Xcode_9.4.1.xip 需要注册账号才能下载
安装CUDA
因为NIVIDIA网站下载速度慢,不稳定,建议用如下命令下载CUDA和CUDNN安装包
aria2c -c https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_mac
aria2c -c https://developer.download.nvidia.com/compute/cuda/10.0/secure/Prod/local_installers/cuda_10.0.130_mac.dmg
aria2c -c https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.128_mac
aria2c -c https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.128_mac
aria2c -c https://developer.download.nvidia.cn/compute/cuda/9.1/secure/Prod/local_installers/cuda_9.1.128_mac.dmg

打开下载的安装包安装结束后,cuda的安装目录缺省是/Developer/NVIDIA/CUDA-10.0
设置cuda相关的环境变量
打开~/.bash_profile文件,输入以下内容,设置cuda相关的环境变量:
export CUDA_ROOT=/Developer/NVIDIA/CUDA-10.0
export CUDA_HOME=/Developer/NVIDIA/CUDA-10.0
export PATH=$CUDA_ROOT/bin${PATH:+:${PATH}}
export DYLD_LIBRARY_PATH=$CUDA_ROOT/lib${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=$CUDA_ROOT/lib:$LD_LIBRARY_PATH
其中,环境变量CUDA_ROOT给Theano指定了CUDA的安装目录,也可以被设置为/usr/local/cuda(这两个路径下的文件均通过软链接被link到了一起)。
配置完成后,退出编辑器,执行以下命令使环境变量生效。
source ~/.bash_profile
安装CUDA samples 文件
CUDA samples 文件安装目录: /Developer/NVIDIA/CUDA-10.0/samples
cuda-install-samples-10.0.sh /usr/local/cuda/samples #安装samples文件
sudo chown -R admin123 /Developer/NVIDIA/CUDA-10.0/samples #修改目录权限和属主,非常重要!
验证安装cuda 的时候,执行命令
nvcc -V
/Developer/NVIDIA/CUDA-10.0/samples/bin/x86_64/darwin/release/deviceQuery
第二个程序会显示使用的NIVIDIA显卡信息,如果deviceQuery这个命令不存在(初次安装需要编译生成),进入CUDA的samples安装目录,然后执行如下命令生成它
cd /Developer/NVIDIA/CUDA-10.0/samples
make -C 0_Simple/vectorAdd
#如果执行报错unable to open output file 'vectorAdd.o': 'Permission denied',执行sudo chown -R admin123 /Developer/NVIDIA/CUDA-10.0/samples
make -C 0_Simple/vectorAddDrv
make -C 1_Utilities/deviceQuery
make -C 1_Utilities/bandwidthTest

安装CUDNN
CUDNN实际就是几个库文件,下载后解压,然后拷贝到CUDA安装目录的对应子目录即可
下载 cuDNN at https://developer.nvidia.com/cudnn 或者执行如下命令下载
aria2c -c https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v7.5.0.56/prod/10.0_20190219/cudnn-10.0-osx-x64-v7.5.0.56.tgz
拷贝下载文件到自己创建的cudnn目录,解压文件,把解压的文件拷贝到cuda安装目录下的对应子目录
sudo mkdir /Developer/NVIDIA/cudnn
mv /Users/admin123/Downloads/cudnn-10.0-osx-x64-v7.5.0.56.tar /Developer/NVIDIA/cudnn
sudo tar -xzvf cudnn-10.0-osx-x64-v7.5.0.56.tar
sudo cp cuda/include/cudnn.h $CUDA_ROOT/include
sudo cp cuda/lib/libcudnn $CUDA_ROOT/lib
sudo chmod a+r $CUDA_ROOT/include/cudnn.h $CUDA_ROOT/lib/libcudnn

我的实际操作步骤是:
sudo mkdir /usr/local/cudnn
mv /Users/admin123/Downloads/cudnn-10.0-osx-x64-v7.5.0.56.tar /usr/local/cudnn
sudo tar -xzvf cudnn-10.0-osx-x64-v7.5.0.56.tar
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib/libcudnn /usr/local/cuda/lib
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib/libcudnn

注意:/usr/local/cuda下的目录和文件应该都链接到/Developer/NVIDIA/CUDA-10.0下对应的目录和文件。但是我的mac上有一个lib子目录没有链接,估计是安装过程中出了问题。
验证安装 CUDNN
$ echo -e '#include"cudnn.h"\n void main(){}' | nvcc -x c - -o /dev/null -I/usr/local/cuda/include -L/usr/local/cuda/lib -lcudnn
If no error occurs, both the header and library are installed and can be located by the nvcc compiler.
安装最新版的Anaconda 2018.12 for macOS
#安装最新版非常重要,否则后面会遇到很多问题
#使用官方源,不要使用清华源,清华源问题多。官方源已经不被墙了。
选择的python版本是3.7.1
conda -V 命令显示版本是conda 4.6.7
安装pytorch
从源代码build pytorch (这是我唯一测试成功的支持cuda的方法)
一直遇到各种问题,最后发现:安装最新版的anaconda 2018.12 for MacOS(内部版本号4.6.7) ,并配置好前面的所有环境变量才行
conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing #安装依赖包
cd /Developer #这里是建在/Developer目录下
sudo git clone --recursive https://github.com/pytorch/pytorch #sudo 才能有权限在macos上建立目录pytorch
cd /Developer/pytorch
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
sudo MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install #可以在不使用NIVIDIA卡的情况下编译
这个build过程时间较长,build过程中还会从网上下载需要的文件

从conda安装preview版(因为正式版1.0不支持cuda)
环境:conda 4.6.7,python 3.7.1 CUDA 10.0
conda install pytorch-nightly -c pytorch #这一条命令搞定安装,但是安装后发现没有激活cuda支持,最后从源代码安装才搞定cuda

检查pytorch安装结果
启动python,注意之前设置的环境变量一定要生效状态
键入下面的命令
from future import print_function
import torch
x = torch.rand(5, 3)
print(x)
输出应该类似为:
tensor([[0.3380, 0.3845, 0.3217],
[0.8337, 0.9050, 0.2650],
[0.2979, 0.7141, 0.9069],
[0.1449, 0.1132, 0.1375],
[0.4675, 0.3947, 0.1426]])
检查pytorch是否可以通过cuda使用GPU加速
import torch
torch.cuda.is_available() #返回结果应该是 true。测试中发现用旧版本anaconda(python3.6)编译pytorch成功后,执行这个命令时,macos自动激活使用NIVIDIA GT650M显卡。但是因为cmake的版本依赖问题,使用新版本anaconda(python3.7)编译后,没有这个行为.
print(torch.cuda.get_device_name(0)) #测试返回结果如下
/Applications/anaconda3/lib/python3.7/site-packages/torch/cuda/init.py:118: UserWarning:
Found GPU0 GeForce GT 650M which is of cuda capability 3.0.
PyTorch no longer supports this GPU because it is too old.
The minimum cuda capability that we support is 3.5.
####说明这个版本的cuda10.1不支持GT650M显卡,认为它太旧了####
安装torchvision模块
安装好pytorch之后,还要安装torchvision模块
方法一,用 conda 安装
#方法来自https://github.com/pytorch/vision官方文档,但是会强制安装pytorch-1.0.1,导致不支持cuda
conda install torchvision -c pytorch
安装时提示:
The following packages will be downloaded:

package                    |            build
---------------------------|-----------------
pytorch-1.0.1              |          py3.7_2        25.7 MB  pytorch          #源代码安装的是1.0版本,这里要做升级,升级却后不支持cuda
torchvision-0.2.2          |             py_3          44 KB  pytorch
------------------------------------------------------------
                                       Total:        25.7 MB

方法二, 从源代码安装
方法来自https://github.com/pytorch/vision官方文档,测试下来没问题,支持cuda
cd /Developer
sudo git clone --recursive https://github.com/pytorch/vision
验证torchvision的安装是否成功:
import torchvision

遇到的常见问题
torch._C问题
在python里面执行以下命令

import torch
报错如下:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/pytorch/torch/init.py", line 97, in <module>
from torch._C import *
ModuleNotFoundError: No module named 'torch._C'
原因是:
the problem is that you have a folder called torch in the same directory which is being picked up. Do this: cd .. (to change directory), and then start python and import torch, it should work.
用户启动python时所在的目录下有同名的torch目录,这导致程序错误的使用了这个目录。换一个目录,重启python即可。
xcode版本选择和developer tools
Use sudo xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools, or use xcode-select --install to install the standalone command line developer tools.

参考文档
下载旧版本cuda的网址 https://developer.nvidia.com/cuda-toolkit-archive
NVIDIA CUDA Drivers for MAC Archive https://www.nvidia.com/object/mac-driver-archive
NVIDIA CUDA Installation Guide for Mac OS X https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html
NVIDIA CUDA INSTALLATION GUIDE FOR MAC OS X https://developer.download.nvidia.cn/compute/cuda/9.2/Prod/docs/sidebar/CUDA_Installation_Guide_Mac.pdf
CUDA toolkid v10.1.105 Quick Start Guide https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#mac
CUDA Drivers for MAC Archive https://www.nvidia.com/object/mac-driver-archive.html
CUDA、CUDNN在Mac Book Pro上安装的问题 https://www.cnblogs.com/didda/p/9065387.html
Mac下CUDA开启及Tensorflow-gpu 1.4安装 https://blog.csdn.net/wz22881916/article/details/78807993
CUDA-Z 就是gpu-z,具体参数就变成了针对cuda应用方面的信息,支持cuda信息查询,可以测试电脑cuda的速度。 https://sourceforge.net/projects/cuda-z/
深度学习开发环境搭建教程(Mac篇) http://www.cnblogs.com/iloveai/p/shen-du-xue-xi-kai-fa-huan-jing-da-jian-jiao-cheng.html
《深度学习框架PyTorch:入门与实践》https://github.com/chenyuntc/pytorch-book
各个版本的anaconda官方下载地址 https://repo.anaconda.com/archive/
在macOS上安装nVidia驱动程序的最简单的方法 https://www.ctolib.com/Benjamin-Dobell-nvidia-update.html
macOS Sierra (10.12.3)利用aria2解决CUDA下载失败问题 http://www.mobibrw.com/2017/6723
Mac下CUDA开启及Tensorflow-gpu 1.4 安装 https://blog.csdn.net/liujiandu101/article/details/80566071