kt.log

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 処理を高速化できることが期待されます。

See also