アプリケーションサーバーにおける プログラムの実行方法 東北大学金属材料研究所 計算材料学センター 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 秒)
© Copyright 2025 ExpyDoc