利用 SLURM 上的所有 CPU

use*_*989 5 parallel-processing multithreading hpc mpi slurm

我想在集群上运行作业。不同节点上有不同数量的 CPU,我不知道哪些节点将分配给我。正确的选项是什么,以便作业可以在所有节点上创建与 CPU 一样多的任务?

#!/bin/bash -l

#SBATCH -p normal
#SBATCH -N 4
#SBATCH -t 96:00:00

srun -n 128 ./run
Run Code Online (Sandbox Code Playgroud)

j23*_*j23 4

实现这一目标的一种肮脏技巧是使用 SLURM 提供的环境变量。对于样本批处理文件:

#!/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
Run Code Online (Sandbox Code Playgroud)

作业脚本中仅请求节点数。$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数量,并用它来计算所需的任务。