Jetson nanoのJupyter Notebookのインストールと、外部からの接続設定

この間、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

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。