コンパイルしたロードモジュール(a.out)を計算機で実行するには、ジョブ要求用のシェルスクリプトファイル(ジョブスクリプトファイル)を作成し、スケジューラに対して投入します。
 
以下にジョブスクリプトの例を示します。

 

ジョブスクリプトファイルは大きく2段構成となっており、
1. qsub option: 利用する計算機のリソースや環境の指定(#PBSから始まる個所)
2. Program execution: 計算機に実行させる処理の記述(シェルスクリプト)
に分かれます。

 

1. qsub option: 利用する計算機のリソースや環境の指定

投入時オプションという形で、ジョブスクリプトのコメント部に記述します。
最初のシェルコマンドが現れる前のコメント部分で、「#PBS」という文字列に続けて指定してください。

 

よく利用するオプション

指定が必須のオプションについては【★必須】を付けています。
また、MPIで計算を行う場合に必須のオプションについては【☆MPI】を付けています。必ず指定をお願いいたします。

 

投入するキューの指定(-qオプション)【★必須】

#PBS -q [ジョブクラス名]

[ジョブクラス名]に、利用するジョブタイプに応じたジョブクラスを指定してください。[ジョブクラス名]は下記の通りです。

ジョブタイプ ジョブクラス名
通常優先度 SQUID
高優先度 SQUID-H
シェア利用 SQUID-S
デバッグ利用 DBG

詳細はジョブクラス表をご覧ください。
 

※ジョブクラス名が「SQUID」、「DBG」の場合

以下で説明する#PBS -lオプションにてGPU使用台数(gpunum_job)を"1"以上に設定した場合GPUノード群へ、指定しなかった場合は汎用CPUノード群へジョブが投入されます。

※ジョブクラス「DBG」について

動作確認等を目的とした短時間実行のためのジョブクラスです。以下で説明する経過時間(elapstim_req)の指定が最長でも10分までとなりますが、ジョブの回転が早いため待ち時間が少なくなります。

 

グループの指定(--group オプション)【★必須】

    #PBS --group=所属するグループ名あるいはHPCI,JHPCN課題ID

    所属するグループ名を指定してください。HPCI課題、JHPCN A課題で使用する場合は課題IDを指定してください。グループ名や課題IDが不明な場合は、groupsコマンドを実行することで確認可能です

    例:
    #PBS --group=G12345(グループ名)
    #PBS --group=hp******(課題ID)
    #PBS --group=jh******(課題ID)

    groupsコマンドの実行例

      % groups
      ocean G12345
      (一般利用者の場合、oceanの後にグループ名が表示されます)
       
      % groups
      hpci hp12345
      (HPCI利用者やJHPCN利用者の場合、hpciの後にグループ名が表示されます)
       

      % groups
      hpci hp12345 jh67890 G34567
      (複数のグループや課題に参加している場合は、全て表示されます。いずれか1つを選択し、ジョブスクリプトに記述してください)
       

 

使用する資源制限値(-lオプション)【★必須】

#PBS -l elapstim_req=[経過時間]
#PBS -l cpunum_job=[1ノードあたりのCPUコア使用数]
#PBS -l memsz_job=[1ノードあたりのメモリ使用量]
#PBS -l gpunum_job=[1ノードあたりのGPU使用台数]

自身のプログラムに合わせ、使用する計算機のリソース量を指定してください。
複数ノード使用する場合でも、1ノード分のリソース量を指定してください。

elapstim_req ジョブが実行される際の経過時間を指定します。
経過時間2時間で利用する場合の例:elapstim_req=2:00:00
cpunum_job 1ノードあたりのCPU使用コア数を指定します。
1ノード72コアで利用する場合の例:cpunum_job=72
gpunum_job 1ノードあたりのGPU使用台数を指定します。最大8台まで指定可能です。GPUを使わない場合は指定しないでください。
GPU8台を使用する場合の例:gpunum_job=8
memsz_job 1ノードあたりのメモリ使用量を指定します。(ジョブクラス「SQUID-S」を利用する際のみご利用ください。)
1ノード250GBで利用する場合の例: memsz_job=250GB

計算ノード毎で、割り当て可能なリソースの上限が異なりますので、詳細はジョブクラス表をご覧ください。計算中に指定された値を超えた場合、自動的にジョブは終了しますので、SQUIDでの初回実行時など、使用する計算機のリソース量が不明な場合は、大きめの値を指定することをおすすめします。
 
以下のように、カンマで区切って1つのオプションにまとめて指定することも可能です。カンマの前後にスペースが入らないように注意してください。

#PBS -l elapstim_req=2:00:00,cpunum_job=72,memsz_job=250GB, gpunum_job=8

 

ノード数の指定(-bオプション)【☆MPI】

    #PBS -b [ノード数]

    マルチノードで計算を実行する場合は、ノード数を指定してください。

 

ジョブの種類(-Tオプション)【☆MPI】

    #PBS -T [種類]

    実行されるジョブの種類を設定します。[種類]には以下の指定が可能です。

    ジョブの種類 種類
    MPIを使用しない -Tの指定は必要ありません
    intelMPI intmpi
    OpenMPI openmpi
    NECMPI necmpi

     

環境変数,オプションの設定(-vオプション)

    #PBS -v [環境変数]="[設定内容]"

    ジョブを実行する全てのノードに対して、指定した環境変数を設定します。
    環境変数はsetenvも設定できますが、マルチノードでジョブを実行した場合は、
    スレーブノードにsetenvで指定した環境変数が設定されません。
    マルチノードでジョブを実行する場合は、-vオプションをご利用ください。
     

実行開始/終了のメール通知の指定(-m,-Mオプション)

    #PBS -m [メールオプション]
    #PBS -M [送付先メールアドレス]

    バッチジョブの実行開始/終了時にメールでの通知を行います。通知してほしいタイミングに応じて、[メールオプション]を設定してください。

    メールオプション 説明
    b バッチリクエストの実行を開始した時にメールを発信します。
    e バッチリクエストの実行が終了(異常終了を含む)した時にメールを発信します。
    a バッチリクエストの実行が異常終了した時にメールを発信します。
    n メールを発信しません。
    eb バッチリクエストの実行を開始した時と終了した時にメールを発信します。

     

出力結果ファイルの指定(-e,-oオプション)

    #PBS -e [標準エラー出力名]
    #PBS -o [標準出力名]

    バッチジョブの出力結果が格納されるファイルを指定します。
    指定されない場合、「ジョブ名.eリクエストID」「ジョブ名.oリクエストID」というファイル名で標準エラー出力ファイル、標準出力ファイルがそれぞれ出力されます。後からの解析に便利ですので、特別な事情が無ければ、指定しないことをお勧めします。

 

rerun(リクエストの再登録)の設定(-rオプション)

    #PBS -r n

    実行中に計算ノードがストールした場合は、スケジューラが自動でリクエストを登録し直します。(これをrerunと呼びます)
    もしrerunしてほしくない場合は、ジョブスクリプトに上記の設定を記載してください。
     

その他のオプションについて

    上記に書かれていない詳細な内容やオプションについては、以下のマニュアルの「1.16.qsub」の項目をご参照ください
    NQSV利用の手引き-リファレンス編

     
    NQS スクリプトで指定するジョブクラス(キュー)の名前や各クラスの制限についてはジョブクラス表を参照して下さい。
    ジョブクラス表

 

2.program execution:計算機に実行させる処理の記述

    基本的に、シェルスクリプトでファイルやディレクトリの実行・操作を記述します。

    module load BaseCPU #ベース環境をロードします
    cd $PBS_O_WORKDIR
    # ↑ ジョブ投入時のディレクトリに移動
    ./a.out > result.txt
    # ↑ a.outを実行し、結果をresult.txtに出力する。

    ・moduleコマンドやベース環境についてはこちらをご参照ください。
    ・環境変数として「$PBS_O_WORKDIR」が用意されており、ジョブ投入時のディレクトリが自動で設定されます。
    ・実行時の標準出力/標準エラー出力には容量制限はありませんが、大容量のデータ書き出しを行う場合はリダイレクション(>)などを使用し、別ファイルに出力してください。
     

    ./a.out > output.txt

    【TIPS】その他のリダイレクション例

    下記は全てbashを使用している場合のスクリプト例です。

      実行ファイルを「a.out」
      標準出力のリダイレクト先を「out.txt」
      標準エラー出力のリダイレクト先を「err.txt」
      標準出力/標準エラー出力の両方のリダイレクト先を「out_and_err.txt」としています。

     
    標準出力のみをファイルにリダイレクト

    ./a.out > out.txt

     
    標準出力と標準エラー出力を同じファイルにリダイレクト

    ./a.out >& out_and_err.txt

     
    標準出力と標準エラー出力を別々のファイルにリダイレクト

    (./a.out > out.txt) >& err.txt

     

ジョブスクリプトを書くときの注意点

    スクリプトの最終行には、必ず改行を入れてください。未入力の場合、最終行のコマンドが実行されません。