Jupyter Notebookのジョブ実行 on ABCI
この投稿はrioyokotalab Advent Calendar 2020の投稿です。
Jupyter NotebookをABCI上で使いたい
公式の方法はこちら
Jupyter Notebookの利用 - ABCI User Guide
Jupyter Notebookは便利なもので[要出典]、ABCI上に立てれば、強力な計算資源の恩恵(4x Tesla V100 + 80 Thread + 384GBメモリ)を受けながらインタラクティブなプログラムの実行が行えます。
この利点は、データの読み込みに時間がかかるが、デバッグを細かく行いたい場面などで活かされます。また、実行内容の可視化を素早く行うことができ、実験結果の共有や、実行内容の正常性を確認することもできます。
これらの利点は、まさに機械学習と相性が良く、機械学習のためのスパコンであるABCIでこそJupyter Notebookの利便性を確保することは重要です。
しかし、公式の方法は手順を理解するためには重要な内容ですが、毎回その手順を行うのはコマンドが多く、大変です。今回は、Jupyter Notebookの起動を簡潔に行う方法を紹介します。
Jupyter Notebookの起動コマンドのジョブ実行
ABCI上でジョブ実行するためには、qsub
コマンドを使います。qsub
コマンドでスクリプトを実行するためには、ジョブスクリプトを用意する必要があります。
仮想環境の作成
公式の起動方法にもあるように、起動する前に、Pythonの仮想環境を作成する必要があります。
仮想環境の作成は、
python -m venv venv
と実行することで、手元に、venvという名前の仮想環境が作成されます。 Jupyter Notebookを起動するためには、Jupyterをpipでインストールする必要があるので、
source ./venv/bin/activate
と実行し、仮想環境を起動した後、
pip install jupyter
と実行しましょう。その他、必要なライブラリもこのタイミングでインストールしましょう。
Jupyter Notebookはアクセスする際にパスワードかトークンを求められます。ジョブ実行した場合、トークンを確認するのが面倒なので、予めパスワードを設定しておきましょう。パスワードの設定は
Running a notebook server — Jupyter Notebook 6.1.5 documentation
が参考になります。
jupyter notebook --generate-config jupyter notebook password
の後、passwordを入力することで、パスワードの設定が可能です。
Jupyter Notebookの起動
自分が使っているJupyter Notebook起動のためのスクリプトjupyter.sh
は次の通りです。
#!/bin/bash #$ -cwd #$ -l rt_F=1 #$ -l h_rt=24:00:00 #$ -o log/o.$JOB_ID #$ -j y source /etc/profile.d/modules.sh module load gcc/7.4.0 module load python/3.7/3.7.6 module load cuda/10.1/10.1.243 module load cudnn/7.6/7.6.5 module load nccl/2.5/2.5.6-1 unset JOB_ID source ./venv/bin/activate jupyter notebook --ip=`hostname` --port=8888 --no-browser --notebook-dir=./
このコマンドを用意して、
qsub -g [group_id] jupyter.sh
と実行すると、rt_Fノード上でJupyter Notebookの起動が行えます。
Jupyter Notebookへの接続
Jupyter Notebookに接続するためには、起動したJupyter NotebookがABCI上のどのノードで起動したかを特定する必要があります。
qstat
を実行し、queueの項目の下にある、gpu@g0000
などとある部分を確認しましょう。
g0000
の部分をメモしたら、自分のPCのローカルのターミナル上で、
ssh -N -L 8888:g0000:8888 [abciへsshするために叩いているHostName]
を実行しましょう。自分の環境の場合は、
ssh -N -L 8888:g0010:8888 abci
といった感じになります。
これによって、ローカルPCから、ABCI上のJupyter Notebookまでのトンネルが確保され、ローカルPCのlocalhost:8888
からJupyter Notebookへアクセスできます。
Jupyter Notebookをジョブ実行によって起動するメリットと注意点
メリット
- インタラクティブノードの確保する際の制限である、12時間を超えてJupyter Notebookを起動できる。
- インタラクティブノードが切断されることによって、実行途中の計算結果などが消えてしまうことがない。(ターミナルなどが閉じてしまっても、トンネルを通しなおせば、実行途中のノートブックが開けます。)
jupyter.sh
内に環境を書くことができる。(インタラクティブノードで、毎回、必要なモジュールをmodule load
するのはミスが起こりやすい)(機械学習において、環境の差は再現性を壊す最大の原因の一つ)- コマンドが少なくて済むので、楽
注意点
- Jupyter Notebookを起動したジョブは自動的に終了してくれないので、ポイントの無駄遣いになる可能性がある。
Jupyter Notebookの終了方法
Jupyter Notebookのジョブを終了する方法は3種類ほどあります。
方法1
ブラウザ上で、Quitボタンを押す
方法2
ABCI上で、
qdel jupyter.sh
を実行する
方法3
ABCI上で、qstat
コマンドで、Jupyter Notebookを起動したジョブIDを調べて、
qdel [ジョブID]
を実行する
まとめ
ABCI上でJupyter Notebookを
qsub -g group_id jupyter.sh
ssh -N -L 8888:g0000:8888 abci
localhost:8888
へアクセス
の3ステップで起動できます。Jupyter Notebookを楽々起動して、楽しい機械学習ライフを!