Edited at

Google Colabの使い方まとめ


はじめに

機械学習/ディープラーニング勉強としてやってきたこと -実践編-



  • Google Colab


    • 最近使い始めましたが、これはすごいです!GPUだけでなくTPUまで使えます、そして無償です(ただし、TPUを使いこなすのはハードルが高そう)。既に役立つブログが書かれているので、それを検索して頂ければすぐに使い始められると思います。後日、それらのまとめ記事を書く予定です




と書きましたので、Google Colabの使い方をまとめてみます。と言っても、【秒速で無料GPUを使う】深層学習実践Tips on Colaboratoryという素晴らしいブログが既にあるので、これを補足する形とします。


90分ルールと12時間ルール

まず、最も重要なのがGoogle Colabには時間制限があるということです。2. シャットダウンまでの残時間は(90分ルールと12時間ルール)を読み理解しましょう。制限があると書きましたが、それほど強い制限ではないので悲観する必要はないと思います。


Google Driveを使いましょう

上記のようにGoogle Colabは12時間経つと初期化されてしまうため、データを保持し続けることができません。そのためデータやコードはGoogle Driveに保持するのがいいと思います。


Google DriveにGoogle Colab用ipynbファイルを新規作成する方法

Google Driveの左側の「新規」ボタンから「その他」->「アプリを追加」と選択し、Colaboratoryを追加して下さい。

image.png

そうすると以下のようにファイルを新規作成できるようになります。

image.png


Google Driveをマウントする方法

Google Driveをマウントにも書かれていますが、以下のように書くだけです。ローカルの学習データの読み込み、モデルの保存、ログの出力をしたい場合には必要になると思います。

from google.colab import drive

drive.mount('/content/drive')
# 必要ならば以下のようにディレクトリ移動する
%cd /content/drive/'My Drive'/'Google Colab'/

上記コードを実行すると認証用のリンクが表示されますので、それをクリックし、認証コードをコピー、Google ColabのセルにペーストするとGoogle Driveをマウントできます。ここまでやっておけばデータがいきなり消えることもなく安心ですね。Google Driveはファイルの履歴も勝手に取ってくれるので、さらに心強いです。


GPUを使う方法

そして何といってもGoogle ColabはGPUを使えるのが魅力です!しかし設定を変更しないとGPUは使えません。「編集」->「ノートブックの設定」から「ハードウェアアクセラレータ」をGPUに変更しましょう。

image.png

そして何とTPUまで使えます!が、TPUを使う場合はコードもTPU向けに書く必要があるようで、自分はまだその技術習得をしていないため、本格的にTPUを使ったことはありません。通常の(GPUの場合と同じ)コードをTPUで動かすと、めちゃくちゃ遅かったです・・・。興味のある方はGoogle ColaboratoryのTPUを試してみるを読むと参考になるかもしれません。CNNではGPUよりもTPUの方が速い(というかメモリエラーにならない)ようです。


学習状況をスマホでモニタする

これは8. 学習状況をスマホでモニタしたいに書かれたHyperdashを自分も使っています。コードは以下の通りです。

!pip install hyperdash

from hyperdash import monitor_cell
!hyperdash signup --github

上記コードを実行すると、Google Driveマウントと同じように認証用のリンクが表示されますので、同じように操作して下さい。学習結果を出力する先頭に以下のように書くことで、xxxという名前で結果が記録され、スマホから確認できます。その他詳細は公式資料などを参照下さい。

%%monitor_cell 'xxx'

自分は他にもOptunaを使っていますが、これも同様に!pipでインストールしimportして使っています。


2019/6/9追記

Hyperdashの使い方にもう少し詳しい使い方を書きましたので、あわせてご覧下さい。


あと何分?

あと何分?(12時間まであと何時間?)と聞きたくなったときは別のノートブックを開き以下のコマンドを実行してみて下さい。経過時間がわかります。

!cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 / 60 / 60 "h)"}'

なお、7. 同時に複数notebookを使い分けるに書かれている通り、GPUありインスタンスとGPUなしインスタンスは区別されるため、新しく開いたノートブックのハードウェアアクセラレータも必要に応じて変更して下さい。自分の場合は上記コマンドを保管した専用ノートブックを1つ作成し使っています。


12時間じゃ終わらない!という人は・・・

5. 12h超えタスクを実行するにはをご覧下さい。12時間後に自動的に再実行する方法もありそうですね。


最後に

これくらい覚えておけば、それほど不自由なく使えると思います。無料でGPUを利用できる機会はそう多くないと思いますので今後も積極的に使っていく予定です。