メニュー

技術ブログ

Denso IT Lab.社員による技術情報の紹介

Denso IT Laboratory researcher's blog sites

数式

RSS

ページトップへ

El capitan でthunderbolt外付けGPUを使う

Mac OS のEl capitanでthunderboltで繋いだ外付けGPUを使う方法を説明します。

[対象]

Macで外付けGPUを認識できて嬉しい人は例えば

  • Matlabなどの数値計算ライブラリで大きな行列の計算をGPUを使って高速化したいひと
    • 私の目的はこれです
  • 動画や画像処理などGPGPUに対応したアプリを利用していて作業効率をアップしたいひと
    • Photoshopなどが高速なりなります.CUDA対応アプリはNVIDIAのサイトにのっています.
  • MacBookなどでディスクリートGPUを搭載していないけど、綺麗な映像でゲームをしたいひと
    • 私は試していませんがあまり効果がないと言っている人もいます.

[注意]

失敗すると最悪OSの再インストールになります.

起動しなくなった場合に復旧する方法も記載しますがそれでもうまくいかない場合は再インストールになります.試す前にTimeMachineなどでバックアップをとることをおすすめすします.

!!!自己責任でおねがいします!!!

[必要なもの]

  • Thunderbolt端子を備えたMac
    • OSは10.11,MacはiMac Late 2012で試したいます
  • Thunderbolt PCIe Expansion ケースとケーブル
    • NA-211TBなど (秋葉館などでうっています 10万ちかくします)
  • それなりに高級なGPU
    • 今回の実験ではNVIDIA Quadro K6000(VRAM が12288 MBもあります)

[やりかた]

ステップ1:SIPを無効にする

  • Command-Rを押しながらMac を再起動
  • UtilitiesからTerminalを起動し以下のコマンドを実行
    • csrutil disable
  • ”SIP”を無効にしましたみたいなメッセージが表示されます
  • 再起動

ステップ2: kext開発モードを有効にする

  • コマンドラインから以下のコマンドを実行
    • sudo nvram boot-args=”kext-dev-mode=1″

ステップ3:Kextファイルを書き換える

  • 以下の2つのファイルを書き換えます.
    • /System/Library/Extensions/NVDAStartup.kext
    • /System/Library/Extensions/IONDRVSupport.kext
  • これらのファイルを右クリックして”パッケージの内容を表示”をクリックして中のInfo.plistをかきかえます
  • それぞれのplistファイルから<key>CFBundleIdentifier</key> を探してそのエントリの終わり(</dict>の直前)に<key>IOPCITunnelCompatible</key><true/>を追加します
  • Kextパーミッションの修正
    • Kext Utilityを起動を起動すると自動でパーミッションの修正をしてくれます1分くらいまつと完了します

ステップ4:CUDA driverの(再)インストール

  • NVIDIAよりCUDAのドライバーをダウンロードしてインストールします
  • すでにCUDAラインバーをインストールしてある場合でもインストールしなおしますステップ4:接続
  • シャットダウン
  • 外付けGPUを接続
  • 電源ON

うまくいけばこれで認識します.

スクリーンショット 2015-11-11 午前9.07.09

外付けGPUにはディスプレーを繋いでいないので,12288 MBのほぼ全部を計算用に利用でき,大きな行列の掛け算もCPUでやる場合に比べて大幅に高速化しました.高速化の度合いはやりたい処理や実装に大きく依存しますが,GPUへのデータ転送が少なくなるように工夫することで,私の研究ではCPUで処理する場合に比べて10倍以上の高速化ができました.

今回の機材では,PCIレーン幅が内蔵がx16に対して,外付けはx8です.したがって,データ転送が頻繁にあるようなケースではかえって遅くなる場合があります.

 

[補足]

ステップ1でおこなったSIPの無効化について

