你能帮我在 Slurm 中并行执行 运行 个任务吗?
Can you help me run tasks in parallel in Slurm?
我是 Slurm 的新手,我试图并行启动多个可执行文件到 运行(在下面的示例中,它只是日期命令)。我希望他们在不同的时间开始,间隔很短的时间延迟。
我做了一些尝试,尝试在 s运行 之间添加额外的行,例如 "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
感谢您的帮助
在这种情况下,--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
关于
The parallel module seems not to be available in our cluster
不是说不能自己安装(看this question). If Easybuild安装在你的集群上,更简单。(如果没有,你也可以自己安装)然后就可以了使用 --delay
选项。
parallel --delay 3 $srun date
我是 Slurm 的新手,我试图并行启动多个可执行文件到 运行(在下面的示例中,它只是日期命令)。我希望他们在不同的时间开始,间隔很短的时间延迟。
我做了一些尝试,尝试在 s运行 之间添加额外的行,例如 "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
感谢您的帮助
在这种情况下,--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
关于
The parallel module seems not to be available in our cluster
不是说不能自己安装(看this question). If Easybuild安装在你的集群上,更简单。(如果没有,你也可以自己安装)然后就可以了使用 --delay
选项。
parallel --delay 3 $srun date