内容
- 用語の整理
- login-node への入り方
- module
- Slurmコマンド
- sbatchジョブの投げ方
- srun の使い方
Slurmとは
Slurmは、計算機資源(CPU・GPU・メモリ・ノード)を複数人で共有するためのジョブ管理システム
ユーザーは「このくらいの資源を、これくらいの時間使いたい」という要求をジョブとして投入し、Slurmが空き状況に応じて実行
よく出る用語
- ノード(node):計算機1台(CPU/GPU搭載マシン)
- パーティション(partition):ノードのグループ(キューのようなもの)
- ジョブ(job):実行単位
- ジョブステップ(step):ジョブ内での実行単位(srunなど)
- アロケーション(allocation):資源が確保された状態(対話ジョブなど)
login-node
-
ユーザー名・パスワードを入力
ssh [LDAPユーザー名]@10.226.47.95 -
ホームディレクトリは
/home/[LDAPユーザー名]になっていることが多い -
login-node:編集、軽い前処理、ジョブ投入、結果確認(重い計算はしない)
-
計算node:学習・推論など重い計算はSlurm経由で実行
ユーザーにsudo権限を与える
- dockerコマンド実行時や、singularityでsifファイルの生成が必要なときにはsudoが必要になる場合がある
- 例(Ubuntu):ユーザーを
sudoグループに追加sudo usermod -aG sudo [username] - 反映には再ログインが必要
module(環境管理)
- スパコン系の環境では、アプリケーションが Environment Modules で管理されることが多い
- 使いたいものを
module loadしてPATHなどを通すmodule load slurm
その他 module コマンド
-
現在読み込んでいる module の確認
module list -
利用できるアプリケーションのmodule名を表示
module avail -
moduleを外す
module unload xxx
.bashrcにmodule load slurmを書くと手間は減る
Slurmのよく使うコマンド
クラスタ全体の空き状況を見る
-
ノードやパーティションの状態
sinfo -
各種引数
sinfo -o "%P %a %l %D %t %N"%P: partition名%a: available%l: time limit%D: ノード数%t: 状態%N: ノード名
全体のジョブ状況を見る
-
ジョブキューを見る
squeue -
自分のジョブだけ
squeue -u $USER
ジョブの「投入 / 実行」方法
1) sbatch(バッチ投入)
- 「ジョブスクリプト」を投げて、バックグラウンド実行&ログを残す
2) srun (対話型)
- ノードを確保して、その場でコマンドを実行する 例:デバッグ、簡単な動作確認、対話環境(Jupyter等)
sbatch:ジョブファイルの投げ方
GPUジョブの例(PyTorch学習など)
#!/bin/bash
#SBATCH -p dgxh100-01
#SBATCH -N 1
#SBATCH --nodelist=dgxh100-01
#SBATCH --gres=gpu:8 # 各ノードに要求するGPUの数
#SBATCH -o ./result/test.out # 出力ファイル名
#SBATCH -e ./result/error.out
hostname
# Singularity コンテナ内で仮想環境に入り、Python スクリプトを実行
singularity exec --nv --bind /mnt/file/:/home, env.sif /bin/bash
source /etc/profile.d/conda.sh
conda init bash
source ~/.bashrc
conda activate [env]
python /home/tsuchida/sample/pyversion.py
python /home/tsuchida/sample/test.py
pwd
nvidia-smi
投入:
sbatch job.sh
よく使う SBATCH オプション
-J:ジョブ名-p:partition(キュー)-t:制限時間-N:ノード数(例:-N 1)-o/-e:ログ出力先
対話ジョブ:srun
srun(ワンショット実行)
srun --nodes=1 --gres=gpu:4 --pty -J test -p a100-40gbx4-02 bash -i
ジョブの停止・キャンセル
-
ジョブを止める
scancel <jobid> -
自分の全ジョブを止める
scancel -u $USER
状態コード
PD:Pending(待ち)R:Running(実行中)CG:Completing(終了処理中)CD:Completed(正常終了)F:Failed(失敗)CA:Cancelled(キャンセル)
