やりたいこと
自宅のPCから高性能GPU搭載サーバ上(非LAN環境)でJupyter Notebookを起動し、プログラムの実装、実行したい。
本文における想定環境
下図のような環境を想定する。GPUサーバは踏み台サーバからしかアクセスできない。
環境
手元のPCの環境
- Mac OS Catalina 10.15.4
- Google Chrome 83.0.4103.116
- Proxy Switchy Omega 2.5.21
- Safari 13.1
GPUサーバの環境
- Ubuntu 18.04 LTS
- Python 3.6.8
- pip 20.0.2
GPUサーバでの設定
まず、GPUサーバにjupyter notebookをインストールする。
$ pip3 install jupyter
その後、ipython
を起動すると対話型モードが開く
$ ipython
Python 3.6.8 (default, Mar 11 2020, 10:09:18)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.
ipython
の対話型モードで以下のようにコマンドを実行する。
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: [パスワードの入力]
Verify password: [パスワードの再入力]
Out[2]: [ハッシュ化済パスワード]
続いて設定ファイルを作成する。
$ jupyter notebook --generate-config
デフォルトでは ~/.jupyter/jupyter_notebook_config.py
というファイルが生成される。このファイルを以下のように編集する。
c = get_config()
# Notebook上でplotを表示できるようにする
c.IPKernelApp.pylab = 'inline'
# 受け付けるIPアドレス
c.NotebookApp.ip = '0.0.0.0'
# IPython notebookのログインパスワード
c.NotebookApp.password = [作成済みのハッシュ化済パスワード]
# 起動時にブラウザを起動させるかの設定
c.NotebookApp.open_browser = False
# ポート指定
c.NotebookApp.port = 8888
受け付けるIPアドレスはデフォルトでは'localhost'となっているが、これを0.0.0.0にしてあげればよい。これはすべてのIPアドレスからのアクセスを受け付けるという意味であり攻撃を受ける可能性があると考えるかも知れないが、もともと踏み台サーバからしかアクセス出来ないため問題ない。
これで設定が完了したので、以下のコマンドを叩くことでjupyter notebookサーバが立ち上がる。
$ jupyter notebook
手元のPCの設定
踏み台サーバをプロキシサーバとしてインターネットアクセスするように手元PCの設定を変更する必要がある。
まず、手元のPCから踏み台サーバにダイナミックポートフォワードでアクセスする。
$ ssh -D 10080 1.2.3.4
このあとWebブラウザをプロキシ経由でアクセスできるようにするには以下の2つの方法が挙げられる。
- システム環境設定を利用 (Safari)
- Proxy SwitchyOmegaを利用 (Google Chrome)
1. システム環境設定を利用 (Safari)
Mac上のシステム環境設定
->ネットワーク
->詳細
->Socksプロキシ
を設定する。Socksプロキシにチェックを入れ、以下のように設定する。
設定後、Safariのアドレスバー(URLを入力するところ)にhttp://10.1.2.3:8888
と入力するとjupyter notebookを開くことが出来る。
2. Proxy SwitchyOmegaを利用 (Google Chrome)
Chrome拡張機能からProxy SwitchyOmegaをインストールする。
上の画像からOptionsをクリックすると以下の設定画面が取得できるので、以下のように設定する。
設定後、1枚目の画像からProxyを選択することでプロキシの設定が完了する。
その後、Google Chromeのアドレスバーにhttp://10.1.2.3:8888
と入力するとjupyter notebookを開くことが出来る。