计算化学公社

标题: 如何提升qe的计算速度? [打印本页]

作者
Author:
Shana    时间: 2023-9-30 10:13
标题: 如何提升qe的计算速度?
各位老师好,
小弟最近因为在尝试VCA方面的计算,因而专门去学习了一下quantum espresso的使用。小弟在使用的时候,发现quantum espresso的计算效率比vasp低了很多。这是小弟的input文件,计算20个原子的Ga2O3体系,k点是30个。在24核的机器上,qe的一个电子步耗时约30s。小弟之前使用vasp的时候,同样的原子数、k点数和cpu核数,vasp在SCAN泛函下一个电子步也才5s左右,如果同样是PBE泛函的话,vasp一个电子步耗时在3s左右。qe和vasp的计算速度差了约10倍。
小弟想问一下各位老师,qe有没有什么方法,提升其计算速度? (, 下载次数 Times of downloads: 45)

作者
Author:
万里云    时间: 2023-9-30 10:38
本帖最后由 万里云 于 2023-10-3 22:26 编辑

输入文件中用了80Ry的动能截断,相当于1000多eV,又是Ga和O这样的主族元素,如果是PAW势,精度很高了。VASP的ENCUT要设置成同样的值才能做比较。

无论VASP还是QE,只要是采用平面波基组的程序,做变体积的变胞优化时都会遇到Pulay应力的问题。解决办法有两个:加大动能截断,或者做定体积变胞再手动拟合状态方程。因此可以把动能截断砍掉一些,然后定体积变胞。

再就是调节QE的并行参数。这些参数不是写在输入文件里面,而是在命令行指定,记得有-ni -nk -nb -nt -nd几个。ni是对image并行,只在NEB计算时才有意义。nk/nb/nt相当于KPAR/NPAR/NCORE。nd是scalapack并行时矩阵分块方案,貌似vasp中没开放这个参数。具体要做测试。
作者
Author:
Shana    时间: 2023-9-30 10:56
万里云 发表于 2023-9-30 10:38
输入文件中用了80Ry的动能截断,相当于1000多eV,又是Ga和O这样的主族元素。如果是PAW势,精度很高了。VASP ...

多谢老师,解释的非常清楚。感谢老师指导。
作者
Author:
ahxb    时间: 2023-9-30 13:44
qe可以用OpenMP并行,也能用MPI并行,具体是否支持和怎么编译有关。如果原先使用全MPI并行,可以考虑设置OpenMP并行核数,能适当加快计算时间,一般也会节约一些内存。
作者
Author:
元无虚空    时间: 2023-9-30 14:16
ahxb 发表于 2023-9-30 13:44
qe可以用OpenMP并行,也能用MPI并行,具体是否支持和怎么编译有关。如果原先使用全MPI并行,可以考虑设置Op ...

要达到最高运行效率,需要合理搭配openmp+mpi杂化并行
作者
Author:
gog    时间: 2023-10-1 07:07
也和编译有关
作者
Author:
万里云    时间: 2023-10-1 20:25
MPI+OpenMP混合并行效率一般是比不过纯MPI的。MPI是进程级并行,内存占用大,为了不爆内存,进程数有时候要小于物理核心数。为了不浪费剩下的核心,就通过OpenMP进行线程级并行。
作者
Author:
丁越    时间: 2023-10-3 20:30
万里云 发表于 2023-9-30 10:38
输入文件中用了80Ry的动能截断,相当于1000多eV,又是Ga和O这样的主族元素,如果是PAW势,精度很高了。VASP ...

(, 下载次数 Times of downloads: 51)
请问一下老师,这个-nimage参数我有点没看明白到底和NEB的插点数目(image)怎么对应联系的?即每个插点结构用多少个核心并行和这个参数是怎么一个对应关系。我看后面几个参数要优化的时候还必须要知道FFT格点,KS states 的数目等等才能估计,还挺麻烦的,不知道老师有什么简易的优化策略?

作者
Author:
万里云    时间: 2023-10-3 21:03
本帖最后由 万里云 于 2023-10-3 21:04 编辑
丁越 发表于 2023-10-3 20:30
请问一下老师,这个-nimage参数我有点没看明白到底和NEB的插点数目(image)怎么对应联系的?即每个插点 ...

ni/nk/kb/ntg分别对应image, kpoint, bands和FFT格点并行,这四个参数相乘必需等于申请的总核数。大致规律是并行层级越高,跨进程数据交换量越少,内存占用量越大。并行层级越低,数据交换量越大,内存占用越少。但内存占用看峰值,耗时看总和。因此内存占用满足这个规律,耗时不一定满足。

如果是做NEB计算,假设插入6个image,就申请6个节点,同时将ni设置成6。这样每个节点只在算出相应image的受力后才调用一次MPI,数据交换量是最小的。又假设每个节点有32个物理核心,那么nk*nb*nt必需等于32。据个人经验,如果是100原子左右,不可约k点在10以内的体系,用VASP的话1*1*32效率是最高的,也就是KPAR=1, NCORE=32。NPAR会自动设置为1。

如果是静态计算、优化、能带计算等单image计算,假设有4个不可约k点,建议申请4个节点,设置KPAR=4,NCORE=32,即每个节点负责一部分k点,节点内禁用band并行,所有的核都用来作FFT并行。

以上是在双路6326 CPU/256GB内存/IB互联集群上测试的结果。QE的并行方案可能和VASP有很大区别,以上经验很可能不适用,因此要多做测试。磨刀不误砍柴工,参数选得好,相比于最差的情形能节省三分之一的时间。
作者
Author:
丁越    时间: 2023-10-3 21:27
本帖最后由 丁越 于 2023-10-3 21:31 编辑
万里云 发表于 2023-10-3 21:03
ni/nk/kb/ntg分别对应image, kpoint, bands和FFT格点并行,这四个参数相乘必需等于申请的总核数。大致规 ...

感谢老师详细解答
我还有个问题请教一下老师,假如NEB计算是在单个节点内进行,那么这个nimage的划分是否是有必要的呢?

另外这句话中"nk/nb/nb"应该是笔误了:
nk/nb/nb相当于KPAR/NPAR/NCORE。nd是scalapack并行时矩阵分块方案



作者
Author:
万里云    时间: 2023-10-3 22:28
丁越 发表于 2023-10-3 21:27
感谢老师详细解答
我还有个问题请教一下老师,假如NEB计算是在单个节点内进行,那么这个nimage的划 ...

ni指定了同时计算多少个image的受力,单节点多image很可能爆内存。
作者
Author:
卡开发发    时间: 2023-10-5 09:47
额外补充两点:
1、磁矩和迭代参数适当调整。好的初猜和平顺的迭代可能一些能带收敛会较快,那么后面的步骤对角化的速度会逐渐变快。
2、在确保数值稳定的情况,对角化可以使用RMM-Davidson或者RMM-Paro用RMM-DIIS对个别过程进行加速。


作者
Author:
Shana    时间: 2023-10-23 16:13
卡开发发 发表于 2023-10-5 09:47
额外补充两点:
1、磁矩和迭代参数适当调整。好的初猜和平顺的迭代可能一些能带收敛会较快,那么后面的步 ...

感谢卡老师
作者
Author:
Riku    时间: 2023-11-18 18:09
截断能太大了,一般50Ry就差不多了,截断能越大内存占用越多。Ry与eV的换算可以使用这个网站:https://citizenmaths.com/zh-cn/e ... tronvolts-converter




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