Ubuntu16.04LTSにJupyter Notebookを導入しシステム起動時に自動起動する設定を行います。Jupyter NotebookではPythonをインタラクティブに実行し結果をグラフィカルに出力するこができます。
前々回の記事で作成した機械処理学習環境はTerminalから操作するCUI環境でしたのでPythonコードの実行結果は文字列でしか確認できませんでした。やはりグラフやイメージで結果が出力された方が理解も進みます(多分)。また巷の情報によるとJupyter Notebookは多機能で使い易く現時点で機械処理学習開発環境のデファクトスタンダードになっているようです。これはもう導入するしかないでしょう。
目次
1.コンフィグファイル準備
実は、前々回の記事で機械処理学習環境を構築した際に、Jupyter NotebookはAnacondaとともにインストールされています。あとは環境設定をするだけで動作します。以下の手順で進めていきます。
(1)環境ファイル作成
以下のコマンドで環境ファイルのテンプレートを作成します。
1 |
$ jupyter notebook --generate-config |
(2)パスワードハッシュ値取得
以下の通りタイプしてJupyter Notebookログイン時に使用するパスワードのハッシュ値を出力します。
1 2 3 4 |
$ python -c "import IPython; print(IPython.lib.passwd())" Enter password: Verify password: sha1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
Enter passwordとVerify passwordと出るので、適切なパスワードを入力します。入力後sha1から始まる文字列が表示されます。これは後程、設定ファイル内に貼付けしますのでsha1を含めてコピーして取っておきます。
2.コンフィグファイル設定
作成したコンフィグファイルを以下の通り修正します。
1 2 3 4 5 6 7 |
$ vi ~/.jupyter/jupyter_notebook_config.py #以下の行を最終行に追加 c = get_config() c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False c.NotebookApp.port = 8080 c.NotebookApp.password = 'sha1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' |
8080ポートで接続待ち、接続元IPは「*」でどこからでも接続できるようにしています。
3.ファイアウォール設定
Ubuntuにufwを導入している場合で外部から接続する場合はJupyter Notebookが使用する8080ポートを開放する必要があります。
1 2 3 4 5 6 |
$ sudo ufw allow 8080 $ ufw status To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8080 ALLOW Anywhere |
allowで開放しstatusで状況を確認しています。8080 ALLOWの行があればOKです。
4.Jupyter Notebook起動
ターミナルから以下のコマンドでJupyter Notebookを起動します。起動するとターミナルは占有されますのでバックグラウンドで動作させるか、別ターミナルを用意するなどの準備をしておきましょう。
1 |
$ jupyter notebook |
5.動作確認
UbuntuでのJupyter Notebookはブラウザで動作します。FirefoxやIe等のブラウザを使用してインストールしたサーバの8080ポートを開きます。
(1)ログイン
接続すると以下のログイン画面が表示されますので設定したパスワードでログインします。
(2)Note作成
以下のとおりPython3を選んで新しいノートを作成します。
(3)Pythonコード実行
試しにSin関数をグラフ出力するコードをタイプしてみます。
コード入力後上記↓で示した「再生ボタン」押下でコードを実行します。
(4)実行結果
Sin関数のグラフが出力されました。
(5)使用したコード
1 2 3 4 5 6 7 8 |
%matplotlib inline import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 4*3.14, 0.1) y = np.sin(x) plt.plot(x,y) plt.show() |
僅か7行でグラフ出力されました。詳細説明は省略です。
6.Jupyter Notebook自動起動
毎回ターミナルからJupyter notebookを起動するのは面倒なのでシステム起動時に自動起動するようSystemdでサービス化します。動作中のJupyter Notebookが存在する場合はCtrl+Cで停止しておきます。
(1)パス確認
Jupyter notebookのインストールされているパスを確認します。
1 2 |
$ which jupyter /home/username/.pyenv/versions/anaconda3-5.0.0/bin/jupyter |
上記”username”はインストール環境で異なる値になります。
(2)設定ファイル作成
Unit定義ファイルを作成しサービスとして登録します。設定値の詳細は下記設定ファイルサンプル内のコメント欄を参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo vi /etc/systemd/system/notebook.service [Unit] Description = Jupyter Notebook [Service] Type=simple PIDFile=/var/run/jupyter-notebook.pid ExecStart=/home/username/.pyenv/versions/anaconda3-5.0.0/bin/jupyter notebook # 'Jupyterまでの絶対パス' notebook WorkingDirectory=/home/username # 'Anacondaを導入したユーザーのホームディレクトリのパス' User=username # 'Anacondaを導入したユーザー名' Group=usergroup # 'Anacondaを導入したユーザーグループ' Restart=always [Install] WantedBy = multi-user.target |
(3)Unitの一覧に存在するか確認
notebook.serviceがUnit一覧に存在することを確認します。
1 2 |
$ sudo systemctl list-unit-files --type=service |grep notebook notebook.service disabled |
notebook.serviceが見つかりました。
(4)起動/停止の確認
サービスとして起動できることを確認します。以下の通り起動できました。
1 2 3 4 5 6 7 8 9 |
$ sudo systemctl start notebook $ sudo systemctl status notebook ● notebook.service - Jupyter Notebook Loaded: loaded (/etc/systemd/system/notebook.service; disabled; vendor preset Active: active (running) since 日 2017-10-29 18:21:27 JST; 38s ago Main PID: 25743 (jupyter-noteboo) Tasks: 1 Memory: 87.8M CPU: 1.077s |
stopコマンドで停止できることを確認します。以下の通り停止できました。
1 2 3 4 5 |
$ sudo systemctl stop notebook $ sudo systemctl status notebook ● notebook.service - Jupyter Notebook Loaded: loaded (/etc/systemd/system/notebook.service; disabled; vendor preset Active: inactive (dead) |
(5)起動/自動起動設定
サービスとして動作確認ができましたので、起動し自動起動の設定をします。
1 2 3 |
$ sudo systemctl start notebook $ sudo systemctl enable notebook Created symlink from /etc/systemd/system/multi-user.target.wants/notebook.service to /etc/systemd/system/notebook.service. |
これでシステムを起動すればJupyter Notebookが直ぐに使用できるようになりました。
7.参考にさせて頂いたサイト
ディープラーニング実践入門 〜 Kerasライブラリで画像認識をはじめよう!
ありがとうございます。