イントロ
ジョブスケジューラーslurmは使ったことはございますか?
GPUのジョブ管理に非常に便利なのですが、問題点が非常に多いツールです。
- 公式ドキュメントがうんち (見にくい)
- ユーザグループの質問のページがうんち (見にくい)
- 英語でもうんち (リソース不足)
まあ、大半の方はインストール等を自分ですることはないので、ユーザに関係あるsbatchやsrunをちょっと見ていきたいと思います。
基本だけ述べておくと
sbatch test.sh
srun python test.py
みたいな感じで流すとslurmのジョブのスケジューラーに乗ることになります。
ただ、公式ページにいけばわかりますが(https://slurm.schedmd.com/sbatch.html)、何をそんなに書くことがあるんだってぐらい非常に長いページになっています。
このページの大半はオプションになっていて、非常に多くのオプションがあることがわかります。
これらの中には気づかない宝があるかもしれない。
なので、ちょっとずつですが試して例もつけられたら、つけていこうと思います。
注意点
- USER名など一部人手で変更しております。
本編
-a --array=<indexes>
ジョブIDに任意のサブの名前をつけることができます。
sbatch --array=10 test.sh
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
827_10 pc1 test.sh user R 0:05 1 pc1
"-"をつけるとこれらを繰り返すことになります。
sbatch --array=1-10 test.sh
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
828_[3-10] pc1 test.sh user PD 0:00 1 (Resources)
828_1 pc1 test.sh user R 0:00 1 pc1
828_2 pc1 test.sh user R 0:01 1 pc1
-A --acount=<account>
アカウント名をつけることができますが、何に使うんでしょうか...?
通常使用の場合
sbatch test.sh
$ scontrol show job 886
JobId=886 JobName=test.sh
UserId=user(****) GroupId=group1(****) MCS_label=N/A
Priority=********** Nice=0 Account=(null) QOS=(null)
JobState=RUNNING Reason=None Dependency=(null)
(以下略)
使用した場合
$ sbatch --account=super test.sh
$ scontrol show job 885
JobId=885 JobName=test.sh
UserId=user(****) GroupId=group1(****) MCS_label=N/A
Priority=********** Nice=0 Account=super QOS=(null)
JobState=RUNNING Reason=None Dependency=(null)
(以下略)
(※ 「*」は数字が書いてありました。伏せています。)
Accountの項目につけた名前が出てきました。
--acctg-freq
投げるjobをどの頻度で監視するかを事前に決めることができます。
これはslurm.conf(ユーザは基本見れない設定ファイル)のJobAcctGatherFrequency
の値よりも優先されます。
--acctg-freq=<datatype>=<interval>
となっているように<datatype>はtask
、energy
、 network
、filesystem
の四種類で、<interval>は秒で指定します。
sbatch --acctg-freq=task=20 test.sh
sbatch --acctg-freq=filesystem=20 test.sh
あんまり小さい値を指定するとパフォーマンスに影響します。
デフォルトの30秒は10,000タスク以内ならそんなに気にならないとも。
随時更新予定