1

したがって、次の送信スクリプトがあります。

#!/bin/bash
#
#SBATCH --job-name=P6
#SBATCH --output=P6.txt
#SBATCH --partition=workq
#SBATCH --ntasks=512
#SBATCH --time=18:00:00
#SBATCH --mem-per-cpu=2500
#SBATCH --cpus-per-task=1
#SBATCH --array=1-512

srun ./P6 $SLURM_ARRAY_TASK_ID

私がやりたいことは、1 から 512 までの引数を指定してプログラム P6 の 512 個のインスタンスを実行することです。しかし、squeue と sacct を調べると、SLURM は各タスクに 512 個の CPU を割り当てているようです!

私は何を間違えましたか?

4

1 に答える 1

2

ジョブごとに 512 のタスクを要求しました。1 つ (またはコードに適していると思われる番号) を尋ねます。

#SBATCH --ntasks=1

ところで、提出スクリプトには小さな問題がいくつかあります。ジョブ配列内のすべてのジョブは同じ方法で命名されますが (これは実際には問題ではありません)、stdout ファイルも共有するため、P6.txt 内のすべてのタスクの情報が混在することになります。JobID または TaskId (%j/%A/%a) で区別することをお勧めします。

また、標準エラー出力先を定義していないため、何かが失敗したり stderr に書き込まれたりすると、その情報が失われます。私のお勧めは、標準誤差も定義することです ( #SBATCH --error=P6.txt.%j)。

もう 1 つの詳細は、作業フォルダーが定義されていないことです。適切なフォルダーからスクリプトを送信する限り機能しますが、別の場所から送信しようとすると失敗します。

于 2018-08-28T19:09:34.817 に答える