2016-07-06

【MacOSX 10.11.5編】MacでThunderbolt外付けBOXにGPGPUを認識させるには【El Capitan】

El Capitan 10.11.1では既にこの前のブログで動作確認をおこなっておりましたが、10.11.5ではまだおこなっておりませんでしたので、動作確認をしてみました。

※10.11.5でうまく動作しない、という報告が上がってきたのでこれは検証する必要があるとも思った次第です。

----必ずバックアップを取り作業については自己責任でおこなってください!----

ひとつ前のMacOS X 10.10.5で動作していたMacBookPro Early 2013が動作確認マシンです。
基本的には去年のブログ【MacOSX 10.11.1編】MacでThunderbolt外付けBOXにGPGPUを認識させるには【El Capitan】でおこなった操作をそのままやりました。
再起動を終えて何事も無く立ち上がりThunderboltの筐体(NA-211TB)にインストールしたGTX TITANに繋がっているモニターも確認し、これでOK!と思いました。
が、フトNVIDIAのドライバプリファレンスを確認してみようと思い、メニューバーをクリックしてみると・・・・


おや・・・?「OS X Default Graphics Driver」になってる。
さくっとNVIDIA Web Driverに切り替えて再起動すると・・・

Mac本体がリンゴマークが出てプログレスバーが途中で止まってしまい、そのまま起動する気配がありません。少々ヒヤッとしましたが、何故か外部に繋げているモニターの方は起動後の画面になり普通に使えます。
仕方ないのでそっちの画面からOS X Default Graphics Driverに戻して再起動。
・・・・・
無事起動出来ました。

一応「OS X Default Graphics Driver」と「NVIDIA Web Driver」でMacBookPro上で性能をチェックし、差異が殆ど無い事を確認しました。

とりあえずは「OS X Default Graphics Driver」の方を使うようにすればThunderbolt外部PCIボックス「NA-211TB」に装着したGPUボードを使えそうです。

※注)執筆時(2016/7/6)現在、NVIDIAの最新アーキテクチャ「Pascal」を使用したGTX1080/1070シリーズにMacは未だ対応しておりません。



2015-11-16

【MacOSX 10.11.1編】MacでThunderbolt外付けBOXにGPGPUを認識させるには【El Capitan】

MacOSX 10.11.1 El CapitanにてGPUをThunderbolt経由で認識させる方法を記します。
El Capitanではkextファイルのようなシステムファイルを容易に書き換える事が厳しくなりました。
ここではその回避方法を記します。

----必ずバックアップを取り作業については自己責任でおこなってください!----


Step.1)
Command-Rを押しながらMac を再起動。
「ユーティリティ」メニューから「ターミナル」を起動し以下のコマンドを実行

  csrutil disable

間違っていなければ『Successfully disabled System Integrity Protection. 〜〜(略)」というようなメッセージが出るはずです。
その後再起動します。

Step.2)
開発モードを有効にします。

  sudo nvram boot-args=”kext-dev-mode=1″

Step.3)
Kextファイルを書き換えます。
これは当初やっていた方法と同一です。
面倒ですが頑張りましょう・・・
詳しくは3/27の記事を参照くださいませ。そちらの『5) kextファイルの書き換え』部分をおこなう必要があります。

Step.4)
カーネルエクステンションのキャッシュをクリアするおまじないをします。

  sudo kextcache -system-caches

Step.5)
電源を落としてNA-211TBを接続します。
その後起動してGPUの動作確認をしてください。

~~~~~~~~~~

EL Capitanからシステムファイルに関するセキュリティが厳しくなりました。
したがって今までのようにkextファイルを編集することが出来なくなりました。その為前回紹介しましたスクリプトを使っての自動書き換えも失敗するようです。
(当方の環境ではcsrutilコマンドを打ったあともスクリプトによる方法もダメでした)
そこでcsrutilコマンドを使ってdisableにし、kextファイルの書き換えを出来るようにします。
※csrutilコマンドに関する内容はこちらの記事を参考のこと。

MacBookAir 2012 + NA-211TB/Geforce GTX TITAN

2015-08-04

スクリプトファイルを1つ実行するだけでMac OSXにて外部GPUをThunderbolt経由で動作させる方法

これまでThuderbolt経由でMacに外部GPUを認識させるには幾つかのステップが必要でした。
kextファイルを正確に書き換えモディファイドドライバを用意し、それはそれは手間がかかり、かつ間違いにハマりやすい方法でした。