El CapitanからSystem Integrity Protection (SIP)という機能が追加されています(“rootless” modeとも呼ばれるようです ).システムファイルをを書き換えるマルウェアからの攻撃に対する頑健性を向上させるために,システムファイルの書き換えをできなくしてしまう機能です.なのでEl Capitanにおいてシステムファイルはsudoでも書き換えられません.今回はシステムファイルを書き換える必要がありますのでステップ1でこれを無効にしています.

 

ステップ3でKextファイルの書き換えについて

この記事では,説明した2つのファイルに加えて,/System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kextを書き換えると説明がありますが,私の環境ではこれらのファイルを書き換えるとOSが起動しなくなりました.

 

OSが起動しなくなった場合の対処方法

ターゲットディスクモードで起動して他のMacから修正したKextファイルを元に戻します.それでもだめな場合はOSの再インストールになります.(私はうまく認識するまで3回OSを再インストールしました)

 

OSのアップデートについて

OSがアップデートすると(マイナーでも),せっかく書き換えたKextファイルが元にもどってしまい,外付けGPUが認識しなくなります.その場合は上記の手順を再度繰り返す必要があります.

 

NVIDIA Maxwell cards

今回使用したGPUはQuadroシリーズですが,GTX 750などのMaxwellシリーズの場合はAPPLEの純正ドライバではなく,NVIDIAのドライバーを使う必要があるようです.その場合はNVIDIA Webドライバーのインストールの必要があります.インストール方法は最後に示す参考サイトに記載があります.またこの場合には/System/Library/Extensions/NVDAStartupWeb.kextも書き換える必要があるようです.私の環境(Quadroの場合)では,Webドライバーを使うとOSが起動しなくなりました.

 

Hotplug

上記の方法で接続した外付けGPUはHot plugには対応しませんので,ケーブルを引っこ抜くとOSが落ちます.また,個体差もあると思いますが私が使ったケースはThunderboltケーブルの差し込みが緩いようでケーブルに触れると再起動してしまう場合もあります.

 

[参考サイト]

本記事はこのブログの情報をもとにかいています.私の環境ではここではで示してある方法そのままではOSが起動しなかったですが,試行錯誤の結果上記の方法で認識しました.

このサイトには様々な環境での成功・失敗談があります.上述した方法でうまくいかない場合は参考にしてください.

このエントリーをはてなブックマークに追加

Julia

はじめまして。

デンソーアイティーラボラトリの関川といいます。よろしくおねがいします。

9月1日から現在米国のボストンにあるMIT MEDIA LABにて9ヶ月の任期で研修をしています。来年の5月末までMITで行われている面白い研究などを紹介できたらと思います。

今回は、学生に「速いくていいよ」と教えてもらった「Julia」という数値計算ソフトの紹介をしたいと思います。
Juliaとは、Matlab、R、Octaveのような数値計算言語の一種です。

今回は、Juliaの大雑把な概要と、MacでのGUI環境のセットアップ方法について説明したいと思います。

すでにJuliaをインストールしている人は、MIT Open CoursewareのでJuliaを使った計算方法についてのチュートリアルが公開されているのでとても参考になります。

[概要]
まず、Juliaの特徴について。
Juliaの一番の特徴は「高速」な点だと思います。あと、フリーです。

公式のHPにも書いてありますが、インタプリタ言語にも関わらず、gccコンパイルしたコードに匹敵する速さが売りです。公式HPには処理によってはMatlabの数百倍とのベンチマークが乗っています。
速さの秘訣は、LLVMベースのJITコンパイラを使っている点と、言語設計そのものにあるようです。

MITの学生は在学中はMatlab本体と全てのツールボックスが無料で使える環境になっているようで授業でも使われていますが、一部の授業では、処理速度の観点からJuliaを使っているようです。

Juliaは新しい言語で、github上でオープンソースで開発されています。かなり活発にアップデートが行われています。

「高速」以外に私が気になった特徴が2点あります。

  1. Julia自体を共有ライブラリとしてビルドして、自分のプロジェクトから呼び出せる
  2. Cコードを直接呼び出せる

