中国科学软件网-首页
如何在并行计算机上运行Molpro
新闻来源:科学软件网    发表时间:2025/12/25 15:41:34

Molpro可在分布式内存多处理器系统(包括工作站集群)上运行,其并行计算通过Global Arrays并行工具包或MPI-2库进行控制。部分代码段也可通过OpenMP协议实现共享内存并行计算,但此类功能较为有限,目前暂不建议使用。需特别说明的是,该软件仍存在部分未并行化或仅部分并行化的代码段,这些代码会在各进程中重复执行。此外,某些已并行化的模块依赖于高速节点间通信,在普通网络环境中运行效率可能极低。因此在多用户环境中使用时,需通过审慎测试避免资源浪费。

Molpro通过MPI及ppidd库实现进程间协同运算--该库的具体运行模式取决于软件配置与构建方式,可基于GlobalArrays(GA) (http://www.emsl.pnl.gov/docs/global )并行工具包或纯MPI架构实现。ppidd库的技术细节详见《计算机物理通信》第180卷(2009年)第2673-2679页(http://dx.doi.org/10.1016/j.cpc.2009.05.002)。出于性能考量,建议优先选用GlobalArrays(GA)方案。目前存在多种GA实现方案(运行时环境),不同方案各有优劣(详见《GA安装指南》)。

自Molpro 2021.2版本起,在单节点计算中默认启用磁盘存储选项,此时大型数据结构将直接保存在MPI文件中。若需恢复旧版本的行为,可通过命令行选项–ga-impl ga实现。但需注意,当使用socket GA运行时,若采用–ga-impl ga选项,许多计算场景需预先分配GA内存;若未能分配足够的GA内存,可能导致程序崩溃或结果错误。而若使用GA的mpi-pr运行时或磁盘存储选项,则无需预先分配GA内存。

指定并行执行方式

以下附加选项可用于molpro命令来指定和控制并行计算。此外,适当的内存参数配置(-m、-M、-G)也至关重要,具体说明请参阅“内存参数配置”章节(https://www.molpro.net/manual/doku.php?id=running_molpro_on_parallel_computers#memory_specifications)。

• -n | --tasks tasks指定并行进程的数量,默认值为1。

• -N | --task-specification node1:tasks1, node2:tasks2…… node1、node2等用于指定运行任务的主机名称,task1、task2等则指定各节点上运行的进程数量。

• --ga-impl method指定大型数据结构在并行环境中的存储方式。可用选项为GA(GlobalArrays,默认方式)或disk(MPI文件存储,参见磁盘选项)。该选项对较新的程序模块(如Hartree-Fock、DFT、MCSCF/CASSCF及PNO系列程序)具有重要影响。

• -D | --global-scratch directory用于指定程序的全局暂存目录,该目录在多节点计算中需能被所有处理器访问。此选项仅在使用磁盘存储选项的并行计算中生效。

• --all-outputs 在并行运行时为每个进程生成独立的输出文件。

内存参数配置

大规模并行Molpro计算可能涉及大量全局数据结构,这在PNO-LCCSD计算中尤为显著,其次在Hartree-Fock、DFT和MCSCF/CASSCF计算中也有体现。对于此类计算,可能需要在Molpro的“栈”内存(由命令行选项-m或输入文件中的memory指令定义)与GA内存(由命令行选项-G定义)之间合理分配机器的可用内存:

• 若禁用磁盘选项(默认设置)且使用旧版GA运行时(如sockets、openib等):必须通过-G或-M选项(见下文)指定足够的GA内存容量,并由Molpro在计算开始时预先分配,否则计算可能崩溃或产生错误结果。

• 若禁用磁盘选项但使用基于comex的GA运行时(如mpi-pr),或启用磁盘选项但暂存目录位于tmpfs中:此时-G或-M选项非强制要求,但仍需为全局数据结构预留充足的物理内存。

• 若启用磁盘选项且暂存目录位于物理磁盘上:此时GA内存占用可忽略不计,无需指定-G或-M选项。但若预留部分内存供系统缓冲I/O操作,计算性能可能会有所提升。

• 需注意的是,自Molpro 2021.2版本起,单节点计算已默认启用磁盘存储选项。若此设置导致性能问题,可通过将环境变量MOLPRO_GA_IMPL设置为GA,或使用--ga-impl ga命令行参数,以恢复此前将大型数据结构存储于GlobalArrays的运行模式。

-m与-G选项默认以兆字(m)为单位,但也可使用千兆字(g)单位(例如-m1000等价于-m1000m和-m1g)。Molpro在每个节点分配的总内存M为(n⋅m + G)/N,其中n为总进程数(-n选项),m为每个进程的栈内存(-m选项),G为GA内存(-G选项),N为节点数量。此外,每个进程还需为程序本身预留至少200兆字(MW)内存。整体而言,计算所需内存总量约为8⋅[n⋅(m+0.3)+G]/N GB(千兆字节)(其中n、m、G以千兆字gw为单位),且不应超过所用机器的物理内存总量。需特别说明,在许多计算场景中为系统预留部分内存用于缓冲I/O操作,可能显著提升运行性能。

“栈”内存与GA内存的合理分配比例取决于具体计算体系和研究对象,通常需要通过实验测试才能获得最优性能。作为经验法则,可参考以下初始配置方案:

 密度拟合及PNO计算:将内存按1:1比例分配给GA内存与栈内存。  

• HF、DFT及MCSCF计算:75%分配给栈内存,25%分配给GA内存。  

• 单节点正则MRCI或CCSD(T)计算:无需分配GA内存空间。

为便于内存分配,程序提供了-M选项(下文以M表示其数值)。通过该选项可指定Molpro可分配的总内存量:在DF/PNO计算中,内存将按1:1比例分配给栈内存与GA内存;其他类型计算则按3:1比例分配。因此,若无特殊说明,在DF/PNO计算中,每个进程的栈内存为m=M⋅N/(2⋅n),总GA内存为G=N⋅M/2。若需使用GA存储大型数据结构,建议在.molprorc配置文件中设置默认的-M参数值(基于磁盘的计算请勿如此设置,参见磁盘选项说明)。例如:对于配备256GB内存和20核的专用计算节点,可设置-M=25g(.molprorc文件可置于用户主目录和/或任务提交目录,后者优先级更高)。此后每次运行Molpro时,程序将能自动利用机器的全部内存,并在栈内存与GA内存间进行合理分配。此默认设置可通过Molpro命令行选项`-m`和/或`-G`进行覆盖或修改,也可通过输入文件中的参数调整(参见内存分配章节),且输入文件参数的优先级高于命令行选项。此后每次运行Molpro时,程序将能自动利用机器的全部内存,并在栈内存与GA内存间进行合理分配。此默认设置可通过Molpro命令行选项-m和/或-G进行覆盖或修改,也可通过输入文件中的参数调整(参见内存分配章节),且输入文件参数的优先级高于命令行选项。

根据GA运行时环境与MPI库的具体配置,当使用--ga-impl ga选项时,GA内存分配失败的报错信息可能具有误导性。我们在OpenMPI与mpi-pr GA运行时环境中的测试表明,此类分配故障通常表现为“Bus error”,但有时甚至不会显示任何错误提示。

若指定了-G或-M选项,部分程序会在初始阶段检测GA空间是否充足。若空间不足,程序将报错退出并打印预估所需的GA空间容量。此时应按照提示的容量值(至少)通过-G选项重新指定GA空间后再次运行计算。若计算过程中出现崩溃但未显示此类提示信息,也应尝试增加GA空间容量或启用磁盘选项后重新计算,但需注意确保每个节点的总内存分配不超过合理范围。

不同选项组合的运行特性如下:

• 仅使用-M:按前述规则自动分配内存。  

• 同时使用-M与-m:为每个核心分配指定容量m,剩余内存分配给GA。  

• 同时使用-M与-G:为GA分配指定容量G,剩余内存平均分配给各进程的栈内存。  

• 同时使用-M、-G与-m:按指定容量分配m与G,此时-M值将被忽略。

• 同时使用-G与-m:按指定容量分配m与G。  

• 仅使用-m:分配指定容量m,同时假定GA空间无限大,但不会预先分配或检测实际容量。  

• 仅使用-G:分配指定容量G,并为栈内存分配等量总空间(即总内存M=2G)。   

• 未指定任何参数:默认按-m32m处理。

若设置了-G或-M参数,除非GA使用辅助进程(即采用基于comix的运行时且无需预分配GA),否则将预先分配GA空间。若未指定-G或-M参数,则不会执行GA空间的预分配与容量检测。

磁盘选项

自2021.1版本起,Molpro可采用MPI文件替代GlobalArrays存储大型全局数据。此功能可通过设置环境变量MOLPRO_GA_IMPL=DISK全局启用,或通过命令行选项--ga-impl disk单独启用。自2021.2版本开始,单节点计算已默认启用磁盘存储选项。Molpro中部分程序模块(包括DF-HF、DF-KS、(DF-)MULTI、DF-TDDFT及PNO-LCCSD)还支持通过输入参数implementation=disk为特定计算步骤启用磁盘存储选项。这些MPI文件所使用的文件系统必须能被所有处理器访问。默认情况下程序将使用Molpro预设的暂存目录,但也可通过命令行选项-D或环境变量MOLPRO_GLOBAL_SCRATCH指定其他目录用于存储MPI文件。在单节点计算中,该目录可设置为tmpfs(例如-D /dev/shm),此时GA/MPI文件将保存在共享内存中。

使用磁盘存储选项可规避GA预分配相关问题。此时仅需通过-m参数或输入文件中的memory指令为每个处理器指定Molpro暂存内存。为避免GA预分配,请勿设置-M或-G参数,并确保.molprorc等配置文件中未包含-M和-G设置。

磁盘存储选项的性能表现取决于I/O吞吐能力、可用系统内存、MPI软件及计算任务特性。通常最佳实践是为系统预留部分内存用于缓冲I/O操作(即不要通过-m参数或memory输入指令将所有可用内存全部分配给Molpro)。若合理配置,单节点基于磁盘的计算性能在多数据情况下可与基于GA的方案相媲美,在使用固态硬盘时尤为显著。

梯度或Hessian矩阵的易并行计算(mppx模式)

梯度或Hessian矩阵的数值计算,以及势能面的自动生成,需要在不同(位移)几何结构下执行大量相似计算。程序为梯度、Hessian和势能面计算模块实现了不同几何结构下能量和/或梯度的自动并行计算。在此称为mppx模式的运行方式中,每个处理核心以串行模式独立执行计算。该过程将自动利用-n参数指定的可用核心数。若需关闭自动mppx处理功能,可在OPTG、FREQ或HESSIAN命令行中设置选项mppx=0,此时程序将以标准并行模式处理每个位移计算。

开发者选项

调试选项

• ga-debug 启用GA调试信息输出。

• check-collective 调试时检查集体通信操作。

基于纯MPI的PPIDD构建选项

若使用Molpro二进制发行版或采用GlobalArrays工具包构建的Molpro(此为推荐方式),本节内容不适用。  

在纯MPI实现的PPIDD中,可选择使用MPI-2单边内存访问机制,或指定部分进程作为数据“辅助进程”。通常发现使用至少一个专用辅助进程能显著提升性能,某些情况下建议指定更多辅助进程。在典型多核集群机器中,可扩展的方案是在每个节点预留一个内核作为辅助进程,但在多数情况下使用更少的辅助进程也可满足需求,从而为计算任务释放更多内核资源。选项如下:

• --multiple-helper-server nprocs_per_server启用多辅助服务器模式,nprocs_per_server参数设置每个辅助服务器所服务的进程数量。例如,当总进程数指定为32且nprocs_per_server=8时,每8个进程(包含辅助服务器自身)将共享一个辅助服务器,共计生成4个辅助服务器。若nprocs_per_server参数设置不合理(即任何小于2的整数),该值将自动重置为极大数值,此时功能等同于--single-helper-server选项。

• --node-helper-server 指定在每个节点上启用一个辅助服务器(前提是所有节点配置对称且进程数分配合理,即各节点进程数相同且大于1),此为该选项的默认行为。若条件不满足,则仅针对所有进程/节点启用单一辅助服务器,此时功能等同于--single-helper-server选项。 

• --single-helper-server 指定所有进程仅使用单一辅助服务器。

•--no-helper-server 禁用辅助服务器功能。

启用单个或多个辅助服务器时,一个或多个进程将作为数据辅助服务器运行,其余进程用于计算任务。即便如此,该模式在大规模进程运行时仍能保持较强的性能竞争力。若禁用辅助服务器,所有进程均用于计算;但由于部分现有MPI-2标准单边操作的实现性能欠佳,此时计算性能可能不理想。

北京天演融智软件有限公司(科学软件网)自2006年以来,专注提供正版科研软件,可为中国的Molpro用户提供优质的软件销售和本地化服务。