今回は1つのスクリプトファイルを実行するだけでファイルの書き換えからドライバのダウンロードまでを自動でおこなってくれる方法をご紹介致します。

----必ずバックアップを取り作業については自己責任でおこなってください!----

用意するもの

  • Mac 
  • Thunderbolt外部拡張ボックス NA-211TB
  • スクリプトファイル

手順

  1. まだこの時点でMacとNA-211TBを接続しないようにしてください。
     
  2. スクリプトファイル「automate-eGPU.sh」をダウンロードしてデスクトップに保存します。
    ファイル共有サービスのBOX.comにアップロードして保存してあります。
    https://app.box.com/s/oy6mhzllpn4sxdzg82w3esn1gwbq1eq2
    (*8/19 プレビューになってしまうという指摘がございましたので、zipファイルに変更しました。適宜ダウンロードして解凍してください)
     
  3. ターミナル.appを起動します。そこへ以下のコマンドを記述します。
     
    chmod +x ~/Desktop/automate-eGPU.sh
    その後
    cd ~/Desktop
    とコマンドを打ちます。
     
  4. 上記コマンドが正しく通ったら次に以下のコマンドを記述します。
     
    sudo ./automate-eGPU.sh
     
    これでドライバが自動的にダウンロードされ、kextファイルも自動的にモディファイされインストールが完了します。
    途中ドライバのダウンロードやインストールをおこなうかどうかYesかNoで聞かれますので、" y "と押して処理を進めてください。
     
  5. CUDAドライバをインストールします。
    これはNVIDIAのサイトに最新版のドライバがありますので、ダウンロードしてインストールしてください。
    http://www.nvidia.com/object/mac-driver-archive.html
      
但し一部のMacBookProでオンボードのグラフィックスボードにGT650M/750Mが載っているモデルで外部GPUにGTX970/980(いわゆるMaxwell世代のGPUボード)を使う場合は以下のコマンドをターミナルから打つ必要があります。
これはドライバが競合して画面がブラックアウトしてしまう現象が起こる可能性があるのを避けるためです。
   sudo nvram tbt-options=\<00\> ※ゼロ2つです。

以上で終了です!
Macの電源を一旦落とした後、NA-211TBとMacをThunderboltケーブルで接続して起動してみましょう。GPUが認識されている筈です。

当方もやってみました。
MacBookPro Early2013、MacOSX 10.10.4、NA-211TBにNVIDIA GTX970を搭載した物をテストしてみました。このように表示が出れば成功です。

※GPUを載せる作業は自己責任でお願いします。
※Intel or Appleの意向で上記作業が認められなくなる事もあり得ます。

2015-04-17

MacOSX10.10.3 追加アップデート後にThunderbolt経由でGPUを認識しない場合

4月中旬から配信されている「OSX Yosemite 10.10.3 追加アップデート」をインストールした後に、Thunderbolt経由のGPUが動作しない場合があります。
これはOSのバージョンが微妙に異なる為にkextファイル内のOSバージョンと違うと判断されて動作しなくなるものと思われます。
具体的な症状としてはNVIDIA Driver ManagerからNVIDIA Web Driverが選択不可になってしまう(OSX Driverが選択されて変更出来ない)というものがあります。

※注)今現在は既に追加アップデートが入った形の10.10.3が配布されているので、これから10.9ー>10.10 Yosemiteへアップグレードした場合、同様の問題に遭遇します。

ここではその対処方法を記します。

上記アップデートを当てた際に症状が出るケースがあります

----必ずバックアップを取り作業については自己責任でおこなってください!----

まず動作しなくなった場合、以下の情報を集めます。
アップルメニューの「このMacについて」-「システムレポート」から「ソフトウェア」をクリックします。システムソフトウェアの概要が見れますのでシステムのバージョンを確認します。
システムアップデート後、システムのバージョンが「OSX 10.10.3 (14D136)」になっているとします。そのウィンドウを開いておきます。


次にシステム/ライブラリ/Extensions/NVDAStartup.kextをTextWranglerで開きます。
Contents下のInfo.plistをクリックして中を確認します。その中に以下の文があると思います。(TextWranglerは必ず開発元からダウンロード出来る物を使用すること)

<key>NVDARequiredOS</key>
<string>14D131</string>

