ElmerFEM有限元分析:Slurm单节点串行执行多任务配置求助
问题解决:单节点串行执行多Slurm任务以适配ElmerFEM分区计算
你的需求完全可以实现,当前脚本报错的核心原因是:你设置了--ntasks-per-node=8,结合--cpus-per-task=1,Slurm会默认尝试在单个节点上同时启动8个任务(每个任务占用1核),但你的节点只有4个物理核心,集群找不到满足8核需求的节点,因此报错。
要实现5个4核节点,每个节点串行执行8个任务(总计40个任务),推荐使用Slurm任务数组来精准控制并发数,修改后的脚本如下:
#!/bin/bash #SBATCH --job-name=elm_x #SBATCH --output=log/%x-%A_%a.out #SBATCH --error=log/%x-%A_%a.err #SBATCH --nodes=5 #SBATCH --cpus-per-task=1 #SBATCH --ntasks-per-node=1 # 限制每个节点同时仅运行1个任务 #SBATCH --array=1-40%5 # 创建40个任务实例,同时最多运行5个(刚好占满5个节点) # 传递分区参数给ElmerSolver_mpi,需根据你的实际分区配置调整 # 示例为总分区数40,当前任务对应第SLURM_ARRAY_TASK_ID个分区 srun --mpi=pmix /usr/bin/ElmerSolver_mpi case.sif -partition $SLURM_ARRAY_TASK_ID 40
关键配置说明:
--array=1-40%5:生成编号1到40的任务数组,%5限制同时运行的任务数为5,刚好匹配你可用的5个节点,每个节点每次仅处理1个任务,完成后自动启动下一个,直到该节点的8个任务全部执行完毕--ntasks-per-node=1:强制每个节点同一时间仅启动1个任务,从根源避免节点内存不足的问题- 分区参数:ElmerFEM需要明确当前任务对应的分区编号和总分区数,示例中的
-partition $SLURM_ARRAY_TASK_ID 40需根据你的仿真实际情况调整(如果分区文件是按case_${SLURM_ARRAY_TASK_ID}.sif命名,则需修改启动命令加载对应文件)
注意事项:
- 务必提前创建脚本中指定的
log目录,否则会因无法写入日志文件报错 - 这种串行执行方式确实会大幅降低计算效率,但完全适配你当前的资源限制需求
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

