現在地

g16subコマンドによるGaussianジョブの投入方法

最終更新: 2023/6/2

はじめに

このページでは g16sub コマンドで RCCS スパコンに Gaussian ジョブを投入する方法を説明します。
 

事前に必要な準備

前提条件として、以下の準備が必須です。

  • RCCS スパコンログインサーバ(ccfep)にログインできるようにする
  • scp, sftp 等で RCCS とのファイル送信をできるようにしておく
  • Gaussian のインプットファイルを用意する(テスト用途ならば以下のサンプルインプットでも大丈夫です)

ssh や scp, sftp の設定ができていない場合はクイックスタートガイドのページをご覧ください。
 

サンプル Gaussian インプットファイル

以下のような内容の ch3cl.gjf (.gjf は .com と同じく Gaussian インプットの標準的な拡張子です)が手元にあるとして、これを RCCS に転送し、Gaussian で計算を行います。

%chk=ch3cl.chk
# HF/6-31G(d,p) Opt

methyl chloride

0,1
C   -0.000004    1.127470    0.000000
H   -0.511417    1.468491    0.885898
H   -0.511417    1.468491   -0.885898
H    1.022922    1.468527    0.000000
Cl  -0.000004   -0.657078    0.0000
 

%mem, %nprocshared, %cpu の指定は通常 g09sub や g16sub に上書きされます。利用する CPU コア数については g16sub/g09sub の -np オプションで指定してください。メモリについては、jobtype 等に応じた上限値(少しだけ余裕をもたせてあります)が自動的に指定されますので、通常指定する必要はありません。
 

ファイルの転送(1)

WinSCP での例を示します。

ccfep.ims.ac.jp に接続し、手元の PC 上の Gaussian のインプットを置いたフォルダに移動します。
(注意: RCCS システム上では /lustre/home/users/(ユーザー名) と /home/users/(ユーザー名) は同一の場所を指します)
 

ファイルの転送(2)


(必要に応じて)RCCS側にディレクトリ、ここでは RCCS 側でのホームディレクトリ直下の CH3Cl (/home/users/(ユーザー名)/CH3Cl)、を作成します。
 

ファイルの転送(3)


ch3cl.gjf を RCCS に転送します。以下ではこの CH3Cl ディレクトリに置いた ch3cl.gjf というインプットを実行します。
別の場所に置いた場合には以下の記述を適宜読み替えて対応ください。
 

g16sub でジョブを投入する

Gaussian ジョブを投入するため、ssh (PuTTY 等)で ccfep.ims.ac.jp にログインします。
ログインができたら、CH3Cl ディレクトリに cd コマンドで移動し、ls コマンドで先ほど転送したファイルがそこにあることを確認します。

Last login: Fri Jan 27 11:24:15 2023 from ***.***.***.***
[user@ccfep3 ~]$ ls CH3Cl/
ch3cl.gjf
[user@ccfep3 ~]$ cd CH3Cl/
[user@ccfep3 CH3Cl]$ ls
ch3cl.gjf
[user@ccfep3 CH3Cl]$

そして、g16sub コマンドでジョブを投入します。

[user@ccfep3 CH3Cl]$ g16sub ch3cl.gjf

このようにオプション指定無しで g16sub コマンドを実行した場合、8 コアを利用します。
計算の制限時間(walltime)は 72 時間となっています。時間内に終わらなかった場合は強制的に終了となります。

実行すると、以下のような情報が表示されます。

  • 緑の部分は投入したキューの基本情報です。コア数あたりのメモリ量等が表示されます。
  • 青の部分にはジョブに関係したファイル等の名前が表示されます。
  • 一番最後、赤で示した数字がジョブ ID と呼ばれるユニークな ID です。投入に失敗した場合はこの数字が表示されません。

[user@ccfep3 CH3Cl]$ g16sub ch3cl.gjf
QUEUE detail
------------------------------------------------------------------------------
QUEUE(MACH)  Jobtype  MaxMem     DefMem     TimLim     DefCPUs(Min-Max)
------------------------------------------------------------------------------
    H(  ap)           1.8GB      1.2GB      72:00:00   8(1-128)
