【Python/機械学習/Kaggle】ローカルで編集・パソコン間で共有可能な環境をColabとGoogleドライブで簡単構築

# はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/133d89dd-d0a2-e90d-7bc7-a52dd626d1cf.png)

「Colaboratory を使えばGPU付きの環境を無料で使えるけど、git使おうとしたりファイル編集したりする時面倒...」 と思っていた時期がありました。

パソコン版 Google ドライブ を使うと、**ローカルにドライブをマウントできる**ので、ローカルで編集してGPUが必要なときはColabで実行というのが簡単にできます。**ターミナルからコマンドで操作できる**ので、クラウドのストレージとしても使いやすいです。

また、**最近 Colab Pro が日本にやってきました**。月額1000円で Kaggle などでも十分戦える環境が手に入ります。もともと無料枠でもかなり使えましたが、課金すると優先的に良いGPUが割り当てられるなどのメリットがあります。

## 対象者
- Kaggle に参加するためのGPU搭載マシンがない方（Kaggle Notebook では物足りない方）
- ちょっとした機械学習の環境構築に困っている方
- パソコン間でのファイル共有や、共通する環境構築に困っている方

## 必要なもの（無料）
- Google アカウント
- [パソコン版 Google ドライブ](https://support.google.com/a/answer/7491144?hl=ja)

## おすすめオプション（有料）
- Google ドライブ の容量の追加 （[Google One](https://one.google.com/)へ加入）
- [Colab Pro](https://colab.research.google.com/signup) への入会

画像データなどをアップロードする際は容量が必要になるので、ドライブへの課金が必要になる場合があります（無料枠では15GBまで）。200GBで数百円程度、2TBで千円ちょっとほどかかります。

強いGPUを多くの時間使いたい場合は T4 や P100 などが優先的に割り当てられる Colab Pro に加入しましょう。2021年3月に日本でも加入できるようになったばかりです。
それ以外にも、メモリを2倍に増やすことが可能になるほか、ノートブックの接続時間が最大12時間から 24 時間に伸びます。

Colab Pro に加入して確認したところ、直近でGPUを使っていなかったおかげか **Tesla V100 が割り当てられました**。コア数が5120で、GeForce RTX 2080 Ti の4352よりも多いです。

```Python
# GPU の確認
gpu_info = !nvidia-smi
gpu_info = '\n'.join(gpu_info)
if gpu_info.find('failed') >= 0:
  print('Select the Runtime > "Change runtime type" menu to enable a GPU accelerator, ')
  print('and then re-execute this cell.')
else:
  print(gpu_info)
```
```
Wed Mar 24 01:04:07 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.56       Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  Off  | 00000000:00:04.0 Off |                    0 |
| N/A   33C    P0    23W / 300W |      0MiB / 16160MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

# やり方
## パソコン版 Google ドライブのインストール
[パソコン版 Google ドライブ](https://support.google.com/a/answer/7491144?hl=ja)をインストールしましょう。mac版・Windows版があるので、どちらのOSを使用していても大丈夫です。
※「ARM ベースの Windows ノートパソコンとタブレットには現在のところ対応していません」とのことです。

Linux を使っている方は [google-drive-ocamlfuse](https://github.com/astrada/google-drive-ocamlfuse) というものがあるそうなので、こちらを使ってみると良いかもしれません。

## ローカルでファイルの編集
パソコン版 Google ドライブのおかげで、ローカルにドライブの内容がマウントされています。
ローカルのエディタでファイル編集を行ったり、gitでバージョン管理したりしましょう。

一応、Googleドライブで編集もできるのですが、貧弱な Text Editor しか使えません。普段の使い慣れたエディタで編集できるのがメリットです。

## Colabで実行
自分のパソコンで実行してもよいのですが、Colab で Notebook を実行しましょう。

GPUは高価であり電気代もかかります。機械学習で使う場合の環境構築も面倒なので、手間いらずで格安の Colab を使ったほうが楽でしょう。

GPUを使う場合は「ランタイムのタイプを変更」するのを忘れないようにしましょう。また、使いすぎると怒られることがあるので、使わない時はGPUなしにしておくのも重要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/cf92aa9d-3769-7a01-24f0-5e059223cf95.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/9c4d2fc1-5255-a31d-7fd1-bc9251f12523.png)


# テクニック・注意
## 複数ノートブックを並行実行
Colabの一番のメリットは、ノートブックを複数同時にGPUを用いて実行することができることです。

通常は1つのGPUで実験を1つずつこなすことが多いかと思います。Colabを用いるとノートブックごとに違うGPUを割り当てられるので、並行して実験を行うことができます。

注意点としては、GPUを使いたい放題というわけではないので、無料版でやると使いすぎですぐに怒られるかもしれません。

↓3つのタブでノートブックを開いてそれぞれ実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/9605bab7-9f94-7962-b722-d6ea2ea32642.png)


## Colabのディスクの制限
GoogleドライブストレージとGoogle Colabのディスク容量は異なります。ドライブの容量を増やしても、Google Colab のディスク容量制限のせいでデータが入りきれないかもしれません。


ランタイムをGPUやTPUに変更していると、通常よりもディスク容量が増えるそうです。
ランタイムをGPUにして確認したところ150GB程度ありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/bb954ef0-0de2-62f4-3500-41c5270be58e.png)

## ドライブの読み書きは遅いのでcontent直下に展開
ドライブをマウントして直接アクセスすると遅い場合があります。
機械学習目的などで画像データなどを取り扱う場合は、`/content` 以下に展開してからアクセスすると良いです。

試しにドライブ上にある数GBの画像で学習しようとしたのですが、1エポック目にはじめてアクセスする画像に対して異常に時間がかかってしまいました。

## 90分のセッション切れ対策
Colab は90分操作しないとセッション切れとなり途中で終わってしまいます。簡単なのは JavaScript で定期的に操作してあげることでしょうか。

デベロッパーツールを開いてコンソールに以下のコードを入力しましょう。

```JavaScript
function ClickConnect(){
  document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,1000*60); // "1分ごとにクリック"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288564/4f59e290-366f-090e-3224-863f6a9f9363.png)



- [Google Colab セッション切れを防止する _ FlatKids](https://flat-kids.net/2020/07/28/google-colab-%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8C%E3%82%92%E9%98%B2%E6%AD%A2%E3%81%99%E3%82%8B/)
- [Google Colaboratoryの90分セッション切れ対策【自動接続】 - Qiita](https://qiita.com/enmaru/items/2770df602dd7778d4ce6):JavaScript以外の対策法なども記載されています。



## その他参考
- [Colaboratoryで分析コンペをする時のテクニック集 - kaggle全力でやります](https://www.currypurin.com/entry/2021/03/04/070000) ： Kaggle のコンペを Colab で戦う際のテクニックが色々とまとまっています。非常に参考になるので確認してみてください。

# 終わりに
Kaggle などに参加する時は、

- Colab を使う
- Kaggle Notebook を使う
- GPU搭載のPCを購入
- GCPで高額なインスタンスを立てる

などの選択肢がありますが、 Colab (Pro) だけで十分な環境が手に入ります。なによりも複数のノートブックを並列に実行することが可能なのが大きいです（無料版でやるとすぐに怒られると思います）。

ファイルの管理なども Google ドライブ をマウントするだけで簡単にできるので非常におすすめですが、容量の制限なども考えると画像のディープラーニングなどをやろうとすると課金する必要が出てきてしまうのがデメリットでしょうか。
また、Colab のディスク容量のせいで、データセットが150GBを超えるような学習を行うのが難しいという点もあります。

もし「この方法のほうがオススメ！」などあったらぜひ教えて下さい！