5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Slurmで簡単なステップ実行(逐次実行)

Posted at

要点

Slurmで1つ目のジョブjob.shの実行終了を待ってから2つ目のジョブjob2.shが流れるようにするには、「ジョブ名」を揃えた上で

sbatch job.sh
sbatch -d singleton job2.sh

とオプションを付けて投入すればよい。ただし、同じユーザー名であること。

説明

科学技術計算、いわゆる、シミュ―ションを行う時、スパコンや計算機クラスターを複数人で共用することがあると思います。そんなとき、計算(ジョブ)の順番待ちを管理してくれるサービスはジョブ管理ソフトと呼ばれます。私はフリーながらスパコンなどでも採用実績のある[Slurm]
(https://www.schedmd.com/)を利用しています。

今回は、Slurmを使って計算を投入する際に、前の計算が終わるのを待ってから次の計算(続きの計算)を実行したいという場合の簡単な投入方法について紹介します。とても長い計算を、何日にもわたって計算したいが、共用コンピュータなので一回のジョブに時間制限がある場合などに便利です。(一般にステップ実行とか逐次実行とか呼ばれますが、方言のようなもので人によって指すものが違うのでご注意ください。)

Slurmでジョブを投入するには、一般にsbatchコマンドを利用します。計算したいジョブの情報(実行バイナリのパスやMPI並列数など)をシェルスクリプト(ここではjob.sh)に記入しておいて、次のように投入します。

sbatch job.sh

今度は、この計算が終了するのを待ってから実行して欲しいjob2.shを投入する場合、普通にsbatch job2.shとすると、コンピュータに空きができれば計算が実行されてしまいます。job.shの計算が終わるまで待つには、次の2つのことをします。

(1) シェルスクリプト内で指定する「ジョブ名」を継続したいジョブで統一する。今回の例では、シェルスクリプト内ではjob.shjob2.sh次のように#SBATCH -Jの部分にジョブ名を書きますが、ここを揃えます。

#!/bin/bash
###job.sh および job2.shの中身###
#SBATCH -A project1
#SBATCH -J TestB        #ここのジョブ名を継続したいジョブで統一する
#SBATCH -n 400
#SBATCH -c 2
#SBATCH -o log
#SBATCH -e err
export OMP_NUM_THREADS=2
srun ./apppath

(2) 投入時に、継続ジョブの方には-d singletonオプションを付ける。

sbatch job.sh
sbatch -d singleton job2.sh

ただし、1つ目の投入時にはオプションは付けません。

結果として、上記の様にジョブを投入した場合のsqueueコマンドの出力を示します。NAMEの欄がジョブ名です。先行したjob.shTestB (JOBID 108)です。ステップジョブとして投入したjob2.shTestB (JOBID 109)ですが、(Dependecy)と表示されています。先行したジョブが終了してから実行されます。
一方で、さらにその後でTestA (JOBID 110)を投入しても、ジョブ名が異なるので待つことはありません。

 JOBID ACCOUNT        NAME     USER ST START_TIME          NODE NODELIST(REASON
 110   project1   TestA      user1   R 2020-07-27T14:23:19   40 node[289-328]
 108   project1   TestB      user1   R 2020-07-26T23:09:03   10 node[32-71]
 109   project1   TestB      user1   R N/A                   10 (Dependency)

最後に

Slurmは便利ですので、スパコン以外でも使えます。研究室レベルで計算機クラスターを共有する場合などにも使ってみましょう。
インストール方法はググればでます。

ただ、私の環境ですと、Intel MPIのversion 2019 Update 7以前を使った場合、scancelコマンドでジョブをキャンセルした際に、実際にはプロセスがkillされずに生き残るというバグが起こります。version 2019 Update 8で治っているようなので(確認済み)、問題のある場合はupdateしてみてください。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?