この『14D131』の部分を上記システムのバージョンに書かれている数字(この場合は『14D136』)に書き換えます。
書き換え後保存し、ターミナルから以下のコマンド(キャッシュのクリア)を実行します。

sudo kextcache -system-prelinked-kernel
sudo kextcache -system-caches

これで再起動後にNVIDIA Driver Managerから「NVIDIA Web Driver」が選択出来るか確認してください。万一まだ出来ない場合はキャッシュのクリアがちゃんと出来ているか、kextファイルの書き換えを正確におこなっているかを再度確認してください。

2015-04-16

MacOSX10.10.3におけるThunderboltを経由した外部GPU設定について

先日MacOSXがマイナーアップデートされ10.10.3になりましたが、外部GPUを使う設定について記したいと思います。
特に難しい事は無いのですが、作業の際には必ずバックアップをとってからおこなってください。

-----ここからは自己責任です-----

既にNA-211TB等を利用して外部GPUを利用しているという前提で書きます。

Step1) 
システム環境設定内にある「NVIDIA Driver Manager」をクリックし「Updates」タブからCheck Nowを押すと最新ドライバをダウンロードしてインストールが開始されます。

Step2)
同じくCUDAの最新ドライバをインストールします。これもシステム環境設定内の「CUDA」から「Install CUDA Update」をクリックしてインストール可能です。

Step3)
キャッシュをクリアします。
下記の文をターミナルから入力します。

  sudo kextcache -system-caches

これで作業は完了ですので、再起動すればこれまで通りに外部GPUが使用出来ると思います。

GIGABYTE ビデオカード Geforce GTX970搭載 ショート基板モデル GV-N970IXOC-4GD
日本ギガバイト (2014-11-07)
売り上げランキング: 2,269

2015-04-03

(MacOSX 10.10.2 edition) How to recognize GPGPU via Thunderbolt external PCIe Box at MacOSX

Hi Geeks,

This is an article about how to recognize GPU via Thunderbolt external PCIe box at MACOSX 10.10.2 Yosemite.

Ingredients

  1. Mac (MacBookPro Early2013)
  2. Thunderbolt PCI-Express NA211TB
  3. NVIDIA製GPU board (Gigabyte GeForce GTX970)
  4. TextWrangler (Text Editor)
  5. NVIDIA CUDA driver

Recipes
  1. Download NVIDIA WebDriver
  2. To be able to install the driver other than Mac Pro, modify the downloaded driver.
  3. Install the driver (*modified version)
  4. Install CUDA driver
  5. Rewrite a kernel extension file
  6. Type the command at Terminal
  7. Restart, Check the operation of GPU

Step1) Download NVIDIA WebDriver
There is the latest version of the NVIDIA WebDriver below.
This driver supports MacOSX 10.2.2.

---The following operation is at your own risk---
We strongly recommend that you take a backup necessary before starting work.

Step2) To be able to install the driver other than Mac Pro, modify the downloaded driver.
The downloaded drivers typically can be installed only on MacPro (2008,2009,2010 model).
So, you can create a driver to avoid the driver installation check with the following tasks.
  • Start Terminal.app, and type the following command.
      pkgutil --expand WebDriver-343.01.01f03.pkg expanded.pkg
  • expanded.pkg file is completed. Select "Show Package Contents" it by right-clicking.
  • Contents of expanded.pkg appears. Right-click on the "Distribution" file in it. And "Open with" -> select the "TextEdit".
  • Will be displayed the contents of the Distribution file, there is a "InstallationCheck" method in it.

           function InstallationCheck() 
                {   
                    if (!validateHardware()) return false;
                    if (!validateSoftware()) return false;
                    return true;
                }

   Comment out the above false line, set constantly return true.

//if (!validateHardware()) return false;
//if (!validateHardware()) return false;
                *// is comment out setting
  • Save the file.and close it.
  • In order to restore the the expanded package, then type the following command at the terminal.
        pkgutil --flatten expanded.pkg ModifiedWebDriver.pkg
  • ModifiedWebDriver.pkg is completed. This is the modified Web driver that avoids the installation check.

Step3) Install the driver 
Install the WebDriver made of step2, but requires work at Terminal before it. Security become strictly from Yosemite, so-called selfish drivers do not work anymore. Enter the following command from the terminal in order to avoid it.

  sudo nvram boot-args="kext-dev-mode=1 nvda_drv=1"

