Jupyter notebookをリモートで利用する

投稿者: | 2018-07-24

分析環境の定番であるJupyter notebookで

  • 分析処理を実行するマシン(サーバ側)
  • 分析結果を確認するマシン(クライアント側)

と分けて運用する方法を紹介します。

私の場合だとパラメタチューニングで大量の並列処理をする時やGPU処理をする時に

  • 自室に置いてある分析用マシンで処理
  • ノートPCから処理の指示/結果確認

ということをしています。ちょっとした設定をするだけで重い計算を別マシンで実行し、結果を手元のPCで確認できるという快適な分析環境を構築できます。

前提

以下の構成で試しています。なお、サーバ/クライアントマシンは同一LAN内にあることを前提とします[1]クライアントが外部(WAN)でもリモートアクセス可能ですがルータの設定が必要なためここでは割愛します。

サーバ側

  • OS: Ubuntu 18.04
  • Anaconda 5.2.0
  • Python 3.6
  • IPアドレス: 192.168.1.2

の環境で試していますがAnacondaが入っていれば他のOSでも動くと思います。

なお、サーバを仮想マシン(WM Player)で動かす場合、他のマシンから見えるようにネットワーク接続を「ブリッジ接続」にしておきます。

クライアント側

Mac Book Air(OS: High Sierra)とWindows 7マシンからChromeで確認しています。

クライアント側はAnacondaを入れていなくてもChromeなどJupyter notebookが動作するブラウザが入っていれば動くと思います。

サーバ側の設定

パスワードのsha1値生成

まず

$ ipython3

でPythonシェルを起動し

> from notebook.auth import passwd
> passwd()

としてパスワードを入力します。パスワードに対応するsha1値が出力されるのでいったんメモ帳等に記録し

> quit()

でPythonシェルを終了します。

コンフィグファイルの設定

サーバ側のhomeディレクトリ配下に「.jupyter/jupyter_notebook_config.py」があるかを確認し、ない場合は

$ jupyter notebook --generate-config

を実行しコンフィグファイルの生成します。

「.jupyter/jupyter_notebook_config.py」をエディタで開きコメントアウトされている以下の行のコメントを外し以下の設定を行います。

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.password = u'sha1:XXXXXXX' # 先ほど記録したsha1値を記載

各設定項目の意味は

  • ip: アクセスを受け入れるIPアドレス。’*’だとすべて受け入れる
  • open_browser: 起動時にブラウザを立ち上げるか。不要(False)を設定
  • port: Jupyter notebookに割り当てるポート番号
  • password: パスワードのsha1値を設定

になります。

Jupyter notebookの起動

サーバ側で

$ jupyter notebook

を実行するとJupyter notebookが起動されます。なお、長時間利用する場合、ssh接続が切れるとjupyter notebookも終了してしまうのでnohupコマンドを使い

$ nohup jupyter notebook &

とすると接続が切れてもjupyter notebookを利用することができます。

クライアント側からのアクセス

クライアント側でブラウザを起動し「サーバ側のアドレス:ポート番号」

http://192.168.1.2:8888/

を入れてアクセスし認証が通るとJupyter notebookが利用できます。

Notebookを作成するとその処理はサーバ側で実行され、結果をクライアント側で確認できます。なお、Notebook自体(ipynbファイル)はサーバ側に保存されているのでNotebookをクライアントに持ってきたい際はscp等で移すようにしましょう。

脚注

脚注
1 クライアントが外部(WAN)でもリモートアクセス可能ですがルータの設定が必要なためここでは割愛します。

スポンサーリンク


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です