サイトポリシー サイトマップ
2017 年 08 月 17 日

PageTop

UGEのその他の利用方法について

以下に基本的利用方法で記載しなかった、その他のUGE利用方法について記述します。各コマンド、利用法の詳細については、マニュアルページ(スーパーコンピュータユーザのみ参照可能)のUGEマニュアルも参照してください。

MPIジョブの投入方法
ジョブの使用メモリ量を指定してジョブを投入する方法
マルチスレッド動作、複数プロセスを起動するジョブの投入方法
マルチスレッド、MPI並列動作をするジョブに対して、メモリ要求量を明示する場合の注意事項
アレイジョブの投入方法
クラスタ全体の混雑状況の確認方法
ジョブの実行結果の確認方法(※2016/6/22変更あり)
GUIでジョブを投入したい場合
Fat計算ノードにジョブを投入する際のTIPS
Fat計算ノードでPhase2のlustreを使用する方法
その他の詳細について

 


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が判別し、並列数とマシンファイルを自動生成します。


ジョブの使用メモリ量を指定してジョブを投入する方法

ジョブ管理システムに投入されるジョブが利用可能な仮想メモリ容量は、デフォルトでは4GBに制限されています。 この制限を超えるような仮想メモリ容量を要求するようなジョブは、ジョブ投入時に明示的に必要な仮想メモリ容量を 要求して投入します。以下のように"-l"オプションで指定してジョブを投入します。

[username@t266 ]$ 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@t266 ]$ 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として参照が可能となっています。

$ qsub –t 1-6:2 arraytest.sh
Your job-array 1031.1-6:2 ("arraytest.sh") has been submitted
$ qstat
job-ID prior name user state submit/start at queue slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
1031 0.50000 arraytest. ddbjuser r 03/19/2012 00:43:13 month_hdd.q@t168i 1 1
1031 0.50000 arraytest. ddbjuser r 03/19/2012 00:43:13 month_hdd.q@t168i 1 3
1031 0.50000 arraytest. ddbjuser r 03/19/2012 00:43:13 month_hdd.q@t178i 1 5
    

タスクIDは、ジョブスクリプト内で、SGE_TASK_IDという変数によって参照可能です。この為、アレイジョブ内の各タスクは、 SGE_TASK_IDの値を確認してそれぞれ異なる処理を行う。ということが可能です。例えばパラメトリックスタディをしたい場合、 ジョブスクリプト内で、SGE_TASK_IDを参照して、入力データを分割して切り替えるという処理を記述することによって対応することが 可能になります。


クラスタ全体の混雑状況の確認方法

各キューのジョブの投入状況、キューの負荷状況等、全体を把握するのには、"qstat -g c"として確認することが 出来ます。

[username@t266 pgi]$ qstat -g c
CLUSTER QUEUE                   CQLOAD   USED    RES  AVAIL  TOTAL aoACDS  cdsuE
--------------------------------------------------------------------------------
debug.q                           0.03      0      0    128    128      0      0
login.q                           1.00    122      0     70    192      0      0
month_fat.q                       0.47    450      0    318    768      0      0
month_gpu.q                       0.03      0      0    976    992      0     16
month_hdd.q                       0.04      1      0     95     96      0      0
month_medium.q                    0.24     32      0    128    160      0      0
month_ssd.q                       0.03      0      0     32     32      0      0
web_month.q                       0.03      0      0     16     16      0      0
web_week.q                        0.03      0      0     16     16      0      0
    

ジョブの実行結果の確認方法(※2016/6/22変更あり)

ジョブ実行終了後、そのジョブが使用したリソース量等の情報を確認するには"qreport"コマンドを使用します("qacct"コマンドでも確認できますが、可能な限り"qreport"コマンドをご利用願います)。
※2016/6/22より前のジョブ情報を確認するには"qreport-old"コマンド(もしくは"qacct-old"コマンド)を使用してください。

[username@t266 ~]$ qreport -j XXXXXXX
==============================================================
owner                username
jobnumber            XXXXXXX
taskid               undefined
slots                1
pe_taskid            NONE
granted_pe           NONE
exit_status          0
failed               0
qname                month_hdd.q
hostname             t305i
jobname              JobName
qsub_time            20YYMMDD-HH:50:54
start_time           20YYMMDD-HH:50:57
end_time             20YYMMDD-HH:51:57
ru_wallclock         60
cpu                  0.1
mem                  0.0
maxvmem              0.2G
r_mem                4G
r_q                  NONE
r_cpu                NONE
    