And if there is a no problem with Step2, then install the driver that you created. You should be able to install it avoiding an installation check.
Once after reboot, open the "NVIDIA Driver Manager" in the System Preferences, please be sure to check that it is to use the NVIDIA Web Driver. If "OSX Default Graphics Driver" is selected, GPU does not work.
Please try to use the NVIDIA driver to release the lock by pressing the "Click the lock to prevent further changes" under the panel.
If when you can not change remain gray even if you press here, run again the above command, you should be able to select after the reboot.
Check the NVIDIA Web Driver is selected

Step4) Install CUDA driver
CUDA is required. Please be sure to update already if CUDA is installed. You can update the "CUDA" System Preferences --> "Install CUDA Update".
Please install the latest version be sure if it is not installed.
Download from the following.
The current version is 7.0.29(2015/3/26)

Step5) Rewrite a kernel extension file
Please refer to the previous article.
"Rewrite the kext file" section.

6) Type the command at Terminal 
Last, Enter the command to clear the cache of the kernel extension in terminal.
  
  sudo kextcache -system-caches

7) Restart, Check the operation of GPU
Turn off power, and then mounting the GPU board to NA211TB, confirmation of the auxiliary power supply cable, and turn on the power to the PC via the confirmation of Thunderbolt cable.
GTX970 works at MacBook Pro.
MacBook Pro and NA211TB with Dual Display.

How did it go?
Let's check to review the procedure if it does not work. Especially easy to failure is rewriting the kext file. Please do not miss the CFBundleIdentifier.

2015-03-27

【MacOSX 10.10.2編】MacでThunderbolt外付けBOXにGPGPUを認識させるには【Yosemite】

各所から要望(?)されていたThunderboltの外付けPCI-Expressボックスを介したGPGPUの認識方法のYosemite編です。
やる事はさほど変わらないのですが少し手間が増えているので、改めてイチから記してみようと思います。

用意するもの

  1. Mac (今回もMacBookPro Early2013)
  2. MAXSERVE Thunderbolt接続PCI-Express拡張ボックス NA-211TB
  3. NVIDIA製GPGPUボード (今回はGigabyte製 GeForce GTX970)
  4. TextWrangler (テキストエディタ)
  5. NVIDIA製CUDAドライバ
今回Gigabyte製のGPGPUボードを選んだのは他と比較して安価だったというのもありますが、基板がショートなこと、2スロット専有なので残り1スロットをRAIDカード等に使えそうだという点でこれを選びました。但し補助電源コネクタが垂直方向に伸びている為エンクロージャの天板が閉められないというオチも付きましたが・・・。
ま、気を取り直していきましょう。

手順
  1. NVIDIA製のWebDriverをダウンロードする
  2. ダウンロードしたドライバを少々いじってMacPro以外でも認識させるようにする
  3. ドライバのインストール
  4. CUDAのインストール
  5. kextファイルの書き換え
  6. ターミナルからコマンドを打つ
  7. 再起動してGPUの動作を確認して終了

1) NVIDIA製のWebDriverをダウンロードする
NVIDIA製のWebDriverですが以下に最新版があります。
このドライバがMacOSX 10.10.2まで対応します。

---ここからはお約束です---
---必ずバックアップを取り作業については自己責任でお願いします---

2) ダウンロードしたドライバを少々いじってMacPro以外でも認識させるようにする
ダウンロードしたドライバですが当然ですがこのままですとMacPro(旧型)以外ではインストールすることが出来ません(そもそもゴミ箱MacProもMacBookもグラフィックスボードの装着が出来ませんからね)。インストール時にマシンをチェックしてハネられます。そこで以下の作業をしてドライバのインストールチェックを回避するドライバを作成します。
  • ターミナルを起動し次のコマンドを打ちます
    (ダウンロードしたドライバのあるディレクトリにcdしてからコマンドを打ちます)
    pkgutil --expand WebDriver-343.01.01f03.pkg expanded.pkg
    (pkgutil --expand "ダウンロードしたファイル名" "展開するファイル名")
  • expanded.pkgというファイルが出来上がるのでそれを右クリックから「パッケージの内容を表示」を選択
  • expanded.pkgの中身のファイルが表示されますので、その中にある「Distribution」というファイルを右クリックして「このアプリケーションから開く」からテキストエディットを選択
  • Distributionファイルの中身が表示されますので、その中に”InstallationCheck”メソッドがあります(割と最初の方です)

           function InstallationCheck() 
                {   
                    if (!validateHardware()) return false;
                    if (!validateSoftware()) return false;
                    return true;
                }

   上記の
