ホーム » システム » スーパーコンピュータシステムITO » バッチ利用法(富士通コンパイラ)

バッチ処理(富士通コンパイラ)

最終更新日:2018年1月9日

スーパーコンピュータシステムITOのサブシステムBでプログラム言語およびアプリケーションの実行を行うためには、 一連の処理を記述した手順をコマンドによってシステムに依頼する必要があります。 この手順を「バッチ処理」、依頼された処理を「バッチジョブ」と呼びます。また、処理内容を記載した手順書を「バッチ処理用スクリプト」と呼びます。 依頼されたバッチジョブは資源の空き状況に応じて適宜実行処理されます。


バッチジョブの流れ

バッチジョブによりプログラムを実行するためには一般に以下のような手続きを踏みます。
1. ジョブ処理用スクリプトの作成
2. ジョブの投入(pjsubコマンド)
3. ジョブ処理状況の確認(pjstatコマンド)
4. 実行中、もしくは、実行待ちのジョブ削除(pjdelコマンド)
5. 結果の確認

ITOのサブシステムでは資源を「仮想ノード」という物理的なノードよりも細かい単位で割り当てます。仮想ノードにはCPUコアとメモリの利用量が割り当てられます。 また1つの仮想ノードは複数の物理ノードにまたがって定義することはできません。


1. バッチ処理用スクリプトの作成

バッチ処理用スクリプトはサブシステムで実行したい計算の内容を記述したファイルです。 スクリプトの記述例を以下に示します。

#!/bin/bash            ← bashで実行されるスクリプトであることを指定
#PJM -L "rscunit=ito-b"        
#PJM -L "rscgrp=ito-g-16-dbg"
#PJM -L "vnode=2"         ← #pjm以降の空白で区切られたフィールドはpjsubコマンドの引数と同じ扱い
# comment             ← "#PJM"で始まらない場合はシェルのコメントと判断
# comment
(何らかのコマンド)         ← 環境変数の設定など
mpiexec -n 2 ./a.out       ← プログラムa.outをMPIジョブとして実行

スクリプトには以下のオプションを指定します。

1.1 基本オプション

オプション名 説明
-o filename 標準出力をファイルfilenameに出力
-e filename 標準エラー出力をファイルfilenameに出力
-j ジョブの標準エラー出力と標準出力を同じファイルに出力する
--mail-list mailaddress メールの送信先を指定
-m パラメータ メール通知を指定
-m b バッチジョブ開始時にメール通知
-m e バッチジョブ終了時にメール通知
-m r ジョブ再実行時にメール通知
-X ジョブ投入時の環境変数をジョブ実行環境に継承

1.2 バッチジョブ資源オプション

バッチジョブ処理に必要な資源に関する主要オプションは以下の通りです。 -Lに続けて利用資源または上限値を指定します。

オプション名 説明
-L rscunit=name ジョブを投入するサブシステム名
-L rscgrp=name ジョブを投入するリソースグループ(キュー)名
-L elapse=limit ジョブの最大実行時間(経過時間)
時間が短いほど『バックフィルスケジューリング機能(※)』が働き優先的に流れる可能性が高くなります。
-L vnode=limit 利用する仮想ノードの最大値
-L vnode-code=limit 仮想ノードあたりの最大使用コア数
※『バックフィルスケジューリング機能』…“他のジョブの実行開始時刻を遅らせない範囲で” 後から投入されたジョブを先に実行させる機能です。システムが混雑している状況でも計算ノードの隙間時間を見つけてジョブを早く実行開始するように働きかけます。

1.3 MPIオプション

MPIジョブを実行する際に指定する主なオプションは以下の通りです。 --mpi オプションに続けてMPI 実行時の動作を指定します。 プロセスの形状についての指定も可能です。 詳細はマニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」を参照ください。

オプション名 説明
--mpi proc=num 静的に起動する最大プロセス数を指定
省略時は仮想ノード数となる。
--mpi rank-map-bynode[=rankmap] ノードに1プロセス生成すると次のノードに移動し、ラウンドロビンでランクを割り付ける
(rank-map-bychipと排他)
--mpi rank-map-bychip[:rankmap] ノードに[proc÷shapeのノード数](小数点以下切り上げ)のプロセスを生成すると
次のノードに移動しランクを割り付ける(rank-map-bynodeと排他)
--mpi rank-map-hostfile=filename filenameに従って生成するプロセスのランクを割り付ける

1.4 統計出力オプション

オプション名 説明
-s 投入したジョブの統計情報を出力
-S オプションと併用は不可
-S 投入したジョブのノード情報を含む統計情報を出力
-s オプションと併用は不可

