Macを使っていると、ふと「NVIDIAのグラフィックボードを使いたいな」と思うことが誰しも一度はあると思う。最近のMacはAMDのGPU、もしくはIntelのCPUに統合されたGPUが搭載されていて、NVIDIAのGPUを使うことはできない。

eGPU(外付けのグラフィックプロセッサ)という個人的に今注目しているカテゴリがある。文字通りグラフィックボードを外付けHDDのようにPCとケーブルで接続し、そしてGPUとモニタを接続する、というもの。そうすることで、PCに元から搭載されているGPUではなく外付けGPUのパワーを使い、GPUを使った処理(CGのレンダリングとかゲームとか)を高速におこなえるようになる。

Mac で外付けのグラフィックプロセッサを使う – Apple サポート

このリンクの通りMacもeGPUに対応している。しかし、残念ながらAMDのRadeonしか対応していない。でもNVIDIAのGPUも使いたくないですか?
NVIDIAのGPUを使いたい理由として、

  • Radeonより値段に対して性能がいい
  • Radeonより消費電力が少ない
  • NVIDIAのGPUでしか動かない(CUDAを使っている)GPUレンダラを使いたい

といったものが挙げられると思う。あとはやっぱりロマンがあるよな!ということで、Mac非対応のNVIDIA GPUをMacで使ってみることにした。

機器構成

Mac

Mac mini Late 2014。OSはmacOS High Sierra 10.13.4。

eGPUエンクロージャ

eGPUエンクロージャ、つまりグラフィックボードを挿してMacと接続するためのボックスが必要。今回はMantiz Venus MZ-02を購入した。egpu.ioの以下のリンクに今発売されているエンクロージャの比較表があり、分かりやすい。

External GPU Buyer’s Guide: 2018 Best eGPU Enclosures Reviewed

GPU

Palit NVIDIA GeForce GTX1080 Super JetStreamを購入した。本当はGTX 1080 Tiにしたかったけど、値段が高すぎて断念。eGPUエンクロージャとGPUの組み合わせによってはGPUが大きすぎて入り切らないこともあるので、購入前に確認した方がいい。

ちなみにMantiz VenusはThunderbolt 3ケーブルでMacと接続する。僕のMac miniはThunderbolt 2ポートしかないので、Apple純正のThunderbolt 3 – Thunderbolt 2アダプタを別に用意した。Thunderbolt 2 ケーブルはCable Mattersの1mのものを買った。

モニタ

Mac miniをDELL U2414Hと、DELL U2417Hのデュアルモニタで使っていたので、それをそのまま使用。将来的には27インチの4Kモニタにリプレイスしたい。

Mantiz VenusにGPUを取り付ける

こちらがMantiz Venusです。

PCと接続するためのThunderbolt 3ポート以外にも、Ethernet、USB 3.0ポートがあり、ドッキングステーションとしても使えて便利。さらに内部にはSATAポートと2.5インチのHDD/SSDを固定できるネジ穴もある。

これはGTX 1080。

背面のネジをとり、サイドパネルを外す。PCI ExpressポートにGPUを挿し、電源から出ているコードをGPUに取り付ける。

結構ギリギリ。

macOS-eGPU.shを実行する

いよいよMacでNVIDIAのeGPUを使えるようにする。egpu.ioで公開されている「macOS-eGPU.sh」というスクリプトを実行するのが一番お手軽だと思う。

[SCRIPT] fr34k’s macOS-eGPU.sh – one script, all solutions, fully automated – Thunderbolt macOS Setup – External Graphics Card Forum

このスレッドの一番最初の投稿にある「Howto」の通りにやるだけ。スクリプト実行の途中で、eGPUエンクロージャの接続と切断を求められるので、eGPUエンクロージャは事前にGPUを挿し、電源に接続して、すぐMacに繋げられる状態にしておくといい。

  • Thunderbolt 1/2のMacでもeGPUを有効にするパッチの適用
  • NVIDIAのGPUを使えるようにするパッチの適用
  • NVIDIAのドライバのインストール
  • ソフトのインストール状況を見て、CUDAをインストール

を自動でやってくれる大変便利なスクリプトである。
再起動するとeGPUが使える状態になる。

GTX 1080が認識されている!

ベンチマーク

簡単にベンチマークを取ってみた。

比較対象

  • Mac mini Late 2014 (GPU: Intel Iris 1536MB)
  • Mac mini Late 2014 + eGPU (GPU: NVIDIA GeForce GTX 1080)

LuxMark

「Neumann TLM-102 SE」で計測。

  • Mac mini Late 2014: 1328
  • Mac mini Late 2014 + eGPU: 9921

