最近、機械学習にどっぷり浸かっていますが、Jupyter Notebookを使うと勉強が捗るので重宝しています。せっかくブラウザで利用できるので、ブラウザさえあればいつでもどこでも―自分のお気に入りノートPCが手元になくとも、自分の「ノート」を開けるような環境が欲しくて作ってみました。


概要

DigitalOcean上にDockerでJupyter Notebook環境を構築します。

DigitalOceanは格安のいわゆるIaaSです。時間単位の課金で、2015/11/21時点で0.86円/時($0.007/時)で利用できます。DigitalOceanのWebページ上でサーバの電源をOFFにしておけばお金がかからないので、勉強したい時だけ電源をONにするといった利用が可能です。

Dockerは言わずと知れたコンテナ型のアプリケーションデプロイツールです、ここではJupyter Notebook環境の構築を簡便化するために用います。コンテナとしてはscikit-learn等がプリインストールされたこちらのコンテナを利用します。

※ 作成する環境ではJupyter Notebookにパスワード認証でログインします。credentialな内容を本環境に配置する場合は、より強固な認証機構の導入を検討してください。

環境構築

Dropletの作成

DigitalOceanではDropletという単位でサーバを構築します。

前提として、DigitalOceanのアカウントを作成したら、こちらの記事に従って公開鍵を登録しておきます。

    1. DigitalOceanにログインして、「Create Droplet」をクリックします

以下内容でDropletを作成します(Choose an imageはDockerを選択します)

Droplet Hostname: notebooks ※任意
Choose a sizze $5/mo ※任意
Choose a datacenter region: New York ※任意
Choose an image: Docker 1.9.1 on 14.04
Select additional options:
Add your SSH keys: <事前に登録してある公開鍵の名前>

Jupyterコンテナのデプロイ

Dropletの作成が完了すると作成されたDropletのIPアドレスが表示されます。手元のPCからsshでDropletにログインします。

$ ssh root@<IPアドレス>

作業スペースのディレクトリを作成します 1

$ mkdir /opt/notebooks # 場所は任意
$ chmod a+w -R /opt/notebooks

scikit-learn等機械学習に必要なパッケージが含まれたJupyterコンテナを起動します

$ docker run -d –restart always -p 8888:8888 -v /opt/notebooks:/home/jovyan/work -e PASSWORD=<任意のパスワード> jupyter/datascience-notebook

ブラウザでhttp://<IPアドレス>:8888にアクセスして確認します


後は、いつもの通りにJupyter Notebookを使用してみてください。一通り作業が終わったら、DigitalOceanのWeb上から「Power off」してみます。後で「Power on」すると、自動的にJupyter Notebookが立ち上がります。

昔、「Emacsのorgモードって文章を書くには適しているが、もっと気軽にプログラムコード実行できないものか、さらにその結果も反映できないものか」って思ってた頃がありましたが、Jupyter Notebookはこれを叶えてくれるツールだなと思います。そういう意味で今の学生さんは幸せだと思うし、学校でもJupyter Notebookを積極的に導入したら良いのではと思う今日このごろです

自分は/opt/notebooksをgitで管理してみています ↩