使用 SLURM 上的所有 CPU
Posted
技术标签:
【中文标题】使用 SLURM 上的所有 CPU【英文标题】:Make use of all CPUs on SLURM 【发布时间】:2019-12-19 08:58:09 【问题描述】:我想在集群上运行一个作业。不同节点上有不同数量的 CPU,我不知道哪些节点将分配给我。什么是正确的选项,以便作业可以在所有节点上创建与 CPU 一样多的任务?
#!/bin/bash -l
#SBATCH -p normal
#SBATCH -N 4
#SBATCH -t 96:00:00
srun -n 128 ./run
【问题讨论】:
最好向您的 HPC 集群支持团队咨询有关作业提交的所有详细信息。您是否尝试过请他们提供有关详细信息的帮助? 【参考方案1】:实现目标的一个肮脏技巧是使用 SLURM 提供的环境变量。对于示例 sbatch 文件:
#!/bin/bash
#SBATCH --job-name=test
#SBATCH --output=res.txt
#SBATCH --time=10:00
#SBATCH --nodes=2
echo $SLURM_CPUS_ON_NODE
echo $SLURM_JOB_NUM_NODES
num_core=$SLURM_CPUS_ON_NODE
num_node=$SLURM_JOB_NUM_NODES
let proc_num=$num_core*$num_node
echo $proc_num
srun -n $proc_num ./run
作业脚本中仅请求节点数。 $SLURM_CPUS_ON_NODE
将提供每个节点的 CPU 数量。您可以将它与其他环境变量(例如:$SLURM_JOB_NUM_NODES
)一起使用,以了解可能的任务数量。在上面的脚本中,动态任务计算是在假设节点是同质的(即$SLURM_CPUS_ON_NODE
只会给出单个数字)的情况下完成的。
对于异构节点,$SLURM_CPUS_ON_NODE
将给出多个值(例如:如果分配的节点有 2 和 3 cpu,则为 2,3)。在这种情况下,$SLURM_JOB_NODELIST
可用于找出分配的节点对应的 cpu 数量,并据此计算所需的任务。
【讨论】:
谢谢!我会试一试的。以上是关于使用 SLURM 上的所有 CPU的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SLURM 中的节点列表向任何 [子集] 节点提交作业?
解决 SLURM “sbatch:错误:批处理作业提交失败:请求的节点配置不可用”错误
如何跨 Slurm 集群上的多个节点运行 MPI Python 脚本?错误:警告:无法在 2 个节点上运行 1 个进程,将 nnodes 设置为 1