3/29 に突然、Colaboratory の接続にオプションが増えました。

image.png

下三角をクリックすると、「ローカル ランタイムに接続」が選べるようになっています。

image.png

クリックするとこのようなダイアログが表示されます。「こちらの手順」のページを見ると、Jupyter Notebook に繋げるようです。実行は、接続先のJupyter Notebookになりますが、保存されるのは、Googleドライブ上という仕組みのよう。

image.png

では、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. ローカルランタイムに接続

  1. Colaboratoryの右上の接続の右にある▼をクリックし、ローカルランタイムに接続をクリック
  2. バックエンドポートを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は以下で公開しています。

https://github.com/ikeyasu/docker-colab-local

そもそも、オリジナルのColaboratoryのイメージらしきものが、以下で公開されています。

https://github.com/googlecolab/backend-container/blob/master/containers/

ですが、以下の点で、そのままは使えません。

  • Google Cloud Container Builder でビルドする前提になっている
  • Jupyter Notebookではなく、datalab というアプリを起動している(それが何なのかは未調査)
  • nvidia-docker2 前提のイメージではない

なので、色々と変更しました。

また、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を追加しています。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.