こんにちは,しまさん(@shimasan0x00)です.
先日,「Mix Leap Study #29 – Step up for TensorFlow」に参加してきました.
Google Brainの方から直接Tensorflowのお話を聞けて嬉しかったです.
Tensorflowはとてもいいものですが,先日買ったiPad Proではローカルで機械学習系のライブラリが使えなくて残念だなぁと思っていました.

現状は「Cocalc」か自分のサーバーにSSHでログインしてJupyter notebookサーバーを立ててアクセスするみたいな手段をとっていました.

Cocalcは便利ですが使用に制限があるので本格的には使いづらいですし,SSHトンネル使ってあれこれっていうのを毎回するのは結構面倒です.
ですがプレゼンでさらっと使われていた「Colaboratory」があればそういう煩わしさから開放されそう!!!
ということで今回はそこでさらっと使われていた「Colaboratory」について紹介したいなと思います.
Colaboratoryとは

ColaboratoryはGoogleが提供する完全にクラウドで実行されるJupyter notebook環境です.
Colaboratory ノートブックのコピーを GitHub に保存することもできますし,もちろんGoogle Driveにも,ローカルにも保存可能です.
新しいライブラリを使用するときは「pip install 」でノートブックの最上部にインストールすると,そのライブラリをノートブック内のどこでも使用できるようになります.
また,Colaboratoryはローカルマシン上の Jupyter ランタイムへの接続もできます.
これらのことがGoogleのアカウントを所持しているだけでできるんです.
控えめに言って神サービスだと思うのは私だけでしょうか.

スポンサーリンク
Colaboratoryの使い方
まずはColaboratoryにアクセスしましょう.
ファイルの選択画面が表示されます.

最初は「こんにちはColaboratory」を見るといいと思います.
簡単に使い方を紹介してくれていますので.
新しいノートブックを作る際は左上にあるファイルから「Python3の新しいノートブック」を押してください.
別ウィンドウが開きます.


使い方は通常のJupyter notebookと同じです.
ファイルからGithubに保存とすれば任意のレポジトリに保存できます.(Gistでもいける)

また,ファイルは簡単に共有することができるので連携は容易でしょう.
スポンサーリンク
使えるライブラリ
使い方は通常のJupyter notebookと同じなので
!pip list
で調べました.
Package Version
------------------------ -----------
absl-py 0.6.1
altair 2.2.2
astor 0.7.1
atomicwrites 1.2.1
attrs 18.2.0
beautifulsoup4 4.6.3
bleach 3.0.2
cachetools 3.0.0
certifi 2018.11.29
chardet 3.0.4
crcmod 1.7
cycler 0.10.0
cymem 2.0.2
cytoolz 0.9.0.1
decorator 4.3.0
defusedxml 0.5.0
dill 0.2.8.2
entrypoints 0.2.3
future 0.16.0
gast 0.2.0
google-api-core 1.5.2
google-api-python-client 1.6.7
google-auth 1.4.2
google-auth-httplib2 0.0.3
google-auth-oauthlib 0.2.0
google-cloud-bigquery 1.1.0
google-cloud-core 0.28.1
google-cloud-language 1.0.2
google-cloud-storage 1.8.0
google-cloud-translate 1.3.1
google-colab 0.0.1a1
google-resumable-media 0.3.1
googleapis-common-protos 1.5.5
grpcio 1.15.0
h5py 2.8.0
httplib2 0.11.3
ideep4py 2.0.0.post3
idna 2.6
intel-openmp 2019.0
ipykernel 4.6.1
ipython 5.5.0
ipython-genutils 0.2.0
Jinja2 2.10
joblib 0.13.0
jsonschema 2.6.0
jupyter-client 5.2.3
jupyter-core 4.4.0
Keras 2.2.4
Keras-Applications 1.0.6
Keras-Preprocessing 1.0.5
Markdown 3.0.1
MarkupSafe 1.1.0
matplotlib 2.1.2
mistune 0.8.4
mkl 2019.0
more-itertools 4.3.0
mpmath 1.0.0
msgpack 0.5.6
msgpack-numpy 0.4.3.2
murmurhash 1.0.1
nbconvert 5.4.0
nbformat 4.4.0
networkx 2.2
nltk 3.2.5
notebook 5.2.2
numpy 1.14.6
oauth2client 4.1.3
oauthlib 2.1.0
olefile 0.46
opencv-python 3.4.4.19
pandas 0.22.0
pandas-gbq 0.4.1
pandocfilters 1.4.2
patsy 0.5.1
pexpect 4.6.0
pickleshare 0.7.5
Pillow 4.0.0
pip 18.1
plac 0.9.6
plotly 1.12.12
pluggy 0.8.0
portpicker 1.2.0
preshed 2.0.1
prompt-toolkit 1.0.15
protobuf 3.6.1
psutil 5.4.8
ptyprocess 0.6.0
py 1.7.0
pyasn1 0.4.4
pyasn1-modules 0.2.2
Pygments 2.1.3
pygobject 3.26.1
pymc3 3.5
pyparsing 2.3.0
pystache 0.5.4
pytest 3.10.1
python-apt 1.6.3
python-dateutil 2.5.3
pytz 2018.7
PyWavelets 1.0.1
PyYAML 3.13
pyzmq 17.0.0
regex 2018.1.10
requests 2.18.4
requests-oauthlib 1.0.0
rsa 4.0
scikit-image 0.13.1
scikit-learn 0.19.2
scipy 1.1.0
seaborn 0.7.1
setuptools 40.6.2
simplegeneric 0.8.1
six 1.11.0
spacy 2.0.18
statsmodels 0.8.0
sympy 1.1.1
tensorboard 1.12.0
tensorflow 1.12.0
tensorflow-hub 0.1.1
tensorflow-probability 0.5.0
termcolor 1.1.0
terminado 0.8.1
testpath 0.4.2
Theano 1.0.3
thinc 6.12.1
toolz 0.9.0
tornado 4.5.3
tqdm 4.28.1
traitlets 4.3.2
typing 3.6.6
ujson 1.35
uritemplate 3.0.0
urllib3 1.22
vega-datasets 0.5.0
wcwidth 0.1.7
webencodings 0.5.1
Werkzeug 0.14.1
wheel 0.32.3
wrapt 1.10.11
xgboost 0.7.post4
Tensorflowのみならずscikit-learn,theanoもデフォルトで入っています.
それに足りないものがあればpipでインストールできるのですから神.

