リモートサーバーのJupyter Notebookをローカルマシンで実行する方法
問題点
リモートサーバーにアクセスできるが、ローカルマシンのメモリが不足しているため、複数のJupyter Notebookを実行するのが困難です。リモートサーバーの豊富な計算リソースを活用してJupyter Notebookを実行し、タスクの効率化を図りたいという課題があります。
解決策
リモートサーバーでJupyter Notebookを実行し、ローカルマシンのブラウザからアクセスするには、SSHトンネリングを使用する方法が最も一般的で安全です。
基本的な方法
# リモートサーバーにSSH接続
ssh username@remote_server_ip
# Jupyter Notebookをバックグラウンドで起動(ブラウザ自動起動なし)
jupyter notebook --no-browser --port=8888
# SSHトンネルの確立(別ターミナルで実行)
ssh -N -L 8888:localhost:8888 username@remote_server_ip
実行後、ローカルマシンのブラウザで http://localhost:8888
にアクセスすると、リモートサーバーのJupyter Notebookを使用できます。
詳細な手順
ステップバイステップの詳細手順
リモートサーバーに接続
bashssh username@remote_server_ip
リモートでJupyter起動
bashjupyter notebook --no-browser --port=8888
ローカルでトンネル設定(別ターミナル)
bashssh -N -L 8888:localhost:8888 username@remote_server_ip
ブラウザでアクセス
- ローカルブラウザで
http://localhost:8888
を開く - トークン認証が必要な場合は、リモートターミナルに表示されたトークンを入力
- ローカルブラウザで
複数ノートブックの実行
複数のJupyter Notebookを同時に実行する場合:
# 別々のポートで複数起動
jupyter notebook --no-browser --port=8888
jupyter notebook --no-browser --port=8889
jupyter notebook --no-browser --port=8890
# 各ポート用に別々のトンネル設定
ssh -N -L 8888:localhost:8888 username@remote_server_ip
ssh -N -L 8889:localhost:8889 username@remote_server_ip
ssh -N -L 8890:localhost:8890 username@remote_server_ip
外部アクセスが必要な場合
ファイアウォール設定などで外部からの直接アクセスが必要な場合:
# リモートサーバーで特定のIPまたはすべてのインターフェースでリスン
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0
セキュリティ注意点
--ip=0.0.0.0
設定はすべてのネットワークインターフェースでリスンするため、ファイアウォール設定で適切に保護する必要があります。
環境変数の設定
パーミッションエラーが発生する場合、以下の環境変数を設定してください:
export JUPYTER_CONFIG_DIR=~/.jupyter
export JUPYTER_DATA_DIR=~/.local/share/jupyter
export JUPYTER_RUNTIME_DIR=~/.local/share/jupyter/runtime
接続の終了方法
Jupyter Notebookの停止
- リモートターミナルで
Ctrl+C
→y
で確認
- リモートターミナルで
SSHトンネルの停止
bash# ポート使用中のプロセス確認(Linux) sudo netstat -lpn | grep :8888 # ポート使用中のプロセス確認(macOS) sudo netstat -anv | grep 8888 # プロセス終了 kill <PROCESS_ID>
トラブルシューティング
よくある問題と解決策
- 接続できない: ファイアウォール設定を確認
- トークン要求される: リモートターミナルに表示されたトークンを入力
- パーミッションエラー: 環境変数
JUPYTER_*_DIR
を設定 - ポート競合: 使用されていないポート番号を指定
まとめ
SSHトンネリングを使用したリモートJupyter Notebookの実行は、ローカルマシンのリソース制限を解決する効果的な方法です。この設定により、リモートサーバーの計算能力を活用しながら、使い慣れたローカル環境で作業を続けることができます。