------------------------------------------------------------------------------
JOB detail
======================================================================
 MOL name(s)    : ch3cl
 INP file(s)    : ch3cl.gjf.ap
 OUT file(s)    : ch3cl.out
 Current dir    : /lustre/home/users/***/CH3Cl
 SCRATCH dir    : /lwork/users/${USER}/${PBS_JOBID}/gaussian

 QUEUE          : H
 Memory         : 9.6GB
 Time limit     : 72:00:00
 Job script     : /lustre/home/users/***/CH3Cl/H-1614679.sh
 Input modified : y
======================================================================

/usr/local/bin/jsub –q H /lustre/home/users/***/CH3Cl/H-1571896.sh

4008669.ccpbs1
[user@ccfep3 CH3Cl]$

 

ジョブの状態確認

投入したジョブの状態は jobinfo コマンドで確認できます。
(投入した直後の場合は表示されないこともあります。その場合は少しお待ち下さい。)

[user@ccfep3 CH3Cl]$ jobinfo –c
--------------------------------------------------------------------------------
Queue   Job ID Name            Status CPUs User/Grp       Elaps Node/(Reason)
--------------------------------------------------------------------------------
H       4008669 H-1571896.sh   Run       8  user/---   00:00:00 ccc001         
--------------------------------------------------------------------------------
[user@ccfep3 CH3Cl]$

  • 赤文字の数字: g16sub 実行時の最後に表示されるものと同じジョブの固有 ID です
  • ジョブのステータス(緑文字): Run ならば実行中で、Queue ならば他のジョブの終了を待っている状態です
  • 経過時間と実行中のノード名(青文字): 時間は実行時間(Run の場合)もしくはこれまでに待った時間(Queue の場合)です。
    • Run の場合は右端のカラムに実行中のノード名が表示されます。
    • Queue の場合は実行待ちになっている理由が表示されます。
      • (cpu) 空き CPU が足りないために待っています
      • (long) 次回メンテまでにジョブが終わらないため、実行できない状態です
      • (other) 投入直後はこの表示になることがあります。

一旦ジョブが投入されてしまえば、SSH接続を切断してもジョブは残ったままになります。
 

ジョブが終了すると

ジョブが終了すると、実行したディレクトリには以下のようなファイルが残っているはずです。
この内、H_ で始まるファイルと .ap で終わるファイルについては g16sub が作成したもので、正常に終了した場合には気にする必要はありません。

[user@ccfep3 CH3Cl]$ ls
H-1571896.sh           H-1571896.sh.o4008669  ch3cl.gjf     ch3cl.out
H-1571896.sh.e4008669  ch3cl.chk              ch3cl.gjf.ap
[user@ccfep3 CH3Cl]$

出力ファイル(ch3cl.out)についてはジョブの実行中も less や tail コマンドで内容を確認できます。
今回のインプットのように %chk でチェックポイントファイルを指定していれば、それもここに作成されます。
 

formchk の実行

チェックポイントファイル(.chk)を formchk コマンドでテキスト形式(.fchk)に変換したい場合、まず以下のようなコマンドで設定を読み込む必要があります。

ログインシェルが /bin/bash もしくは /bin/zsh の場合:

[user@ccfep3 CH3Cl]$ source /apl/gaussian/16c02/g16/bsd/g16.profile

ログインシェルが /bin/csh の場合:

[user@ccfep3 CH3Cl]$ source /apl/gaussian/16c02/g16/bsd/g16.login

上記コマンドを実行すれば、一見なにも起こりませんが内部設定が変更され、formchk コマンドが使えるようになります。
(PYTHONPATH: Undefined variable. と出力された場合も読み込みは完了しています。以下のように formchk も実行可能です)

[user@ccfep3 CH3Cl]$ formchk ch3cl.chk
 Read checkpoint file ch3cl.chk type Unk
 Write formatted file ch3cl.fchk
 FChkPn:  Coordinates translated and rotated
 FChkPn:  Coordintesmatch /B/ after translation and rotation
[user@ccfep3 CH3Cl]$

もし、自身のログインシェルがどちらかわからない場合は以下のように echo $SHELL コマンドを実行してください。

[user@ccfep3 CH3Cl]$ echo $SHELL

 

