gpt4 book ai didi

slurm - 将 slurm 阵列任务限制在单个节点中

转载 作者:行者123 更新时间:2023-12-03 17:31:57 27 4
gpt4 key购买 nike

我想提交一个数组作业来处理 100 个任务,每个任务只使用一个 CPU。我可以访问具有 10 个节点和 24 个内核的集群,每个节点都激活了超线程。我用 --array=1-100%24 限制并发作业的数量尝试将所有作业保留在单个节点中,并将集群的其余部分留给其他用户,但 24 个任务在任意数量的节点中执行。我试过 --nodes=1--distribution=block:block覆盖循环分布,均不成功:24 个同时运行的任务在多个节点中运行。

在 stackoverflow 中浏览时,我看到了一个 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 个任务。

关于slurm - 将 slurm 阵列任务限制在单个节点中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52383372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com