CineBench

  • Mac mini Late 2014: 24.74 fps
  • Mac mini Late 2014 + eGPU: 58.79 fps

Heaven Benchmark

「Preset: Extreme」で計測。

  • Mac mini Late 2014: 116
  • Mac mini Late 2014 + eGPU: 1946

流石に圧倒的な性能差である。テンション上がりますね。

実際の作業でも、体感して分かるレベルでアプリケーションの動作が速くなった。Photoshopのフィルターや、Lightroomの現像モジュールでの調整が快適。試していないが、After EffectsやCinema 4Dなどでのレンダリングも大幅に高速化すると思う。

ちなみにMac mini Late 2014はThunderbolt 2接続なので、転送速度は20Gbpsになっている。転送速度が倍のThunderbolt 3でeGPUを接続する方がeGPUのパワーをより活用できる。また、通常のようにPCIe x16でGPUを接続するのに比べて、Thunderbolt 3で接続したとしても、GPUの性能の約6,7割しか発揮できないとこのと。それでも圧倒的なスコア差なので、やはりデスクトップ用のGPUはすごいですね。

NVIDIAのeGPUを運用するTips

さて、ようやくGTX 1080がMac miniで使えるようになったけど、やはり非対応のものを無理やり対応させているので、いろいろと問題がある。1ヶ月ほどMac mini + NVIDIA eGPUで運用してみて、いろいろと知見が溜まってきたので、メモしておく。

eGPUの接続

外付けHDDのように、Macを起動中にeGPUを接続してもうまく認識しない。

  • Macを起動し、ログインする
  • eGPUを接続する
    • eGPUに繋がったモニタは点灯するが、ブラックアウトした状態
    • マウスカーソルだけ描画される
  • 約10秒後、ログアウトする
  • ログイン画面になると、モニタに映像が映る
  • ログインする

というプロセスを踏むと、eGPUが使える。
これ以外の手順では僕は一度もeGPUを認識することはできなかった。

eGPUの切断

現時点ではNVIDIA eGPUの切断は、Macをシャットダウンしているときにしかおこなえない。

メニューバーにあるeGPUのアイコンをクリックし、「接続解除」を実行しても切断できない。Macの起動中にThunderboltケーブルを抜く、eGPUエンクロージャの電源を切る、などをするともれなくカーネルパニックになり、Macがクラッシュする。

シャットダウン時にたまにカーネルパニックになる

シャットダウンは基本的に問題なく行えるが、たまにカーネルパニックになる。確率としては10%くらいだろうか…。再現の条件は不明。
Mac miniなのでシャットダウンの頻度は低く、僕の環境ではあまり問題にならなかった。

スリープ/スリープ復帰は(まぁまぁ)問題なし

eGPUを接続した状態でスリープ、スリープ解除は問題なくできる。ただ、たまにスリープ復帰に失敗して、Macがクラッシュしてしまうので、上記の接続プロセスを再度やることになる。スリープ前には作業をちゃんと保存するようにしたい。
消費電力が気にならなければ、マシンのスリープではなく、マシンは起動したままモニタをスリープさせるだけの方が安定する。

プライマリモニタはeGPUと接続しているモニタにする

3D ゲームなどのアプリケーションを快適に楽しめるように、eGPU に接続されているディスプレイをプライマリのシステムディスプレイとして設定しておいてください。

だいたいのアプリケーションではプライマリに設定したディスプレイを映しているGPUを使う。上記Appleのサイトにあるように、eGPUに接続されているディスプレイをプライマリに設定しないとMac内蔵のGPUが使われてしまう。

SIPを有効にすると死ぬ

macOS-eGPU.shを実行するにはSIP(System Integrity Protecton)を無効にする必要があるが、インストール後、再度SIPを有効にすると、macOSが起動しなくなり、詰む。
$ csrutil enable --without kext で署名されていないkextのロードを有効にすればSIPは有効にしても良いらしい。

macOSのアップデートは気をつける

OSをアップデートすると、SIPが有効になってしまい、再起動時にMacが起動しなくなってしまう場合があった。その時はクリーンインストールで事なきを得たが、環境の再構築がめちゃくちゃ大変だった。
面倒だけど、OSのアップデートは、事前にeGPU関連のファイルはすべてアンイストールしてからおこなうようにした方がいい。

こんなところだろうか。
やはりNVIDIAのeGPUをMacで使うのはかなり茨の道である。でもやっぱりロマンがあるよね…。


実は、この投稿を書き始めてから書き終わるまでに、2017年モデルのMacBook Pro 15インチを購入し、MBPでNVIDIA eGPUを試したが、あまりの不具合の多さに泣く泣くAMDのGPUを買い直したという顛末がある。
それはまた次回。