​ジョブ管理ソフト UGE の利用方法

2. ​シンプルな並列ジョブの投入方法

UGE上で並列ジョブを実行する場合、そのプロセスを複数ノードにまたがるスロットに割り当てる必要があります。ホストごとのプロセス数の指定など、様々なポリシーで要求されるスロットに対して、UGEがそれを確保する仕組みとしてPE(Parallel Environment)があります。利用できるPE は、「qconf -spl」コマンドで確認できます。「qconf -sp pe_name」とすると、PE の詳細が確認できます。MPI の実装ごとに異なるPE が作成される場合があるので注意が必要です。ここでは、mpi というPEが以下のような定義であったとします。

# qconf -sp mpi
pe_name       mpi
slots        999999
used_slots      0
bound_slots     0
user_lists     NONE
xuser_lists     NONE
start_proc_args   $sge_root/mpi/startmpi.sh $pe_hostfile
stop_proc_args   $sge_root/mpi/stopmpi.sh
allocation_rule   $fill_up
control_slaves    TRUE
job_is_first_task   FALSE
urgency_slots     min
accounting_summary  TRUE
daemon_forks_slaves TRUE
master_forks_slaves FALSE

注目するのは、allocation_rule です。以下のような値を取ります。


$fill_up

できるだけ多くのスロットが1 台のサーバー上で確保されるようにスロットを割り当てます。複数のサーバーを使用する場合もそれぞれのサーバーで最大限のスロットが確保されます。

$roundrobin

ジョブ実行の条件に適うサーバーのそれぞれについて、順番に1 スロットずつランクが割り当てられます。

$ pe_slots

必ず1 台のサーバー上で指定されたスロットが確保されます。OpenMP を利用したジョブに使用されます。

<整数値>

ジョブ実行の条件に適うサーバーのそれぞれについて、<整数値>で指定したスロットが必ず確保されます。Hybrid-MPI の実行に適しています。

ジョブスクリプトの例 - MPIジョブ

#!/bin/bash


#$ -cwd         # カレントワークディレクトリの指定
#$ -q all.q       # キューの指定
#$ -pe mpi 64       # PE の指定


mpirun -np $NSLOTS hostname #プログラムの実行
# 「$NSLOTS」は、pe で指定したスロット数が指定されます。

UGE では、多くのMPI でTight Integration という仕組みが実装され、mpirun コマンドにmachinefile を指定しなくても、ジョブを複数のスロットへ割り振ることができます。

ジョブスクリプトの例 - OpenMPジョブ

#!/bin/bash


#$ -cwd           # カレントワークディレクトリの指定
#$ -q all.q         # キューの指定
#$ -pe smp 8         # PE の指定

export OMP_NUM_THREADS=$NSLOTS
./program           #プログラムの実行

UGE では、PE のスロットを指定するだけでは、プログラムが並列実行することになりません。OpenMP ジョブでは、OMP_NUM_THREADS 環境変数などを適切に設定する必要があります。

© 2006-2019 HPC Technologies Co., Ltd. All rights reserved.