5.1. 概要

ジョブの概要について説明します。

5.1.1. ジョブとは

ジョブ運用ソフトウェアを導入したシステムでは、ユーザはプログラムを直接実行せず、ジョブ運用ソフトウェアのジョブ運用管理機能に実行を依頼します。ジョブ運用管理機能は実行依頼を受けたプログラムに対し、必要な計算機資源を確保し、プログラムを実行します。

このプログラムを処理する単位がジョブです。
ジョブは、プログラム、データ、および、ジョブスクリプトから構成されます。

構成要素

説明

ジョブスクリプト

プログラムの実行方法を記述したシェルスクリプトです。

ジョブ運用ソフトウェアはこのジョブスクリプトに基づいてジョブを実行します。

プログラム

ユーザが用意する実行可能なプログラムです。

データ

プログラムの入力および出力です。

例えば、プログラムへの入力パラメーターが格納されたデータファイルや処理結果が格納される出力ファイル、プログラムの表示結果です。

../_images/WhatAreJobs_01.png

ジョブの実行は以下のような流れになります。

  1. ユーザがジョブ実行に必要なファイルを用意し、ログインノード上に配置します。

  2. ユーザはジョブ運用管理機能に対し、ジョブの実行を依頼(ジョブの投入)します。ジョブはpjsubコマンドにジョブスクリプトを指定して投入します。

  3. ジョブ運用管理機能は、ジョブに計算機資源を割り当て、ジョブスクリプトを実行します。

  4. ジョブスクリプトの内容にしたがって、プログラムが実行され、実行結果を出力します。

  5. ユーザは、ジョブの実行結果をログインノード上で確認します。

参考

ジョブ投入時にメール通知を指示した場合、ユーザにジョブスクリプトの終了をメールで通知することができます。

5.1.2. ジョブの種類

ジョブは、必要とする計算機資源やプログラムの種類などによって、いくつかに分類されます。 ジョブ運用ソフトウェアでは、ジョブを以下のように分類しています。

分類

ジョブの種類

ジョブの構造による分類(ジョブモデル)

通常ジョブ

バルクジョブ

ステップジョブ

ワークフロージョブ

ジョブの実行形態による分類(ジョブタイプ)

バッチジョブ

会話型ジョブ

並列度による分類

逐次ジョブ

並列ジョブ

必要とする計算機資源(ノード資源)による分類

シングルノードジョブ

マルチノードジョブ

ノード資源の割り当て方による分類

ノード割り当てジョブ(ノード専有ジョブ)

仮想ノード割り当てジョブ(ノード専有ジョブ、ノード共有ジョブ)

5.1.3. ジョブスクリプトの作成

ジョブスクリプトの実体はシェルスクリプトです。 以下に、ジョブスクリプトの記述例を示します。

ジョブスクリプト作成に関する詳細はマニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」-「2.1 ジョブの作成方法」を参照ください。

課題のグループIDを指定してください。

利用ファイルシステムを指定してください。

ジョブスクリプトのファイル名はジョブ名で使用可能な文字を使用します。注意を参照ください。

  • 一般的なジョブスクリプトの例

#!/bin/bash
#PJM -L "node=1"               # ノード数
#PJM -L "rscgrp=small"         # リソースグループの指定
#PJM -L "elapse=60:00"         # ジョブの経過時間制限値
#PJM -g groupname              # 課題のグループ指定
#PJM -x PJM_LLIO_GFSCACHE=/vol000N # ジョブで使用するデータ領域のvolume
#PJM -S                        # 統計情報ファイル出力の指示

export OMP_NUM_THREADS=12      # 環境変数の設定

# execute job
./a.out                        # プログラムを実行
  • MPIジョブを実行する例

MPIジョブの場合は、プロセス数も指定します。1つのノードは、4つのCMG(Core MemoryGroup)で構成されています。このため、1ノードに対して4プロセスでの実行を推奨しています。以下は、ノード数に4、1ノードのプロセス数に4を指定し、16プロセスで実行する例を示しています。

#!/bin/bash
#PJM -L "node=4"               # 4ノード
#PJM -L "rscgrp=small"         # リソースグループの指定
#PJM -L "elapse=00:10:00"      # ジョブの経過時間制限値
#PJM -g groupname              # 課題のグループ指定
#PJM -x PJM_LLIO_GFSCACHE=/vol000N # ジョブで使用するデータ領域のvolume
#PJM --mpi "max-proc-per-node=4" # 1ノードあたりに生成するMPIプロセス数の上限値
#PJM -s

export PLE_MPI_STD_EMPTYFILE=off # 標準出力/標準エラー出力への出力がない場合はファイルを作成しない
export OMP_NUM_THREADS=12

