とある京大生の作業ログと日々の雑記

コンピュータサイエンスについて学んだことを可視化したり日々の雑記をまとめてます。

TensorflowのGPUバージョンを入れようとして失敗した話

こんにちは!コミさん(@komi3_ )です!

 

現在もまだ凍結は解除されません!それでもしぶとくリンクを貼り続けます!

 

ぼくの知り合いでバーの経営をやってる方がいて、昨日から今日の朝5時まで飲んでました。

まあめちゃくちゃお金飛んでったけど、それでもスゴイいい出会いがあって満足でした!

 

バーの2階がゲストハウスになってて、外国の人もバーにちょこちょこいて、みんなで雑談したり、みたいな感じでしたね〜

 

特に昨日は中国でWriterをやってるアメリカ人のジョンと4時間以上しょーもない話ばっかしてましたね...

ロリは最高だとか、かわいいのも重要だけど頭のいい女性が理想だとか、中国とかタイの風俗はアメリカや日本に比べて安いしサービスもいいとか

 

あんまり英語の能力には自信がなかったんですけど、やっぱり日常会話程度なら余裕でしたね。

ただ、ジョンとAIの倫理的問題についての話題になった時、議論しうるだけのボキャブラリーをぼくが持ってなかったので、ちょっと流暢というわけにはいかなかったですけど。

 

これからも英語勉強しなきゃなぁって強く思わされた昨日でした。

 

ジョン以外にも、京大の博士でロボットのことやってる人とか、京大の修士機械学習使って薬学のことをやろうとしてる人とか、いろんな人に出会えました。

 

バーっていいですねぇ...(しみじみ)

 

 

まあ本題へ。

 

掲題の通り、Tensorflow-gpuを入れようしたんですけど、ぼくの環境にマッチしてなくて結局失敗しました。

どう失敗したかというと後で詳細を述べます。

 

まあ背景としては、遊びでDQN(深層強化学習アルゴリズムで、Deepmindが世界を驚かせたやつです)とかやってたりしてるんですけど、もうちょっと早くならないもんかねぇってモヤモヤしてたんですよね。

 

それで色々調べてたら、どうやら処理をCPUじゃなくてGPUに投げることで早くなるらしいという情報を得ました。

 

これって前に聞いたことがある並列コンピューティングってやつなんかな?

大量にあるコアを使って並列に計算処理をすることで時間の短縮化に繋げるってやつ。

んで、GPU使った処理のセットアップのためにはCUDAというやつが必要らしいです。

CUDAというのはNVIDIA社が提供する並列コンピューティングアーキテクチャーらしい。


これを使えばGPUでの処理ができるらしいぞ!

今回は特に詰まることもなく環境構築がうまくいきつつあるぞ!

この時はぼくはこう思っていました。後になってこれらが全て無駄になるとも知らずに....


まあ何はともあれ、CUDAのインストールを行なっていきます。

ぼくのマシンはMacbook Air 2016年モデルで、パッケージ管理にはhomebrewを使ってるので、いつも通りbrewコマンドでインストールをします。

 

brew cask install cuda


一応これでCUDAをいれられるらしい。
 
 で、チャレンジしたのですが...

komi:16:40:32 ~$ brew cask install cuda
Warning: Error searching on GitHub: GitHub 
The GitHub credentials in the macOS keychain may be invalid.
Clear them with:
  printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
Or create a personal access token:
  https://github.com/settings/tokens/new?scopes=gist,public_repo&description=Homebrew
and then set the token as: export HOMEBREW_GITHUB_API_TOKEN="your_new_token"

Error: Cask 'cuda' is unavailable: No Cask with this name exists. Did you mean one of these?
cuda-z                                   nvidia-cuda


あれ?参照してたQiitaのページと違うぞ...?
そうか....これが時間の流れか....

ということで、nvidia-cudaでもう一度やり直します。

brew cask install nvidia-cuda

まあこれで準備ができたわけです。

んで、そのあとに

pip3 uninstall tensorflow

で現在のtensorflowを追い出して

pip3 install tensorflow-gpu

でいれます!


よし!ゴール!
早速サンプルプログラムで速度測るぜ!

ちなみに速度測るためのツールとして、

import time

って感じで、timeという実行時間を計ってくれるモジュールが存在するのです...

使い方としては



python time module

って感じで、

start = time.time()
~~~~
end = time.time() - start

で、計測した2つの時間の差分を処理時間として表示してくれるというものです。

素晴らしいですね....

まあこれを使って、簡単にtensorflowでじゃんけんの勝ち方を学習させるやつをチャチャッと書いていきましょう。

簡単なんで、ここはTensorflowのTutorialあたりを参照すればパパッと書けるかと思います。


check tensorflow-gpu


では、実行!

....と思ったものの、大して時間としては良い変化は得られなかったのです。

ここで初めてやらかしたことに気づきました。

最初にTensorflowのGPU ver. を使おうという話でしたが、CUDAが必要でbrewでインストールしました。

ただそこで気づいたのが、ぼくの使ってるMacbook Air 2016年モデルはGPUNVIDIA製ではなかったのです!!!!!

Macbookの左上のリンゴマークで「このMacについて」を参照してみると

f:id:komi1230:20171105170534p:plain
f:id:komi1230:20171105170546p:plain

グラボが....Intel製....

こうしてぼくのマシンでTensorflowを高速化させようプロジェクトは幕を閉じたのです...


なんかMacで高速化させたような記事をQiitaで見かけた気がするのですが、どういうことか調べてみたら

f:id:komi1230:20171105170855p:plain

という感じで、グラボをNVIDIAがやってないらしいんですよね。

これはやられました.....

まとめ

なんか試みをするのなら、ちゃんと最初に下調べをしましょう。

これは今回マジで教訓になりました。気をつけます。

余談

最近、機械学習系のツールでTensorflow、Keras、Chainer、PyTorch、Theanoとか色々ありますよね。

職場ではKerasで書いてくれって頼まれてるんですけど、ぼくはTensorlfowにどうしても拘泥したい気持ちがあるんですよね...

まあ静的にグラフ構築するのか動的にグラフ構築するのかで色々あるんですけど、Tensorflow-Foldが出てきて、どっちにしろTensorflowが覇権を握るんじゃないかなって思ってます。

そこらへんのことは近々書かせていただきます。


では!