折腾了一周多,踩了好多坑,终于搞定了。步骤以下:
安装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.dmghtml
打开下载的安装包安装结束后,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/bandwidthTestpython
安装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/libcudnngit
个人实际操做步骤是:
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过程当中还会从网上下载须要的文件github
从conda安装preview版(由于正式版1.0不支持cuda)
环境:conda 4.6.7,python 3.7.1 CUDA 10.0
conda install pytorch-nightly -c pytorch #这一条命令搞定安装,可是安装后发现没有激活cuda支持,最后从源代码安装才搞定cudaweb
检查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:macos
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 torchvisionxcode
遇到的常见问题
torch._C问题
在python里面执行如下命令bash
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
Usesudo xcode-select --switch path/to/Xcode.app
to specify the Xcode that you wish to use for command line developer tools, or usexcode-select --install
to install the standalone command line developer tools.app
参考文档
下载旧版本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上安装的问题 http://www.javashuo.com/article/p-kykwefzt-mr.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框架