使用メモリどの統計情報が "[スクリプトファイル名].i[ジョブID]"というファイルに出力されます。 指定したファイルに出力したい場合は --spath オプションを指定します。 ノード(プロセス)単位で情報を出力したい場合は-Sオプションを指定してください。

なお上記オプションを指定しなくても 3.2 のコマンドによりメモリ使用料超過によりジョブが中断されたかどうかを確認することができます。


2. バッチジョブの投入(pjsubコマンド)

1. で作成したバッチ処理用スクリプトファイルに記述された処理内容を pjsub コマンドを用いて依頼します。

$ pjsub go.sh
[INFO] PJM 0000 pjsub Job 1234 sunmitted.
$

この例では go.sh という名前で作成・保存されたファイルに記述された処理内容を依頼しています。例ではジョブID: 1234が割り振られています。
pjsubコマンドのオプションの詳細はマニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」を参照してください。


3. 処理状況の確認(pjstatコマンド)

3.1 実行中・実行待ちの状況確認

pjstatコマンドを実行すると現在実行中および実行待ちのバッチジョブの状態を表示します。

表示内容およびpjstatコマンドのオプションの詳細は マニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」を参照してください。


3.2 履歴表示

以下のオプションにより過去xx日前(実行例では7日前)から現在までの実行履歴が確認できま。

$ pjstat -H day=7 -v

  • ジョブ終了のステータスは「PC」列に表示されます(0:正常終了, 1:キャンセル 等)
  • 各コード番号については "man pjstat"確認できます。
  • メモリ使用超過が原因の場合ジョブ履歴「PC」列に "12" と出力されます。
  • 一定期間経過した過去の履歴は消去されます。


3.3 処理の終了したバッチジョブの統計情報

以下のオプションにより任意の終了したジョブID(実行例では1234)の統計情報を確認することができます。

$ pjstat -H -S 1234

4. バッチジョブの削除 (pjdelコマンド)

pjdelコマンドにより実行中もしくは実行待ちのバッチジョブを取り消す(削除する)ことができます。 pjdelコマンドに続けてジョブIDを指定します(複数指定可能)。 実行中のバッチジョブの取り消しを行うと実行が中止されます。

$ pjdel 1234
[INFO] PJM 0100 pjdel Job 1234 canceled.
$

この例ではジョブID: 1234のバッチジョブの削除を依頼しジョブが正常にされたことがメッセージで示されています。


5. 結果の確認

スクリプトの-oオプションで出力ファイルを指定した場合には指定されたファイルに標準出力への結果が書き出されます。 指定がない場合には "[ジョブスクリプト名].o[ジョブID]" というファイルに出力されます。 同様に標準エラー出力は "[ジョブスクリプト名].e[ジョブID]" になります。


6. ジョブスクリプトの記述例

以下に富士通コンパイラで翻訳した実行可能ファイルをバッチジョブにより処理するスクリプトの例を示します。 Intelコンパイラや他のアプリケーションでは記述方法が異なる場合がありますので、それぞれの項目のスクリプト記述例を参照されてください。


