计算化学公社
标题:
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文件:
0.1ns QM/MM MD
&cntrl
imin = 0, irest = 1, ntx = 5,
ntb = 2, pres0 = 1.0, ntp = 1,
taup = 2.0,
cut = 10.0,
ntc = 2, ntf = 2,
tempi = 300.0, temp0 = 300.0,
ntt = 3, gamma_ln = 2.0, IG= -1,
nstlim = 50000, dt = 0.002,
ntpr = 5, ntwx = 5, ntwr = 5,
ntr = 0,ioutfm=1,
ifqnt = 1,
/
&qmmm
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)))',
qmcharge = -1,
spin = 1,
qm_theory = 'EXTERN',
qm_ewald = 0,
/
&orc
method='XTB2',
maxcore = 2048,
basis='',
cbasis='',
jbasis='',
convkey='',
num_threads = 40,
use_template = 0,
/
复制代码
然后奇怪的事情就发生了,我尝试计算并行效率,把
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文件:
# Run using SANDER file-based interface for Orca
#
%pal nprocs 8 end
!XTB2
%method
grid 4
finalgrid 6
end
%scf
maxiter 100
end
%MaxCore 2048
! ENGRAD
! Angs NoUseSym
%pointcharges "ptchrg.xyz"
*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