#author("2025-06-20T09:55:22+09:00","default:StatE","StatE")
#author("2025-09-02T09:23:59+09:00","default:StatE","StatE")
* SLURMの使い方 [#e8a462fa]
SLURMとはオープンソースソフトウェアの、ジョブスケジューラーの1つで、ohtakaで計算ジョブを投入する際にしようします。
以下にSLURMで主に使用するコマンドの簡単な使い方を記述します。
** コマンド [#a67a8015]
*** sbatch [#s4ef31ee]
ジョブを投入するときに使用します。
run.shという名前のジョブスクリプトを実行するときには以下のコマンドを実行します。
 sbatch run.sh
*** squeue [#ub5da76a]
ジョブの実行状況を確認するときに使用します。
以下のコマンドを実行すると、実行中のジョブの情報が表示されます。
 squeue
*** scancel [#w2f4168a]
ジョブをキャンセルするときに使用します。
scancelを実行してからjob_id(JobID以下に表示)を確認し、以下を実行します。
 scancel <job_id>
*** scontrol [#o24028e7]
投入した、あるいは実行中のジョブの詳細を表示するときに使用します。
 scontrol show job <job_id>
*** sacct [#ab0382f6]
投入した、あるいは実行中のジョブの詳細を表示するときに使用します。
実行中のジョブの経過時間と実行時間の上限は以下のようにして表示することができます。
 sacct -j <job_id> --format=JobID,Elapsed,Timelimit
詳細はmanコマンドを実行してマニュアルを読むのが良いでしょう。

*** pstat [#xfbaa73f]
これはSLURMのコマンドではありませんが、東京大学物性研究所スーパーコンピュータohtaka上で各パーティションのジョブの数を確認することができるコマンドです。
** ジョブスクリプトの例 [#ac94f9a8]
デバッグ用キュー/パーティション(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
 export MKL_NUM_THREADS=1
 
 srun ./STATE < nfinp_1 > nfout_1

ここでプログラム`STATE`と擬ポテンシャル(あるいはそれらのシンボリックリンク)は作業ディレクトリにあり、入力(出力)ファイルは`nfinp_1`(`nfout_1`)とします。
*** 各行の簡単な説明 [#c3157c4a]
- 利用するシェルの指定
 #!/bin/sh
- ジョブの名前の。`-J`以降の文字列が`squeue`などを実行する際に表示されます。
 #SBATCH -J state_test
- パーティション(キュー)の指定
使用可能なパーティションに関してはマニュアルあるいは[[リンク>計算機システムの使い方/ohtaka_en/partitions]]を参照して下さい。
 #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
- ohtaka上でMKL、oneAPIのMPI、openMPを使用する際に必要な環境変数の設定
 export MKL_NUM_THREADS=1
以前はこの環境変数の存在を知らず、突然MKL、openMPに関すると思われるエラーでランダムにクラッシュが起こっていました。色々な組み合わせは試していませんが、いまのところ1にしておくのが安全なように思えます。少なくともMKL_NUM_THREADS=1、OMP_NUM_THREADS>1にして実行しても問題は起きていません。
- MPIで並列化されたプログラムの実行。mpirunではなくsrunを使用して下さい。
 srun ./STATE < nfinp_1 > nfout_1
*** 使用するノード、MPI、およびスレッド並列数について [#e9050aa8]
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