Colab Proを２ヶ月ほど使ってのメモ（良い点 / イマイチな点）

# Google Colaboratoryとは
ブラウザー上でPythonコードを書いて実行できる無料のJupyter Notebook環境です。
使用制限はありますがGPUも使えます。

# Colab Pro
Google Colaboratoryの有料版（$9.99/月）です。通常版に比べて色々なメリットがあります。
今のところ米国限定（契約には米国の住所とクレジットカードが必要）。

米国に住んでいるのでせっかくなのでColab Proをロンチと同時に契約しました。2ヶ月ほど使って大体の感触がつかめて来たので、ノウハウをメモとして残しておきます。[公式の文面](https://colab.research.google.com/signup)を元に、使ってみた実際のところについて（N=1ですが）書きます。

**2020年5月13日時点の情報です。**
このサービスはリソース保証型ではないので、ユーザに割り当てられる資源が動的に変わります。なので時期が違ったり、地域が違ったりすると全く参考にならない情報になり得ます（日本でサービスが開始になった場合など）。ご注意ください。

# 良い点
## 高性能GPUが基本ずっと割り当てられる
>Colab Pro に登録すると、最速の GPU を優先的に利用できます。たとえば、登録していないユーザーに K80 GPU が割り当てられているときに、登録しているユーザーは T4 や P100 GPU が利用できます。TPU も優先的に利用できます。


私の場合はTesla-P100がデフォルトで割り当てられたのですが（2ヶ月間のうち今まで一回もT4には当たっていません）、どれだけGPUを酷使してもTesla-P100じゃないGPUが割り当てられることはありませんでした。具体的に言うと、機械学習用途で1ヶ月間ほぼずっと（1つのノートブック上で）GPUを回していましたが大丈夫でした。
![colab3_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/acfb8e66-4e75-d78e-c398-9f9902949d77.jpeg)


## 使用量上限はあまり気にしなくて良く、複数のノートブックで同時にGPUを回せる
>Colab の無料版では、より高速な GPU へのアクセスが大幅に制限されており、使用量上限は Colab Pro よりもはるかに低くなっています。Colab Pro にも使用量上限がないわけではありません。また、Colab Pro で使用可能な GPU および TPU のタイプは将来的に変更される可能性があります。

通常版ではGPUをある程度使うとすぐ使用量制限に達していましたが、Proではほとんどなくなりました。
ただ使用量上限はないわけではないことも確認しました。4ノートブックで同時にGPUを回していたら半日くらいで、上限に達したという下の警告と共にGPU自体が使えなくなりました。
![colab_0420.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/dec21426-f1ac-0442-0a32-6176e80dee7a.jpeg)
（すでにColab Proを使っているにも関わらずColab Proへの加入を勧められた）。

ただそのような極端な使い方をしなければ、それからは並列で動かしても上限には達することは一度もありませんでした。ちなみに使用量上限に達しても数時間経てば使えるようになっていました。GPUもTesla P100が再度割り当てられました。なのでそこまでビビる必要もありません。

## 24時間継続して走らせられ、タイムアウトも発生しにくい
>Colab Pro を使用すると、ノートブックを最大 24 時間接続したままにでき、アイドル タイムアウトも比較的生じにくくなります。ただし、接続時間が保証されているわけではなく、アイドル タイムアウトの動作は変わる場合もあります。Colab の無料版では、ノートブックは最大 12 時間使用できます。アイドル タイムアウトは Colab Pro よりもはるかに厳密です。

通常版だと12時間だった連続稼働時間が24時間に伸びています。ちょっと重い処理を回すときなどはここら辺結構重要です。1日くらいあれば学習回しきれるけど…っていうとき、都度止まった学習をレジュームし直すのは、たまにならいいですが毎回やってると萎えます。今のところ処理さえ走っていれば、24時間経過する前に途中で止まることはありませんでした、通常版では結構止まっていた覚えがあります。

アイドルタイムアウト、つまりノートブックの操作をしない場合（ノートブックを閉じた時なども）にランタイムの接続が切れる時間ですが、長くなった気がしますが気のせいな気もします。Proでも30分くらい経つと結構切れているイメージです、通常版だともっと早く切れていた気もします、でもやっぱり気のせいかもしれません（90分ルールというものがColabにはあると昔教わった気がしますが、90分持つことはほぼない印象です）。

## 大容量メモリが使用できる
>Colab Pro を使用すると、ハイメモリ VM を優先的に利用できます。ハイメモリ VM は通常、Colab の標準的な VM の 2 倍のメモリと CPU を備えています。Colab Pro ユーザーはノートブックの設定からハイメモリ VM の利用を有効にできます。また、Colab によって必要と判断された場合には、自動的にハイメモリ VM が割り当てられることもあります。ただし、リソースが保証されているわけではなく、ハイメモリ VM には使用量の上限があります。Colab の無料版では、高メモリ設定は利用できず、ユーザーに高メモリの VM が自動的に割り当てられることはめったにありません

たしかにワンクリックで簡単にハイメモリVM(27G)の設定ができました。楽ちんです（GPUと同じく設定しないと割り当てられないので注意）。今のところメモリに関しては使用量上限に達したことはありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215987/58bca381-2117-5fd8-cdec-a22afcd72ab7.png)

