我有一个 slurm 批处理脚本,并且正在运行英特尔 MPI。
我想在具有不同进程放置配置的同一组节点上运行两个不同的 MPI 代码。
我正在运行两个 MPI 代码,一个使用 -np = 8,另一个使用 -np = 2。对于 -np=8 的情况,我想从第一个 mpiexec 开始排列 [0, 1, 2, 3]在节点 0 上,从节点 1 上的第二个 mpiexec 开始排名 [4, 5, 6, 7]。
对于 -np=2 的情况,我想在节点0上放置等级[0],在节点1上放置等级[1]。
我已经尝试过 -ppn、-perhost、I_MPI_PERHOST、所有可用选项 此处、英特尔进程放置,但它们都不起作用。
我的脚本直接继承来自 SBATCH 的选项,而不是本地设置。请不要建议srun; mpi 和 srun 有一些问题。我无法在多个节点上使用 srun 运行 mpi(PMI 错误); mpiexec 直接在多个节点上工作。
有什么办法可以实现上述任务吗?这是我当前正在使用的 SBATCH 脚本。
#!/bin/bash
#SBATCH -p small
#SBATCH -N 2
#SBATCH --exclusive
#SBATCH --time=01:00:00
#SBATCH --error=err.out
#SBATCH --output=out.out
#SBATCH --ntasks=10
module load compiler/intel/2018.2.199
module load apps/ucx/ucx_1.13.1
source /opt/ohpc/pub/apps/intel/2018_2/compilers_and_libraries_2018.2.199/linux/mpi/intel64/bin/mpivars.sh intel64
export I_MPI_FALLBACK=disable
#--> First mpiexec
mpiexec.hydra -n 8 ./hello.out &
#--> Second mpiexe
mpiexec.hydra -n 2 ./world.out &
wait
这里我的第一个 mpiexec 在节点 0 上运行等级 [0,1,2,3,4],在节点 1 上运行等级 [5,6,7] 当我的第二个 mpiexec 在节点 0 上运行排名 [0,1] 时。
我希望我的第一个 mpiexec 在节点 0 上运行排位 [0,1,2,3],在节点 1 上运行排位 [4,5,6,7] 我希望我的第二个 mpiexec 在node0上运行rank [0]并在node1上运行rank [1]
我不能使用 srun 我只能使用 mpiexec
有什么方法可以为每个 mpiexec 设置本地设置吗? 任何建议都会有帮助