ローカルランタイムへの接続
ではJupyter を使用してローカル ランタイムに接続し,ローカル ハードウェアでコードを実行したり,ローカル ファイル システムにアクセスしたりできるようにしましょう.
まずはjupyter notebookが入っているサーバーないしはPCで以下のコマンドを実行します.
pip install jupyter_http_over_ws
jupyter serverextension enable --py jupyter_http_over_ws
次にサーバーを起動していきます.
通常のコマンドにオプションをつけますのでaliasを使うなどして楽しましょう.
jupyter notebook \
--NotebookApp.allow_origin='https://colab.research.google.com' \
--port=8888 \
--NotebookApp.port_retries=0
コマンドを実行したらColaboratoryのメニューにある「接続済み」から「ローカルランタイムに接続」をえらんでください.

そしたら先程指定したポート番号を入力して「接続」を押してください.

もし,「jupyter_notebook_config.py」を作成して–no-browser フラグを指定してのJupyter ノートブック サーバー起動をしている場合は起動時に出てくるURLをブラウザ上で一度アクセスしてください.
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
Colaboratoryはその際のCookieを利用してアクセスします.
接続できたら先程とは違ってローカルという文字が追加されているはずです.

これで処理をローカルで実行することができるようになります.
ローカルで回すならそのままJupyter notebook使ったほうが…って思わなくもないですがPCではなくて自分のサーバーにこれをさせると強いかもしれません.
クラウドではやはり動作が遅いので.
※Firefoxをお使いの方はブラウザ側の設定を少し変更しなくてはいけませんので注意をしてください.
先程と違って
!ls -a
とするとローカルのファイルが見えます.
やはり他の処理もローカルの方が早いです.
スポンサーリンク
TPU,GPUも使えます
Notebookの設定で「ハードウェアアクセラレータ」というものがあり,あの「TPU」が使用できます(GPUもあるよ).

最&高.

さいごに
今回はGoogleの神サービスであるColaboratoryの紹介でした.
Googleさんは便利なサービスをこっそり(というか私が知らないだけなのですが)公開しているのでしっかりチェックしておいたほうがいいですね.
このサービスはiPadで有効に活躍してくれることでしょう!!!
p.s.
登壇してくださったLaurence MoroneyさんはGoogleスライド使っててめちゃくちゃよかったので私もパワポからそっちに移行しようかなって思いました.