## 価格が安い
高性能GPUをある程度使い放題で月$9.99です。GCPで同じような構成のVMを作ろうとしたらかなりの価格になったので、コスパは凄いと思います。

# イマイチな点
Colab Proが通常版と比較して劣る点はないので、Colab自体の話が主になります。

## エディタ、デバッグ環境が貧弱
Colabノートブックとは別のファイル（.py等）を編集する際のエディタはColab標準のほぼただのメモ帳か、Googleサービスとリンクして使える怪しげなクラウドエディタでやるしかありません。つらい。デバッグは[マジックコマンドを駆使してなんとかするか](https://ja.stackoverflow.com/questions/62955/google-colaboratory%E3%81%A7%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9)、セルを細かく区切ってPrintくらい。ちゃんとしたデバッガが必要な大規模なプログラムはそもそもColab上で扱うのは適していないかもしれません。

私は基本Colab上ではあまりモジュールレベルのコードはいじらないようにしてます。ローカル環境でコーディングと軽いデバッグをしてColab上で動かす前にgit pushして、Colabのノードブックの実行セルで毎回`!git pull`を走らせて、最新版コードで動かすようにしています。

## Google Driveとの同期が遅れることがある
これはColabというよりはサービス間の連携の複合的な問題なのですが、Google Drive上のファイルとColabとの同期タイミングがずれることがあります。具体的には、.pyなどのスクリプトを編集してそれを実行するまでに同期されず、編集した内容が反映されないことがあります。バグを引きずることが多く危険です。これもColab上やGoogle Drive上でコードを書くデメリットの1つです。

## Google Drive上に短時間に大容量ファイルを生成すると、不具合が出る場合がある
これは完全にGoogle Drive側の問題なのですが、大容量データを短期間に大量に生成すると（機械学習でのCheckpoint等）、Google Driveに一定時間ファイルが生成できなくなる（保存やアップロードも不可になる）現象が頻繁に起きました。体感では分あたり100M超えると起きるような感触でした。一度ファイルが生成できなくなると数時間その状態が続くので、作業に支障が多く出ました。なのでなるべく大量のデータを短期間に生成しないようにする必要がありました。

## 24時間で問答無用で切れる
12時間と比較すると体感ではかなり違いますが、やっぱり途中で切れるのはめんどくさいです。思考停止して学習をレジュームできる仕組みを実装しておくと楽です。

## ネットワークが不安定だと処理が止まることがある
完全にローカル側の問題ですが、ネットワークが切断されてノートブックとの接続が切れると時間が経つと処理が止まります。前述したようにこのアイドルタイムアウト時間も通常版に比較して伸びているとのことですが、あまり体感ではわかりません。気づいてすぐに復帰しないと止まっている印象です。私は個人的に家の回線が不安定なので、寝る前等には回線が安定しているPCにリモートで入ってノートブックを開いています（自分は何をやっているんだろう感がすごいです）。

## 米国でしか使えない
日本でもサービス開始してほしいです（強く要望）。

# まとめ
Colab Proのメモでした。
追加情報や変更点等ありましたら更新します。
ユーザ毎に状況が違うこともありえますので、情報頂けたら幸いです（情報が少なすぎる）。
効果的なColabの使い方等もありましたらぜひ教えてください。