耗时一整天加一晚上终于成功了安装配置外接GPU并运行深度学习案列
故事的缘由
2017年底鬼使神差的买了个macbook,放在家里吃了一年灰,心想还是要用起来啊。目前主要从事数据挖掘机器学习的工作,需要搞搞深度学习,于是上网查攻略,如何使用mac连接GPU进行深度学习,最后查到的方案是使用游戏盒子AORUS GTX 1070 GAMING BOX来连接。但是很多攻略使用的系统都是10.12的,10.13.1的极少,再加上京东下面的各种差评,抱着忐忑的心情去京东买了一个,拿回来心就凉了半截,这包装像是被退货的东西,包装有磨碎,还好打开里面,外壳没有磨损,螺丝口也没有,应该没被人拆过,那我就姑且试试吧。之前问了京东客服苹果设备必须要外接显示器才可使用,又去搞了台显示器。好了,硬件设备准备好了,开始头疼的安装工作。
配置
- 硬件
我的系统版本
macOS版本10.13.1
GPU:AORUS GTX 1070 GAMING BOX
- 软件
WebDriver-378.10.10.10.20.109.pkg
NVIDIAEGPUSupport :NVDAEGPUSupport-v2.pkg
Python 3.7
Xcode Version 8.3.1
CudaToolkit: cuda_9.1.128_mac
CUDNN: cudnn-9.1-osx-x64-v7-ga.tar
组装机诡异事件
由于macbook pro 13寸 2017款支持雷电3接口,买的游戏盒子也是雷电3接口的,按照说明书连好各种线,显卡的DVI接口接外接显示器,显卡的雷点3接口接mac,显卡插上电源同时又可以给笔记本充电,免除了再接电源线的烦恼。但是诡异的事情来了,电脑开机以后要识别显卡必须拔掉显卡的电源线,仅仅是不连接mac都是不行的,必须拔掉显卡电源线!!!在登录界面再连接好显卡的电源线和雷电3的线。之后输入mac密码登录进系统。而关机的时候不拔掉显卡,电脑关机后会重启,有时还会让电脑绿屏,甚是诡异。在显卡驱动安装好以后,显卡的正常状态是彩灯会亮起(如下图),后面的两个小风散会转动,没有装好驱动的时候灯是不会点亮的。下面开始安装显卡驱动和各种软件。
显卡驱动安装
- 安装WebDriver:
https://www.insanelymac.com/forum/topic/324195-nvidia-web-driver-updates-for-macos-high-sierra-update-december-7-2018/
在该网页上下载10.13.1对应的的版本,我下载的是109版本的webdriver
打开安装包进行安装
- 关闭sip
重启电脑,黑屏时候长按 command+R进入恢复模式,选择命令行工具,输入csrutil disable 这样就关闭了sip
- 安装eGPUSupport:
同样在该网址找到10.13.1对应的驱动下载并安装
https://egpu.io/forums/mac-setup/wip-nvidia-egpu-support-for-high-sierra/
注意:安装两个软件,在安装的注意在安全与隐私处选择允许安装
安装好两个软件后,关闭电脑,黑屏时拔掉显卡电源和连接电脑的线,开机之后在登录窗口出现时连接上显卡的电源,再连接上mac,同时保持外接显示器电源打开状态,如果不打开外接显示器,mac输入密码后会一直卡在登录界面。登录后看到系统报告里多一张显卡(如下图所示),那么就表明已经成功外接显卡。
下面开始搭建深度学习环境,来条分割线
XCode安装
下载链接如下,需要先进行注册登录,我下载的是8.3.1版本,链接地址:
https://developer.apple.com/download/more/
下载以后按照向导进行安装
CUDA和CUDNN安装
- cuda Toolkit安装
英伟达显卡做深度学习需要cuda和cudnn的支持,先安装cuda Toolkit,下载地址:https://developer.nvidia.com/cuda-toolkit-archive
我这里使用的是9.1版本,
安装好之后,配置 CUDA 环境,打开终端,编辑 ~/.bash_profile 文件
vi ~/.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"
重启bash_profile
. ~/.bash_profile
检测CUDA能否正常运行:
cd /usr/local/cuda/samples
sudo make -C 1_Utlities/deviceQuery
./bin/x86_64/darwin/release/deviceQuery
如果最后显示 Result = PASS,那么CUDA就工作正常
- cuDNN下载
下载cudnn需要先进行注册,打开链接找到对应的cuDNN进行安装,我这里选择的是7.0版本。
https://developer.nvidia.com/rdp/cudnn-download
下好后直接把cudnn压缩包放到这下面/Developer,这是在安装CUDA的时候他就帮你建好的一个路径。
sudo mv 自己的路径/cudnn-9.1-osx-x64-v7-ga.tar /Developer/
然后解压缩包
sudo tar xvf cudnn-9.1-osx-x64-v7-ga.tar
cudnn与cuda合并
sudo mv /Developer/cuda/include/cudnn.h /Developer/NVIDIA/CUDA-9.1/include/
sudo mv /Developer/cuda/lib/libcudnn* /Developer/NVIDIA/CUDA-9.1/lib/
sudo ln -s /Developer/NVIDIA/CUDA-9.1/include/* /usr/local/cuda/include/
sudo ln -s /Developer/NVIDIA/CUDA-9.1/lib/* /usr/local/cuda/lib/
确认/Developer/NVIDIA/CUDA-9.1/lib和include文件夹中能看见cudnn中的文件则合并成功了
tensorflow安装
- 建立python虚拟环境
首先安装Anoconda,可以直接下载安装,具体安装步骤不再赘述。
https://www.anaconda.com/download/#macos
- 创建python虚拟环境
这里选用的是python3.7版本,虚拟环境命名为tensorflow-gpu,python使用3.7版本,打开命令行工具输入
conda create -n tensorflow-gpu python=3.7
- 下载编译好的tensorflow
由于tenserflow 1.1以后就没有支持macos了,所以上网找到编译好的tenserflow gpu版本 ,下载红框中的whl
https://github.com/TomHeaven/tensorflow-osx-build/releases
可以看见红框中的版本正是需要cuda 9和cudnn7
下载解压安装红框的的版本
unzip tensorflow.whl.zip
pip install tensorflow*.whl
好了tensorflow安装完了,安装过程中需要注意版本的匹配问题,如果版本cuda和cudnn版本不匹配,则tensorflow在run的时候可能会卡死。
算力提升效果
上图使用CPU
上图使用GPU
使用GPU以后基本上有20倍的加速
测试代码是《tensorflow实战》中提供的源码:
www.broadview.com.cn/30912
使用的是6_1_AlexNet.py的代码,IDE用的pycharm,注意在使用GPU的时候需要选择虚拟环境为tensorflow-gpu 的解释器,并且在函数run_benchmark中添加两行,否则会报内存不够的错误。
参考文章:
https://blog.csdn.net/hanlin_tan/article/details/78345204
https://blog.csdn.net/wz22881916/article/details/78807993/
https://blog.csdn.net/ssujoensiang/article/details/78620616
https://www.kocpc.com.tw/archives/162983