コンテンツにスキップ

ジョブの実行・スケジューラ

ジョブ投入時にエラーになりますが、どのオプションが悪いかわかりません

エラーによって対応方法が異なります。

qsub: Unknown option

「qsub: Unknown option」エラーは、qsubコマンドのオプション以外にも、ジョブスクリプトの「#$」で始まる行の記述に誤りがあるときにも発生します。
よくある間違いとして「=」で内容を指定するオプションの「=」の前後にスペースを入れた場合にこのエラーが繰り返し表示されます。「=」前後のスペースを削除してみてください。

Job is rejected, h_rt can not be longer than 10 mins with this group

-gオプションやnewgrpなどでTSUBAMEグループを指定しない場合は「お試し実行」となります。「お試し実行」は10分以内のみですが、指定されているh_rt オプションが10分以上を指定しております。
「お試し実行」の場合はh_rt オプションを0:10:0のように修正下さい。
お試し実行」以外で実行したいのであれば、-gオプションやnewgrpなどでTSUBAMEグループを指定してください。

Info

この場合は適切なTSUBAMEグループに参加していること、TSUBAMEグループにポイントがあることを確認して下さい。TSUBAMEグループについてはTSUBAMEポータル利用の手引き 「6.グループの管理」をご確認下さい。

Unable to run job: Job is rejected. h_rt must be specified.

h_rtオプションの記載がないため実行できません。時間設定を行い、実行ください。

Unable to run job: the job duration is longer than duration of the advance resavation id AR-ID.

予約時間よりも長い時間を指定したために発生したエラーです。下記FAQの予約についてをご確認ください。

関連FAQ
バッチジョブスケジューラの仕様について

error: commlib error: can't set CA chain

このエラーは、TSUBAME3.0のホームディレクトリをそのままTSUBAME4.0に移行(コピー)した場合に発生します。TSUBAME3.0のスケジューラで使用していた ~/.sge ディレクトリに証明書が残っており、TSUBAME4.0のスケジューラで使用する証明書と競合するためにエラーが発生します。

~/.sge ディレクトリはTSUBAME4.0では使用しませんので、以下のように削除をお願いします。

$ cd $HOME
$ rm -r .sge
~/.sge ディレクトリを削除してもジョブが投入できない場合は、他の原因が考えられますのでお問合せ下さい

ジョブステータスが「Eqw」となり実行されない。

システムの障害の可能性もありますがジョブスクリプトのミスによることがあります。以下の点をご確認ください。
ジョブの詳細状況は以下のコマンドで確認ができます。

$ qstat -j  ジョブID | grep error
確認後、「Eqw」ステータスのジョブは qdel で削除してください。
原因の切り分けと修正を行いジョブを再投入してください。

エラーの場合の例を以下にあげます。

ファイルパーミッションがない場合のエラー例

error reason    1:          エラー発生時間 [5226:17074]: error: can't open stdout output file "原因のファイル": Permission denied

改行コードの問題やディレクトリが存在しないおよびジョブスクリプトが不正な場合のエラー例

error reason    1:          エラー発生時間 [5378:990988]: execvp(/var/spool/age/ホスト名/job_scripts/ジョブID, "/var/spool/age/ホスト名/job_scripts/ジョブID") failed: No such file or directory

1. ジョブスクリプトの改行コードがUNIX形式(LF)でない

改行コードがwindowsのCR+LFに設定されている場合も発生いたしますので、実際のスクリプトで合わせてご確認ください。以下のコマンドで確認ができます。

$ file スクリプトファイル名

  • CR+LFの場合の出力

    スクリプトファイル名: ASCII text, with CRLF line terminators
    

  • LFの場合の出力

    スクリプトファイル名: ASCII text
    

catコマンドでも確認ができます

  • CR+LFの場合の出力

行末が^M$と表示されます。

#!/bin/bash^M$
#$ -cwd^M$
#$ -l node_f=1^M$
#$ -l h_rt=0:10:00^M$
module load intel^M$

  • LFの場合の出力

行末が$と表示されます。

#!/bin/bash$
#$ -cwd$
#$ -l node_f=1$
#$ -l h_rt=0:10:00$
module load intel$

改行コードの対策としては、以下があります。

  • Windowsでスクリプトを編集しない
  • Windowsでスクリプトを編集する場合は改行コードに対応したエディタを利用し、改行コードを必ず確認する
  • nkfで実行前に改行コードをLFに修正する

LF以外であった際は下記のコマンドで修正ください。

$ nkf -Lu file1.sh > file2.sh

Warning