# execute job
mpiexec ./a.out                  # 利用可能な最大プロセス数(この例では16)で実行

大規模ジョブ実行時の標準出力/標準エラー出力の指定についても参照ください。

注釈

MPIジョブを実行する際、利用するプロセス数を指定する場合は、以下のように-nオプションを指定します。

mpiexec -n 16 ./a.out

pjsubコマンドまたはジョブスクリプトで-Lに指定するリソースは省略値(default)を持つものがあります。 主なリソースの省略値を次に示します。

主なリソースの省略値

リソース名

省略値

rscgrp

small(バッチジョブ)
int(会話型ジョブ)

node

リソースグループごとに異なる

elapse

1分(バッチジョブ)
10秒(会話型ジョブ)

注釈

elapseの下限値を省略値と同じに設定しています。 このためelapseに省略値より小さい値を指定しないでください。

elapseに省略値より小さい値を指定した場合はpjsubコマンド実行時にエラーとなります。

nodeの省略値はpjaclコマンドを次の書式で実行すると実行したアカウントに定義されている情報が表示されます。:

書式: pjacl --rg <リソースグループ名>

pjaclコマンドの使用例を示します。(node=)のdefault欄からnodeの省略値が確認できます。

[_LNlogin]$ pjacl --rg small
#
# JOBACL information
#

(省略)

pjsub option parameters
    (-L/--rsc-list)                         lower            upper            default
        (elapse=)                           00:01:00         72:00:00         00:01:00
        (adaptive elapsed time min)         00:01:00         72:00:00         00:01:00
        (adaptive elapsed time max)         00:01:01         144:00:00        144:00:00
        (node elapse)                       1                unlimited        -
        (adaptive node elapse min)          1                unlimited        -
        (adaptive node elapse max)          2                unlimited        -
        (total cores elapse)                1                unlimited        -
        (total cores)                       1                unlimited        -
        (node=)                             1                384              1
        (node-mem=)                         1                unlimited        unlimited
        (vnode=)                            1                2147483647       1
        (vnode-core=)                       1                2147483647       1
        (vnode-mem=)                        1                unlimited        unlimited
        (proc-core=)                        -                unlimited        0
        (proc-cpu=)                         -                unlimited        unlimited
        (proc-crproc=)                      -                4096             4096
        (proc-data=)                        -                unlimited        unlimited
        (proc-lockm=)                       -                unlimited        unlimited
        (proc-msgq=)                        -                unlimited        unlimited
        (proc-openfd=)                      -                unlimited        1024
        (proc-psig=)                        -                unlimited        unlimited
        (proc-filesz=)                      -                unlimited        unlimited
        (proc-stack=)                       -                unlimited        unlimited
        (proc-vmem=)                        -                unlimited        unlimited
        (estimated-power=)                  0                unlimited        0
        (exepjrsh=)                         0                1                0
        (nnum_cret=)                        0                unlimited        0
        (test_rsc01=)                       0                unlimited        0

(省略)
[_LNlogin]$ pjacl --rg large
#
# JOBACL information
#

(省略)

pjsub option parameters
    (-L/--rsc-list)                         lower            upper            default
        (elapse=)                           00:01:00         24:00:00         00:01:00
        (adaptive elapsed time min)         00:01:00         24:00:00         00:01:00
        (adaptive elapsed time max)         00:01:01         96:00:00         96:00:00
        (node elapse)                       1                unlimited        -
        (adaptive node elapse min)          1                unlimited        -
        (adaptive node elapse max)          2                unlimited        -
        (total cores elapse)                1                unlimited        -
        (total cores)                       1                unlimited        -
        (node=)                             385              12288            385
        (node-mem=)                         1                unlimited        unlimited
        (vnode=)                            1                2147483647       1
        (vnode-core=)                       1                2147483647       1
        (vnode-mem=)                        1                unlimited        unlimited
        (proc-core=)                        -                unlimited        0
        (proc-cpu=)                         -                unlimited        unlimited
        (proc-crproc=)                      -                4096             4096
        (proc-data=)                        -                unlimited        unlimited
        (proc-lockm=)                       -                unlimited        unlimited
        (proc-msgq=)                        -                unlimited        unlimited
        (proc-openfd=)                      -                unlimited        1024
        (proc-psig=)                        -                unlimited        unlimited
        (proc-filesz=)                      -                unlimited        unlimited
        (proc-stack=)                       -                unlimited        unlimited
        (proc-vmem=)                        -                unlimited        unlimited
        (estimated-power=)                  0                unlimited        0
        (exepjrsh=)                         0                1                0
        (nnum_cret=)                        0                unlimited        0
        (test_rsc01=)                       0                unlimited        0

