考虑对酶体系使用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不是很熟悉,希望有大佬能为我解答。
|