UGEのその他の利用方法について
以下に基本的利用方法で記載しなかった、その他のUGE利用方法について記述します。各コマンド、利用法の詳細については、マニュアルページ(スーパーコンピュータユーザのみ参照可能)のUGEマニュアルも参照してください。
・MPIジョブの投入方法
・ジョブの使用メモリ量を指定してジョブを投入する方法
・マルチスレッド動作、複数プロセスを起動するジョブの投入方法
・マルチスレッド、MPI並列動作をするジョブに対して、メモリ要求量を明示する場合の注意事項
・アレイジョブの投入方法
・GPUを使用するジョブの投入方法
・クラスタ全体の混雑状況の確認方法
・ジョブの実行結果の確認方法
・GUIでジョブを投入したい場合
MPIジョブの投入方法
すべての計算ノードは、UGEの管理下に有る為MPIジョブ起動時にはMPI環境とUGEを連携させる必要が有ります。 MPIプログラムとUGEを連携させる為の環境としてparallel environment(PE)という環境をUGEに設定しておりこれを利用して ジョブを投入して頂きます。本システム上では以下の種類のPEを設定しています。
PE名 | 設定されたPEの意味(スロットの割り当てポリシー) |
---|---|
mpi | 極力多数のノード上に子プロセスを起動しようとする。 |
mpi-fillup | 極力少数のノードに子プロセスを充填して起動しようとする。 |
mpi_4 | 1ノード当り4プロセスを起動するようにする。 |
mpi_8 | ノード当り8プロセスを起動しようとする。 |
プロセスのメモリ使用量など、計算資源の利用状況を検討した上で、上のPEから利用したい環境を選択します。 選択したら、それをジョブスクリプトに"-pe pe環境名 並列数"という形式で記述します。
#$ -S /bin/bash #$ -N Ray #$ -pe mpi-fillup 60-80 /usr/local/bin/mpirun -np $NSLOTS -machinefile $TMPDIR/machines /home/username/Ray-1.7/Ray \ -p /home/username/scratch/SRR033552_1.fastq /home/username/scratch/SRR033552_2.fastq \ -p /home/username/scratch/SRR033553_1.fastq /home/username/scratch/SRR033553_2.fastq \ (以下略)
MPIプログラムを起動する時、プログラムをどのくらいの並列数で起動するかを指定する並列数と、どのホストに 起動するかを定義するマシンファイルをmpirunコマンドに渡す必要が有ります。 UGE環境下では指示行に-peを指定すると、UGEが指定されたポリシーに適合する空いているノード(ジョブスロット)を確認し、 並列数($NSLOTS)とマシンファイル($TMPDIR/machines)を自動生成し、これをジョブスクリプトに与えます。 上記の例では、並列数を範囲指定しています。範囲指定をした場合、指定した範囲の中で空いているスロット数 をUGEが判別し、並列数とマシンファイルを自動生成します。
ジョブの使用メモリ量を指定してジョブを投入する方法
ジョブ管理システムに投入されるジョブが利用可能な仮想メモリ容量は、デフォルトでは8GBに制限されています。 この制限を超えるような仮想メモリ容量を要求するようなジョブは、ジョブ投入時に明示的に必要な仮想メモリ容量を 要求して投入します。以下のように"-l"オプションで指定してジョブを投入します。
[username@at027 ~]$ qsub -l s_vmem=8G -l mem_req=8G test.sh
この例では1ジョブで8GBのメモリの使用を要求してジョブを投入しています。ここで指定している"s_vmem"、"mem_req"は 以下の意味を持ちます。
項目名 | 意味 |
---|---|
s_vmem | 投入ジョブが指定する仮想メモリの上限値を宣言する。ここで宣言した値はジョブの実行環境に適用され、 この値を超えてジョブが動作しようとするとジョブがkillされる。 |
mem_req | 使用するメモリの量を宣言する。 |
また例えば、Mediumノード上で 1ジョブで128GBのメモリを使用するジョブを投入する場合は、
[username@at027 ~]$ qsub -l s_vmem=128G -l mem_req=128G -l medium test.sh
というようにメモリを明示的に要求してジョブを投入します。
マルチスレッド動作、複数プロセスを起動するジョブの投入方法について
プロセスとしては1つだが、マルチスレッド動作をしてCPUコアを複数使うようなプログラムや、MPI並列プログラムでは ないが親プロセスが子プロセスを複数起動して処理を行うようなプログラムの為に、"def_slot"という PEを定義しています。以下のように、def_slotの後に利用するコア数(スロット数)を指定します。
qsub -pe def_slot 4 test.sh
マルチスレッド、MPI並列動作をするジョブに対して、メモリ要求量を明示する場合の注意事項
メモリ要求を明示するジョブ投入方法と、PE環境を併用する場合の注意点についてご説明します。MPI並列環境(mpi)、スレッド並列環境(def_slot) を指定して、かつ、-l s_vmem、-l mem_reqを指定した場合、並列環境で指定した並列数と指定したメモリ量が掛け合わされた容量のメモリをシステム に要求してジョブが投入されます。例えば、
-pe def_slot 8 -l s_vmem=8G -l mem_req=8G -pe mpi_fillup 8 -l s_vem=8G -l mem_req=8G
と指定した場合、8GBのメモリを使用するプロセスを8個起動することを指定した意味となり、ジョブが使用するメモリ総量として8×8=64GBを指定したことになります。 その点について注意した上で指定する要求メモリ量を決定してください。
アレイジョブの投入方法
UGEはアレイジョブと呼ばれる概念を持ちます。 一度に多数のジョブをシステムに投入したい場合(パラメトリックスタディでパラメータを変えながらジョブを投げたい場合) はアレイジョブ機能を利用してください。決して、多数のジョブをそのまま投入しようとしないでください。システムを過負荷に陥れる場合があります。
例えば以下のように-tオプションを指定して投入します。 "-t 1-6:2"は、最小インデックス番号を1、最大インデックス番号を6とし、それに対して":2"を付加することで、1つ飛ばしのインデックス 番号を付けることを指定しています。この為、インデックス番号としては、1,3,5が指定されたことになります。これはqstatの出力の 各行の末尾に、タスクIDとして参照が可能となっています。
[username@at027 ~]$ qsub -t 1-6:2 arraytest.sh Your job-array 10000.1-6:2 ("arraytest.sh") has been submitted [username@at027 ~]$ qstat job-ID prior name user state submit/start at queue jclass slots ja-task-ID ----------------------------------------------------------------------------------------------------------------------------- 10000 0.25000 arraytest. username r 03/04/2019 20:31:57 epyc.q@at095 1 1 10000 0.25000 arraytest. username r 03/04/2019 20:31:57 epyc.q@at095 1 3 80430 0.25000 arraytest. username r 03/04/2019 20:31:57 epyc.q@at095 1 5
タスクIDは、ジョブスクリプト内で、SGE_TASK_IDという変数によって参照可能です。この為、アレイジョブ内の各タスクは、 SGE_TASK_IDの値を確認してそれぞれ異なる処理を行う。ということが可能です。例えばパラメトリックスタディをしたい場合、 ジョブスクリプト内で、SGE_TASK_IDを参照して、入力データを分割して切り替えるという処理を記述することによって対応することが 可能になります。
GPUを使用するジョブの投入方法
GPUを使用するジョブを投入する場合、"-l gpu"オプションの他"-l cuda=n"(nは使用するGPU数を指定。上限は4)オプションを付与します。"-l cuda=n"オプションを付与しない場合、ジョブはgpu.qに投入されますが、GPUは使用できません。
例えば2つのGPUを使用する場合、以下のように指定します。
[username@at027 ~]$ qsub -l gpu -l cuda=2 gputest.sh Your job 10000 ("gputest.sh") has been submitted
GPUはジョブから、"cuda=n"で指定した数だけ参照可能です。
[username@at027 ~]$ cat gputest.sh #!/bin/bash #$ -S /bin/bash nvidia-smi [username@at027 ~]$ qsub -l gpu -l cuda=1 gputest.sh Your job 10001 ("gputest.sh") has been submitted [username@at027 ~]$ qsub -l gpu -l cuda=2 gputest.sh Your job 10002 ("gputest.sh") has been submitted [username@at027 ~]$ qsub -l gpu -l cuda=4 gputest.sh Your job 10003 ("gputest.sh") has been submitted [username@at027 ~]$ cat gputesh.sh.o10001 Wed Mar 4 20:00:00 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 396.26 Driver Version: 410.66 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:15:00.0 Off | 0 | | N/A 32C P0 39W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ [username@at027 ~]$ cat gputesh.sh.o10002 Wed Mar 4 20:00:00 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 396.26 Driver Version: 410.66 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:15:00.0 Off | 0 | | N/A 29C P0 39W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-SXM2... On | 00000000:16:00.0 Off | 0 | | N/A 30C P0 39W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ [username@at027 ~]$ cat gputesh.sh.o10003 Wed Mar 4 20:00:00 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 396.26 Driver Version: 410.66 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... On | 00000000:15:00.0 Off | 0 | | N/A 32C P0 38W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 Tesla V100-SXM2... On | 00000000:16:00.0 Off | 0 | | N/A 32C P0 39W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 2 Tesla V100-SXM2... On | 00000000:3A:00.0 Off | 0 | | N/A 30C P0 39W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 3 Tesla V100-SXM2... On | 00000000:3B:00.0 Off | 0 | | N/A 31C P0 37W / 300W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
クラスタ全体の混雑状況の確認方法
各キューのジョブの投入状況、キューの負荷状況等、全体を把握するのには、"qstat -g c"として確認することが 出来ます。
[username@at027 ~]$ qstat -g c CLUSTER QUEUE CQLOAD USED RES AVAIL TOTAL aoACDS cdsuE -------------------------------------------------------------------------------- epyc.q 0.00 1 0 4159 4224 0 64 gpu.q 0.00 0 0 64 112 0 48 intel.q 0.00 0 0 1472 1472 0 0 login.q 0.00 4 0 380 384 0 0 login_gpu.q 0.00 0 0 48 48 0 0 medium.q 0.00 0 0 800 800 0 0 short.q 0.00 0 0 128 224 0 96
ジョブの実行結果の確認方法
ジョブ実行終了後、そのジョブが使用したリソース量等の情報を確認するには"qreport"コマンドを使用します("qacct"コマンドでも確認できますが、可能な限り"qreport"コマンドをご利用願います)。
[username@at027 sh]$ qreport -j 80431 ============================================================== owner username jobnumber 100000 taskid 1 slots 1 pe_taskid NONE granted_pe NONE exit_status 0 failed 0 qname epyc.q hostname at095 jobname jobname qsub_time 20YYMMDD-HH:50:54 start_time 20YYMMDD-HH:50:57 end_time 20YYMMDD-HH:51:57 ru_wallclock 0.15 cpu 0.1 mem 0.0 maxvmem 0.0G r_mem 8.000G r_q NONE r_cpu NONE
GUIでジョブを投入したい場合
qmonというコマンドがあります。詳細については、"man qmon"でオンラインマニュアルを確認して下さい。
その他の詳細について
UGEのユーザマニュアルを本システムのユーザ向けページに掲示しました。(マニュアルのページ)、詳細なオプション指定などについては、こちらもご参照ください。