Google ColaboratryでGPU(TPU)付の機械学習環境が使えるらしい
趣味人としてはそろそろ独自のコードを書いて公開したいところ。(なお本業…) [:contents]
Google Colaboratry事始め
どうも今年の初めにGoogleがCloudで機械学習環境を提供しはじめたようで,それに関する記事が林立しています。 流行りには乗り遅れましたが,気になったのでフォローしてみます。
引用
以下の記事を基にしてテストしました。図なども借りています。
[1] Google Colaboratoryの無料GPU環境を使ってみた – MISO
[2] 【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory
仕様
文献[2]によると重要そうな仕様は以下のとおり。 Ubuntu環境です。
- n1-highmem-2 instance
- Ubuntu 17.10
- 2vCPU @ 2.2GHz
- 13GB RAM
- 40GB Free Space
- GPU NVIDIA Tesla K80
- アイドル状態が90分続くと停止
- 連続使用は最大12時間
- Notebookサイズは最大20MB
Teslaというやつは浮動小数点に強い大規模計算機用のより強いGeforceみたいなやつです。単純にRAMだけでも1080Tiの倍以上の24Gあります。 容量が40Gという点以外は個人が趣味で買えるスペックは大幅に超えていますね。
Jupyterで開発をするという仕様上,コマンドライン操作は!をつけて実行します。
!pip freeze
等でパッケージを確認できますが,TensorflowやKeras,matplotlibなんかは当然のように入っています。環境構築も不要です。
Ubuntuベースにしているのでaptgetも使えるのですが今日は試しませんでした。
準備することとか
以下のURLにGoogleアカウントを持った状態でアクセスすれば環境が手に入ります。 https://colab.research.google.com/notebooks/welcome.ipynb
「ファイル」からPython3のノートを作成して実行していきましょう。 最初に上げたURLの記事からたどればよいでしょう。
CPU → GPU環境への移行
「ランタイム」の欄から「ランタイムのタイプ」を開き,図のように選択します。
今はTPUも選択できるそうな。
作成したファイルの保存
ファイルの保存方法は
- ダウンロード
- Githubへ保存
- GoogleDriveへ保存
がありました。Githubに保存するときはポップアップが出るので事前にポップアップブロックを無効にしておいてください。
KerasでのMNISTのテストと所感
KerasでのMNISTサンプルを試してみました。 ノートブックを上げておきます。 https://colab.research.google.com/gist/YoshiRi/b7a984902222a14d3f4fba31625060ca/kerastest.ipynb
6万Stepを12Epocやって自前のGeforce1050iを載せたPCで計算した時は13s/Epocくらいでしたが,この環境では11s/Epocなのでちょっと早くなっていますね。コードの書き方で変わるんでしょうか。
[http://ossyaritoori.hatenablog.com/entry/2018/03/27/Keras%26_Tensorflow%28GPU%E6%9C%89%29%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89_on_Windows_with_Anaconda:embed:cite]
結果
このあたりはサンプルプログラムなのでどうせほぼ同じですが一応。
x_train shape: (60000, 28, 28, 1) 60000 train samples 10000 test samples Test loss: 0.02876817006157935 Test accuracy: 0.9913
所感
GPUマシンを持っていなくても(環境構築しなくても)機械学習の学習が出来るのは初学者にはかなり良いと思います。 特に環境構築や機材は初学者にとって大きな壁なので回線さえあればきちんとした環境で実行できるというのは教育効果が非常に高そうです。
とりあえず,コードを試して満足したい方はここから初めて良いと思いますが,一方で今後ちゃんとやっていくならどこかで環境構築はしておくべきだと思います。 結局自分でデータ集めてモデル組まないと意味ないので僕もこんなサンプルコードばかり実行してないで自分のやりたいプロジェクトを進めていこうとおもいます。