Google Colaboratoryでタブレット・スマホからプログラミングや機械学習ができるようになっていた話

Google Colab（Colaboratory）をタブレットやスマホで試したらどうなるんだろう？と思って試してみました。結果、いけました。既出気味ではあるものの、**スマホやタブレットで環境構築不要でプログラミング**ができてしまいます。

環境：iPad Air2

Colabの本来のサポート環境は、PC版のChromeとFirefoxなのでSafariだとうまく動かないこともあるかもしれませんが、ぱっとやった限りでは確認できませんでした。

## こんな感じ
手書き数字画像（[MNIST](http://yann.lecun.com/exdb/mnist/)）の分類をしてみました。

![colab_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/232088/f134a548-e732-a8d1-87aa-8e504a64bd74.jpeg)

**iPadでディープラーニングできてる**:heart_eyes::heart_eyes:

もちろんPC版同様、無料GPU使えます。

iPadで頑張って入力したコードはこちらです。

```python
from keras.datasets import mnist
from keras.layers import Dense, Input
from keras.models import Model
from keras.utils import to_categorical

(Xtrain, ytrain), (Xtest, ytest) = mnist.load_data()
Xtrain, Xtest = Xtrain.reshape(-1, 784)/255.0, Xtest.reshape(-1, 784)/255.0
ytrain, ytest = to_categorical(ytrain), to_categorical(ytest)
inputs = Input((784,))
x = Dense(128, activation="relu")(inputs)
x = Dense(10, activation="softmax")(x)
model = Model(inputs, x)
model.compile("adam", "categorical_crossentropy", ["acc"])
model.fit(Xtrain, ytrain, epochs=20, validation_data=(Xtest, ytest), batch_size=128)
```

入力補完が効いたおかげでそこまで苦ではなかったです。

## メニューは左上のトグルから
![colab_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/232088/0f7260dd-2acf-2449-888b-3c2e35086f66.jpeg)
PC版を使っていると一瞬「あれ？」と思いますが、左上のトグルボタンからメニューを開くことができます。GPU、CPUの切り替えは「ランタイム」→「ランタイムの切り替え」から。

TPUはここのメニューにはありませんが、PC版でTPU環境のNotebookを作ってそれをタブレットで読ませればTPU環境に接続できました。多分切り替えUIに追加するのを忘れているだけかと思います。**スマホ・タブレットさえあればそこらのPCよりも全然スペックが良いGPU/TPU使える**:v:

CPU版でも相当遊べます。プログラミング覚えるだけなら当面はCPUインスタンスで十分です。注意点としては[Colabのよくある質問](https://research.google.com/colaboratory/faq.html#gpu-availability)にあるように、仮想通貨のマイニングはしないでねというだけ。あと常識的に法にふれるようなこと:police_car:はしないでね。

コードセルの挿入は「挿入」→「コードセル」から。処理ごとに適宜わけてあげると見やすいと思います。

## 入力補完が機能する
![colab_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/232088/20b4d665-3431-1423-49da-4decc2776625.jpeg)

通常のColab同様、入力補完が機能します。予測が出てきたらエンター押すとそのまま入力してくれます。

ただ、やってみたところ、外部キーボードはあったほうが楽ではないかと思います。タブレットで長時間入力していると小指のあたりがつってくるので。

## データの退避はGoogle Drive
これはPC版と同じなのですが、スマホやタブレットだとファイルをダウンロード/アップロードするというのが難しくなってくるので、Google Driveに退避させるのが良いかと思います。

```python
from google.colab import drive
drive.mount("gdrive")
```

出てくる認証URLを踏んでキーをコピーすると、「gdrive」というディレクトリにGoogle Driveがマウントされるので、あとはコピーコマンドで、

```python
!cp somefile.txt gdrive/My\ Drive/somefile.txt
```

とコピーしましょう（最初の!はLinuxコマンドを表します）。90分接続がなかったり、接続開始から12時間経過すると強制的に切断され、ランタイムの中のデータが消えるので、大事なデータは退避させるのをお忘れなく。Colabで入力したプログラム（Jupyter Notebookのコード）は、Google Driveに自動的に保存されているので退避させる必要はありません。

ちなみに、退避だけではなく、Google Driveにあるファイルをランタイムに読み込み（コピー）させることができます。もし**スマホの写真をGoogle Driveにバックアップしていたら、それの分類**なんかやってみると面白いのではないでしょうか。

## 使い所
### プログラミング教育に良いのではないか
今まで見たとおり、タブレットだけでプログラミングできてしまい、しかも面倒な環境構築が不要なので、小さい子でもやろうと思えばできてしまいます。実際最近だと「PCはないけど、スマホやタブレットはある」みたいなケースのほうが多いと思います。

タブレットでプログラミングというと、Scratchなどの特殊なプログラミング言語や、百歩譲って[Swift Playground](https://mynavi-agent.jp/it/geekroid/2018/08/ipadswift-playgrounds-ipad.html)など専用のGUIがついた、若干独自フレームワーク感があるものが多いです。タブレットでのプログラミングで覚えたことが、そのままPCでのプログラミングに活かせるかというと、ちょっと微妙かもしれません。

しかし、ColabでできるPythonは**ガチな**プログラミング言語です。全く同じ記法でPCでプログラミングできますし、ちょっとした計算から、Webページの作成、最先端の機械学習までなんでもできます（国際学会に出てくるような最先端の実装もかなりがPythonです）。Cythonに手を出せばC言語という黒魔術のパワーを借りることもできるでしょう。ColabにハマったらPCを買ってより高速にプログラミングするということもできます。

Google ColabはKaggle APIも使えるので、もしかすると、近い将来タブレット＋Google Colabだけで金メダルを取った若いKaggle Masterというのも生まれるかもしれません。

### カフェでできる機械学習
![mobile_router_s.jpg](https://qiita-image-store.s3.amazonaws.com/0/232088/8d1f8440-6bb8-a0ed-dc86-726f9fb476d1.jpeg)

カフェはMacBook広げておくだけの場所ではありません。MacBookがなくてもColabを使えば機械学習はできます。カフェでディープラーニングしながら、arXivの論文を読む、なかなかクールなライフハックだと思いませんか？

スタバでドヤリングしていても機械学習していたら「お、こいつは違うな」と思われるかも知れません。