概要
Google Colaboratory (以下、Colab と呼ぶ) は Google が提供するクラウド版 Jupyter notebook (的な)サービスである。いくつかの制約はあるが、GPUが無料で使えるのがすごい。最近、これを使う機会が多かったので、私なりの使いこなしのコツを書いていきたい。
使いこなしのコツ
1. Google Drive をマウントする
Colab は Docker のコンテナとして動いているらしい。numpy, pandas, sklearn, tensorflow, torch 等のパッケージはあらかじめインストールされているものの、計算に必要なデータはどこか他から持ってくる必要がある。一番簡単なのは、Google Drive をマウントするやりかたであろう。
from google.colab import drive
drive.mount('/content/drive')
とすると、認証画面へのリンクが表示されるので、そこで必要な認証が行われる。あとは、/content/drive/My Drive
に自分の Google Drive がマウントされているのが見えるはずだ。
(自分の Google Drive の全体がマウントされてしまうことに注意。一部のパスだけマウントできると聞いたこともあるが、やったことはない)
どうやら My Drive
という名前は変えられないようなので、私は、
ln -s "/content/drive/My Drive" /content/gdrive
として、 /content/gdrive
でアクセスできるようにしている。
(空白を含まないパスにするため)
2. Colab 上でもローカルPCでも動くようにする
Colab のファイルは拡張子が .ipynb
であり、基本的には Jupyter notebook である。実際に、テキストエディタで開いてみると、これは JSON 形式で、Jupyter notebook に加えて、 Colab 特有の属性をいくつか書き加えたものであることがわかる。
Colab のファイルはデフォルトで、 Google Drive の /Colab Notebooks
というパスに置かれる。通常は、ここからファイルとして直接ダウンロードしてもよい。 通常の Jupyter notebook
と比較すると、こちらには改行がない。そこで cat hoge.ipynb | jq . > hoge2.ipynb
などとして、JSON を整形すると見やすくなる。
ただ、どうも編集中の Colab のファイルは、直接 /Colab Notebooks
からコピーすると、ファイルの中身が壊れていることがあった。そこで、 Colab の .ipynb をダウンロードする
のメニューからダウンロードしたほうが安全である。また、ここからダウンロードすると、JSON にはちゃんと改行がある。
Colab 環境では /content
がホームディレクトリになるので、私は、ローカルPC上でも /content
ディレクトリを作っている。そして、その下に適当にディレクトリを作ることによって、 Colab でもローカル PC でも同じように利用することができる。
Colab かローカルPC かの判定のために次のようなコードを利用している。
3. 日本時間へタイムゾーン変更
Colab のタイムゾーンはデフォルトで UTC なので、これを日本標準時に変更。
if on_colab:
!rm /etc/localtime
!ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
!date
4. 起動時間表示
Colab は最初に立ち上げたインスタンスが12時間後に強制シャットダウンされて、保存したデータもすべて失われるので、経過時間を知ることは重要。
if on_colab:
!cat /proc/uptime | awk '{print $1 /60 /60 " hours (" $1 "sec)"}'
5. 90分のアイドルタイムアウトに対応
連続12時間の制限とは別に、90分間、Colab に触らないでいると、強制的にシャントダウンされてしまう。
これを防ぐためには、別の Colab ノートブックを開いて(ただしハードウェアアクセラレーターの設定は同じにする必要がある)、そこで次のようなコードを実行する。
import time
while True:
time.sleep(3600):
!date
!ps ax # これはなくてもよい
こうすることでインスタンスをインスタンスを継続的に使うことができる。
6. Colab をずっと使っているとブラウザが激重になる現象
私の環境だけの問題かもしれないが、Colab で計算をしていると、ブラウザ(Google Chrome)がだんだん重くなっていく現象があった。どうも、Colab のノートブックをブラウザで開いていると、バックグランドで常に通信が発生して、それが重さの原因なるっぽい。画面表示があまりない場合には、ブラウザが重くなることはあまりなかった。そこで、計算に長時間要する場合には、5.のようにして、実行中のインスタンスが落ちないようにしたうえで、長時間の計算をしているノートブックを閉じてしまうとよい。インスタンスが落ちない限りはブラウザ上で表示されていなくても、計算は続行している。ふたたび、そのノートブックを開くと、閉じていたときに生成された画面出力も含めて、再びすべてが表示される。
まとめ
他にもいろいろあったような気もするが、とりあえず以上である。また何か思い出したら追加する。