将 slurm 阵列任务限制在单个节点中
Keep slurm array tasks confined in a single node
我想提交一个包含 100 个任务的数组作业到 slurm,每个任务只使用一个 cpu。我可以访问具有 10 个节点和 24 个核心的集群,每个节点都激活了超线程。我通过 --array=1-100%24
限制并发作业的数量,试图将所有作业保留在单个节点中,并将集群的其余部分留给其他用户免费使用,但是这 24 个任务是在任意数量的节点中执行的。我已经尝试 --nodes=1
或 --distribution=block:block
来覆盖循环分布,但都没有成功:24 个同时任务 运行 在多个节点中。
在 Whosebug 中浏览我看到 older question 通过给出要排除的节点列表来解决它。它对我有用,但我认为它违背了使用作业调度程序来优化集群使用的想法。
这是我用来解决这个问题的示例脚本。
非常感谢,
巴勃罗
#!/bin/sh
#SBATCH --cpus-per-task=1
#SBATCH --ntasks=1
#SBATCH --output=output/test.log_%A_%a.out
#SBATCH --error=output/test.log_%A_%a.err
#SBATCH --array=1-100%48
#SBATCH --distribution=block:block
#SBATCH --nodes=1
# Display all variables set by slurm
env | grep "^SLURM" | sort
# Print hostname job executed on.
echo
echo "My hostname is: $(hostname -s)"
echo
sleep 30
我假设其他用户也更喜欢拥有完整的节点来完成他们的工作。因为大多数时候,管理员会更喜欢作业数组,以便能够用一个 cpu 个作业来填补空白。
您可以尝试使用选项--exclusive=user
。这样,slurm 将为阵列中开始的第一个作业保留一个完整节点,然后将在同一台机器上安排所有其他作业,因为那里只允许您的作业。
另一种选择是将 24 个作业打包成一个具有 24 个任务的作业并请求 --nodes=1
和 --tasks-per-node=24
,并在提交脚本中使用 srun
到 运行 24 个任务。
我想提交一个包含 100 个任务的数组作业到 slurm,每个任务只使用一个 cpu。我可以访问具有 10 个节点和 24 个核心的集群,每个节点都激活了超线程。我通过 --array=1-100%24
限制并发作业的数量,试图将所有作业保留在单个节点中,并将集群的其余部分留给其他用户免费使用,但是这 24 个任务是在任意数量的节点中执行的。我已经尝试 --nodes=1
或 --distribution=block:block
来覆盖循环分布,但都没有成功:24 个同时任务 运行 在多个节点中。
在 Whosebug 中浏览我看到 older question 通过给出要排除的节点列表来解决它。它对我有用,但我认为它违背了使用作业调度程序来优化集群使用的想法。
这是我用来解决这个问题的示例脚本。
非常感谢, 巴勃罗
#!/bin/sh
#SBATCH --cpus-per-task=1
#SBATCH --ntasks=1
#SBATCH --output=output/test.log_%A_%a.out
#SBATCH --error=output/test.log_%A_%a.err
#SBATCH --array=1-100%48
#SBATCH --distribution=block:block
#SBATCH --nodes=1
# Display all variables set by slurm
env | grep "^SLURM" | sort
# Print hostname job executed on.
echo
echo "My hostname is: $(hostname -s)"
echo
sleep 30
我假设其他用户也更喜欢拥有完整的节点来完成他们的工作。因为大多数时候,管理员会更喜欢作业数组,以便能够用一个 cpu 个作业来填补空白。
您可以尝试使用选项--exclusive=user
。这样,slurm 将为阵列中开始的第一个作业保留一个完整节点,然后将在同一台机器上安排所有其他作业,因为那里只允许您的作业。
另一种选择是将 24 个作业打包成一个具有 24 个任务的作业并请求 --nodes=1
和 --tasks-per-node=24
,并在提交脚本中使用 srun
到 运行 24 个任务。