file1.shは変換したいスクリプトファイル、file2.shは変換後のスクリプト出力先ファイルです。file2.shはfile1.shとは異なるファイル名でなければなりません。同一ファイル名を指定するとファイルが破損しますのでご注意ください。

2. 実行するディレクトリなどが存在しない

ジョブスクリプトで記述されている実行ディレクトリが存在しない場合に発生します。以下のコマンドで確認ください。確認後、スクリプトを適切に修正下さい。

$ qstat -j  ジョブID | grep ^error

error reason    1:          09/13/2024 12:00:00 [2222:19999]: error: can't chdir to /gs/bs/test-g/user00/no-dir: No such file or directory

3. バックグラウンドジョブ("&"付き)でジョブスクリプトが記載されている

以下の様にバックグラウンドジョブ("&"付き)で記載し投入された場合、実行されません。
例)

#!/bash/sh
#$ -cwd
#$ -l node_f=1
#$ -l h_rt=1:00:00
#$ -N test

module load intel

./a.out &

4. ファイルパーミッションが無い

プログラムが利用するファイルに適切なパーミッションを設定下さい。
例) 自分にreadと実行権限を付与

$ chmod u+rx スクリプトファイル名

5. ディスククォータ

グループディスクのクォータをご確認下さい。
1TBあたりの保存可能ファイル数 (iノード数) の上限は 2,000,000です。

確認方法は下記FAQを参照下さい。

グループディスクの利用状況をコマンドで確認したい

バッチジョブスケジューラに投入したジョブの停止方法について

ログインノードに投入したプロセスについては、FAQ「間違って実行してしまったプログラムの停止方法について」をご確認下さい。

1.qsubコマンドを発行した場合に表示されたjob-IDを把握している場合

qdelコマンドを実行してジョブを停止して下さい。
qdel [job-ID]と打つと指定されたjob-IDのジョブが停止します。

例:job-IDが10056の場合

$ qdel 10056

2.job-IDがわからない場合

qstatコマンドを実行して停止したいジョブのjob-IDを確認して下さい。
ユーザがバッチジョブスケジューラに投入し、完了していないジョブの一覧が表示されるので、削除したいジョブのjob-IDを控えて、1.の手順を実行下さい。

例:GISCユーザが実行しているジョブを確認した場合

$ qstat
job-ID  prior  name user  state submit/start at     queue jclass slots ja-task-ID 
------------------------------------------------------------------------------------------
10053 0.555 ts1     GSIC   r     08/28/2024 22:53:44 all.q          28
10054 0.555 ts2     GSIC  qw     08/28/2024 22:53:44 all.q         112
10055 0.555 ts3     GSIC  hqw    08/28/2024 22:53:45 all.q          56
10056 0.555 eq1     GSIC  Eqw    08/28/2024 22:58:42 all.q           7

Tips

Eqwとなっているジョブはユーザが削除して下さい。
原因についてはジョブステータスが「Eqw」となり実行されない。を確認下さい。
hwqにしたい場合はFAQの「依存ジョブの投入方法について」を確認下さい。

state 説明
r 実行中のジョブ
qw 計算資源が空いておらず、順番待ちとなっているジョブ
hqw 他のジョブとの依存関係があり、他のジョブの終了待ちとなっているジョブ
Eqw 何らかの理由でエラーとなっているジョブ
t qwからrへ移行中のジョブ

計算ノードの混雑状況を確認したい

ジョブモニタリングの積み上げグラフをご確認下さい。 凡例は以下のようになっておりますので、緑色の状況を確認することで空きがあるのか確認できます。

状態
空いているノード
実行中ノード(通常ジョブ)
予約ノード(未実行ノード)
予約ノード(実行中ノード)

スクラッチ領域の利用方法

TSUBAME4では計算ノード用のスクラッチ領域として以下を提供しております。 詳細は利用の手引きの計算ノード上のストレージの利用をご確認下さい。

1. ローカルスクラッチ領域

計算ノード上でのみ割り当てられる環境変数$TMPDIRがローカルスクラッチ領域です。
$TMPDIRは通常、/local以下のジョブごとに固有のディレクトリになります。

詳細な使用方法については、こちらをご覧下さい。

Info

/local直下は書き込みが出来ません。

2. /tmp領域

/tmpディレクトリについては2GBの容量制限があります。
大容量スクラッチファイルの作成時などの際に実行プログラムのハングアップなどの問題が発生する懸念があります。

1.のスクラッチディレクトリのご利用を検討ください。

計算ノードへのSSHについて

計算ノードへのSSHは node_f のみ可能です。

MPI通信をする際にSSHを利用する仕様のアプリケーションを実行する際は node_f をご利用下さい。

手引書の「SSHログイン」に記載があります。

依存ジョブの投入方法について

A-1という名前のバッチジョブが終了次第、バッチジョブA-2を実行したい場合は、下記のように -hold_jid オプションを利用してジョブを投入して下さい。

$ qsub -N A-1 MM.sh
$ qsub -N A-2 -hold_jid A-1 MD.sh

投入後にqstatコマンドを実行するとステータスは「hqw」となります。

複数の計算をバッチジョブ中で一括実行したい

バッチ実行により一つジョブ中で複数の計算を実行したい場合、例えば、exec1、exec2、exec3、exec4 という4つのコマンドを一括実行したい場合はバッチスクリプトを次のように記述します。

#!/bin/sh
#$ -cwd
#$ -l node_f=1
#$ -l h_rt=1:00:00

module load cuda
module load intel

exec1 &
exec2 &
exec3 &
exec4 &
wait
上記はあくまで一例です。

尚、異なるディレクトリに配置されているプログラムを一括実行したい場合は、実行ファイルをパスから記述する必要があります。
例えば、ホームディレクトリの folder1にあるa.outを直接実行したい場合は、

~/folder1/a.out &
と指定します。
実行ファイルのディレクトリに移動して実行する必要がある場合は、
cd ~/folder1
./a.out &
または
cd ~/folder1 ; ./a.out &
とすればよいです。

Warning

スクリプトファイルの最終行が & で終了する場合は、ジョブが実行されません。
スクリプトの最後の wait コマンドを忘れずに記述してください。

qsubコマンドを実行する前にログインノード上で計算が始まってしまいます

qsubコマンドを実行する際にマニュアル記載の通り、下記のようにコマンドを叩くと、qsubコマンドを実行する前にログインノード上で計算が始まってしまいます。

GSICUSER@login1:~> #!/bin/bash
GSICUSER@login1:~> #$ -cwd
GSICUSER@login1:~> #$ -l node_f=2
GSICUSER@login1:~> #$ -l h_rt=0:30:0
GSICUSER@login1:~> module load matlab
GSICUSER@login1:~> matlab -nodisplay -r AlignMultipleSequencesExample
バッチスクリプトをコピーして、ターミナルソフトのプロンプトに直接貼り付けた場合に起こりがちです。
バッチスクリプトはファイルとして作成して、qsubコマンドで投入して下さい。
上記のバッチスクリプトやシェルなどの用語がわからない場合は、初心者なのですが、何をすればよいのかわかりませんのUNIX/Linuxの初心者の方をご確認下さい。

qrshコマンドを実行した際のエラーについて

qrsh実行時のエラーについて説明します。

1.Your "qrsh" request could not be scheduled, try again later.

このエラーはインタラクティブ実行に必要なf_nodeの空きがないことを示します。node_f に空きができるまで待ち、再度実行して下さい。
利用状況はFAQの「計算ノードの混雑状況を確認したい」を参照して下さい。

2.Job is rejected. You do NOT have enough point to finish this job

このエラーはノード確保に必要なTSUBAMEポイントが無いことを示します。
TSUBAMEポータルからポイント状況をご確認下さい。

関連:TSUBAMEポイントの消費・返却のタイミングを教えてください

3.Unable to run job: unable to send message to qmaster using port 6444 on host "jobconX": got send error. Exiting.

このエラーはAGEサーバ側が高負荷の場合に発生します。
時間を開けて再度実行ください。

結果ファイルのエラーメッセージについて

バッチジョブスケジューラに投入後のログに出力される以下のようなメッセージに対する確認方法をご説明します。

/var/spool/age/hostname/job_scripts/JOB-ID: line XX: Process-ID Killed  Program_Name

qacct コマンドによる確認を行います。

$ qacct -j JOB-ID

ユーザGSICUSER00がq_nodeに投入したジョブを確認したコマンド結果の例(一部抜粋)
下記項目の詳細についてはmanコマンドで確認下さい。


1.メモリ資源を超過した場合の例

$ qacct -j 4500000
qname        all.q               
hostname     r0i0n0              
group        GSIC          
owner        GSICUSER00            
project      NONE                
department   defaultdepartment   
jobname      SAMPLE.sh
jobnumber    4500000             
taskid       undefined
account      0 0 1 0 0 0 3600 0 0 0 0 0 0
priority     0      
cwd          /path-to-current
submit_host  login1 or login2    
submit_cmd   qsub -A GSICGROUP SAMPLE.sh
qsub_time    %M/%D/%Y %H:%M:%S.%3N
start_time   %M/%D/%Y %H:%M:%S.%3N
end_time     %M/%D/%Y %H:%M:%S.%3N
granted_pe   node_f          
slots        7                   
failed       0    
deleted_by   NONE
exit_status  137                              
maxvmem      120.000G
maxrss       0.000
maxpss       0.000
arid         undefined
jc_name      NONE

この例では、exit_statusとaccountおよびmaxvmemに注目します。
exit_statusを確認することで、何が原因でジョブが停止したかを確認できます。
例のexit_status 137 は128+9を示しますが、これだけだと多岐にわたるため、切り分けはできません。
そこでaccountおよびmaxvmemを確認します。

qrshでX転送する方法

本FAQではqrshでX転送する方法についてご説明します。
本方法にてnode_f以外を利用したGUIアプリケーションの利用が可能となります。

(前準備)
X転送を有効にしてログインノードにsshします。
参考:FAQ Xアプリケーション(GUI)が動作しませんの1,2

1.ログインノードにログイン後、以下のコマンドを実行します。
下記の例ではGSICUSERがlogin1から node_o を1時間利用する例になります。

GSICUSER@login1:~> qrsh -g GSICGROUP -l node_o=1,h_rt=1:00:00

2.利用したいXアプリケーションを実行します。
例としてimagemagickを実行します

GSICUSER@r1n3:~> module load imagemagick
GSICUSER@r1n3:~> display

ImageMagic

Warning

GUIアプリケーションによってはメモリやSSHの制限にて起動や計算実行が出来ないアプリケーションがあります。

Info

  • メモリについては適切な資源タイプをご利用下さい
  • ANSYS/Fluent: SSH制限によって起動不可、回避策は -ncheck オプションを利用する(メーカーサポート外)
  • Schrodinger: SSH制限によって計算実行は不可(起動可)、回避策はnode_f利用のみ
  • OpenGLアプリケーションの場合は、export __GLX_VENDOR_LIBRARY_NAME=mesa が必要

エラーログに "Warning: Permanently added the ECDSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts." と出力される

初めて接続したノードがある場合や、以前接続したことのあるホストの証明書が変更された場合に出力されるもので、known_hostというSSHサーバ証明書リストにIPアドレスXXX.XXX.XXX.XXXの証明書を追加したというメッセージです。これは正常な動作であり、計算結果には影響しないため無視して構いません。

qsubコマンド実行時のエラーについて

qsubコマンドを実行した直後に発生するエラーメッセージとその対処法について説明します。

Unable to run job: Job is rejected because too few parameters are specified.
必須パラメーターが指定されていません。資源タイプと資源数、及び実行時間を指定する必要があります。

qsub: Unknown option
qsubのオプション指定に誤りがあります。こちらをご覧ください。

Unable to run job: Job is rejected. core must be between 1 and 2.
お試し実行ではジョブあたり3つ以上の資源数を使用することはできません。資源数は1または2を指定してください。

Unable to run job: Job is rejected, h_rt can not be longer than 10 mins with this group.
お試し実行では実行時間が10分を超えるジョブを投入することはできません。こちらをご覧ください。

Unable to run job: Job is rejected. You do Not enough point to finish this job.
指定した資源及び時間を確保するためのポイントが不足しています。TSUBAMEポータルページからポイント状況をご確認下さい。
TSUBAMEポータルページからポイント状況をご確認下さい。

Unable to run job: failed receiving gdi request response for mid=1 (got syncron message receive timeout error).
もしくは
Unable to run job: got no response from JSV script"/apps/t4/rhel9/age/customize/jsv.pl".
短時間における大量のジョブ投入等によって管理ノードが高負荷な状態になると、ジョブスケジューラーとの通信がタイムアウトとなり上記のエラーメッセージが表示される事があります。
高負荷な状態は一時的なものです。暫く時間を置いた後に再投入を試みてください。
高負荷な状態でのエラーはここに記載していないエラーや、その他の項目で記載されているエラーが発生する場合があります。

バッチジョブスケジューラの仕様について

TSUBAME4ではバッチジョブスケジューラによる資源管理を行っております。

資源タイプ

資源タイプについては下記をご覧下さい。
詳細:\利用可能な資源タイプ

ジョブの投入方法

ジョブの投入方法はこちらをごらんください。

また、下記の関連FAQもご確認ください。 * スクラッチ領域の利用方法 * 依存ジョブの投入方法について * qrshでX転送する方法

ジョブの制限について

最新の制限については「各種制限値一覧」を確認してください。
ユーザごとの制限を超えるジョブはTSUBAME全体に空きがある場合でも実行されず、qw状態で待たされます。
ジョブが終了し、制限を下回ると(TSUBAMEに空きがある範囲で)実行状態rに遷移します。

予約について

予約は1時間単位で設定可能で予約終了時刻の5分前までノードを利用することができます。
ジョブ投入時には以下のようなコマンドで実行する必要があります。AR IDはポータルで確認が可能です。

$ qsub -g [TSUBAMEグループ] –ar [AR ID] スクリプト名

予約終了時刻の5分前までの利用となるため、ジョブスクリプトの-lオプションを工夫する必要があります。
例)予約期間が2日の場合の資源指定

#$ -l h_rt=47:55:00
「ノード予約」には上記の「ジョブの制限」はかからず、「ノード予約」の制限があります。
制限については「各種制限値一覧」を確認してください。

エラーの対処

エラーの対処については下記の関連FAQをご確認ください。

予約実行時のトラブルシュートについて

予約実行時にジョブが投入できない際のトラブルシューティングについてまとめています。
以下のコマンドはGSICグループが2日の利用となるAR番号20190108を実行する場合を例としております。

1.ARIDのつけわすれ
arオプションをつけない場合は通常ジョブとして実行されます。 (ポイントも通常通り消費されます)

NG例
以下のコマンドを実行した場合は、通常ジョブとして実行されます。

$ qsub -g GSIC hoge.sh

OK例
予約実行を行う際は必ず-arオプションを利用してください。

$ qsub -g GSIC -ar 20190108 hoge.sh

2.h_rtが予約時間より長い
h_rtオプションの時間指定が予約時間より長い場合はジョブが流れません。
また、予約終了時刻の5分前までの利用となる仕様のため、指定時間は予約時間より5分短くしてください。

NG例
予約時間いっぱいとなっているため、実行されません。

$ grep h_rt hoge.sh
#$ -l h_rt=48:00:00
$ qsub -g GSIC -ar 20190108 hoge.sh

OK例(終了時刻-5分となっている)

$ grep h_rt hoge.sh
#$ -l h_rt=47:55:00
$ qsub -g GSIC -ar 20190108 hoge.sh

プログラムが異常終了した場合や予約開始時間前にジョブを投入できなかった場合など、予約開始時間後に実行する場合は経過時間を考慮する必要があります。 例えば、予約開始時間から2時間経過したあとにジョブを投入する場合は以下のようなスクリプトとなります。

qsubコマンド実行から計算ノードの割当までの内部処理の時間を1分取った場合

$ grep h_rt hoge.sh
#$ -l h_rt=45:54:00
$ qsub -g GSIC -ar 20190108 hoge.sh

関連URL * TSUBAME4.0利用の手引き 「計算ノードの予約」 * TSUBAMEポータル利用の手引き 「計算ノードの予約」 * バッチジョブスケジューラの仕様について

ジョブ投入時に指定したh_rtと実行時間の乖離について

h_rtで指定した時間には利用者が投入したジョブを実行するための準備処理の時間も含まれます。そのため、h_rtで指定した時間全てがジョブの実行時間にはなりません。
ポイント消費の対象は準備処理の時間を除いたジョブの実行時間となります。また、準備処理の時間はジョブが実行されるノードの状況により、一定ではありません。

ジョブスクリプト・qrshでの command not found エラーについて

Info

TSUBAME3.0 では、バッチスクリプト内で下記の記述が必要でしたが、TSUBAME4.0では不要になりました。
. /etc/profile.d/modules.sh

pip等でインストールしたコマンドをジョブスクリプト・qrshから実行した場合に、"command not found"エラーが発生した場合はログインノードにて

$ type <command>
<command> is hasehd (/path/to/<command>)
でパスを確認し、ジョブスクリプトに
export PATH=$PATH:/path/to
のように、利用したいコマンドの存在するディレクトリを追記して下さい。


関連URL
Linuxのよくあるエラーについて

1つのジョブの中で複数のプログラムを別々のCPU/GPUで走らせたい

以下のようにして、1つのジョブの中で複数のプログラムを別々のCPU/GPUで走らせることができます。
以下ではa.outがCPU0-6+GPU0, b.outがCPU7-13+GPU1, c.outがCPU14-20+GPU2, d.outがCPU21-27+GPU3を使います。

#!/bin/sh
#$ -cwd
#$ -V
#$ -l node_f=1
#$ -l h_rt=00:30:00

a[0]=./a.out
a[1]=./b.out
a[2]=./c.out
a[3]=./d.out

for i in $(seq 0 3)
do
    export CUDA_VISIBLE_DEVICES=$i
    numactl -C $((i*7))-$((i*7+6)) ${a[$i]} &
done
wait