g16subコマンドによるGaussianジョブの投入方法
最終更新: 2024/4/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 コアを利用します。
%mem, %nprocshared, %cpu の指定は通常 g09sub や g16sub に上書きされる点に注意してください。
計算の制限時間(walltime)は 72 時間となっています。時間内に終わらなかった場合は強制的に終了となります。
実行すると、以下のような情報が表示されます。
- H( ap)で始まる緑の部分は投入したキューの基本情報です。コア数あたりのメモリ量等が表示されます。
- 青の部分にはジョブに関係したファイル等の名前が表示されます。
- 一番最後、赤で示した数字がジョブ 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-1571896.sh
Input modified : y
======================================================================
/usr/local/bin/jsub –q H /lustre/home/users/***/CH3Cl/H-1571896.sh
4008669.ccpbs1
[user@ccfep3 CH3Cl]$
ジョブの状態確認(jobinfo)
投入したジョブの状態は jobinfo -c コマンドで確認できます。
(投入した直後の場合は表示されないこともあります。その場合は少しお待ち下さい。)
[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]$
- ジョブID(2カラム目): g16sub 実行時の最後に表示されるものと同じジョブの固有 ID です
- ジョブのステータス(4カラム目): Run ならば実行中で、Queue ならば他のジョブの終了を待っている状態です
- 経過時間と実行中のノード名(一番右のカラム): 時間は実行時間(Run の場合)もしくはこれまでに待った時間(Queue の場合)です。
- Run の場合は右端のカラムに実行中のノード名が表示されます。
- Queue の場合は実行待ちになっている理由が表示されます。
- (cpu) 空き CPU が足りないために待っています
- (long) 次回メンテまでにジョブが終わらないため、実行できない状態です
- (other) 投入直後はこの表示になることがあります。
一旦ジョブが投入されてしまえば、SSH接続を切断してもジョブは残ったままになります。
ジョブが終了すると
ジョブが終了すると、実行したディレクトリには以下のようなファイルが残っているはずです。
この内、H_ で始まるファイルと .ap で終わるファイルについては g16sub が作成したもので、正常に終了した場合には気にする必要はありません。
$ ls
H-1571896.sh H-1571896.sh.o4008669 ch3cl.gjf ch3cl.out
H-1571896.sh.e4008669 ch3cl.chk ch3cl.gjf.ap
$
出力ファイル(ch3cl.out)についてはジョブの実行中も less や tail コマンドで内容を確認できます。
今回のインプットのように %chk でチェックポイントファイルを指定していれば、それもここに作成されます。
formchk の実行
チェックポイントファイル(.chk)を formchk コマンドでテキスト形式(.fchk)に変換したい場合、まず以下のようなコマンドで設定を読み込む必要があります。
ログインシェルが /bin/bash もしくは /bin/zsh の場合:
$ source /apl/gaussian/16c02/g16/bsd/g16.profile
ログインシェルが /bin/csh の場合:
$ source /apl/gaussian/16c02/g16/bsd/g16.login
上記コマンドを実行すれば、一見なにも起こりませんが内部設定が変更され、formchk コマンドが使えるようになります。
(PYTHONPATH: Undefined variable. と出力された場合も読み込みは完了しています。以下のように formchk も実行可能です)
$ 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
$
もし、自身のログインシェルがどちらかわからない場合は以下のように echo $SHELL コマンドを実行してください。
$ echo $SHELL
Gaussian ジョブ実行のヒント
作業ディレクトリについて
標準では、作業ディレクトリは計算サーバー上のローカルディスク上の /lwork/users/${USER}/${PBS_JOBID} 以下に作成されます。/lwork の使用可能な容量は利用するコア数に比例します(11.9 GB/コア)。容量が足りない場合は、利用コア数を増やすことで問題が解消する可能性があります。計算サーバの /lwork は高速ですが、容量は大きくないため、ジョブの種類によっては最後まで実行できないかもしれません。そのような場合は g16sub に -N オプションをつけて実行してください。低速ではありますが、容量無制限の /gwork/users/${USER}/${PBS_JOBID} を使うことができます。(ただし、ジョブの終了後にシステム側に削除される場合があります。また、定期メンテナンス時にも削除されます。)
作業ディレクトリ(SCRATCH)は g16sub を実行した瞬間では確定していません。以下のような表記になっているはずです。
SCRATCH dir: /lwork/users/${USER}/${PBS_JOBID}/gaussian
ジョブの実行時に ${USER} はユーザー名、${PBS_JOBID} はジョブ ID (上の例ならば 4008669.ccpbs1)に置き換えられます。
作業ディレクトリの場所は出力ファイル(上の例では ch3cl.out)の冒頭でも確認できます。
/lwork 以下はジョブの実行中のみ有効なディレクトリであるため、このスクラッチはジョブの終了と同時に削除されます。
g16sub/g09sub のオプション
以下のオプションが g16sub では利用可能です。g09sub でも同様に指定できます。
-np (CPU コア数)
利用する CPU コア数を指定します。指定しない場合は 8 コアです。1-64 と 128 が指定できます。ここで指定された数字に合わせてインプットファイル中の %Mem に与える値が自動的に決定されます。
--walltime (時間)
計算時間を指定します。時間は (時間):(分):(秒) の書式です。
デフォルトは 72:00:00 (72 時間)です。
-j (jobtype)
ジョブタイプの指定。core, vnode, gpu, largemem から選択可能。largemem 以外の場合は自動的に判定されるため指定は不要です。largemem ノードを使いたい場合だけ指定するようにしてください。
-N
通常はスクラッチ領域として高速な計算ノードのローカルディスクの /lwork/users/${USER}/${PBS_JOBID} が使われますが、このオプションを指定すると低速ですが大容量の /gwork/users/${USER} 以下にスクラッチ領域が作られます。/lwork では容量制限で実行できない場合にご利用ください。
-M
ジョブの実行開始時、終了時にメール通知するようにします。
-rev (revision 名)
Gaussian の revision を指定します。以下の revision が利用可能です。
- g16b01 (Gaussian 16 Revision B.01)
- g16c01 (Gaussian 16 Revision C.01)
- g16c02 (Gaussian 16 Revision C.02; デフォルト)
-P
インプットとジョブスクリプトの準備までだけ行います。
ジョブは投入されません。
-ng (GPU 数)
利用する GPU 数を指定します。最大で 8 となります。(CPUコア数)/(GPU数) <= 16 でなければいけません。
-O
ファイルを上書きします。
-q (キュー名)
投入するキューの指定。デフォルトで H キューが指定されているため通常は指定不要です。
一例として、以下の二つは同一の設定になります。
$ g16sub ch3cl.gjf
$ g16sub -q H -j core -rev g16c02 -np 8 -walltime 72:00:00 ch3cl.gjf
オプションの値を変更すれば設定も変わります。例えば -np 4 とすれば 4 コアだけ利用するようになります。
$ g16sub -np 4 ch3cl.gjf
コア数の指定について
- (jobtype=core を想定した場合のヒントです。TCP Linda を導入していないため、ノード間並列はできません。)
- コア数を使えば使うほど速度が上がるわけではありません。多く使うことで速度が落ちる可能性もあります。
- CPU 点数の効率的な利用、ジョブの実行されやすさの観点でもコア数は少なめの方が効率が良いです。
- 一方で、コア数を抑えすぎると計算がなかなか終わりません。
- 適切な数値は状況にも依存します(論文の revise でできるだけ早く結果を出せなければいけない場合と、数日待っても良い場合では最適解は違います)
- メモリや /lwork の容量不足でエラーとなった場合は、コア数を増やすことで解決する可能性があります。
- (エラーメッセージがわかりにくい場合もありますが、そのような場合でも一度コア数を増やして再実行しても良いかもしれません。)
g16sub/g09sub を使わない方法
Gaussian の実行の前後になにか特殊な操作を入れたい場合や、特殊な設定が必要な場合には g16sub/g09sub を使わず、jsub コマンドでジョブを投入する必要があるかもしれません。そのような場合は、以下の方法などでジョブスクリプトのテンプレートを用意することができます。
- /apl/gaussian/16c02/samples 以下(Gaussian 16 C.02 の場合)にあるサンプルをテンプレートとして利用
- g16sub を -P オプション付きで実行し、生成した H_(数字).sh ファイルをテンプレートとして、適宜修正
どちらの場合でも、完成したジョブスクリプトファイルを jsub コマンドで投入することになります。スクラッチディレクトリ内の情報(例えば .rwf ファイル)を確保したい場合は、スクリプトファイル中で cp コマンドで確保するか、あるいは /lwork/users/$USER ではなく /gwork/users/$USER 以下を作業ディレクトリに使うなどする必要があります。/gwork 以下もいずれは自動で削除されますが、/lwork ほど速やかに消去されないため、ジョブの終了後に手動でファイルをコピーする余裕はあると思われます。(ただし、定期メンテナンスのタイミングにはご注意ください。)