【徹底解説】初心者のためのGoogle Colaboratoryの使い方

#1. 背景
Google Colaboratory(略称 Google Colab)はブラウザから Python を記述、実行できるサービスです。
今回はその使い方を覚書程度に残していきたと思います。

#2.新規ノートの作成

新規ノートの作成には
・Google Colabサイトから作成
・Google Driveから作成
の2通りの方法があります。

いずれもノートブックを作成するとマイドライブ下に「Colab Notebooks」というフォルダが作成されます。

##2-1. Google Colabサイトから作成

以下のリンクがGoogle Colabの紹介ページのようなものになっています。

https://colab.research.google.com/notebooks/intro.ipynb

このページの「ファイル」- 「ノートブックを新規作成」で作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/3f0a47f7-7b46-21fa-46f6-1a1651b2325b.png)


##2-2. Google Driveから作成

Google Drive左上の「+新規」ボタンを押すと以下の選択肢が表示されます。
ここで「その他」-「Google Colaboratory」を押すことで新規作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/0dd6585f-23a4-a4e0-8eb2-688be616ac37.png)

#3. GPUの設定

Google Colabの特徴として、GPUを無料で使えることがあげられます。
(実行時間は12時間に限られる)

GPUを使用する設定の仕方を説明します。

「ランタイム」-「ランタイムのタイプを変更」を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/379dab33-6b48-29b8-66cf-1afbc5bebfaa.png)

この部分をGPUにすれば良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/cbb1c195-f429-e013-622c-cdd94ceafeda.png)

#4. ライブラリの追加
Google Colabには機械学習に必要な主要ライブラリがあらかじめインストールされています。
インストール済みライブラリは以下のコードで表示できます。

```python
from pip._internal.utils.misc import get_installed_distributions
installed_packages = get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)
```

```
['absl-py==0.12.0', ・・・,'matplotlib==3.2.2', ・・・, 'numpy==1.19.5', ・・・, 'pandas==1.1.5', ・・・, 'tensorflow==2.6.0', ・・・, 'zipp==3.6.0']
```

例えば、janomeを追加したいときは以下のコマンドとなります。
(！で始めまるセルはLinuxコマンドとして解釈されます。)

```python
!pip install janome
```

#5. データの保存(アウトプット)

学習済みのモデル等をGoogle Driveに保存する方法を説明します。
まず、Google Driveをマウントした後に、パスを指定して保存となります。

##5-1. Google Driveをマウント

まず以下のコードを実行します。

```python
from google.colab import drive
drive.mount('/content/gdrive')
```

するとこんな表示が出てくるので、①のリンクにアクセスし、Googleにログインします。
ログイン後に出てくるコードをコピーして②に入力するとマウントされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/77d556cc-21cd-facf-7cae-79ba8e746a27.png)
　
マウント完了すると以下のような表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/3408e0f3-4992-ffc8-953e-0b984d78c5e5.png)




##5-2. 学習済みのモデルの保存

「3. GPUの設定」で少し述べた通り、
Google Colabでの実行時間は12時間に限られます。

12時間を超える処理の際などは、一度モデルを保存する必要があります。

例えばサンプルで以下のようなモデルを作成してみます。

```python
import os
import tensorflow as tf
from tensorflow import keras

# サンプルデータセット取得
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0

# モデルの定義
def create_model():
  model = tf.keras.models.Sequential([
    keras.layers.Dense(512, activation='relu', input_shape=(784,)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10)
  ])

  model.compile(optimizer='adam',
                loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=[tf.metrics.SparseCategoricalAccuracy()])

  return model

# モデル作成
model = create_model()

model.summary()
```

```
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 512)               401920    
_________________________________________________________________
dropout (Dropout)            (None, 512)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                5130      
=================================================================
Total params: 407,050
Trainable params: 407,050
Non-trainable params: 0
_________________________________________________________________
```

このモデル全体を保存するには、以下のコードを実行します。

```python
!mkdir -p ColabNotebooks
model.save("/content/gdrive/MyDrive/ColabNotebooks") 
```

以下の2ファイルがGoogle Driveに保存されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/ea72896d-2461-242e-6cb6-fcd1cdb8ca1b.png)


モデルの読み込みは以下の通り。

```python
new_model = tf.keras.models.load_model("/content/gdrive/MyDrive/ColabNotebooks")

new_model.summary()
```

```
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 512)               401920    
_________________________________________________________________
dropout (Dropout)            (None, 512)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                5130      
=================================================================
Total params: 407,050
Trainable params: 407,050
Non-trainable params: 0
_________________________________________________________________
```

モデルが読み込まれていることが確認できます。

フォルダのパスについては、画面左側のフォルダマークをクリックすることで確認できます。
右クリックでパスのコピーもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/193b8533-293e-2521-25b2-eddf39407543.png)


#6. データのアップロード
データのアップロードは、マウント無し/有りの2パターンがあります。

##6-1. ドラッグ＆ドロップ(マウント無し)

ファイルをドラッグ＆ドロップすることで簡単にアップロードすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/31263b0e-2059-c503-b3ad-23893927c8b3.png)


ファイルはランタイムのリサイクル時に削除されてしまうので、
一時的に使いたいファイルの時に用います。

中身は以下のコードで確認することができます。

```python
import csv

with open('/content/sample_data/test.csv') as f:
    print(f.read())
```

```
1,2
3,4
```

##6-2.　Google Driveにアップロード(マウント後)

「4-1　Google Driveをマウント」でマウントした後であれば、
Google Driveにファイルをアップロードし、
そこから読み込むこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/38d89c0c-1c9a-1225-7df2-14301e66c037.png)

Google Drveにアップロードすると以下のように反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/710d8832-03d4-a313-2958-79295f22ab80.png)

ここにファイルアップロードしていれば、以下のコードで読み込めます。

```python
import csv

with open('/content/gdrive/MyDrive/Colab Notebooks/test.csv') as f:
    print(f.read())
```

```
1,2
3,4
```

#7. 備考：90分ルールと120分ルール

Google Colaboratoty には90分ルールと12時間ルールがあり、注意が必要です。

90分ルール：ノートブックの使用をやめてから90分
12時間ルール：ノートブックを実行し、仮想マシンの割り当てから12時間

で実行が停止されてしまいます。

90分ルールにはChromeのAutoRefresh機能が有効です。

https://chrome.google.com/webstore/detail/easy-auto-refresh/aabcgdmkeabbnleenpncegpcngjpnjkc

この画面で時間をセットしStartを押すと、一定時間ごとに画面が更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/0f2432db-d8f9-8a80-5b2c-78ea4f9092c8.png)

1回目の更新時は下記のポップアップが出ますので、再度読み込みが必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/4d2639ba-d9d7-35e4-8d23-8791a61b2361.png)

また、90分/12時間ルールからオーバーし、最初から実行する場合は、
「ランタイム」- 「再起動してすべてのセルを実行」を選択すると良いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2048607/d54db4c3-0641-dc30-c678-46bfcff14490.png)

#8. まとめ

以上にGoogle Colaboratoryの使い方をまとめてみました。
無料でこれだけ使えるのはありがたいですね。
その分、実行内容などはGoogleに情報を蓄積されているのかとは思いますが。