-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将自行取消。