Parallel processing 用于并行作业的Orca和OpenMPI问题

Parallel processing 用于并行作业的Orca和OpenMPI问题,parallel-processing,openmpi,Parallel Processing,Openmpi,社区好: 我最近开始使用ORCA软件进行一些量子计算,但在我的大学集群中进行并行计算时遇到了很多问题 要安装Orca,我使用了静态版本: orca_4_2_1_linux_x86-64_openmpi314.tar.xz。 在集群的共享方向(/data/shared/opt/ORCA/)。 并输入我的~/.bash\u档案: export PATH="/data/shared/opt/ORCA/orca_4_2_1_linux_x86-64_openmpi314:$PATH"

社区好:

我最近开始使用ORCA软件进行一些量子计算,但在我的大学集群中进行并行计算时遇到了很多问题

要安装Orca,我使用了静态版本: orca_4_2_1_linux_x86-64_openmpi314.tar.xz。 在集群的共享方向(/data/shared/opt/ORCA/)。 并输入我的~/.bash\u档案

export PATH="/data/shared/opt/ORCA/orca_4_2_1_linux_x86-64_openmpi314:$PATH"
export LD_LIBRARY_PATH="/data/shared/opt/ORCA/orca_4_2_1_linux_x86-64_openmpi314:$LD_LIBRARY_PATH"
#!/bin/bash
#SBATCH -p deflt #which partition I want
#SBATCH -o cis1_bh267_m_Cell_152_myjob.out #path for the slurm output
#SBATCH -e cis1_bh267_m_Cell_152_myjob.err #path for the slurm error output
#SBATCH -c 12 #number of cpu(logical cores)/task (task is normally an MPI process, default is one and the option to change it is -n)
#SBATCH -t 2-00:00 #how many time I want the resources (this impacts the job priority as well)
#SBATCH --job-name=cis1_bh267_m_Cell_152 #(to recognize your jobs when checking them with "squeue -u USERID")
#SBATCH -N 1 #number of node, usually 1 when no parallelization over nodes
#SBATCH --nice=0 #lowering your priority if >0
#SBATCH --gpus=0 #number of gpu you want

# This block is echoing some SLURM variables
echo "Jobid = $SLURM_JOBID"
echo "Host = $SLURM_JOB_NODELIST"
echo "Jobname = $SLURM_JOB_NAME"
echo "Subcwd = $SLURM_SUBMIT_DIR"
echo "SLURM_CPUS_PER_TASK = $SLURM_CPUS_PER_TASK"

