はじめに
ノートPCからデスクトップPCにSSH接続を行う際、VSCodeを終了するとJupyterのカーネルも同時に終了してしまいます。ノートPCの電源を切ったり、SSH接続が切れてもカーネルは終了させずにバックグラウンドで実行を続けることが、本記事の目的です。
どんな時に使えるの?
私は趣味でKaggleに参加しており、MacBookから自宅の自作PCにSSH接続するという形で運用しています。この方法により、使い慣れたMacBook(のVSCode)でコーディングを行いつつ、自作PCの計算資源を活用できます。しかし、深層学習モデルの学習といった実行時間が長い処理を行う場合、MacBookがスリープしたり回線が切断されると、その学習も途中で停止してしまいます。このような場合は本記事の方法によりVSCodeのJupyterをバックグラウンド実行させておくことで、学習を止めずに回し続けることができます。
開始時
1. VSCodeサーバーを立ち上げる
- デスクトップ側のターミナルで以下のコマンドを実行し、Jupyterサーバーを立ち上げる。
nohup jupyter notebook &
- カレントディレクトリに
nohup.out
ファイルが生成されるので、中に記載されているJupyterのリンクをコピーする。- リンクの例:
http://localhost:8890/?token=be27f057c61ef5a258fc9f1cc989905b9085450e34305f44
- なお、上記のリンクはGitHubのissueから取ってきたものです。
- 注) リンクが見つからない場合は、rootユーザーとして実行するとリンクが出力される可能性があります。
nohup jupyter notebook --allow-root &
- リンクの例:
2. VSCodeでURLを指定する
- VSCodeのJupyterファイルを開き(今回はexp001.ipynb)、右上にある
カーネルの選択
をクリック -
別のカーネルを選択
→既存の Jupyter サーバー
→ 先ほどコピーしたリンクをペースト
これでVSCodeを落としたりSSH接続を切ってもカーネルが切れなくなりました。
終了時
- デスクトップ側のターミナルで以下のコマンドを実行することで、起動中のサーバーのポート番号を調べる。
jupyter notebook list
- サーバーを落とす(今回はポート番号が8890でした)。
jupyter notebook stop 8890
以上です。簡単ですね!
備考
- GitHubのissueによると、上記の作業は各notebookごとに行う必要があります。
Is this tedious to do for every individual notebook one wishes to persist? Yes, absolutely. Is it less tedious than having to rerun remote notebooks anytime your computer snoozes/sleeps? ¯(ツ)/¯