3/29 に突然、Colaboratory の接続にオプションが増えました。
下三角をクリックすると、「ローカル ランタイムに接続」が選べるようになっています。
クリックするとこのようなダイアログが表示されます。「こちらの手順」のページを見ると、Jupyter Notebook に繋げるようです。実行は、接続先のJupyter Notebookになりますが、保存されるのは、Googleドライブ上という仕組みのよう。
では、Google Colaboratoryとそっくりの、Docker インスタンスを作ってみようというのが、この記事です。
なにが嬉しいのか?
まぁ、ローカルでJupyter Notebookが動いているのに、わざわざ、Colaboratoryを使う意味は少ないはずです。
ですが、Colaboratoryで作ったNotebookを簡単にローカルで動かせるのは魅力かもしれません。
ざっくり、以下のようなメリットがあると思います
- Colaboratoryの方が、Jupyter Notebook よりも軽快で使いやすい(もっとも、Jupyter Notebook の Extensionを使いまくっている人には、便利では無いかもしれないが)
- ちょっと試すのは、Colaboratoryでやって、その後、長いタスクを試す時は、自宅のPCや、Google Compute Engine ・ AWS EC2等にインスタンスにつないで実行する、という事ができる
- Colaboratory の方が、他の人と共有・共同作業をしやすい
このような理由でで、Colaboratoryそっくりさんのイメージが必要と思い、作成しました。
実行方法
中身の前に、実行方法を説明しておきます。
1. まず、nvidia-docker2 の環境をセットアップします。
2. 以下の通り実行してDockerインスタンスを起動
$ docker run --runtime=nvidia -it --rm -p 8081:8081 --cap-add SYS_ADMIN --device /dev/fuse \
--security-opt apparmor=unconfined ikeyasu/colab-local:latest
※ --cap-add SYS_ADMIN
、--device /dev/fuse
、--security-opt apparmor=unconfined
は、Googleドライブをマウントするために必要です。(参考)
※ ポートを変える場合、-p 8081:8081
を変更してください。8082 に変える場合、 -p 8082:8081
とします。
3. ローカルランタイムに接続
- Colaboratoryの右上の接続の右にある▼をクリックし、ローカルランタイムに接続をクリック
- バックエンドポートをDocker起動時に指定したポート番号をしていして、接続をクリック
※Jupyter Notebook を動かすホストが、localhost ではない場合
Colaboratory が接続するホストは、localhsot に固定されているので、別のPCでJupyter Notebookを動かしている場合、
SSHでポートフォワードをする必要が有ります。
Mac や Linux の場合は以下のようにしてください。
$ ssh user@example.com -L 8081:localhost:8081
Windowsの場合は、PuTTY等を使ってポートフォワードしてください。参考
Dockerイメージの中身の概要
- Dockerfile : https://github.com/ikeyasu/docker-colab-local
- これを元にしている
- OSは、Colaboratoryと同じUbuntu17.10
- 但し、nvidia-docker2 用のイメージにしている(CuDNN等が入っている)
- インストール済みのPythonライブラリは全てColaboratoryと同じ(はず)
- Colaboratory と同じく、Tensorflowをインストール済み
ColaboratoryそっくりさんのDockerイメージの作成の記録
Dockerfileは以下で公開しています。
そもそも、オリジナルのColaboratoryのイメージらしきものが、以下で公開されています。
ですが、以下の点で、そのままは使えません。
- Google Cloud Container Builder でビルドする前提になっている
- Jupyter Notebookではなく、datalab というアプリを起動している(それが何なのかは未調査)
- nvidia-docker2 前提のイメージではない
なので、色々と変更しました。
- datalab のアプリ関連のインストール削除
- Jupyer Notebook を起動するようにする (tini を利用)
- ホームディレクトリの変更
- jupyter_http_over_ws をインストール
また、NVIDIA が公開している Docker イメージが、Ubuntu 16.04、17.04 しか無いため、Colaboratory がベースにしている、Ubuntu 17.10 のイメージがありません。
そのため、以下を変更したイメージを作成しました。
Docker Hub: https://hub.docker.com/r/ikeyasu/cuda/
Dockerfile: https://github.com/ikeyasu/docker-cuda
ベースとするイメージをUbuntu 17.10に変えた以外に、LD_LIBRARY_PATHを追加しています。