通过多个并行步骤提交作业

问题描述 投票:0回答:1

我正在尝试设置多个步骤的作业,本质上是每次在单个核心上运行同一程序的许多独立副本。我决定使用这种方法而不是作业数组,因为我访问的集群上每个用户的作业限制为 20 个,而每个作业的最大步骤设置为默认的 40000。示例批处理脚本如下所示:

#!/bin/sh

#SBATCH --partition parallel
#SBATCH --ntasks=100
#SBATCH --cpus-per-task=1
#SBATCH --mem=1000M
#SBATCH --job-name test
#SBATCH --output test.out

for ((i=0; i<$SLURM_NTASKS; i++))
do
    srun -N1 -n1 --mem-per-cpu=10M --exact -u sleep 1200 &
done

wait

根据我的理解,上述脚本的预期行为是在分配资源后,将并行启动 100 个作业步骤,每个作业步骤占用一个 CPU。我还包括了显式内存分配和

--exact
标志,如类似帖子中所建议的那样,以防止第一次 srun 占用整个分配的内存:并行但不同的 Slurm srun 作业步骤调用不起作用

尽管如此,在几个(10-20)作业步骤开始运行后,我仍然收到消息

Step creation temporarily disabled, retrying (Requested nodes are busy)
。由于所有必要的资源都已分配并且内存均匀分布(通过检查
sacct
进行验证),什么可能阻止所有作业同时运行?

PS。我在下面添加了一个典型的

sacct
输出。一切似乎都遵循预期的行为。我唯一不清楚的是:

  1. 事实上,
    .batch
    步骤似乎占用了许多CPU和比实际分配给它更多的内存
  2. 即使步骤分配在 5 个节点上,但几乎所有步骤都集中在一个节点上。这是迄今为止我所有测试的典型行为,所以我不能认为这是巧合。
          JobID     MaxRSS                                AllocTRES             NodeList 
--------------- ---------- ---------------------------------------- -------------------- 
         624245                billing=441,cpu=100,mem=1500M,node=5  ibiscohpc-wn[26-30] 
   624245.batch    408612K                   cpu=22,mem=330M,node=1       ibiscohpc-wn26 
       624245.0       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
       624245.1       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn27 
       624245.2       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn28 
       624245.3       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn29 
       624245.4       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn30 
       624245.5       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
       624245.6       636K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
       624245.7       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
       624245.8       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
       624245.9       636K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.10       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.11       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.12       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.13       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.14       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.15       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.16       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.17       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.18       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.19       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.20       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.21       632K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.22       636K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.23       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.24       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
      624245.25       628K                     cpu=1,mem=10M,node=1       ibiscohpc-wn26 
slurm
1个回答
0
投票

我一直无法找到使用作业步骤在多个节点上提交任务的令人满意的答案。然而,我发现在我的情况(多次相同的运行)中,真正有效的方法是在许多任务中只提交一个作业步骤。批处理脚本将如下所示:

#!/bin/sh

#SBATCH --partition parallel
#SBATCH --ntasks=100
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=100M
#SBATCH --job-name test
#SBATCH --output test.out

srun -n100 -u exec.sh

使用可执行脚本

exec.sh
,其中包含带有变量
$SLURM_PROCID
的表达式,以区分任务。例如:

#!/bin/sh

echo $SLURM_PROCID
sleep 1200

这将导致所需的行为,但据我了解,在独立控制每个任务时,与提交单独的作业步骤相比,它有一些缺点。然而,在找到更好的替代方案之前,这似乎是适用于此用例的唯一方法。

© www.soinside.com 2019 - 2024. All rights reserved.