How to connect a remote Jupyter server running as a Docker container from Visual Studio Code
Jupyter を Visual Studio Code から利用することはあると思いますが、基本はローカル端末上で動作する Jupyter またはローカル端末上で動作する Docker コンテナ上で動作する Jupyter を利用する形態かと思います。
Jupyter はサーバ・クライアント構成であるため、クライアントとなる Web アプリケーションや Visual Studio Code は、リモートの Jupyter サーバに接続して、そちらに計算処理をさせることもできます。これは、リモートにより高スペックなマシンがある場合に有効です。
今回は、そのやり方について解説します。
前提
ローカル・リモート共通
- Docker がインストールされている
jupyter/datascience-notebook
の Docker コンテナが動作している
ローカル端末のみ
- Visual Studio Code がインストールされている
- Visual Studio Code に 以下のエクステンションがインストールされている
- Python
- Remote - Containers
- Visual Studio Code から Remote - Containers エクステンションを利用して Docker コンテナに接続できている
- リモート端末の TCP 8888 番にアクセスできる
免責
- シングルユーザーしかいないローカルネットワークでの構築を想定しています。リモート端末の Jupyter の構成に関して、手順の簡単化のため、以下の通りとします。
- SSL は使用しません。構成によってはセキュリティのため SSL を構成する必要があります。
- Token も設定しません。Token かパスワード認証の設定を検討すべき場合もあります。
- XSRF 対策を無効にします。無効にせず、APIアクセスで Cookie を使用できるようにした方が本来はベターです。
手順
リモート端末側のセットアップ
リモート端末の Jupyter にブラウザでアクセスする
Terminal を起動する
.jupyter/jupyter_notebook_config.py をエディタで開く
c.NotebookApp.disable_check_xsrf = False の行を見つける
c.NotebookApp.disable_check_xsrf = True に書き換える
コンテナを再起動する
ローカル端末側のセットアップ
Visual Studio Code で適当な Notebook を開く
画面右下の Jupyter Server: local をクリックする
Existing
をクリックします。
リモート端末の Jupyter Server の URI を入力する
画面右下の表示が Jupyter Server: Remote に変化したことを確認します。
プロンプトに従って Reload する
ローカル端末側での動作確認
Jupyter Server がリモートになっていることを確認する
画面右下の Jupyter Server: Remote をクリックし、入力フォームのプレースホルダーが Current: {リモート端末上の Jupyter の URI}
となっていることを確認します。
適当な Python コードを書いたセルを実行する
Python のインタプリタを指定する
Python 3 (ipykernel) を選択します。
実行結果を確認する
正常に完了したことを確認します。
まとめ
Visual Studio Code からリモート端末上の Jupyter に接続し、コードを実行する方法を解説しました。
筆者は仕事で Intel CPU の MacBook Pro を使用していますが、プライベートでの主力端末は M1 Mac mini です。この方法をとることで、仕事用の Mac 上での Deep Learning 処理を高速化できることが期待されます。