・逐次ジョブ用スクリプト例

  • 仮想ノード数(プロセス数)
  • :1ノード(1プロセス)
  • 仮想ノードあたりのコア数(スレッド数)
  • :1コア(1スレッド)
  • 最大経過時間
  • :10分
  • 標準エラー出力と標準出力を同じファイルにする
  • :あり
  • ジョブリソースグループ(キュー)
  • :ito-test-dbg
    #!/bin/bash
    #PJM -L "rscunit=ito-b"
    #PJM -L "rscgrp=ito-test-dbg"
    #PJM -L "vnode=1"
    #PJM -L "vnode-core=1"
    #PJM -L "elapse=10:00"
    #PJM -j
    #PJM -X
    
    ./a.out
    
    
    サブシステム名(ito-b)の指定
    リソースグループ(ito-test-dbg)の指定
    仮想ノード数を指定
    仮想ノードあたりのCPUコア数を指定
    最大経過時間の指定
    標準エラー出力を標準出力と同じに
    ジョブ投入時の環境変数をジョブ実行環境に継承
    
    プログラムの実行
    

    ・スレッド並列(自動並列)ジョブ用スクリプト例

  • 仮想ノード数(プロセス数)
  • :1ノード(1プロセス)
  • 仮想ノードあたりのコア数(スレッド数)
  • :36コア(36スレッド、自動並列)
  • 最大経過時間
  • :10分
  • 標準エラー出力と標準出力を同じファイルにする
  • :あり
  • ジョブリソースグループ(キュー)
  • :ito-g-4-dbg
    #!/bin/bash
    #PJM -L "rscunit=ito-b"
    #PJM -L "rscgrp=ito-g-4-dbg"
    #PJM -L "vnode=1"
    #PJM -L "vnode-core=36"
    #PJM -L "elapse=10:00"
    #PJM -j
    #PJM -X
    
    export PARALLEL=36
    ./a.out
    
    
    サブシステム名(ito-b)の指定
    リソースグループ(ito-g-4-dbg)の指定
    仮想ノード数を指定
    仮想ノードあたりのCPUコア数を指定
    最大経過時間の指定
    標準エラー出力を標準出力と同じに
    ジョブ投入時の環境変数をジョブ実行環境に継承
    
    自動並列用環境変数(スレッド数)指定
    ジョブの実行
    

    ・スレッド並列(OpenMP)ジョブ用スクリプト例

  • 仮想ノード数(プロセス数)
  • :1ノード(1プロセス)
  • 仮想ノードあたりのコア数(スレッド数)
  • :36コア(36スレッド、OpenMP並列)
  • 最大経過時間
  • :10分
  • 標準エラー出力と標準出力を同じファイルにする
  • :あり
  • ジョブリソースグループ(キュー)
  • :ito-g-4-dbg
    #!/bin/bash
    #PJM -L "rscunit=ito-b"
    #PJM -L "rscgrp=ito-g-4-dbg"
    #PJM -L "vnode=1"
    #PJM -L "vnode-core=36"
    #PJM -L "elapse=10:00"
    #PJM -j
    #PJM -X
    
    export OMP_NUM_THREADS=36
    ./a.out
    
    
    サブシステム名(ito-b)の指定
    リソースグループ(ito-g-4-dbg)の指定
    仮想ノード数を指定
    仮想ノードあたりのCPUコア数を指定
    最大経過時間の指定
    標準エラー出力を標準出力と同じに
    ジョブ投入時の環境変数をジョブ実行環境に継承
    
    OpenMP環境変数(スレッド数)指定
    ジョブの実行
    

    ・フラットMPI並列ジョブ用スクリプト(1ノード内複数プロセス)例

  • 仮想ノード数(プロセス数)
  • :144ノード(144プロセス)
  • 仮想ノードあたりのコア数(スレッド数)
  • :1コア(1スレッド)
  • 最大経過時間
  • :10分
  • 標準エラー出力と標準出力を同じファイルにする
  • :あり
  • ジョブリソースグループ(キュー)
  • :ito-g-16-dbg
    #!/bin/bash
    #PJM -L "rscunit=ito-b"
    #PJM -L "rscgrp=ito-g-16-dbg"
    #PJM -L "vnode=144"
    #PJM -L "vnode-core=1"
    #PJM -L "elapse=10:00"
    #PJM -j
    #PJM -X
    
    mpiexec -n 144 ./a.out
    
    
    サブシステム名(ito-b)の指定
    リソースグループ(ito-g-16-dbg)の指定
    仮想ノード数を指定
    仮想ノードあたりのCPUコア数を指定
    最大経過時間の指定
    標準エラー出力を標準出力と同じに
    ジョブ投入時の環境変数をジョブ実行環境に継承
    
    ジョブの実行
    

    ・ハイブリッド並列(MPI+OpenMP)ジョブ用スクリプト例

  • 仮想ノード数(プロセス数)
  • :24ノード(24プロセス)
  • 仮想ノードあたりのコア数(スレッド数)
  • :6コア(6スレッド)
  • 最大経過時間
  • :10分
  • 標準エラー出力と標準出力を同じファイルにする
  • :あり
  • ジョブリソースグループ(キュー)
  • :ito-g-16-dbg
    #!/bin/bash
    #PJM -L "rscunit=ito-b"
    #PJM -L "rscgrp=ito-g-16-dbg"
    #PJM -L "vnode=24"
    #PJM -L "vnode-core=6"
    #PJM -L "elapse=10:00"
    #PJM -j
    #PJM -X
    
    export OMP_NUM_THREADS=6
    mpiexec -n 24 ./a.out
    
    
    サブシステム名(ito-b)の指定
    リソースグループ(ito-g-16-dbg)の指定
    仮想ノード数を指定
    仮想ノードあたりのCPUコア数を指定
    最大経過時間の指定
    標準エラー出力を標準出力と同じに
    ジョブ投入時の環境変数をジョブ実行環境に継承
    
    OpenMP並列用環境変数(スレッド数)設定
    ジョブの実行