Macbook ProでThunderbolt 2接続の外付けGPUを使う（Netstor NA211TB + GeForce GTX 1060 6G）

この記事の続編です。
[Macbook ProでThunderbolt 2接続の外付けGPUを使う（Netstor NA211TB + GeForce GTX 760）](https://qiita.com/zinbe/items/c6044489057ddd389ffc)

前回使ったグラフィックカードはGeForce GTX 760でしたが、最近GeForce GTX 1060 6Gを手に入れたので差し換えてみました。
先に結論から書くと、認識はするものの、ディスプレイを接続すると画面が真っ暗になるという現象が発生しており、外部ディスプレイ用としては使えていません。機械学習用に使っています。

# 構成

- Macbook Pro (Retina, 13-inch, Early 2015) macOS Sierra 10.12.6
- Netstor NA211TB (Thunderbolt 2, 300W)
- ZOTAC GeForce GTX 1060 6G

# 設定

[前回](https://qiita.com/zinbe/items/c6044489057ddd389ffc)と同様に、[automate-eGPU](https://github.com/goalque/automate-eGPU)で設定しました。

グラフィックカードを差し換えただけだとうまく認識できなかったので、まずautomate-eGPUを使って既存のドライバをアンインストールした上で、再度設定を行いました。

#### 1. 既存のドライバのアンインストールと設定の初期化

NA211TBを接続していない状態で、automate-eGPU.sh を -uninstall オプション付きで実行します。これでNVIDIA Web Driverがアンインストールされて、設定も初期化されます。

```bash
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 -uninstall
```

なお、この時点の私の環境だとCUDAドライバなども入れてあったのですが、それらもすべて一旦削除しました。

#### 2. 再起動

Macを再起動します。

#### 3. ドライバのインストール

起動後に、MacとNA211TBをThunderbolt 2ケーブルで接続して、NA211TB側の電源を入れた状態で automate-eGPU.sh を実行します。

```bash
sudo ./automate-eGPU.sh
```

前回と同様、NVIDIA Web Driverのインストールから設定までを自動でやってくれます。

#### 4. 再起動、しかし画面映らず

Macを再起動します。これで正常に起動できれば問題ないと思います。

私の場合、このときNA211TBを接続したままの状態で再起動したら、内蔵ディスプレイ・外部ディスプレイともに画面が真っ暗のまま反応しなくなってしまいました。NA211TBはHDMIケーブルで外部ディスプレイと接続していました。Macそのものは起動しているようですが、画面は映らず、キーボードも反応していないような感じです。一応 /private/var/log/system.log を眺めてみましたが、完全にOSが起動できていないような感じでした。

#### 5. NA211TBを繋がずに起動

仕方がないので、NA211TBを使わずにMacを起動しました。その上で、NA211TBを**外部ディスプレイに繋いでいない状態で**（HDMIケーブルを抜いて）、Thunderbolt 2ケーブルをMac本体に差しました。

ここでシステムレポートを見ると、グラフィックカードには「NVIDIA Chip Model」としてカードそのものは認識していますが、その種類が特定できていないようです。

![171219-0001.png](https://qiita-image-store.s3.amazonaws.com/0/46062/e2044c9b-5600-9ef4-ce08-dc9b3caa80b9.png)

NVIDIA Web Driverは、Sierra用の最新版が入っています（ちなみにHigh Sierra向けだと378.10.xxが対応バージョンになるようです）。

![171219-0003.png](https://qiita-image-store.s3.amazonaws.com/0/46062/ebb53c18-57f4-6617-b9ed-2d00b4004c2d.png)

ここでNA211TBを外部ディスプレイに繋いだら、また内蔵ディスプレイともども画面真っ暗になって反応しなくなりました。

#### 6. 再ログイン

いろいろ調べたところ、再ログインしたら治るというような記事を見つけたので、一旦ログアウトして再ログインしてみました。すると。

![171219-0002.png](https://qiita-image-store.s3.amazonaws.com/0/46062/46342b98-c3d3-ddee-fc5d-859be5e2fba4.png)

Congratulations! 見事に認識されました。

しかし、ここで再びNA211TBを外部ディスプレイに繋ぐと、また画面真っ暗に。前述のように、この現象はまだ解決していません。

# 機械学習用には使える

ディスプレイは使えませんが、認識はできているので、CUDAドライバなどを入れ直したらちゃんと機械学習用には使えるようになりました。毎回、起動後にログアウト→再ログインが必要なのでちょっと面倒ですが。

TensorFlowだとこんな感じ。ちゃんと GeForce GTX 1060 6GB が見えています。

```bash
$ python
Python 2.7.10 (default, Feb  7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
>>> sess = tf.Session()
2017-12-19 14:37:35.719213: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with properties:
name: GeForce GTX 1060 6GB
major: 6 minor: 1 memoryClockRate (GHz) 1.7085
pciBusID 0000:c1:00.0
Total memory: 6.00GiB
Free memory: 5.91GiB
2017-12-19 14:37:35.719231: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0
2017-12-19 14:37:35.719237: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0:   Y
2017-12-19 14:37:35.719248: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:c1:00.0)
```

同じように、Deeplearning4J でもちゃんと使えました。ちなみに外部ディスプレイは（NA211TBを通さないで）MacBook本体のHDMIコネクタに差して使っていますが、問題なく表示できています。