(省略)
[_LNlogin]$ pjacl --rg int
#
# JOBACL information
#

(省略)

    (--interact -L)                         lower            upper            default
        (elapse=)                           00:00:10         06:00:00         00:00:10
        (adaptive elapsed time min)         00:00:10         06:00:00         00:00:10
        (adaptive elapsed time max)         00:00:11         78:00:00         78:00:00
        (node elapse)                       1                unlimited        -
        (adaptive node elapse min)          1                unlimited        -
        (adaptive node elapse max)          2                unlimited        -
        (total cores elapse)                1                unlimited        -
        (total cores)                       1                unlimited        -
        (node=)                             1                12               1
        (node-mem=)                         1                unlimited        unlimited
        (vnode=)                            1                2147483647       1
        (vnode-core=)                       1                2147483647       1
        (vnode-mem=)                        1                unlimited        unlimited
        (proc-core=)                        -                unlimited        0
        (proc-cpu=)                         -                unlimited        unlimited
        (proc-crproc=)                      -                4096             4096
        (proc-data=)                        -                unlimited        unlimited
        (proc-lockm=)                       -                unlimited        unlimited
        (proc-msgq=)                        -                unlimited        unlimited
        (proc-openfd=)                      -                unlimited        1024
        (proc-psig=)                        -                unlimited        unlimited
        (proc-filesz=)                      -                unlimited        unlimited
        (proc-stack=)                       -                unlimited        unlimited
        (proc-vmem=)                        -                unlimited        unlimited
        (estimated-power=)                  0                unlimited        0
        (exepjrsh=)                         0                1                0
        (nnum_cret=)                        0                unlimited        0
        (test_rsc01=)                       0                unlimited        0

(省略)

注意

  • ジョブスクリプトのファイル名はジョブ名で使用可能な文字を使用してください。次の文字が使用可能です。

    • 半角英数字、半角ハイフン(-)、半角アンダースコア(_)、半角ドット(.)が使用可能です。

    • 上記以外の文字の使用は未サポートです。

  • ジョブスクリプトを実行するシェルは、ジョブスクリプトの1行目に "#!" でシェルが指定されていなければ、ユーザのログインシェルになります。

  • ジョブスクリプト内で "#PJM" で始まる行には、ジョブを投入するときのpjsubコマンドの引数を記述できます。ジョブスクリプト内での指定より、pjsubコマンドの引数による指定の方が優先されます。

  • 一度、コメント行以外が現れると、以降の "#PJM " は単にコメント行として無視します。

  • ジョブスクリプトにはジョブを投入するユーザに対する読込み権が必要です。実行権はなくてもかまいません。

  • ジョブスクリプト内で、/dev/stdout、または、/dev/stderrにリダイレクトを行わないでください。リダイレクトした場合、標準出力ファイルまたは標準エラー出力ファイルが先頭から上書きされます。

5.1.4. ジョブスクリプトの雛形作成コマンド

ジョブスクリプトの雛形を作成するコマンド(make_jobscript)を提供します。主にファイルシステムに関連して必須である項目などを記載したスクリプトの雛形を出力します。
コマンドを使用する際、オプション --gname でジョブを実行するグループを指定してください。

使用方法

$ make_jobscript [OPTION ...] --gname groupname

オプション

機能

--distribute-common-file path_to_file1,path_to_file2,...

すべての計算ノードから読み込まれるファイル(共通ファイル)を指定します。

--use-directory path_to_directory1,path_to_directory2,...

ジョブで使用するディレクトリを指定します。

--use-spack

Spack を使用する場合に指定します。

--gname groupname

ジョブを実行するグループを指定します。

指定されなかったオプションに関連する記述もコメントとして出力されます。 参考となるドキュメントのURLも出力されるので、詳細はそちらをご参照ください。

5.1.5. ジョブ振り分け運用

「富岳」では、ジョブ投入が特定のリソースグループに集中することで発生する混雑を緩和する目的で、ジョブ振り分け運用を実施しています。

ジョブ振り分け運用では、投入済みのジョブを定期的にシステム側で別リソースグループに移動します。 移動させるジョブには条件があり、移動先となるリソースグループと条件が合致した投入済みジョブのリソースグループをシステム側で変更します。 実行リソースグループが変わる以外のパラメータ変更はありません。

ジョブ振り分け運用を実施しているリソースグループ及び振り分け対象となる条件の詳細は リソースグループのRemarksと、表の各種パラメータをご参照ください。

注意

  • ジョブ振り分けが適用されると実行リソースグループが変わります。 そのため、ユーザ単位でリソースグループ毎に利用可能な計算資源を制限している場合、正しく制御できなくなります。