我想在集群上运行作业。在不同的节点上有不同数量的CPU,我不知道哪个节点将分配给我。有什么适当的选项可以使作业在所有节点上创建与CPU一样多的任务?
#!/bin/bash -l
#SBATCH -p normal
#SBATCH -N 4
#SBATCH -t 96:00:00
srun -n 128 ./run
答案 0 :(得分:2)
实现目标的一个肮脏技巧是使用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
作业脚本中仅请求节点数。 $SLURM_CPUS_ON_NODE
将提供每个节点的cpus数。您可以将其与其他环境变量(例如:$SLURM_JOB_NUM_NODES
)一起使用,以了解可能的任务数量。在上面的脚本中,动态任务计算是在节点是同质的前提下完成的(即$SLURM_CPUS_ON_NODE
仅给出单个数字)。
对于异构节点,$SLURM_CPUS_ON_NODE
将给出多个值(例如:如果分配的节点具有2和3 cpus,则为2,3)。在这种情况下,$SLURM_JOB_NODELIST
可用于找出与分配的节点相对应的cpus数,并以此计算所需的任务。