slurm sbatch 多任务运行 --ntask

-ntasks或-n任务在SLURM中做什么?

我在用是slurm,使用一些计算集群-NTASK公司或-n. 我显然已经读过相关文档了http://slurm.schedmd.com/sbatch.html:
sbatch不启动任务,它请求分配资源并提交批处理脚本。此选项建议Slurm控制器在分配中运行的作业步骤将启动最多 个任务,并提供足够的资源。默认值是 每个节点一个任务,但是请注意–cpus per task选项将 更改此默认值。

我不明白的是:

在分配内运行将启动最大数量的任务,并提供足够的资源。

我有几个问题:

我想我的第一个问题是“任务”这个词是什么意思,而区别是在SLURM上下文中“job”这个词。我通常认为工作是在sbatch下运行bash脚本,如sbatch my_batch_job.sh. 不知道任务是什么意思。
如果我把task这个词等同于job,那么我认为它会根据参数多次运行相同的bash脚本-n、 --n任务=. 不过,我显然在集群中测试过,运行了一个回音你好具有–n任务=9我预计sbatch会向stdout(收集在slurm-job\u-id.out,但令我惊讶的是,我的echo hello脚本只执行了一次,那么这个命令还能做什么呢?它似乎什么也没做,或者至少我看不出它在做什么。
我知道-a、 --数组=<索引>存在多个作业的选项。那是另一个话题。我只想知道–NTASK公司假设是这样的,理想的情况下有一个例子,这样我就可以在集群中测试它了。

这个–NTASK公司如果您有要在同一批处理脚本中并行运行的命令,则参数很有用。 这可能是两个单独的命令,用&或者在bash管道中使用两个命令(|).

例如
使用默认的ntasks=1

#!/bin/bash

#SBATCH --ntasks=1

srun sleep 10 & 
srun sleep 12 &
wait

将发出警告:

作业步骤创建暂时禁用,正在重试

默认情况下,任务数指定为一个,因此第二个任务在第一个任务完成之前无法启动。 此作业将在22秒左右完成。要将其分解:

sacct-j515058–format=JobID,Start,End,Elapsed,NCPUS
JobID Start End Elapsed NCPUS
------------------------------------------------------------
515058 2018-12-13T20:51:44 2018-12-13T20:52:06 00:22 1
515058.batch 2018-12-13T20:51:44 2018-12-13T20:52:06 00:00:221
515058.0 2018-12-13T20:51:44 2018-12-13T20:51:56 00:00:12 1
515058.1 2018-12-13T20:51:56 2018-12-13T20:52:06 00:00:10 1

在这里,任务0开始并完成(12秒),然后是任务1(10秒)。总用户时间为22秒。

要同时运行这两个命令:

#!/bin/bash

#SBATCH --ntasks=2

srun --ntasks=1 sleep 10 & 
srun --ntasks=1 sleep 12 &
wait

运行上面指定的sacct命令

sact-j 515064–format=JobID,开始,结束,经过,NCPUS
作业ID开始-结束已用NCPUS
-----------------------------------------------------------------
515064 2018-12-13T21:34:08 2018-12-13T21:34:20 00:00:12 2
515064.batch 2018-12-13T21:34:08 2018-12-13T21:34:20 00:00:12 2
515064.02018-12-13T21:34:08 2018-12-13T21:34:20 00:00:12 1
515064.1 2018-12-13T21:34:08 2018-12-13T21:34:18 00:00:10 1

总的工作时间是12秒。作业没有等待资源的风险,因为批处理脚本中已指定任务数,因此作业有资源同时运行这么多命令。

每个任务都继承为批处理脚本指定的参数。这就是原因–n任务=1需要为每个srun任务指定,否则每个任务使用–n任务=2因此,在第一个任务完成之前,第二个命令不会运行。

继承批处理参数的任务的另一个警告是如果–导出=无指定为批处理参数。在这种情况下–导出=全部应为每个srun命令指定,否则srun命令不会继承sbatch脚本中设置的环境变量。

附加说明:
使用bash管道时,可能需要指定–nodes=1,以防止管道的任何一侧的命令在不同的节点上运行。
使用时&若要同时运行命令,则等待至关重要。在这种情况下,没有等待命令时,如果任务1已成功完成,则任务0将自行取消。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
slurm sbatch命令是用于在SLURM集群上提交批处理作业的命令。sbatch命令的作用是请求资源分配并提交批处理脚本。默认情况下,sbatch会为每个节点分配一个任务,并提供足够的资源。但是,通过使用--ntasks参数,您可以指定在分配的每个节点上运行的任务数量。 在SLURM上下文中,任务(task)和作业(job)是有区别的。任务(task)指的是在作业(job)中运行的单个进程。一个作业(job)可以由多个任务(task)组成,这些任务可以在分配的节点上并行运行。 您可以使用sbatch命令的参数--ntasks来指定作业中的任务数量。例如,如果您希望在作业中运行9个任务,您可以使用以下命令: sbatch --ntasks=9 my_batch_job.sh 请注意,每个任务将独立运行,但它们可以共享相同的脚本和其他资源。 以下是一个示例作业脚本: #!/bin/bash #SBATCH --job-name=my_job #SBATCH --partition=cpu #SBATCH -N 1 #SBATCH --output=%j.out #SBATCH --error=%j.err #SBATCH --time=00:00:10 #SBATCH --exclusive echo "Hello, World!" 在这个脚本中,--ntasks参数被省略,因此默认情况下将运行一个任务。通过更改--ntasks参数的值,您可以在作业中运行多个任务。 请注意,sbatch命令会将作业提交到集群中,并在适当的时间运行作业。因此,如果您只运行了一个任务,并且没有看到其他输出,那可能是因为作业还没有运行完毕。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值