疫情在家炼丹,远程连接实验室实在是不太方便,随意准备用家里的电脑代替,虽然配置不能打,但是写写代码跑跑示例的还是可以的,由于所有的资料文件我都在手里的MacBook里面,所有准备弄一套macOS的黑苹果环境,系统装好后,就是装驱动了,具体如下:
由于黑苹果对驱动要求严格,且在macOS High Sierra 10.13.6之后NVIDIA不在对显卡驱动进行支持,所以Mac的版本选择在10.13.6,所有的安装总体分为两部分,第一是cuda相关的安装,第二是pytorch的gpu版本的安装。
确定自己安装的Mac版本以确定英伟达显卡驱动,在这个网站查询自己系统镜像支持哪个版本的显卡驱动,https://www.tonymacx86.com/nvidia-drivers/,例如使用的MacOS镜像是macOS 10.13.6 High Sierra (17G65),则相对应的驱动则是387.10.10.10.40.105。一路图形化界面安装之后可能还要在clover上进行设置,这里自行搜索,不再赘述。
安装好显卡驱动之后,在apple-关于本机-概览-图形卡下,就可以看到正确的显卡规格了。
接下来是安装cuda driver,安装包在这个网址下,https://www.nvidia.com/en-us/drivers/cuda/mac-driver-archive/,同样是图形化一路点击下一步安装,这个我是安装的CUDA 418.105 driver for MAC。
安装包地址:https://developer.nvidia.com/cuda-toolkit-archive,这个就需要配合Mac的xcode版本来选择安装了,我安装的是10.1.105。在此之前,需要安装xcode,因为cuda10不支持最新的xcode10,所以必须安装xcode9.4,xcode可以在苹果开发者官网找到,https://developer.apple.com/download/more/。
安装好之后需要设置cuda相关的环境变量,打开终端,输入
cd ~
open -e .bash_profile
在末尾加入以下路径
export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$CUDA_HOME/lib:$CUDA_HOME/extras/CUPTI/lib"
export LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
export PATH=$DYLD_LIBRARY_PATH:$PATH
export flags="--config=cuda --config=opt"
export PATH="/Developer/NVIDIA/CUDA-10.1/bin:$PATH"
最后一行由于我安装的是10.1,可以根据自己安装的版本进行更改。
执行命令重启bash_profile
. ~/.bash_profile
验证:在终端输入以下命令,如果Result=PASS,那么CUDA就能够正常工作了。
cd /usr/local/cuda/samples
sudo make -C 1_Utilities/deviceQuery
./bin/x86_64/darwin/release/deviceQuery
cudnn的安装包网址:https://developer.nvidia.com/rdp/cudnn-archive。
下载好之后需要在终端进行操作,实际就是几个库文件,下载后解压,然后拷贝到CUDA安装目录的对应子目录。
我安装的是cudnn-10.0-osx-x64-v7.4.2.24.tgz
根据官方教程https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#install-mac,步骤如下:
your CUDA directory path is referred to as /usr/local/cuda/
your cuDNN directory path is referred to as
Navigate to your directory containing cuDNN.
Unzip the cuDNN package.
$ tar -xzvf cudnn-10.0-osx-x64-v7.4.2.24.tgz
Copy the following files into the CUDA Toolkit directory, and change the file permissions.
$ 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*
Set the following environment variables to point to where cuDNN is located.
$ export DYLD_LIBRARY_PATH=/usr/local/cuda/lib:$DYLD_LIBRARY_PATH
Verifying
$ 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
终端输入
cat /usr/local/cuda/version.txt
终端输入
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
至此,第一部分就安装完了。
pytorch的官网上写明了https://pytorch.org/get-started/locally/,支持cuda的pytorch必须通过源安装。
但是,我不管是安装官网的方法,还是网上找的网友的详细教程,都会出现各种错误(花了我大半天时间),所以我采用另外一种方法,就是安装别人编译好了的安装包进行安装。
参照的是:https://github.com/TomHeaven/pytorch-osx-build
其中,在运行 import torch
时报的错,比如:
Traceback (most recent call last):
File "", line 1, in
File "/Users/jiangyijie/anaconda3/lib/python3.7/site-packages/torch/__init__.py", line 84, in
from torch._C import *
ImportError: dlopen(/Users/jiangyijie/anaconda3/lib/python3.7/site-packages/torch/_C.cpython-37m-darwin.so, 9): Library not loaded: @rpath/libcufft.10.0.dylib
Referenced from: /Users/jiangyijie/anaconda3/lib/python3.7/site-packages/torch/lib/libtorch_python.dylib
Reason: image not found
libcufft
是cuda的库,这里只是文件名没找到而已,而库文件其实是在 $CUDA_HOME/lib
下的,所以手动链接一下就行,下面是对同类错误的库进行统一处理:
sudo ln -s $CUDA_HOME/lib/libcufft.10.dylib $CUDA_HOME/lib/libcufft.10.0.dylib
sudo ln -s $CUDA_HOME/lib/libcurand.10.dylib $CUDA_HOME/lib/libcurand.10.0.dylib
sudo ln -s $CUDA_HOME/lib/libcublas.10.dylib $CUDA_HOME/lib/libcublas.10.0.dylib
sudo ln -s $CUDA_HOME/lib/libcudart.dylib $CUDA_HOME/lib/libcudart.10.0.dylib
sudo ln -s $CUDA_HOME/lib/libnvrtc.dylib $CUDA_HOME/lib/libnvrtc.10.0.dylib
sudo ln -s $CUDA_HOME/lib/libcusparse.10.dylib $CUDA_HOME/lib/libcusparse.10.0.dylib
到此pytorch-gpu版本的也安装好了,另外,需要torchvision的需要自己单独安装,如果使用conda安装的话还可能会覆盖之前的安装好的torch,所以可能需要注意。ps,提供一种方法,可以先conda安装好torchvison,然后在安装torch。
【1】2019 Mac13.6安装cuda+cudnn+pytorch
【2】2018 MAC安装CUDA、cuDNN(Gaming Box1070)
【3】macos+xcode9+cuda10+anaconda+pytorch+torchvision安装
【4】MAC OSX 编译安装GPU版的Pytorch CUDA9.2 cuDNN7.2