1点目は、自分作っているプログラムに簡単にJuliaの機能を取り込めるのでなんとなく便利な気がします。

2点目は、手持ちのライブリを使いたいときにわざわざラッパを書かなくていいので便利です。C関数の呼び出しは以下のようにします。

ccall( (:関数名, "ライブラリ名")
環境変数を取得する
path = ccall( (:getenv, "libc"), Ptr{Uint8}, (Ptr{Uint8},), "SHELL")
bytestring(path)

※Matlabにもcalllibという同様の関数があります。ただし呼び出す前にloadlibrary関数でライブラリをロードする必要があります。

[インストール]
試しにJulia本体とGUIフロントエンドIJuliaをインストールしてみました。
特にIJuliaのインストールでつまづいたので、その方法を共有したいと思います。

大まかな作業の順番は以下の2ステップです。

  1. Julia本体のインストール
  2. IJuliaのインストール

その1.Julia本体のインストール

ソースからコンパイルする方法もありますが、コンパイル済みのパッケージがここからダウンロードできるので、それを使う方が簡単です。(最新版を使いたい場合は自分でコンパイルする必要があります)

Ijuliaを使うためににはv0.2以上が必要なので”Version v0.2-pre (Pre-release)”をダウンロードしてください。ダウンロードしたら、/Applicationsにコピーするだけでインストール完了です。

ダブルクリックして起動するとこんな画面がでて、早速Juliaを使うことができます。

julia 起動画面

あとは、Matlabと似た文法で簡単に使えます。
SVDの例。

julia> A=rand(5,6)
julia> (u,s,v)=svd(A);

Juliaにはgitベースのパッケージ管理機能が組み込まれていて、簡単にパッケージの追加、アップデートなどが 行えます。パッケージの追加は以下のようにします。

Pck.add("パッケージ名")

ここに、いろいろなパッケージが公開されています。

その2.Juliaのインストール

Julia本体はCUIのプログラムで、GUIに慣れた人(私)にはちょっと敷居が高いです。そこで、JuliaをGUIから使えるようにするGUIアプリをインストールします。

JuliaのGUIフロントエンドエンドとして、ブラウザを使うiJuliaが公開されています。

インストールにつまづいて動かすのに2時間かかってしまったので私の行ったインストールステップを記載します。

    1. パッケージ管理ソフトのhomebrewをインストール
    2. Pythonを3.3.2にアップデート。ここからダウンロードして普通にインストール
    3. IPythonの最新版をインストール。ここの手順にしたがってインストール
    4. Pythonのパッケージ管理ソフトpipのインストール。
      python get-pip.py
    5.  Jinja2, Tornado, and pyzmq のインストール
      pip install jinja2 tornado pyzmq
    6. HomebrewパッケージをJuliaへ追加(注:Julia のコンソールで実行)
      julia>Pkg.add("IJulia")
    7. IjuliaパッケージをJuliaへ追加(注:Julia のコンソールで実行)
      julia>Pkg.add("IJulia")
    8. Ijuliaの起動
      ipython notebook --profile julia/

IJulia実行画面

 

こんな感じの画面が立ち上がって、GUIでスクリプトの管理や実行・停止などができます。図表の描画プラグインをいれれてプロットも簡単にできます。

ブラウザは、コマンドと実行結果をJulia本体とやりとりしているだけなので、Julia本体は別の高性能なマシンで動かして、リモートからコマンドを実行するっていうのも簡単にでできるそうです。(試してません)

試しに動かしてみた感想
速度については、大変な処理を走らせたわけではないので、正直あまり実感がありません。GUIもまだ使い方になれないせいかもしれませんが、Matlabのほうがだいぶ使いやすく感じました。

今後重い処理が必要になったときに再度試してみようとおもいます。

このエントリーをはてなブックマークに追加