我想提交一个数组作业来处理 100 个任务,每个任务只使用一个 CPU。我可以访问具有 10 个节点和 24 个内核的集群,每个节点都激活了超线程。我通过--array=1-100%24尝试将所有作业保留在单个节点中并将集群的其余部分留给其他用户来限制并发作业的数量,但是这 24 个任务在任意数量的节点中执行。我已经尝试--nodes=1或--distribution=block:block覆盖循环分布,但都没有成功:24 个同时运行的任务在多个节点中运行。
在 stackoverflow 中浏览我看到了一个较旧的问题,它通过提供要排除的节点列表来解决它。它对我有用,但我认为它违背了使用作业调度程序来优化集群使用的想法。
这是我用来解决此问题的示例脚本。
非常感谢,巴勃罗
#!/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
Run Code Online (Sandbox Code Playgroud) slurm ×1