Slurm脚本核心数配置咨询:HPC场景下如何正确指定所需核心数量
Slurm脚本核心数量分配方法

核心控制参数说明
Slurm分配核心通过几个SBATCH指令配合实现,常用参数如下:
--nodes/-N:指定申请的节点总数,单节点任务可直接设为1--ntasks/-n:指定总任务数,默认每个任务对应1个物理核心,纯MPI并行程序直接把该值设为需要的总核心数即可--cpus-per-task/-c:指定单任务绑定的核心数,适用于OpenMP、Python多线程等单进程多线程场景,数值对应单进程的线程数--ntasks-per-node:指定单个节点上分配的任务数,用于控制跨节点任务的资源分布,避免单节点占用核心过多
常见场景配置示例
纯MPI并行(单节点16核心)
#SBATCH --nodes=1 #SBATCH --ntasks=16
单进程多线程(单节点8线程)
#SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --cpus-per-task=8 # 环境变量需和配置对齐,避免程序多调用核心 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
MPI+OpenMP混合并行(2节点共64核心)
单节点启动4个MPI任务,每个任务绑定8个线程,总核心数=2节点 × 4任务/节点 ×8核心/任务=64
#SBATCH --nodes=2 #SBATCH --ntasks-per-node=4 #SBATCH --cpus-per-task=8 export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
注意事项
- 所有核心配置不能超过集群单节点的物理核心上限,否则任务会一直处于Pending状态无法调度
- 如需避免核心调度漂移,可额外添加
#SBATCH --cpu-bind=cores参数绑定物理核心 - 提交任务后可通过
sacct -j 任务ID --format=JobID,AllocCPUS,Nodes核对实际分配的核心数量是否符合预期
内容的提问来源于stack exchange,提问作者MRL
相关产品推荐
相关产品推荐

