macにNVIDIA製GPUをeGPUとして繋いでTensorflowを動かすことができました.
研究室でmacを買い替えたのでPython環境構築からまとめておきます.
#環境
- iMac 2017(macOS Sierra 10.12.6)
- SONNET eGFX Breakaway Box
- NVIDIA GeForce GTX 1080 Ti (STRIX-GTX1080TI-O11G)
NVIDIA製のGPUであれば基本的に動くはずです.
またmacOS High SierraではGeForceのドライバが入らず動作しませんでした(2017.12.9 現在).
#今回やること
- Python環境構築
- GeForceドライバのインストール(GPUそのものを動かすために必要)
- CUDA, cuDNNのインストール(GPUをグラフィック用途以外で使う(=GPGPU)ために必要)
- Tensorflow-GPUのインストール
#Pythonの環境構築
Python3.6.xを使いたいのでpyenvを使ってインストールします.
インストールしたバージョンは現時点で最新のPython 3.6.3です.
こちらの記事を一通りやれば大丈夫でした.
MacOSとHomebrewとpyenvで快適python環境を。
#GeForceドライバのインストール
##macOSのSIPを無効にする
- リカバリーモード(電源オフの状態からCommand+Rを押したまま電源ボタンを押す)でmacを起動する.私の場合HighSierraからダウングレードしたためかOption+Command+Rでした.
- メニューバーのユーティリティ→ターミナルを起動する.
-
csrutil disable
と入力する. - シャットダウンする.
##automate-eGPUを使ったドライバのインストール
macとeGPUを接続してからmacを通常起動します.
起動したらターミナルを起動して以下のコマンドを実行します.
curl -o automate-eGPU.sh https://raw.githubusercontent.com/goalque/automate-eGPU/master/automate-eGPU.sh
chmod +x automate-eGPU.sh
sudo ./automate-eGPU.sh
質問内容はすべてy
で大丈夫でした.最後の行を実行すると以下のようになるはずです.
*** automate-eGPU.sh v1.0.1 ***
* (c) 2016, 2017 by Goalque & FricoRico *
*****************************************
Detected eGPU
GP102 [GeForce GTX 1080 Ti]
Current OS X
10.12.6 16G29
Previous OS X
[not found]
Latest installed Nvidia web driver
[not found]
No Nvidia web driver detected.
Checking IOPCITunnelCompatible keys...
Searching for matching driver...
Driver [378.05.05.25f01] found from:
https://images.nvidia.com/mac/pkg/378/WebDriver-378.05.05.25f01.pkg
Do you want to download this driver (y/n)?
y
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 62.1M 100 62.1M 0 0 2238k 0 0:00:28 0:00:28 --:--:-- 5218k
Driver downloaded.
Removing validation checks...
Modified package ready. Do you want to install (y/n)?
y
installer: Package name is NVIDIA Web Driver 378.05.05.25f01
installer: Installing at base path /
installer: The install was successful.
installer: The install requires restarting now.
Checking IOPCITunnelCompatible keys...
IOPCITunnelCompatible mods done.
Add: ":IOKitPersonalities:AppleGraphicsDevicePolicy:ConfigMap:Mac-77F17D7DA9285301" Entry Already Exists
Board-id added.
Rebuilding caches...
All ready. Please restart the Mac.
再起動するとmacにGPUが認識されます(リンゴマーク→このMacについて→システムレポートから確認できます).
※ちなみにRadeon Pro 560は環境構築中のmacに標準搭載のGPUです.
#CUDA, cuDNNのインストール
##CUDA Toolkit
NVIDIAの本家サイトからCUDA Toolkit 8.0 GA2をダウンロード&インストールします.
インストーラが起動したらNextを押していけば大丈夫です.
##CUDAアップデート
上記のCUDA Toolkitに含まれるCUDAはv8.0.61のようですが,このバージョンではTensorflowがGPUを認識しませんでした.
またToolkitでCUDAをアップデートすると,v9.x系になってしまいTensorflowがエラーメッセージを吐きます.
そこで手動でv8.x系の最新版にしました.
こちらからCUDA v8.x系の最新版をダウンロード&インストールします.
現時点での最新版はCUDA 8.0.90 driver for MACです.
インストールが終わったらターミナルを起動して以下のコマンドを実行します.
echo 'export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib"' >> ~/.bash_profile
echo 'export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/cuda/lib"' >> ~/.bash_profile
echo 'export PATH="$PATH:/usr/local/cuda/bin"' >> ~/.bash_profile
##cuDNNのインストール
再びNVIDIAの本家サイトから
cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0をダウンロード&インストールします.
ここのリンクでは無料登録しないとダウンロードできません.
※v5.1でないとTensorflow-GPUがうまく動きません.
ターミナルを起動して次のコマンドを実行します.
cd ~/Downloads # ダウンロードしたディレクトリ
tar xvfz cudnn-8.0-osx-x64-v5.1.tgz
sudo mv cuda/include/* /usr/local/cuda/include/
sudo mv cuda/lib/* /usr/local/cuda/lib/
#Tensorflowのインストール
次のコマンドを実行するだけです.
pip install tensorflow-gpu
以上でmac上でTensorflow-GPUを動かすことができるようになりました.
import tensorflow as tf
sess = tf.Session()
こちら↑の2行をPython上で実行するとGeforce GTX 1080 Tiが認識されていることが確認↓できます.
Python 3.6.3 (default, Dec 8 2017, 21:44:22)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> sess = tf.Session()
...(中略)...
name: GeForce GTX 1080 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.683
pciBusID 0000:86:00.0
Total memory: 11.00GiB
Free memory: 10.81GiB
2017-12-09 01:25:05.202056: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0
2017-12-09 01:25:05.202059: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0: Y
2017-12-09 01:25:05.202066: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:86:00.0)
お疲れさまでした