【问题标题】:Can you help me run tasks in parallel in Slurm?你能帮我在 Slurm 中并行运行任务吗?
【发布时间】:2019-06-23 20:40:52
【问题描述】:

我是 Slurm 的新手,我尝试启动多个可执行文件以并行运行(在下面的示例中,它只是 date 命令)。我希望他们在不同的时间开始,间隔很短的时间延迟。

我做了一些尝试,试图在 srun 之间添加额外的行,例如“srun sleep 5s &”或使用下面显示的“--begin”选项。特别是,“--begin”选项失败说“--begin 被忽略,因为节点已经分配”。

并行模块在我们的集群中似乎不可用。

#!/bin/bash
#SBATCH --output=parallel_test_%j.out   # Standard output and error log
#SBATCH --time=06:00:00
#SBATCH --nodes=1   # number of nodes
#SBATCH --ntasks=6   
#SBATCH --mem-per-cpu=1024M   # memory per CPU core

srun="srun -n1 -N1 --exclusive"
# --exclusive     ensures srun uses distinct CPUs for each job step
# -N1 -n1         allocates a single core to each task


$srun date &
$srun --begin=now+3 date &
$srun --begin=now+6 date &
$srun --begin=now+9 date &
$srun --begin=now+12 date &
$srun --begin=now+15 date &
wait

我得到的输出如下:

srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
srun: error: --begin is ignored because nodes are already allocated.
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:05 PDT 2019
Sun Jun 23 14:07:06 PDT 2019

我想要得到的是以下输出:

Sun Jun 23 13:22:54 PDT 2019
Sun Jun 23 13:22:57 PDT 2019
Sun Jun 23 13:23:00 PDT 2019
Sun Jun 23 13:23:03 PDT 2019
Sun Jun 23 13:23:06 PDT 2019
Sun Jun 23 13:23:09 PDT 2019

感谢您的帮助

【问题讨论】:

  • ShellCheck 正确指出您的 srun 变量未使用。你的意思是$srun date &
  • 感谢您的帮助,我肯定错过了 $ 符号。不过,我没有得到想要的输出......
  • 您可以设置 srun 调用之间的延迟 (sleep 5)。但这样做的合理性是什么?好像一点用都没有。

标签: bash slurm sbatch


【解决方案1】:

在这种情况下,--begin 将无济于事,因为它用于延迟作业的启动,并且在提交脚本中运行 srun 时作业已经开始。

你可以像这样得到请求的行为:

$srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
sleep 3; $srun date &
wait

甚至像这样

$srun date &
$srun bash -c "sleep 3 ; date" &
$srun bash -c "sleep 6 ; date" &
$srun bash -c "sleep 9 ; date" &
$srun bash -c "sleep 12 ; date" &
$srun bash -c "sleep 15 ; date" &
wait

关于

并行模块在我们的集群中似乎不可用

这并不意味着您不能自己安装它(请参阅this question)。如果你的集群上安装了Easybuild,那就更简单了。 (如果不是,也可以自己安装)然后可以使用--delay选项。

parallel --delay 3 $srun date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2016-08-28
    相关资源
    最近更新 更多