アプリケーションサーバーにおける プログラムの実行方法

アプリケーションサーバーにおける
プログラムの実行方法
東北大学金属材料研究所 計算材料学センター
2015.3
version 1.0
目次
1.
プログラムの実行 ................................................................................................................................... 1
1.1
対話型処理 ............................................................................................................................................. 1
1.2
バッチ処理............................................................................................................................................... 1
1.2.1 ジョブの投入............................................................................................................................................ 1
1.2.2 submit コマンドの書式 ........................................................................................................................... 4
1.2.3 キュー ...................................................................................................................................................... 4
1.2.4 ジョブの状況確認.................................................................................................................................... 5
1.2.5 ジョブのキャンセル ................................................................................................................................. 6
2.
結果の確認 ............................................................................................................................................. 7
改版履歴
版数
version 1.0
日付
内容
2015 年 3 月 4 日
初版作成
アプリケーションサーバーにおけるプログラムの実行方法
アプリケーションサーバーBladeCenter HS22 でプログラムを実行するための手順について説明します。
1. プログラムの実行
プログラムの実行方法には対話型処理による実行方法とバッチ処理による実行方法があります。対話型処
理によるデバッグを行う以外はバッチ処理によりジョブを投入してプログラムを実行します。対話型処理には
CPU 時間、使用ノード数などに制限があります。
1.1 対話型処理
対話型処理によりデバッグを行うには、TSS ノード(app3t.imr.edu もしくは app4t.imr.edu)にログインします。
対話型プロセスの制限時間は 30 時間(CPU 時間制限)で、使用できるホストは app3t.imr.edu、app4t.imr.edu の
みです。
 逐次プログラムの場合
コマンドプロンプトから直接プログラムを実行します。以下に a.out を実行する場合の例を示します。
[user01@app3t ~]$ app_launcher ./a.out

SMP プログラムの場合
スレッド数を指定後、コマンドプロンプトから直接プログラムを実行します。以下に a.out を 4 スレッドで実行
する場合の例を示します。
[user01@app3t ~]$ export OMP_NUM_THREADS=4
[user01@app3t ~]$ app_launcher ./a.out

MPI プログラムの場合
vi などのテキストエディタで使用するプロセスが実行されるノードを hostfile に記載し、コマンドプロンプトから
直接プログラムを実行します。以下に Intel MPI を使用し、a.out を 4MPI(app3t.imr.edu で 4 プロセス)で実行す
る場合の例を示します。
[user01@app3t ~]$ uname -n > hostfile
[user01@app3t ~]$ cat hostfile
app14
[user01@app3t ~]$ mpiexec.hydra -f hostfile -n 4 ./a.out
注:app3t.imr.edu と app14 は同一ホストです。
1.2 バッチ処理
バッチ処理によるプログラムの実行を行うためには、ジョブスクリプトファイルを作成し、フロントエンドノード
(app1.imr.edu もしくは app2.imr.edu)から適切なキューに投入します。キューには用途に合わせて CPU 時間、メ
モリ使用量、使用ノード数に制限があります。
1.2.1
ジョブの投入
スクリプトファイルを作成し、submit コマンドによりジョブを投入します。submit コマンドの書式は、5.2.2 をご覧
ください。以下に実行モジュール a.out を実行するためのスクリプトファイルの例を示します。
1

逐次プログラムの場合
実行モジュール a.out を実行するためのスクリプトファイル(ファイル名:script.sh)を vi などのテキストエディタ
で作成します。
app_launcher ./a.out
このスクリプトを submit コマンドで適切なキューに投入します。以下は、ASB キューに投入する例です。
submit コマンドの書式、キューの詳細については、それぞれ、5.2.2、5.2.3 をご覧ください。
[user01@app1 ~]$ submit ASB general -exec script.sh
スクリプトファイル名を COMMANDLINE とすることで-exec オプションを省略できます。
[user01@app1 ~]$ submit ASB general

SMP プログラムの場合
実行モジュール a.out を実行するためのスクリプトファイル(ファイル名:script.sh)を vi などのテキストエディタ
で作成します。
app_launcher ./a.out
このスクリプトを submit コマンドで適切なキューに投入します。以下は、6 スレッドで実行し、ASB キューに投
入する例です。submit コマンドの書式、キューの詳細については、それぞれ、5.2.2、5.2.3 をご覧ください。
[user01@app1 ~]$ submit ASB general -exec script.sh -pt 6
スクリプトファイル名を COMMANDLINE とすることで-exec オプションを省略できます。
[user01@app1 ~]$ submit ASB general -pt 6

