如何用srun单次启动代码并分配8个CPU与MPI任务?
解决ORCA在无SSH集群上的srun参数配置问题
核心需求
在单节点上仅执行一次execute.sh脚本,同时为脚本内的ORCA程序分配8个CPU核心,满足其8个MPI任务的运行要求。
正确的srun参数配置
使用以下命令调用execute.sh:
srun --nodes=1 --ntasks=1 --cpus-per-task=8 --exclusive ./execute.sh
参数解释
--nodes=1:限定任务在单个节点运行,匹配你的单节点计算逻辑--ntasks=1:仅启动一个任务实例,确保execute.sh只执行一次--cpus-per-task=8:为该任务分配8个CPU核心,供ORCA的MPI进程使用--exclusive:独占节点资源(可选),避免其他任务抢占内存或CPU,保证/dev/shm的使用稳定性
配套的execute.sh调整
在execute.sh中,需正确启动ORCA并行任务,确保它能使用分配的8个核心:
如果ORCA通过MPI启动:
# 假设ORCA路径已加入环境变量 mpirun -np 8 orca your_input.inp > your_output.out
如果ORCA支持直接指定核心数:
# 在输入文件中添加%pal nprocs 8 end,或直接用命令行参数 orca your_input.inp > your_output.out %pal nprocs 8 end
为什么之前的配置失败
- N_Tasks=1、CPUs=8:虽然分配了8个CPU,但ORCA尝试启动8个MPI进程时,srun默认限制单个任务仅能初始化1个MPI进程槽,导致MPI无法启动足够进程
- N_Tasks=8、CPUs=1:srun会为每个任务实例执行一次
execute.sh,因此脚本被重复运行8次,不符合单实例启动的需求
额外优化建议
由于你使用/dev/shm作为临时目录,建议通过srun的--mem参数分配足够内存,避免内存不足:
srun --nodes=1 --ntasks=1 --cpus-per-task=8 --mem=64G --exclusive ./execute.sh
(64G可根据你的计算需求调整)
内容的提问来源于stack exchange,提问作者Lion
相关产品推荐
相关产品推荐

