slurm/sbatch をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
ジョブ管理システム slurm にてジョブを発行してみる
参照先 [[https://slurm.schedmd.com/sbatch.html>+https://s...
***ジョブの分散が上手く行っているか [#sbb355fb]
ここでは計算ノードが3つあって、それぞれ4coreを持っている。
どれかのノードに1coreなジョブを流したければ
#code(nonumber){{
#!/bin/bash
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks= このジ...
#SBATCH -c 1 # --cpus-per-task= 1プロセ...
echo "===== SLURM NODELIST ====="
echo $SLURM_NODELIST
echo "===== srun hostname ====="
srun hostname
}}
結果ファイル「errors_%j.txt」の中身は
#code(nonumber){{
===== SLURM NODELIST =====
n1
===== srun hostname =====
n1
n1
n1
}}
と表示されます. 1つのノードに3つのプロセスが入りました。
次に同じく3つのプロセスを動かすのですが、1つのプロセス...
#code(nonumber){{
===== SLURM NODELIST =====
n[1-3]
===== srun hostname =====
n1
n3
n2
}}
となります。1つのノードで3core使用するので、3ノードで計...
relionのようなハイブリッドmpiの場合では、この「-c」がthre...
ただslurmの場合、リソース要求した後に mpi masterの数を加...
openpbsはその辺見逃してくれる.
***mpiプログラム [#m7ca272d]
サンプルジョブはmpiプログラムで1台もしくは複数台にまたが...
#code(c,nonumber,nooutline){{
#include <mpi.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
int world_size, world_rank, name_len;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello from rank %d of %d on host %s (PID %d)\...
world_rank, world_size, processor_name, getpid...
MPI_Finalize();
return 0;
}
}}
ファイル名を mpi_hello.c として保存して下記のようにしてコ...
#code(nonumber){{
mpicc -o mpi_hello mpi_hello.c
}}
作られたプログラム「mpi_hello」を使って各種テストを行って...
#code(nonumber){{
#!/bin/bash
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks このジョブ...
#SBATCH -c 3 # --cpus-per-task 1プロセス...
NODEFILE=$(mktemp)
scontrol show hostname $SLURM_NODELIST > $NODEFILE # m...
module load mpi
opt="--display-map --bind-to none --map-by node --oversub...
mpirun -np 4 -machinefile $NODEFILE $opt ./mpi_hello
echo "-----"
hostname
ls -l $NODEFILE
cat $NODEFILE
echo "-----"
rm $NODEFILE # 終わったら削除
}}
っで結果は下記になります
#code(nonumber){{
Data for JOB [41586,1] offset 0 Total slots allocated 3
======================== JOB MAP ===================...
Data for node: n1 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Data for node: n2 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Data for node: n3 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
========================================================...
Hello from rank 3 of 4 on host n1 (PID 47993)
Hello from rank 0 of 4 on host n1 (PID 47992)
Hello from rank 2 of 4 on host n3 (PID 15761)
Hello from rank 1 of 4 on host n2 (PID 50866)
-----
n1
-rw-------. 1 saber em 9 Nov 30 23:00 /tmp/tmp.IaLCtkTerX
n1
n2
n3
-----
}}
rank 0が n1、rank 1が n2, rank2が n3, rank3 が n1 と「--m...
***srunを使う方法 [#j8d652a8]
本来はこちらが望ましいみたい。mpirunでのnodefileとか不要...
#code(nonumber){{
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks このジョブ...
#SBATCH -c 3 # --cpus-per-task 1プロセス...
module load mpi
opt="--display-map --bind-to none --map-by node --oversub...
mpirun --mca orte_rsh_agent "srun" -np 4 $opt ./mpi_hello...
echo "-----"
hostname
echo "-----"
}}
っで結果は下記のようになります. 「--map-by node」「--over...
#code(nonumber){{
Data for JOB [42060,1] offset 0 Total slots allocated 3
======================== JOB MAP ===================...
Data for node: n1 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Data for node: n2 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Data for node: n3 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
========================================================...
Hello from rank 0 of 4 on host n1 (PID 48478)
Hello from rank 3 of 4 on host n1 (PID 48479)
Hello from rank 2 of 4 on host n3 (PID 16093)
Hello from rank 1 of 4 on host n2 (PID 51200)
-----
n1
-----
}}
srunを使うには firewall での特定ポートを解除する必要があ...
終了行:
ジョブ管理システム slurm にてジョブを発行してみる
参照先 [[https://slurm.schedmd.com/sbatch.html>+https://s...
***ジョブの分散が上手く行っているか [#sbb355fb]
ここでは計算ノードが3つあって、それぞれ4coreを持っている。
どれかのノードに1coreなジョブを流したければ
#code(nonumber){{
#!/bin/bash
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks= このジ...
#SBATCH -c 1 # --cpus-per-task= 1プロセ...
echo "===== SLURM NODELIST ====="
echo $SLURM_NODELIST
echo "===== srun hostname ====="
srun hostname
}}
結果ファイル「errors_%j.txt」の中身は
#code(nonumber){{
===== SLURM NODELIST =====
n1
===== srun hostname =====
n1
n1
n1
}}
と表示されます. 1つのノードに3つのプロセスが入りました。
次に同じく3つのプロセスを動かすのですが、1つのプロセス...
#code(nonumber){{
===== SLURM NODELIST =====
n[1-3]
===== srun hostname =====
n1
n3
n2
}}
となります。1つのノードで3core使用するので、3ノードで計...
relionのようなハイブリッドmpiの場合では、この「-c」がthre...
ただslurmの場合、リソース要求した後に mpi masterの数を加...
openpbsはその辺見逃してくれる.
***mpiプログラム [#m7ca272d]
サンプルジョブはmpiプログラムで1台もしくは複数台にまたが...
#code(c,nonumber,nooutline){{
#include <mpi.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
MPI_Init(&argc, &argv);
int world_size, world_rank, name_len;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
MPI_Get_processor_name(processor_name, &name_len);
printf("Hello from rank %d of %d on host %s (PID %d)\...
world_rank, world_size, processor_name, getpid...
MPI_Finalize();
return 0;
}
}}
ファイル名を mpi_hello.c として保存して下記のようにしてコ...
#code(nonumber){{
mpicc -o mpi_hello mpi_hello.c
}}
作られたプログラム「mpi_hello」を使って各種テストを行って...
#code(nonumber){{
#!/bin/bash
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks このジョブ...
#SBATCH -c 3 # --cpus-per-task 1プロセス...
NODEFILE=$(mktemp)
scontrol show hostname $SLURM_NODELIST > $NODEFILE # m...
module load mpi
opt="--display-map --bind-to none --map-by node --oversub...
mpirun -np 4 -machinefile $NODEFILE $opt ./mpi_hello
echo "-----"
hostname
ls -l $NODEFILE
cat $NODEFILE
echo "-----"
rm $NODEFILE # 終わったら削除
}}
っで結果は下記になります
#code(nonumber){{
Data for JOB [41586,1] offset 0 Total slots allocated 3
======================== JOB MAP ===================...
Data for node: n1 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Data for node: n2 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
Data for node: n3 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [41586,1] App: 0 Process rank...
========================================================...
Hello from rank 3 of 4 on host n1 (PID 47993)
Hello from rank 0 of 4 on host n1 (PID 47992)
Hello from rank 2 of 4 on host n3 (PID 15761)
Hello from rank 1 of 4 on host n2 (PID 50866)
-----
n1
-rw-------. 1 saber em 9 Nov 30 23:00 /tmp/tmp.IaLCtkTerX
n1
n2
n3
-----
}}
rank 0が n1、rank 1が n2, rank2が n3, rank3 が n1 と「--m...
***srunを使う方法 [#j8d652a8]
本来はこちらが望ましいみたい。mpirunでのnodefileとか不要...
#code(nonumber){{
#SBATCH -J test_run # --job-name=test_run ジョブ...
#SBATCH -o output_%j.txt # --output=output_test_run.txt
#SBATCH -e errors_%j.txt # --error=errors_test_run.txt
#SBATCH -p workq # いわゆる使用するキュー名
#SBATCH -n 3 # --ntasks このジョブ...
#SBATCH -c 3 # --cpus-per-task 1プロセス...
module load mpi
opt="--display-map --bind-to none --map-by node --oversub...
mpirun --mca orte_rsh_agent "srun" -np 4 $opt ./mpi_hello...
echo "-----"
hostname
echo "-----"
}}
っで結果は下記のようになります. 「--map-by node」「--over...
#code(nonumber){{
Data for JOB [42060,1] offset 0 Total slots allocated 3
======================== JOB MAP ===================...
Data for node: n1 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Data for node: n2 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
Data for node: n3 Num slots: 1 Max slots: 0 N...
Process OMPI jobid: [42060,1] App: 0 Process rank...
========================================================...
Hello from rank 0 of 4 on host n1 (PID 48478)
Hello from rank 3 of 4 on host n1 (PID 48479)
Hello from rank 2 of 4 on host n3 (PID 16093)
Hello from rank 1 of 4 on host n2 (PID 51200)
-----
n1
-----
}}
srunを使うには firewall での特定ポートを解除する必要があ...
ページ名:
1