计算化学公社

标题: ORCA调用XTB并行导致负优化 [打印本页]

作者
Author:
ZetaFunction    时间: 2023-10-25 16:56
标题: ORCA调用XTB并行导致负优化
考虑对酶体系使用QM/MM MD,QM区域170个原子,想尝试用GFN2-XTB描述QM区域,目前只能想到Amber调用ORCA再调用XTB三层嵌套的方法。

sander.MPI不能调用多线程的ORCA,Amber开发者有解释过说这是接口的问题不好解决,建议用单核的sander反正主要的计算量在QM区。我按以下方式设置成功实现了QM/MM MD模拟,然而计算速度大约是每帧10秒,考虑到所用的是40核的服务器,有点不太合理。所使用的qmmm.in文件:
  1. 0.1ns QM/MM MD
  2. &cntrl
  3.   imin = 0, irest = 1, ntx = 5,
  4.   ntb = 2, pres0 = 1.0, ntp = 1,
  5.   taup = 2.0,
  6.   cut = 10.0,
  7.   ntc = 2, ntf = 2,
  8.   tempi = 300.0, temp0 = 300.0,
  9.   ntt = 3, gamma_ln = 2.0, IG= -1,
  10.   nstlim = 50000, dt = 0.002,
  11.   ntpr = 5, ntwx = 5, ntwr = 5,
  12.   ntr = 0,ioutfm=1,
  13.   ifqnt = 1,
  14. /

  15. &qmmm
  16.   qmmask = '(:DPP)|((:IRP)&(!(@CA,HA,C,O1,O2,N,HN1,HN2,HN3)))|((:89,189,261,345,398,413)&(!(@CA,HA,C,O,N,H)))|((:100,187,259)&(!(@CA,HA,C,O,N,H,CB,HB2,HB3,CG,HG2,HG3)))',
  17.   qmcharge = -1,
  18.   spin = 1,
  19.   qm_theory = 'EXTERN',
  20.   qm_ewald = 0,
  21. /

  22. &orc
  23.   method='XTB2',
  24.   maxcore = 2048,
  25.   basis='',
  26.   cbasis='',
  27.   jbasis='',
  28.   convkey='',
  29.   num_threads = 40,
  30.   use_template = 0,
  31. /
复制代码

然后奇怪的事情就发生了,我尝试计算并行效率,把num_threads参数设置为1,计算速度居然变成了每帧1.5秒,也就是说40核并行的速度居然只有单核的六分之一!这实在诡异,虽然我有听说过XTB并行效率不高,但也不至于有如此严重的负优化,我又测试了num_threads=2,4,8等情况,发现总体趋势居然是线程数越多计算的就越慢。我怀疑是否是在单核的sander调用下ORCA没有使用全部的CPU核心,于是我尝试QM区域换用B97-3c/def2-SV(P),170个原子不到两分钟就能计算完成,可以正常并行。



于是我怀疑是ORCA或者XTB的问题,我把Amber自动生成的ORCA输入文件orc_job.inp单独拿出来手动用ORCA运行,发现设置nprocs 1时总用时不到1秒,其中XTB模块用时0.65秒。当设置nprocs 8时,XTB模块用时0.35秒,尽管加速比不高但至少不是负优化,可是ORCA总用时居然变成了4秒!所使用的orc_job.inp文件:
  1. # Run using SANDER file-based interface for Orca
  2. #
  3. %pal nprocs 8 end
  4. !XTB2
  5. %method
  6.   grid 4
  7.   finalgrid 6
  8. end
  9. %scf
  10.   maxiter 100
  11. end
  12. %MaxCore 2048
  13. ! ENGRAD
  14. ! Angs NoUseSym
  15. %pointcharges "ptchrg.xyz"
  16. *xyzfile -1 1 inpfile.xyz
复制代码


我对ORCA并不十分了解,不太清楚哪些设置可能影响并行,翻阅了ORCA手册后我尝试对输入文件做以下修改,设置nprocs 1,同时指定%xtb NPROCS 8 end,也就是ORCA用一个线程XTB用八个线程,结果XTB模块用时0.32秒,总用时0.5秒,比起单核终于体现出了加速效果。由于XTB默认线程数等于ORCA的总线程数,我又尝试了同时指定ORCA和XTB线程数都为8,结果和只指定ORCA线程为8一样,XTB模块用时虽然还是0.32秒,但是总用时达到了5秒。若指定ORCA总线程为8,XTB线程为1,则总用时达到了12秒。

从我目前的测试结果来看,要么是输入文件的设置有问题,要么是ORCA调用XTB的方式有问题。总之,当ORCA在多线程下运行时,使用XTB方法会导致严重的负优化,必须用单线程的ORCA手动指定XTB的线程数才能正常并行。我猜测可能是因为ORCA通过OpenMPI的方式并行而XTB通过OpenMP的方式并行,每个ORCA进程可能都同时启动了多个XTB线程导致了冲撞。当然也有可能是我的输入文件设置有问题,我对ORCA不是很熟悉,希望有大佬能为我解答。

作者
Author:
啊不错的飞过海    时间: 2023-10-26 15:20
猜测是orca的mpi实现问题,每个mpi进程结束后要通信、汇总数据,拉起释放各种mpi函数把时间耗掉了。不过orca是闭源的没法验证,可以让@wzkchem5 帮忙看看。
作者
Author:
wzkchem5    时间: 2023-10-26 15:47
差不多就是这样的,但orca多进程并行的时候xtb仍然只调用一次(否则就不光是慢的问题,而是不同线程写入文件互相干扰,导致程序报错或者结果错误的问题了)。之所以计算变慢,应该主要是除了xtb以外的步骤的I/O时间,以及创建MPI进程的时间。
一般来说,MPI并行的程序对于几秒就能跑完的计算来说加速效果都不好,计算时间反倒增加也是正常现象。这是MPI并行的普遍问题。相比之下,OpenMP对于零点几秒的计算任务也往往有不错的加速比。当然MPI并行的优势就是可以跨节点并行。
作者
Author:
Rowena    时间: 2024-5-12 17:40
最近发布的AmberTools24 sander可以直接调用xtb了
作者
Author:
ZetaFunction    时间: 2024-5-15 20:55
Rowena 发表于 2024-5-12 17:40
最近发布的AmberTools24 sander可以直接调用xtb了

但是不能并行,效率非常受限 http://bbs.keinsci.com/forum.php ... mp;page=1#pid293794




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3