# This block is for the execution of the program
export PATH="/data/shared/opt/ORCA/openmpi314/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/data/shared/opt/ORCA/openmpi314/lib"
$(which orca) ${SLURM_JOB_NAME}.inp > ${SLURM_JOB_NAME}.log --use-hwthread-cpus
用于安装相应的OpenMPI版本(3.1.4

当我使用前端服务器时,一切都很好: 用一个像这样的.sh:

#! /bin/bash
export PATH="/data/shared/opt/ORCA/openmpi314/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/data/shared/opt/ORCA/openmpi314/lib"
$(which orca) test.inp > test.out
# Computation of myjob at b3lyp/6-31+G(d,p)
%pal nprocs 10 end
%maxcore 8192

! RKS B3LYP 6-31+G(d,p)
! TightSCF Grid5 NoFinalGrid
! Opt
! Freq
%cpcm 
    smd true
    SMDsolvent "water"
end

* xyz 0 1
C 0 0 0
O 0 0 1.5
*
输入如下:

#! /bin/bash
export PATH="/data/shared/opt/ORCA/openmpi314/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/data/shared/opt/ORCA/openmpi314/lib"
$(which orca) test.inp > test.out
# Computation of myjob at b3lyp/6-31+G(d,p)
%pal nprocs 10 end
%maxcore 8192

! RKS B3LYP 6-31+G(d,p)
! TightSCF Grid5 NoFinalGrid
! Opt
! Freq
%cpcm 
    smd true
    SMDsolvent "water"
end

* xyz 0 1
C 0 0 0
O 0 0 1.5
*
使用节点时出现问题:

.inp文件:

#! Computation at RKS B3LYP/6-31+G(d,p) for cis1_bh267_m_Cell_152
%pal nprocs 12 end
%maxcore 8192

! RKS B3LYP 6-31+G(d,p)
! TightSCF Grid5 NoFinalGrid
! Opt
! Freq
%cpcm 
    smd true
    SMDsolvent "water"
end

* xyz 0 1
 C  -4.38728130   0.21799058   0.17853303
 C  -3.02072869   0.82609890  -0.29733316
 F  -2.96869122   2.10937041   0.07179384
 F  -3.01136328   0.87651596  -1.63230798
 C  -1.82118365   0.05327804   0.23420220
 O  -2.26240947  -0.92805650   1.01540713
 C  -0.53557484   0.33394113  -0.05236121
 C   0.54692198  -0.46942807   0.50027196
 O   0.31128292  -1.43114232   1.22440290
 C   1.93990391  -0.12927675   0.16510948
 C   2.87355011  -1.15536140  -0.00858832
 C   4.18738231  -0.82592189  -0.32880964
 C   4.53045856   0.52514329  -0.45102225
 N   3.63662927   1.52101319  -0.26705841
 C   2.36381718   1.20228695   0.03146190
 F  -4.51788749   0.24084604   1.49796862
 F  -4.53935644  -1.04617745  -0.19111502
 F  -5.43718443   0.87033190  -0.30564680
 H  -1.46980819  -1.48461498   1.39034280
 H  -0.26291843   1.15748249  -0.71875720
 H   2.57132559  -2.20300864   0.10283592
 H   4.93858460  -1.60267627  -0.48060140
 H   5.55483009   0.83859415  -0.70271364
 H   1.67507560   2.05019549   0.17738396
*
.sh文件(Slurm作业):

我建议使用
--use hwthread cpu
标志,但使用和不使用该标志时都会出现相同的问题。 所有错误都是:

系统中的可用插槽不足,无法满足应用程序请求的12个插槽:/data/shared/opt/ORCA/ORCA_4_2_1_linux_x86-64_openmpi314/ORCA_gtoint_mpi

为应用程序请求更少的插槽,或者提供更多可用插槽。“插槽”是一个开放的MPI术语,表示我们可以在其中启动进程的可分配单元。可用插槽的数量由运行Open MPI进程的环境定义:

一,。主机文件,通过“slots=N”子句(N默认为处理器内核数,如果未提供)

二,。--host命令行参数,通过主机名上的“:N”后缀(如果未提供,则N默认为1)

三,。资源管理器(如SLURM、PBS/Torque、LSF等)

四,。如果没有主机文件、--host命令行参数或RM,则Open MPI默认为上述所有情况下的处理器内核数,如果希望Open MPI默认为处理器内核数 使用--use hwthread CPU选项,而不是处理器内核的数量

或者,在决定要启动的进程数量时,可以使用--oversubscribe选项忽略可用插槽的数量

*[文件orca_tools/qcmg.cpp,第458行]:

。。。。中止运行*

当我转到计算的输出时,它看起来像开始运行,但当启动并行作业时失败并给出:

ORCA通过GTOInt中的错误终止完成 调用命令:mpirun-np 12——使用hwthread CPU/data/shared/opt/ORCA/ORCA_4_2_1_linux_x86-64_openmpi314/ORCA_gtoint_mpi cis1_bh267_m_Cell_448.int.tmp cis1_bh267_m_Cell_448 [文件orca_tools/qcmg.cpp,第458行]: .... 中止运行

集群上有两种节点
: 其中一个重点是:

Xeon 6核E-2136@3.30GHz(12个逻辑核)和Nvidia GTX 1070Ti

其他的是:

AMD Epyc 24核(24逻辑核)和4x Nvidia RTX 2080Ti 使用命令
scoontrol show node
每个组中一个节点的详细信息如下:

第一组: 第二组 我在Slurm脚本中使用标志
-c,--cpu per task=integer
;在Orca的输入中,命令
%pal nprocs integer end
。我测试了这两个参数的不同组合,以查看我是否使用了比可用CPU更多的CPU:

-c、 --每个任务的CPU=整数 %pal nprocs整数结束 没有一个 6. 没有一个 3. 没有一个 2. 1. 2. 1. 12 2. 6. 3. 4. 12 12 面临同样的问题。 显式声明--前缀${OMPI_HOME}直接作为ORCA参数,使用静态链接的ORCA版本可以帮助我:

export RSH_COMMAND="/usr/bin/ssh"
export PARAMS="--mca routed direct --oversubscribe -machinefile ${HOSTS_FILE} --prefix ${OMPI_HOME}"
$ORCA_DIR/orca $WORKDIR/$JOBFILE.inp "$PARAMS" > $WORKDIR/$JOBFILE.out

另外,构建OpenMPI3.1.x时最好使用--disable内置原子标志。

谢谢@Alexey的回答。对不起,标签错了,就像我说的,我是这方面的新手

问题不在Orca或OpenMPI配置中,而是在用于调度Slurm作业的bash脚本中

我认为整个虎鲸的工作本身就是斯劳姆所说的“任务”。出于这个原因,我声明了标志——每个任务的CPU数等于我想用Orca执行的并行作业数。但问题是每个并行Orca作业(使用OpenMPI启动)都是Slurm的任务。因此,在我的Slurm脚本中,我保留了一个至少有12个CPU的节点,但当Orca启动它们的并行作业时,每个节点都要求12个CPU,所以“没有足够的可用插槽…”,因为我需要144个CPU

我的问题表中的其他案例由于另一个原因而失败。我同时启动了5个不同的奥卡计算。现在,因为每个任务的CPU可以是无、1、2或3;这五个计算可能输入到同一个节点或另一个节点中,具有此数量的空闲CPU,但当Orca请求并行作业时,再次失败,因为节点上没有此数量的CPU。 我找到的解决方案非常简单。在Slurm的.sh脚本中,我添加了以下内容:

#SBATCH --mincpus=n*m
#SBATCH --ntasks=n
#SBATCH --cpus-per-task m
而不仅仅是:

#SBATCH --cpus-per-task m
其中,n将等于Orca输入上指定的并行作业数(
%pal nprocs n end
)和m每个并行Orca作业要使用的CPU数。 在我的例子中,我使用n=12,m=1。使用标志
--mincpus
我确保使用一个至少有12个CPU的节点并分配它们。对于
--CPU per task
,这个标志的作用非常明显(甚至对我来说:-),顺便说一下,它的默认值为1,我不知道每个OpenMPI Orca作业是否有超过1个CPU可以提高计算速度。而
--ntasks
则向Slurm提供了您将要完成多少任务的信息。 当然,如果您知道任务的数量和每个任务的CPU数,就很容易知道需要保留多少CPU,但我不知道这是否也很容易理解:-)。因此,为了确保分配正确的CPU数量,我使用了
--mincpus
标志,但可能不需要。问题是它现在起作用了

这也很重要
#SBATCH --cpus-per-task m