MPI プログラムの場合
実行モジュール a.out を実行するためのスクリプトファイル(ファイル名:script.sh)を vi などのテキストエディタ
で作成します。
MPICH2 の場合
app_mpi_laucher_mpich2 ./a.out
Intel MPI の場合
app_mpi_laucher_intel ./a.out
PGI コンパイラ付属の MPICH の場合
app_mpi_laucher_pgi ./a.out
このスクリプトを submit コマンドで適切なキューに投入します。以下は、AEB キューに投入する例です。
submit コマンドの書式、キューの詳細については、それぞれ、5.2.2、5.2.3 をご覧ください。
[user01@app1 ~]$ submit AEB general -jobtype parallel -exec script.sh
スクリプトファイル名を COMMANDLINE とすることで-exec オプションを省略できます。
[user01@app1 ~]$ submit AEB general -jobtype parallel
スクリプトファイルには csh 系スクリプトの内容を記述することができます。実行スクリプトの環境はデフォルト
では csh となっているため、bash 系のスクリプトの内容をそのまま記述するとエラーとなります。bash 系スクリプト
を実行したい場合は、別ファイルとして作成し、実行スクリプトファイルの中で実行するように指定します。以下
に例を示します。
2
まず、bash 系のスクリプトファイル(ファイル名:bash.sh)を vi などのテキストエディタで作成します。このスクリ
プトファイルでは dir1 から dir12 のディレクトリで a.out という逐次ジョブを同時に実行しています。
#!/bin/bash
export OMP_NUM_THREADS=1
i=1
cd dir$i
while [ $i -lt 13 ]
do
app_launcher ./a.out &
i=`expr $i + 1`
cd ../dir$i
done
wait
このスクリプトファイルに実行権限を付けます。
[user01@app1 ~]$ chmod u+x bash.sh
bash.sh を実行するための実行スクリプトファイル(ファイル名:COMMANDLINE)を vi などのテキストエディタ
で作成します。
./bash.sh
この実行スクリプトファイルを投入することで、bash.sh が実行されます。
[user01@app1 ~]$ submit AEB general -pt 1
3
1.2.2
submit コマンドの書式
以下に submit コマンドの書式を示します。
submit キュー名 general [オプション]
以下に submit コマンドの主なオプションを示します。
オプション
設定値
-n
利用ノード数を指定します。キューAEB の場合、省略時は 1、指定可能な最大値は 8
(-largememory 指定時は 4)です。
-J
ジョブ名を指定します。ジョブ名は 13 文字まで指定できます。省略時はシステムが自動
的に割り当てます。
-B
ジョブ開始時にメールを送信します。-u オプションによるメールアドレスの指定が必須で
す。
-N
ジョブ終了後にメールを送信します。-u オプションによるメールアドレスの指定が必須で
す。
-u
メールアドレスを指定します。-B、-N オプション指定時は必須です。
メールアドレスは1つだけ指定可能で、一部の携帯キャリアには送信できない場合があ
ります。
-pm
ノードあたりの MPI 並列数を指定します。-pt を指定し、-pm を省略した場合は 1 が仮定
されます。
-pt
プロセスあたりのスレッド数を指定します。-pm を指定し、-pt を省略した場合は 1 が仮定
されます。
-exec
実行するスクリプトファイルを指定します。省略時は COMMANDLINE というスクリプト
ファイルを利用します。
-jobtype
プログラムの実行方法を指定します。省略した場合は serial が仮定されます。
serial: 逐次プログラムまたは SMP プログラムの場合
parallel: MPI プログラムの場合
sparallel: ノード内 SMP×ノード間 MPI プログラムの場合
-longtime
CPU 時間制限を 336 時間に延長します。
-largememory
1 ノードあたりのメモリ制限を 67GB に拡張します。
1.2.3
キュー
用途に合わせて複数のキューを用意しています。各キューにはコア数、メモリ制限、CPU 時間制限の上限値
が設定されていますので、適切なキューを使用します。
以下にキューの一覧を示します。
キュー名
用途
コア数
メモリ制限
CPU 時間制限
AEB
最大 8 ノード(-largememory
最大 96 コア
標準:19GB/ノード
標準:72 時間
大メモリ:67GB/ノード
長時間:336 時間
標準:19GB/ノード
標準:72 時間
大メモリ:67GB/ノード
長時間:336 時間
19GB/ノード
標準:72 時間
指定時は 4 ノード)を利用
占有利用
ASB
SMP 専用
最大 12 コア
共有利用
APHNX
Phoenics 用
最大 12 コア
長時間:336 時間
4
キューの情報は qinfo コマンドでも確認できます。以下に qinfo コマンドの実行例を示します。
[user01@app1~]$ qinfo app
### Application servers (app) ###
QUEUE
USAGE
AEB
Not Shared node(1 to 8 node parallel)
(if -largememory is specified
(if -longtime is specified
(if both options are specified
ASB
Shared node
(if -largememory is specified
(if -longtime is specified
(if both options are specified
APHNX for Phoenics
1.2.4
MEMORY
19GB/node
67GB/node
19GB/node
67GB/node
19GB/node
67GB/node
19GB/node
67GB/node
19GB/node
CPU
72h
72h, 1 to 4 node parallel)
336h)
336h, 1 to 4 node parallel)
72h
72h)
336h)
336h)
72h
ジョブの状況確認
投入したジョブは statj コマンドにより確認できます。状態は STAT 項目に表示され、実行中(RUN)か待ち状
態(PEND)のどちらかになります。以下に statj コマンドの実行例を示します。
[user01@app1~]$ statj app
### Application servers (app) ###
JOBID
STAT QUEUE WAIT
appfs03.67390.0
RUN ASB
appfs04.67351.0
RUN AEB
appfs02.62323.0
PEND AEB
-
JOB_NAME
appfs03.67390
appfs04.67351
appfs02.62323
SUBMIT_TIME
15/02/02 09:08:47
15/02/02 11:11:15
15/02/02 15:24:13
以下に statj コマンドのオプションを示します。
オプション
設定値
-l
ジョブのワーキングディレクトリを合わせて表示します。
-A
全ユーザーのジョブ状況を表示します。ただし、自分自身のジョブ以外につい
ては、ジョブ名は表示されません。
以下に、user01 アカウントで statj app -A コマンドの実行例を示します。
[user01@app1~]$ statj app -A
### Application servers (app) ###
OWNER JOBID
STAT
userA
appfs04.66277.0
RUN
userA
appfs02.62137.0
RUN
user01
appfs04.67351.0
RUN
user01
appfs02.62323.0
PEND
userB
appfs03.66573.0
PEND
user01
appfs03.67390.0
RUN
userC
appfs04.66278.0
PEND
5
QUEUE WAIT JOB_NAME
AEB
AEB
AEB
appfs04.67351
AEB
1
appfs02.62323
AEB
2
ASB
appfs03.67390
ASB
1
-
SUBMIT_TIME
15/01/06 17:42:27
15/01/26 15:02:39
15/02/02 11:11:15
15/02/02 15:24:13
15/01/26 13:44:06
15/02/02 09:08:47
15/01/18 17:42:28
jobps コマンドでは投入されたジョブにより起動されたプロセスの情報を表示します。
以下に jobps コマンドの書式を示します。
jobps ジョブ ID
以下に jobps コマンドの実行例を示します。
[user01@app1~]$ jobps appfs04.67351.0
### app16###
-------------------------USER PID %CPU %MEM VSZ
RSS
TTY STAT START
user01 6489 96.9 4.1
1200936 1026976 ?
R
23:34
user01 6607 97.9 4.1
1191308 1015144 ?
R
23:34
:
:
1.2.5
ジョブのキャンセル
投入済みのジョブは、jobdel コマンドによりキャンセルできます。
以下に jobdel コマンドの書式を示します。
jobdel ジョブ ID
以下に jobdel コマンドの実行例を示します。
[user01@app1~]$ jobdel appfs04.67351.0
llcancel: Cancel command has been sent to the central manager.
6
TIME
1:39
1:39
COMMAND
a.out
a.out
2. 結果の確認
ジョブが実行時に出力する標準出力と標準エラー出力は、実行ディレクトリにそれぞれ「ジョブ名.out」、「ジ
ョブ名.err」という名前でファイルとして出力されます。ジョブ名を指定していない場合は、標準出力は「ジョブ
ID.out」、標準エラー出力は「ジョブ ID.err」となります。また、標準エラー出力がなければ、標準エラー出力ファ
イルはジョブ終了後に自動的に削除されます。
以下に結果を確認する例を示します。
[user01@app1~]$ cat appfs02.62341.623410.out
[user01@app1~]$ cat appfs02.62341.623410.err
submit 時に-N と-u オプションを付けた場合、ジョブの終了時に以下のような通知メールが指定したアドレスに
送信されます。
件名: CNT
・・・・・ (1)
日付: Mon, 2 Feb 2015 14:03:01 +0900 (JST)
送信者: [email protected]
From: LoadLeveler
LoadLeveler Job Step: appfs02.62341.0
Executable: /usr/hitachi/juncmd/tmp/JCF_4204_150202234731.jcf
Executable arguments:
State for machine: app16
LoadL_starter: The program, JCF_4204_150202234731.jcf, exited normally and returned an exit code of
0. ・・・・・ (2)
This job step was dispatched to run 1 time(s).
This job step was rejected by Starter 0 time(s).
Submitted at: Mon Feb 2 13:47:32 2015 ・・・・・ (3)
Started at: Mon Feb 2 13:50:19 2015
・・・・・ (4)
Exited at: Mon Feb 2 14:03:01 2015
・・・・・ (5)
Real Time: 0 01:15:29
・・・・・ (6)
Job Step User Time: 0 02:24:06
・・・・・ (7)
Job Step System Time: 0 00:00:08 ・・・・・ (8)
Total Job Step Time: 0 02:24:14
・・・・・ (9)
Starter User Time: 0 00:00:00
Starter System Time: 0 00:00:00
Total Starter Time: 0 00:00:00
(1)
(2)
(3)
(4)
(5)
7
ジョブ名
ジョブの実行結果
ジョブ投入日時
ジョブ実行開始日時
ジョブ終了日時
(6)
(7)
(8)
(9)
8
ターンアラウンドタイム(ジョブ投入から終了までの時間)(1 時間 15 分 29 秒)
ユーザーが使用した合計 CPU 時間(2 時間 24 分 06 秒)
システムが使用した合計 CPU 時間(8 秒)
ジョブが使用した合計 CPU 時間((7)と(8)の合計)(2 時間 24 分 14 秒)