SLURMの使い方

SLURMとはオープンソースソフトウェアの、ジョブスケジューラーの1つで、ohtakaで計算ジョブを投入する際にしようします。 以下にSLURMで主に使用するコマンドの簡単な使い方を記述します。

コマンド

sbatch

ジョブを投入するときに使用します。 run.shという名前のジョブスクリプトを実行するときには以下のコマンドを実行します。

sbatch run.sh

squeue

ジョブの実行状況を確認するときに使用します。 以下のコマンドを実行すると、実行中のジョブの情報が表示されます。

squeue

scancel

ジョブをキャンセルするときに使用します。 scancelを実行してからjob_id(JobID以下に表示)を確認し、以下を実行します。

scancel <job_id>

scontrol

投入した、あるいは実行中のジョブの詳細を表示するときに使用します。

scontrol show job <job_id>

sacct

投入した、あるいは実行中のジョブの詳細を表示するときに使用します。 実行中のジョブの経過時間と実行時間の上限は以下のようにして表示することができます。

sacct -j <job_id> --format=JobID,Elapsed,Timelimit

詳細はmanコマンドを実行してマニュアルを読むのが良いでしょう。

ジョブスクリプトの例

デバッグ用キュー/パーティション(i8cpu)を使用してSTATEを実行する場合のサンプルのジョブスクリプト。

#!/bin/sh

#SBATCH -J state_test
#SBATCH -p i8cpu
#SBATCH -N 2
#SBATCH -n 64
#SBATCH -c 4
#SBATCH -t 00:30:00

module purge
module load oneapi_compiler/2022.1.2 oneapi_mpi/2022.1.2 oneapi_mkl/2022.1.2

export FI_PROVIDER=psm3

srun ./STATE < nfinp_1 > nfout_1

ここでプログラム`STATE`と擬ポテンシャル(あるいはそれらのシンボリックリンク)は作業ディレクトリにあり、入力(出力)ファイルは`nfinp_1`(`nfout_1`)とします。

各行の簡単な説明

  • 利用するシェルの指定
    #!/bin/sh
  • ジョブの名前の。`-J`以降の文字列が`squeue`などを実行する際に表示されます。
    #SBATCH -J state_test
  • パーティション(キュー)の指定 使用可能なパーティションに関してはマニュアルあるいはリンクを参照して下さい。
    #SBATCH -p i8cpu
  • 使用するノード数の指定
    #SBATCH -N 2
  • MPI並列数の指定
    #SBATCH -n 64
  • スレッド並列数の指定 MPI並列数とスレッド並列数は使用するノード数と矛盾しないようにする必要があります。
    #SBATCH -c 4
  • ジョブの最大実行時間の指定 実行時間は指定したパーティションの上限値以下にする必要があります。
    #SBATCH -t 00:30:00
  • ロードするモジュールの指定 ``module purge``は必ずしも必要とは限りません。 一方、利用するコンパイラとライブラリはプログラムをビルドしたものと同じものを指定する必要があります。
    module purge
    module load oneapi_compiler/2022.1.2 oneapi_mpi/2022.1.2 oneapi_mkl/2022.1.2
  • ohtaka上でoneAPIを使用する際、特にoneAPIのMPIを使用する際の環境変数の設定
    export FI_PROVIDER=psm3
  • MPIで並列化されたプログラムの実行。mpirunではなくsrunを使用して下さい。
    srun ./STATE < nfinp_1 > nfout_1

使用するノード、MPI、およびスレッド並列数について

ohtakaのCPUノードは2 CPU(64 core)で構成されており1ノードあたり128 coreが利用可能です。 従って、例えば2ノード使用する場合、合計256 coreの利用が可能です。その範囲内でMPI並列数×スレッド並列数が256以下になるように並列数を指定する必要があります。以下のような可能性が考えられます。

#SBATCH -N 2
#SBATCH -n 64
#SBATCH -c 4

以下のような並列数の指定も可能でしょう。

#SBATCH -N 2
#SBATCH -n 128
#SBATCH -c 2

MPI/スレッド並列数は実行時間を比較して最適なものを指定するのが良いでしょう。 計算規模が大きい場合にはメモリが不足してプログラムの実行できない場合があります。 そのような場合にはスレッド並列数を大きくすることでプログラムを実行できるようになることがあります。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS