web-dev-qa-db-ja.com

SLURM:カスタム標準出力名

sbatchを使用してSLURMジョブを実行すると、slurmはslurm-102432.out(slurm-jobid.out)のような標準出力ファイルを生成します。これを(yyyymmddhhmmss-jobid-jobname.txt)にカスタマイズしたいと思います。これを行うにはどうすればよいですか?

より一般的には、sbatch引数_-o_に計算された変数を含めるにはどうすればよいですか?

私はscript.shで以下を試しました

_#SBATCH -p core
#SBATCH -n 6
#SBATCH -t 1:00:00
#SBATCH -J indexing
#SBATCH -o "/home/user/slurm/$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt"
_

しかし、それはうまくいきませんでした。ファイルの場所は新しいディレクトリで正しかったが、ファイル名は単なるリテラル行$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txtでした。

したがって、標準出力ファイルをディレクトリ_/home/user/slurm/_に次のようなファイル名で保存する方法を探しています:_20160526093322-10453-indexing.txt_

9
rmf

これが以前の答えからの私のテイクです

  • %jはジョブIDを示します
  • %xジョブ名を与える
  • 希望する形式で日付を取得する方法がわかりません。ジョブIDは、実行全体で一意の識別子として機能し、ファイルの変更日は、後で分析するために日付を取得します。

私のSBATCHマジックは次のようになります:

#SBATCH --output=R-%x.%j.out
#SBATCH --error=R-%x.%j.err

R-を接頭辞として使用すると、すべてを簡単に移動または削除できますR-*

2
Thamme Gowda

できません、少なくともあなたがやりたいようにはできません。それらの#SBATCH行は、たまたまsbatchコマンドによって解釈されるシェルコメントであり、その中でシェルコードを実行することはできません。

また、sbatch-oオプションは、非常に限られた一連の置換シンボルしか理解しません(以下のmanページの抜粋を参照)。

おそらく、あなたが望むものに最も近いものは、sbatchをラッパースクリプトで実行することです。これは、ジョブID、ジョブ名、現在の日付と時刻をテキストファイルに追加します(例:timestamp<TAB>jobid<TAB>jobname)。次にジョブの実行が終了した後を使用して出力ファイルの名前を変更します。

time_t、または秒以降のエポック、つまりdate +%sは、スクリプトで最も便利な日付/時刻形式です。簡単にきれいに印刷できますが、最初に解析する必要はありません。

そのテキストファイルを繰り返し処理し、実行されなくなったすべてのジョブIDの出力ファイルの名前を変更し(squeue -t BF,CA,CD,F,NF,PR,TOで確認)、まだ名前が変更されていないスクリプトを記述することは難しくありません。

参考までに、sbatchのmanページには次のように書かれています。

-o、-output =

バッチスクリプトの標準出力を「ファイル名パターン」で指定されたファイル名に直接接続するようにSlurmに指示します。デフォルトでは、標準出力と標準エラーの両方が同じファイルに送信されます。ジョブ配列の場合、デフォルトのファイル名はslurm-%A_%a.outです。%AはジョブIDに置き換えられ、%aは配列インデックスに置き換えられます。その他のジョブの場合、デフォルトのファイル名はslurm-%j.outで、%jはジョブIDに置き換えられます。ファイル名の指定オプションについては、--input optionを参照してください。

そして、-iの場合:

-i、-input =

バッチスクリプトの標準入力を「ファイル名パターン」で指定されたファイル名に直接接続するようにSlurmに指示します。デフォルトでは、バッチスクリプトの標準入力で/dev/nullが開かれ、標準出力と標準エラーの両方がslurm-%j.outという名前のファイルに送信されます。ここで、%jはジョブの割り当てに置き換えられます後述するように、番号。

ファイル名パターンには、パーセント記号%の後に文字が続く1つ以上の置換記号を含めることができます(例:%j)。

サポートされている置換シンボルは次のとおりです。

%A Job array's master job allocation number.
%a Job array ID (index) number.
%j Job allocation number.
%N Node name. Only one file is created, so %N will be replaced
   by the name of the first node in the job, which is the one
   that runs the script.
%u User name.
9
cas

sbatchコマンドのドキュメントには、許可される文字置換の包括的なリストが記載されています: sbatch man page

filename patternsbatchを使用すると、ファイル名パターンに1つ以上の置換記号を含めることができます。置換記号は、パーセント記号「%」の後に文字が続きます(例:%j )。

\\置換シンボルを処理しないでください。

%% キャラクター "%"。

%Aジョブ配列のマスタージョブ割り当て番号。

%aジョブ配列ID(インデックス)番号。

実行中のジョブの%J jobid.stepid。 (例:「12.8」)

実行中のジョブの%jジョブID。

%N短いホスト名。これにより、ノードごとに個別のIOファイルが作成されます。

%n Node現在のジョブに関連する識別子(たとえば、「0」は実行中のジョブの最初のノードです)これにより、ノードごとに個別のIOファイルが作成されます。

実行中のジョブの%sステップID。

%t現在のジョブに関連するタスク識別子(ランク)。これにより、タスクごとに個別のIOファイルが作成されます。

%uユーザー名。

%xジョブ名。

パーセント文字とフォーマット指定子の間に置かれた数値は、IO filenameの結果にゼロを埋め込むために使用できます。フォーマット指定子が非数値データ(%N例えば)。

ジョブIDが128、ステップIDが0の4タスクジョブステップでフォーマット文字列を使用する方法の例を以下に示します。

job%J.out

job128.0.out

job%4j.out

job0128.out

ジョブ%j-%2t.out

job128-00.out、job128-01.out、...

7
adjpayot