MATHGRAM

主に数学とプログラミング、時々趣味について。

MacでkerasのGPUモードを動かしてみた!!

まえがき

前回kerasの紹介の中で予告していた、GPUモードを動かす手順について説明していきたいと思います!

見出しで嘘つくなよ!ってツッコミを受けそうですが、僕のMacが積んでるグラボじゃ余裕でメモリが足りませんでした・・・。つまり学習はできなかったです・・・残念。でも環境を構築すること自体はできたので一応まとめておこうという次第です。

ハイスペックなGPUをガンガン動かせる環境がある方はサクッと環境整えて、kerasでも爆速で学習させましょう!(羨ましい・・・)

ちなみに、本記事の説明は以下のサイトに則っています。英語が余裕で読める方は以下のサイトの方がわかりやすいかもです。

blog.wenhaolee.com

それではさっそく〜。

下準備

上記のサイトでは、

prerequest

と書いてあります。特別な準備は必要ないですね。

一応、僕の環境も簡単に書いておきますねー

  • iMac (21.5-inch, Late 2012)
  • El Capitan 10.11.4
  • 2.9 GHz Intel Core i5
  • 8 GB 1600 MHz DDR3
  • NVIDIA GeForce GT 650M 512 MB ←ここ大事。512MBです。くそです。
  • anaconda3-2.4.0 (pyenv)

こんな感じです!

theanoとkerasのインストール

まずはkerasをインストールしましょう。
もうインストールが済んでいて、CPUモードでの動作が確認済みの人は次に進んじゃってください!

ちなみにkerasはtheanoをバックエンドとして動いています。つまりtheanoでGPUモードを動かすように環境設定していけば問題ないってことです。

まずはtheanoをインストール。

$ pip install git+git://github.com/Theano/Theano.git

その後に、

$ pip install keras

でkerasをインストールします。

theanoをインストールする前に、直接kerasをpipでインストールした場合でも、theanoが同時にインストールされる仕様になっているのでkerasからpipしても問題ないと思います。もし何かしらのエラーが発生したら、一回アンスコした後に上記のような手順を踏むことを推奨します。

CUDAのインストール

次はCUDAをインストールしましょう。

以下のダウンロードサイトから自分のOSやバージョンにあったものをダウンロードしてください。
※本記事ではMacを前提に話を進めさせていただきます。
CUDA 7.5 Downloads | NVIDIA Developer

ダウンロードしたらdmgファイルを開いて、通常通りにインストール。ここでインストール先をいじるとPATHの設定が以下の説明と変わるので、完全に理解している人以外は余計なことしないでインストールしましょう。

ちなみに僕は難しいことはわからないので、思考停止でyesしまくりました。

インストールが終わったらPATHの設定を行います。

$ cd
$ vim ~/.bash_profile

で.bash_profileファイルを開き、

export PATH=/usr/local/cuda/bin:$PATH 

と書き加えてください。

これでCUDAの設定は終わりです。

実はここまでの設定だけでもgpuモードは使えます。しかしDeep LearningのためにNVIDIAさんが作ってくれたcuDNNをインストールすると、もっと効率良く計算してくれます。使えるものは使いましょう。

cuDNNのインストール

cuDNNのインストールの一番の障害は、認証が下りないとダウンロードさせてくれないことです。
以下のサイトの"Join now"から登録〜認証まで済ませてください。
https://developer.nvidia.com/rdp/cudnn-download

簡単なアンケートに答えるだけで認証は降りるのですが、実際にダウンロードできるようになるまでには1日くらいかかりますので、善は急げです。ちなみにアンケートは全て英語で、"なんのために使うんだい?"とか聞いてくるので、"アイワナ〜!! アイワナ〜!!"と、機械学習に対する熱意を伝えれば大丈夫です。

さて、認証が下りたら早速ダウンロードしましょう。
Macの方は、cuDNN v5 Library for OS Xで問題ありません。

ダウンロードしたら、そのファイルをhomeディレクトリに移動させます。

$ mv cudnn-7.5-osx-x64-v5.0-rc.tar ~/Download ~/

大体の人はこんな感じでしょうか。ダウンロードフォルダの場所が違うかもしれないので、Finder開いてGUI上で動かしちゃってもOKです。
移動させたら解凍、展開します。

$ tar cudnn-7.5-osx-x64-v5.0-rc.tar

次に、CUDA同様にPATHを通します。上の手順と全く同じように設定してくれた方は、おそらくcudaがホームディレクトリ上に展開されていると思います。このcudaのPATHが大事なので、エラーが出る人はどこにcudaが展開されているか確認してみてください。

先ほど同様にvimで操作しましょう。

$ cd
$ vim ~/.bash_profile

ファイルを開いたら以下を加えてください。

export CUDA_ROOT=<cuda_path>  
export LIBRARY_PATH=$CUDA_ROOT/lib:$CUDA_ROOT/lib64:$LIBRARY_PATH  

ちなみに<cuda_path>とは、先ほど言った、cudaが展開されている場所を表しています。
cudaがホームに展開されているのであれば、

export CUDA_ROOT="$HOME/cuda" 
export LIBRARY_PATH=$CUDA_ROOT/lib:$CUDA_ROOT/lib64:$LIBRARY_PATH  

で、PATHは通ります。

最後に設定を反映させるために、

$ source ~/.bash_profile

と打ち込んでください。

以上で、すべての設定は終わりです!お疲れさまでした!

実際に動かしてみる

さて、実際にどのくらい早いのか確認してみましょう!
まずサンプルコードが欲しいので、gitからコピってきましょう。

$ work
$ git clone https://github.com/fchollet/keras.git

上記ではworkディレクトリに移動している想定ですが、まあどこでもいいです。
クローンが終わったら、サンプルコードのあるフォルダまで移動してください。

$ cd keras/examples

exampleのしたにいろんなサンプルがあるので、興味ある人はいろいろ触ってみましょう。
今回はmoistをCNNで学習させている、mnist_cnn.pyを使います。
まずはCPUモード。

$ python moist_cnn.py

学習が始まると、1epochにかかる時間を表示してくれます。
こんな感じ。

f:id:ket-30:20160504031839p:plain

わかりやすいですね〜。僕はこれが見たくてkerasを使っているようなもんです。笑
上のスクショは僕の環境で実際に回した時のものですが、だいたい1epochにつき125sくらいでしょうか。

さて、いよいよ本番。GPUモードで動かしましょう。
GPUで動かす場合は以下のように打ってください。

$ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python mnist_cnn.py

・・・まあ、僕の場合はメモリフローで動かなかったんですけどね・・・。みなさんどうでしょうか。
参考元の記事によるとだいたい100倍速くなると書いてありました。

悔しかったのでAWSを使って同じようにGPUモードで回してみたところ、だいたい1epochあたり3~5sでした。 さすがの早さですね。誰か買ってください、GPU積んだ機械学習専用マシン。

まとめ

  • kerasのGPUモードで使う方法を紹介しました!

これでkerasの記事は二つ目です。今、documentを見て、何か面白い機能ないかなあと探しているので楽しみに待っていてください。

逆にkerasマスターがいらっしゃいましたら、ご教授願います。