Google Colaboratoryが便利・高速で凄過ぎる
Googleが研究の一環で提供しているColaboratoryを試してみました。
Jupyterと同じようなGUIでPythonのプログラムを実行可能で、GPUも使えます。
Jupyterと同様に、先頭に「!」を書くことで、Linuxのコマンドを実行可能であり、「!pip」「!conda」「!apt-get」などで機能を追加できます。
実行結果をファイルシステム上に保管でき、共有リンクを使って取り出せます。
ただし、12時間経過すると強制終了されて、ファイルは失われます。
しかし、Notebookが動いている仮想マシンにGoogleドライブをマウント可能であり、これにより、実行結果をGoogleドライブ上のファイルとして保管できます。
Deep Learningでは、途中の状態をファイルに保管して、そこからResumeできるようにプログラムを書くことが多いので、12時間で一度強制終了しても、Googleドライブに保管したファイルを使って学習を再開可能です。
試しに、Wide Residual Networks(WRN)のコードを実行してみました。このコードは、2016年時点にCIFAR10で最高性能を出したコードです。Colaboratoryを使って、16時間程度(途中で一度強制終了し、そこから再開)で結果を出すことができました。なお、当方のPCではGPUメモリが足りず同じ設定では試せませんでした(2GBでは足りなかった)。少し問題サイズを小さくして(depth=16からdepth=10にした)試したところ、Colaboratoryの方が問題サイズが大きいにもかかわらず、Epoch当たり処理時間は短かったです(当方PC: 3分53秒、Colaboratory:3分37秒)。
Deep Learningを個人的に試すには最適と感じました。
世界最高レベルのコードをこんな簡単・高速に試せるなんて、凄過ぎます!
Wide Residual Networks試行用Notebook
下記がWRN試行環境として作ったColaboratoryのNoteookです。共有設定していますので、リンクをたどれば、簡単にColaboratoryで実行できるはずです。
WRNd16w10(pytorch-v0.4).ipynb
Wide Residual Networksのpytorch0.4対応により一部変更した版(2018/9/30)。
https://colab.research.google.com/drive/1fDdGmFhh7X2Tu_Cg9yoDSY-9bM78w41s
NotebookにはWide Residual NetworksのPythonコードは全く書かず、「git clone」でコードを取得し、「import main」でメインのPythonファイル「main.py」をインポートし、「main()」を直接呼び出すことで実行しています。
ただし、このままではプログラムに引数を渡せないので、下記のように、間接的に「main()」に引数を渡すようにしています。この方法は汎用性があるので、他のコードを試す際も活用できそうです。
import sys new_argv = "main.py --save ./logs/resnet_20180204 --depth 16 --width 10 --ngpu 1 --gpu_id 0".split(" ") sys.argv = new_argv main()
下記は、学習状況を可視化するためのNotebookです。
visualize.ipynb
https://drive.google.com/file/d/1eq4wAkZijRmfxiaQLpy5nXsR6I9Tu89-/view?usp=sharing
WRNのコードが作成したログファイル「log.txt」をGoogleドライブで右クリックして共有リンクを取得した後、上記Notebookに共有リンク中IDを埋め込んで実行すると、先頭で示したように、学習状況を可視化できます。
上記コードは、WRNのコードに含まれていたものを流用し、可視化にBokehを使っています。なお、ColaboratoryのNotebookでBokehを使う際は、グラフを表示するセル内で「output_notebook()」を必ず実行する必要があります。これが分からず、最初はMatplotlibで表示していましたが、Bokehは、表示した後で部分的に拡大したりできるので便利ですね