我想请求在同一集群中的两个节点,并且有必要在脚本开始之前分配两个节点。
在Slurm脚本中,我想知道是否存在一种方法,可以在给定节点上启动作业A,而在第二个节点上启动作业B,且延迟很小或同时启动。
您对此有何建议?这就是我的脚本的当前状态。
#!/bin/bash
#SBATCH --job-name="test"
#SBATCH -D .
#SBATCH --output=./logs_%j.out
#SBATCH --error=./logs_%j.err
#SBATCH --nodelist=nodes[19,23]
#SBATCH --time=120:30:00
#SBATCH --partition=AWESOME
#SBATCH --wait-all-nodes=1
#launched on Node 1
ifconfig > node19.txt
#Launched on Node2
ifconfig >> node23.txt
换句话说,如果我请求两个节点,如何在两个节点上同时运行两个不同的作业?可能是我们将其部署为srun manual(多重程序配置)最后一部分中给出的工作步骤。在这种情况下,未定义“ -l”。
答案 0 :(得分:1)
我假设当您说作业A和作业B时,您引用的是脚本中的两个回显。我还假设您显示给我们的设置正在运行,但是没有在适当的节点中启动作业并序列化执行(我感觉所请求的资源不清楚,我缺少信息,但是如果SLURM不抱怨,则一切正常)。您还应注意正确编写重定向的输出。如果第一个作业在第二个作业之后打开了重定向,它将截断文件,您将丢失第二个作业的输出。
要使它们在适当的节点中启动,请通过srun运行命令:
#!/bin/bash
#SBATCH --job-name="test"
#SBATCH -D .
#SBATCH --output=./logs_%j.out
#SBATCH --error=./logs_%j.err
#SBATCH --nodelist=nodes[19,23]
#SBATCH --time=120:30:00
#SBATCH --partition=AWESOME
#SBATCH --wait-all-nodes=1
#launched on Node 1
srun --nodes=1 echo 'hello from node 1' > test.txt &
#Launched on Node2
srun --nodes=1 echo 'hello from node 2' >> test.txt &
答案 1 :(得分:1)
做到了!文件./com_19.bash和./com_23.bash充当二进制文件。
#!/bin/bash
#SBATCH --job-name="test"
#SBATCH -D .
#SBATCH --output=./logs_%j.out
#SBATCH --error=./logs_%j.err
#SBATCH --nodelist=nodes[19,23]
#SBATCH --time=120:30:00
#SBATCH --partition=AWESOME
#SBATCH --wait-all-nodes=1
# Launch on node 1
srun -lN1 -n1 -r 1 ./com_19.bash &
# launch on node 2
srun -lN1 -r 0 ./com_23.bash &
sleep 1
squeue
squeue -s
wait