Gaussian ジョブ実行のヒント(1): g16sub のオプション

以下の二つは同一の設定になります。

[user@ccfep3 CH3Cl]$ g16sub ch3cl.gjf
[user@ccfep3 CH3Cl]$ g16sub -j core -rev g16c02 -np 8 -walltime 72:00:00 ch3cl.gjf

  • -j: jobtype を指定します(デフォルト=core)。大規模なジョブを実行する場合には -j vnode も利用できますが、その時はコア数を 64 or 128 にしてください。
  • -np: 利用するコア数を指定します(デフォルト=8)。
  • -walltime: 計算の時間制限を指定します(デフォルト 72:00:00 (72時間))。

オプションの値を変更すれば設定も変わります。例えば -np 4 とすれば 4 コアだけ利用するようになります。
 

Gaussian ジョブ実行のヒント(2): 別の revision の Gaussian を使う

RCCS では以下のバージョン、リビジョンの Gaussian が利用できます。

  • Gaussian 16 Rev. C.02 (g16sub -rev g16c02) (g16sub デフォルト)
  • Gaussian 16 Rev. C.01 (g16sub -rev g16c01)
  • Gaussian 16 Rev. B.01 (g16sub -rev g16b01)

 

  • Gaussian 09 Rev. E.01 (g09sub -rev g09e01) (g09sub デフォルト)

 

Gaussian ジョブ実行のヒント(3): コア数の指定について

  • (jobtype=core を想定した場合のヒントです。TCP Linda を導入していないため、ノード間並列はできません。)
  • コア数を使えば使うほど速度が上がるわけではありません。多く使うことで速度が落ちる可能性もあります。
    • CPU 点数の効率的な利用、ジョブの実行されやすさの観点でもコア数は少なめの方が効率が良いです。
    • 一方で、コア数を抑えすぎると計算がなかなか終わりません。
    • 適切な数値は状況にも依存します(論文の revise でできるだけ早く結果を出せなければいけない場合と、数日待っても良い場合では最適解は違います)

 

Gaussian ジョブ実行のヒント(4): 作業ディレクトリについて

作業ディレクトリ(SCRATCH)は g16sub を実行した瞬間では確定していません。以下のような表記になっているはずです。

SCRATCH dir: /lwork/users/${USER}/${PBS_JOBID}/gaussian

USER にはユーザー名が、PBS_JOBID の部分には上で述べたジョブの固有 ID (上の例ならば 4008669.ccpbs1)が入ります。
作業ディレクトリの場所は出力ファイル(上の例では ch3cl.out)の冒頭でも確認できます。
/lwork 以下はジョブの実行時のみに有効なディレクトリであるため、このスクラッチはジョブの終了と同時に削除されます。

/lwork の使用可能な容量は利用するコア数に比例します。容量が足りない場合は、利用コア数を増やすことで問題が解消
する可能性があります。必要なスクラッチ領域が大きすぎる場合には、g16sub/g09sub に -N オプションをつけて
/gwork/users 以下にスクラッチディレクトリを作るようにするようにした方が良いかもしれません。

あるいは、以下のように g16sub/g09sub を使わないようにすることで回避することもできます。
 

Gaussian ジョブ実行のヒント(5): g09sub/g16sub を使わない方法

何らかの方法でジョブのテンプレートを作成する必要があります。ジョブスクリプトさえ作成できれば、jsub コマンドで投入するのみとなります。

  • /apl/gaussian/16c02/samples 以下(Gaussian 16 C.02 の場合)にあるサンプルをテンプレートとして作成
  • g16sub を -P オプションつきで実行して生成した H_*****.sh ファイル(* には数字が入ります)をテンプレートとして、適宜修正

どちらの場合でも、完成したジョブスクリプトファイルを jsub コマンドで投入することになります。
スクラッチディレクトリの情報(例えば .rwf ファイル)を確保したい場合は、スクリプトファイル中で cp コマンドで確保するか、
あるいは /lwork/users/$USER ではなく /gwork/users/$USER 以下を作業ディレクトリに使うなどする必要があります。
(/gwork 以下もいずれ自動で削除されますが、/lwork ほど速やかに消去されません。)