この間、GCP上にJupyter Notebookの環境を作る話を書きました。実は、今はGCPじゃなくてAzureで同じような環境が動いているのですが、家にはJetson nanoもあるので、これにもJupyter Notebookの環境を作って、外部から接続できるようにしていきたいと思います。
ちょうどTensorFlowでモデルを作らないといけないお仕事ができたので、それをJetson nanoでやってみようという魂胆です。
anyenv + pyenvのインストール
例によって、anyenv + pyenv環境を作ります。これは、公式サイトのインストールガイドのままで問題ありません。
次にpyenvを使ってPythonをインストールしたいのですが、Jetson nanoではAnacondaやminicondaといったバイナリで配布されているPythonディストリビューションは使えないので、ここではPython 3.7.7をインストールします。
まず、必要なパッケージのインストールしてから、Pythonのインストールです。
sudo apt install libbz2-dev libsqlite3-dev libffi-dev
/home/{username}/dev
で普段作業しているので、このように。
pip install 3.7.7
cd ~/
mkdir dev
cd dev
pyenv local 3.7.7
Jupyter Notebookのインストール
Jupyter NotebookのインストールはこれだけでOKです。
pip install jupyter notebook
次に設定ファイルの作成とパスワードの設定を行います。
jupyter notebook --generate-config
jupyter notebook password
設定ファイルは、~/.jupyter/jupyter_notebook_config.py
にあるので、下記の編集を行います。
base_url
は、後で別サーバからリバースプロキシを設定したい(さらに別サーバ自体に入っているJupyter Notebookと区別したい)ので、/jetson/
としました。
c.NotebookApp.allow_remote_access = True
c.NotebookApp.base_url = '/jetson/'
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
Jupyter Notebookの自動起動
GCPの時の記事にも書きましたが、/etc/systemd/system/jupyter.service
を作成し、下記のようにします。{USER}
と{GROUP}
については、適宜置き換えてください。
[Unit]
Description = Jupyter Notebook
[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/home/{USER}/.anyenv/envs/pyenv/shims/jupyter notebook
WorkingDirectory=/home/{USER}/dev
User={USER}
Group={GROUP}
Restart=always
[Install]
WantedBy = multi-user.target
あとは、下記のとおり。
systemctl start jupyter
systemctl enable jupyter
別サーバのNginxからリバースプロキシ
いま、ウチのネットワーク環境はこの記事に書いたようになっています。Jetson nanoは、この自宅ネットワークの中にあります。
そこで、別サーバ(Azure VM)上で動いているNginxからリバースプロキシを設定して、Jetson nanoのJupyter Notebookを呼び出します。
location /jetson/ {
proxy_pass http://192.168.1.xxx:8888;
}
Jetson nano自体がインターネット上から直接見えるなら、そのまま8888番ポートを公開するなり、Nginxのリバースプロキシの宛先をhttp://127.0.0.1:8888
にすれば良いでしょう。
あとは、Nginxにこの設定を読み込ませれば、外部からJetson nanoのJupyter Notebookにアクセスできるようになります。
systemctl reload nginx