MacBook Proに外部ディスプレイを接続しなくても各アプリでeGPUの性能を利用できるスクリプト「set-egpu.sh」がリリースされています。詳細は以下から。
AppleがmacOS 10.13.4 High SierraからサポートしたeGPU機能は、現在Thunderbolt 3対応のMacにeGPUと外部ディスプレイを接続した際に利用できるアプリが多くを占めていますが(GPUを選択できるアプリもあります)、
set-eGPU.sh allows you to easily set application eGPU preferences for all installed macOS applications. This allows applications to use the eGPU, and is display agnostic, making it convenient for many users without external monitors.
mayankk2308/set-egpu: Accelerate macOS applications using external GPUs. – GitHub
この制約を取り払い、全てのアプリにeGPU性能を割り当てることのできるスクリプト「set-egpu.sh」をThunderbolt 1/2搭載のMacでもeGPUを利用できるようにするスクリプト「purge-wrangler.sh」を開発している米ジョージア州のソフトウェアエンジニアMayank Kumar(mayankk2308)さんが公開しています。(コメント欄でのご指摘ありがとうございます)
set-egpu.shの使い方
まずset-egpu.shを利用する前に、MacBook ProやiMacにeGPUを接続します(外部ディスプレイは不要)。eGPU.ioメンバーの報告によると、purge-wrangler.shと併用することでMac miniなどでもeGPU支援を利用できるようになるそうです。
次にMayankさんのGitHubリポジトリに公開されているset-egpu.shを以下のcurlコマンドでダウンロード、管理者権限でインストールします。
curl -s "https://api.github.com/repos/mayankk2308/set-egpu/releases/latest" | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/' | xargs curl -L -s -0 > set-eGPU.sh && chmod +x set-eGPU.sh && ./set-eGPU.sh && rm set-eGPU.sh
インストールが成功するとset-egpu.shのスクリプトが起動し、対話形式でeGPUの性能をアプリに割り当てることができるようになります。選択肢は以下の6つで、1.を選択して全てのアプリでeGPUを利用する設定にしてもいいですが、この設定はMacのアプリケーションフォルダにある全てのアプリ(フォルダやアプリ内に同梱されているアプリも含めて)を検索&設定するので、
- eGPUを全てのアプリで利用する。
- eGPUを特定のアプリで利用する。
- eGPUがアプリに割り当てられているかを確認する。
- GPU設定を全てのアプリで解除する。
- GPU設定を特定のアプリで解除する。
- 終了。
特定のアプリ以外でeGPUを利用したくない方は以下のように2.を選択して、利用したいアプリの名前(Final Cut ProやiMovieなど)を入力してください。
設定が終了したら、もう一度set-egpu.shの選択画面に戻り、3.を選択して上記で設定したアプリがeGPUを利用できるようになったかを確認してください。
#eGPUが利用できるようになっている場合 Status : Prefers external GPUs. #eGPUが利用できない場合 Status : No preference set.
これでeGPUが各アプリで利用できるようになるので、後は設定した各アプリを起動しmacOS 10.13.4でGPU履歴ウィンドウが追加されたアクティビティモニタアプリでGPU使用率を確認したり、GPUをiGPU/dGPU/eGPU切り替えアプリの処理速度を比較してみてください。
おまけ
以上のプロセスを9to5MacのJeff Benjaminさんが動画に詳しくまとめ、MacBook Pro 2017とUnigine Valley & HeavenやFinal Cut Proを利用した外部ディスプレイなし状態でのベンチマークを公開しており、
そもそも、set-egpu.shスクリプト自体もtechnafさん(以下動画)が指摘されたGPUSelectionPolicy設定のdefaultsコマンドを利用しているので、スクリプトを利用したくないという方はeGPU.ioフォーラムにMayankさんがコメントしている通り、以下のdefaultsコマンドで制御してみてください。
# Write to application name defaults write -app "HOGEHOGE" GPUSelectionPolicy -string preferRemovable # Write to application plist file defaults write com.xxx.xxxx GPUSelectionPolicy -string preferRemovable # To remove this preference defaults delete -app "HOGEHOGE" GPUSelectionPolicy
追記
set-egpu.shとPurgeWranglerを利用してThunderbolt 3ではなく、Thunderbolt 2搭載のMac mini (Late 2014)をeGPUに対応させてみました。
コメント
スクリプトを試したのですが、一部のソフトウェアで使用できないようです。
Second Lifeの公式viewerとサードパーティ製のFirestormが起動できない状況が続いています。
アイコンをクリックした後にクラッシュレポートが生成されないようなので、
コンソールで確認したところ、
AEGetdescDara of non-desc type ‘reco’ not a good ideaというエラーが出ていました。
その後に続き、Failed to create pixel format!というメッセージが表示されていました。
Set-eGPUの設定を解除したら起動できます。
他にもHeaven Benchmarkもベンチマークができませんでした。
エラー内容は
Can’t set video mode
GLAppwindow::create_context():
NSOpenGLPixelFormat::initWithAttributes(): failed
Engine::video_restart(): can’t set 2560X1440
Windowed video mode
双方OpenGLに問題があるような気がするのですが他の環境でも同じ現象が起きるのか試していただくことは可能でしょうか?
私はiMac Mid 2011 27inchでThunderbolt 1に
RX580を搭載したSonnetのeGFX Breakaway Boxを繋いでいます。
他のアプリに関してはちゃんと動作もしているので、原因がわかればありがたいです。
ちなみにSet-eGPUのCheck Application eGPU Preferenceで確認したところ、双方ともにStatus : Prefers external GPUsとなっています