false行をコメントアウトして常時trueを返すようにします
//if (!validateHardware()) return false;
//if (!validateHardware()) return false;
                ※//を入れるとコメントアウトになります
  • ファイルを保存し閉じます
  • 展開したパッケージを元の形に戻す為にターミナルから以下のコマンドを打ちます
      pkgutil --flatten expanded.pkg ModifiedWebDriver.pkg
  • ModifiedWebDriver.pkgというファイルが出来上がります。これがインストールチェックを回避した改造WebDriverになります
(追記:一応当方でモディファイしたドライバを置いておきます。上記修正を施したものです。https://app.box.com/s/pxmvht8bpko6zpepy4bi31zkbjvzsblf  MacOSX 10.10.2用)

3) ドライバのインストールをする 
上記で出来たWebDriverをインストールしますが、その前にターミナルから作業が必要です。Yosemiteからセキュリティが厳しくなり、いわゆる野良ドライバが動かなくなりました。それを回避する為に以下のコマンドをターミナルから入力します。

  sudo nvram boot-args="kext-dev-mode=1 nvda_drv=1"

そして2)の作業に問題が無ければ作成したドライバをダブルクリックしてインストールします。インストールチェックを回避してインストールが出来る筈です。
一度再起動をしたのちシステム環境設定内の「NVIDIA Driver Manager」を開いてNVIDIAのDriverを使うようになっているか必ず確認してください。ここがOSXのDriverを使うという風になっている場合はGPUが動作しませんので、パネル下の「変更するにはカギをクリックします」を押してロックを解除しNVIDIAのドライバを使うようにしてください。
万が一ここを押してもグレーのままで変更出来ないようであれば、上記コマンドをもう1度実行して再起動すれば選択出来るようになる筈です。
NVIDIA Web Driverの方にチェックが付いている事を確認

4) CUDAのインストール
CUDAは必須です。既にCUDAがインストールされていれば必ずアップデートをしてください。システム環境設定のCUDAからInstall CUDA Updateでアップデート出来ます。
インストールされていない場合は必ず最新版をインストールしてください。
ダウンロードは以下から可能です。
最新版は7.0.29です(2015/3/26現在)


5) kextファイルの書き換え
毎度のお約束です。ここを正確に書き換えないとGPUを認識出来ません。
)ここで使用するTextWranglerはリンク先の開発元からダウンロード出来るものを使用すること。AppStoreからダウンロード出来るものでは書き換え出来ません。
注2) kextファイルの書き換えはOSのアップデート毎にする必要があります。(例:10.10.2から10.10.3へupdate等)

/システム/ライブラリ/Extensions内にあるkextファイルを2つ使用します。
NVDAStartup.kextとIONDRVSupport.kextです。
これらのファイルを右クリックして「このアプリケーションで開く」-TextWrangler」として開きます。その中に「info.plist」という項目がありますので、それをクリックして中身を見てみます。中にはxmlで書かれたkeystringが表示されますので、その中から

<key>CFBundleIdentifier</key>

と書かれたセクションを見つけ出します。上記が記述されたセクションの最後に

<key>IOPCITunnelCompatible</key>
<true/>

とコードを追加します。

</dict>

の手前に追加です。CFBundleIdentifierというセクションが幾つかあるので、それを一つ残らず見落とさないようにして必ず上記コードを追加してください。

青矢印で示したキーがあるセクションの最後に赤矢印の2行を追加で記述

6) ターミナルからコマンドを打つ
最後にターミナルからカーネルエクステンションのキャッシュをクリアするコマンドを打って終了です。
  
  sudo kextcache -system-caches

7) 再起動してGPUの動作を確認して終了
一旦電源を落としてNA-211TBにGPUボードを取付し、補助電源等のケーブルの確認、Thunderboltケーブルの確認等をしてPCの電源をオンにします。
無事MacBookProにてGTX970が動作しました!


如何でしょうか?
もしうまくいかない場合は手順を見直して確認しましょう。特につまづきやすいのはkextファイルの書き換えです。CFBundleIdentifierを見落とさないようにしてくださいね。

今回GTX970をGPUに選択したのはMaxwellアーキテクチャのGPUをテストしてみたかったからです。消費電力量もかなり減っているのでGTX980でも動作させることは出来そうです。