GUIでジョブを投入したい場合

qmonというコマンドがあります。詳細については、"man qmon"でオンラインマニュアルを確認して下さい。


Fat計算ノードにジョブを投入する際のTIPS

Fat計算ノードにジョブを投入する際、dplaceコマンドを利用されることを推奨します。dplaceコマンドは複数のプロセスをアイドル状態のCPUに割り当て固定するコマンドです。 Thinノードやmediumノードに比べ、実行時間が極端に遅い、実行時間にムラがある等の際は、dplaceコマンドを利用することで、性能の劣化が改善されることがあります。 dplaceコマンドはプロセスとメモリのアロケーションをコントロールします。プロセスの参照データはプロセスが最初に動作したCPUの近くのメモリに展開されます。その為、プロセスのCPU間の移動を避ける事により、参照データの局所性(キャッシュ利用の効率化、メモリ配置の最適化)を利用した最適なプログラム実行環境をサポートします。

・任意でのプログラムでの利用

実行プログラムの前にdplaceコマンドを指定してください。dplaceで利用されていないCPUを若い番号順でアサインしていきます。システム全体でdplaceを利用したプログラムが動作していない場合はCPU番号が0からアサインされます。

$ dplace ./a.out

・Intelコンパイラで作成した自動並列化/OpenMPプログラムでの利用

dplaceコマンドでは-x2オプションを指定してください。

$ export KMP_AFFINITY=disabled
$ dplace -x2 ./a.out

※exportコマンドはbash系のコマンドです。csh系の場合は”setenv KMP_AFFINITY disabled”の様に入力してください。
※Intelコンパイラで作成した自動並列/OpenMPプログラムではKMP_AFFINITYをdisabledにしないとパフォーマンスが悪くなることがあります。

・Intel MPIを使ったMPIプログラムでの利用

dplaceコマンドを使用してください。 オプションは不要です。

$ mpirun -np 4 dplace ./a.out

・dplaceのオプション

dplaceのオプション-x、–s ともにCPUに配置しないプロセスを指定するものです。

オプション概要
[-s skip_count] 最初のスレッドから &ltskip_count&gt で指定された数分のスレッドをCPUに配置しないように指示します。
[-x skip_mask] プロセスのCPUへの配置をスキップするように指示します。&ltskip_mask&gt には、スキップするプロセスに関するビットマスクを指定します。ビット N の &ltskip_mask&gt が指定された場合、N+1番目のプロセスは、CPUに配置されません。
[-c cpu numbers] ジョブが使用するCPU番号を指定できますが、基本的に本スーパーコンピュータシステムでは利用しません。

・ジョブの投入実行例

ジョブ投入する際に使用するスクリプト・ファイルについて以下にサンプルを示します。

#!/bin/sh 
#$ -S /bin/sh
dplace ./a.out  ←実行したいプログラムの先頭にdplaceをつけてください。

 


Fat計算ノードでPhase2のlustreを使用する方法

Phase1システムのFat計算ノードからPhase2システムのlustreを使用することが可能です。

[<username>@fat ~]$ ls -l /home_ph2/<username>
lrwxrwxrwx 1 root root 21  2月 28 15:34 2014 /home_ph2/<username> -> /lustre[345]/home/<username>

Phase2システムのlustreを使用する場合は、ジョブ内での入出力先を /home_ph2/<username> から始まるフルパスで指定して下さい。

Fat計算ノードからのみPhase2システムのlustreが使用可能です。他Phase1システムの計算ノードからは使用できません。

Phase1 .... /home/<username>
Phase2 .... /home_ph2/<username>

Fat計算ノードへのqsubはPhase1システムからのみ実行可能です。

qsub実行に指定するジョブスクリプトはPhase1システムに置く必要があります。

[<username>@gw ~]$ qlogin
(途中省略)
[<username>@t260 ~]$  cat test-use-phase2.sh
#!/bin/sh
#$ -S /bin/sh
blastall -p blastn -d /usr/local/seq/blast/genbank/viral -i /home_ph2/<username>/query -o /home_ph2/<username>/result
[<username>@t260 ~]$ qsub -l fat test-use-phase2.sh

その他の詳細について

UGEのユーザマニュアルを本システムのユーザ向けページに掲示しました。(マニュアルのページ)、詳細なオプション指定などについては、こちらもご参照ください。