计算化学公社

标题: 分享关于xTB效率和内存占用的小测试 [打印本页]

作者
Author:
TaylorWu    时间: 2021-2-2 12:10
标题: 分享关于xTB效率和内存占用的小测试
本帖最后由 TaylorWu 于 2021-2-2 12:14 编辑

Grimme的xTB软件应该来说还是很有潜力的一款针对大孤立体系(比方说蛋白质或者大团簇)的计算软件,这点社长的博文也提到了(http://sobereva.com/214)。许多使用过该软件的前辈表示xTB并行效率不算太好,超过12核心以上就不太能提升效率了,而我自己在计算的时候又遇到了由于体系比较大(指轨道数太多)导致服务器爆内存的情况。

xTB官方的手册中也提到了核心数越多,内存占用会越多的情况:
Note that the memory requirement will increase with the system size and the number of requested threads. Currently, for 3000 atom system each thread requires around 16GB of memory due to the usage of dense matrix algebra for the xTB Hamiltonian.
为此,我针对一个3160原子(其中非氢原子约1500)的已经在GFN2下优化过的蛋白质进行了不同核心数下的单点能计算,看看内存占用情况和并行效率。
我用于测试的机器是17年买的E5服务器,双路各22核心,主频2.2GHz,内存共256GB(频率和几通道未知)计算设置和体系参数如下:

          ...................................................
          :                      SETUP                      :
          :.................................................:
          :  # basis functions                7984          :
          :  # atomic orbitals                7973          :
          :  # shells                         4757          :
          :  # electrons                      8804          :
          :  max. iterations                   250          :
          :  Hamiltonian                  GFN2-xTB          :
          :  restarted?                      false          :
          :  GBSA solvation                   true          :
          :  PC potential                    false          :
          :  electronic temp.          300.0000000     K    :
          :  accuracy                    1.0000000          :
          :  -> integral cutoff          0.2500000E+02      :
          :  -> integral neglect         0.1000000E-07      :
          :  -> SCF convergence          0.1000000E-05 Eh   :
          :  -> wf. convergence          0.1000000E-03 e    :
          :  Broyden damping             0.4000000          :
          ...................................................废话不多说,直接上结果:
coreMaxMem%SCFSteptotal timetotal time(s)total speedSCF time C/W rate totalC/W rate SCF
4
12.90%
15
17m3s
1023
0.00097752
16m30s
3.456
3.488
6
16.80%
15
12m20s
740
0.00135135
11m52s
4.976
5.053
8
20.80%
15
10m17s
617
0.00162075
9m51s
6.474
6.604
10
24.80%
15
8m52s
532
0.0018797
8m28s
7.937
8.132
12
28.70%
15
8m11s
491
0.00203666
7m48s
9.306
9.559
14
32.70%
15
7m33s
453
0.00220751
7m10s
10.738
11.07
16
36.70%
15
7m7s
427
0.002342
6m44s
12.374
12.793
18
39.60%
15
6m58
418
0.002392
6m35s
13.753
14.239
结果分析:
1.内存随着核心数的增加会线性增长,但是还有一个小的截距,这一部分内存推测是各个核心公用的,而随着核心数量增长而增长的则是每个核心独享的moment,额不,memory。
2.total speed 是total time的倒数,它的scaling其实挺不理想的18核的速度是4核的4.5倍核心,但是只有2.5倍速度。并且基本上速度已经到极限了,更多的核心(24核往上)可能甚至会拖慢速度。
3.xTB输出文件的最后会给出CPU time和Wall Time的ratio,但是那个ratio不是加速比!准确地说应该是CPU占用时间和现实时间的比例。计算速度并没有这么高的比例!
4.附上一张图:红色对角线是以4核时的速度为基准的理想标度,蓝色点线是实测值。

Conclusion Time:
xTB的GFN2方法最佳计算核心数大约是12-14核左右,但是如果追求极致速度可以上到18-20核,在往上速度可能会不升反降。另外xTB是吃内存大户,建议大家内存插满,或者想办法简化自己的体系

未来的计划:1.计算不同成分的体系的xTB内存占用和效率(比如过渡金属)。目前已经有了一些初步的内存占用数据,256GB的内存在12核心下,能够算到大约一万五千个轨道的体系。
2.xTB很多人用来做几何优化,但是本次测试时间有限没有拿来尝试做几何优化,不过考虑到几何优化里面的时间大头其实也是在算单点,所以单点的这个效率标度可以大致近似为几何优化的速度标度。有空我还是会测一下几何优化的。




作者
Author:
lyj714    时间: 2021-2-2 12:23
本帖最后由 lyj714 于 2021-2-2 12:30 编辑

应该还可以测试下不同主频cpu下的差异,我认为高主频的cpu效率会高不少。xtb的并行策略应该是mkl thread + omp的组合效率最高(这个默认发布的就是这种),众所周知,omp对于核心越多,加速效率提升越不明显。所以对于xtb这类软件,主频还是起到关键作用。由于最新的xtb6.4.0已经开始向gpu加速上迁移(pgi gpu加速),因此将来可能会有显著提升
作者
Author:
wzkchem5    时间: 2021-2-2 12:30
对于稍微大一点的体系,半经验计算的决速步是Fock矩阵的对角化,而对角化不好并行化。为了进一步提升效率,必须改用比如说基于密度矩阵或者局域轨道的算法,避免对角化整个Fock矩阵,但Grimme组的主要关注点不在这个上面,应该没做。
作者
Author:
TaylorWu    时间: 2021-2-2 16:24
lyj714 发表于 2021-2-2 12:23
应该还可以测试下不同主频cpu下的差异,我认为高主频的cpu效率会高不少。xtb的并行策略应该是mkl thread +  ...

自然高主频(高IPC)的CPU同样核心下算什么都快,您想说的是,高主频/单核心能强的CPU它的最大并行核数可以提升吗?也就是说高单核性能的CPU它的并行效率会更高?这个倒是值得去探索一下!
作者
Author:
TaylorWu    时间: 2021-2-2 16:27
wzkchem5 发表于 2021-2-2 12:30
对于稍微大一点的体系,半经验计算的决速步是Fock矩阵的对角化,而对角化不好并行化。为了进一步提升效率, ...

Grimme组的人在xTB手册里面提到了xTB的哈密顿量是用密度矩阵的算法。我之前也听说(纯听说嗷)有人说xTB大概可以看成是半经验的DFT,所以应该不是Fock矩阵?还请您赐教~
作者
Author:
wzkchem5    时间: 2021-2-2 17:33
TaylorWu 发表于 2021-2-2 16:27
Grimme组的人在xTB手册里面提到了xTB的哈密顿量是用密度矩阵的算法。我之前也听说(纯听说嗷)有人说xTB ...

说的应该是Fock矩阵是用密度矩阵构建的吧
我的意思是,有的半经验程序会完全避开Fock矩阵对角化、再用对角化出来的MO轨道系数计算密度矩阵这个步骤,而是直接把能量看作密度矩阵的函数,对能量做极小化。相当于高斯里的direct minimization算法,SCF迭代次数会比普通SCF算法更多,但是因为避免了矩阵对角化,当矩阵对角化是决速步的时候,有可能比传统算法快、并行效率高。
作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-14 22:49
本帖最后由 lizw@dicp.ac.cn 于 2021-3-14 22:51 编辑

请问怎么调CPU并行数?我在.bashrc里调OMP_NUM_THREADS,发现有时并不起作用,请问是什么问题呢?
但有时又有变化,比如从1调到2有变化,但从2调到4就没有变化了,运行时查看还是2并行。

作者
Author:
ms860309    时间: 2021-3-15 01:17
lizw@dicp.ac.cn 发表于 2021-3-14 22:49
请问怎么调CPU并行数?我在.bashrc里调OMP_NUM_THREADS,发现有时并不起作用,请问是什么问题呢?
但有时 ...

試試看command手動指定 -P 4  !?
作者
Author:
wzkchem5    时间: 2021-3-15 01:23
lizw@dicp.ac.cn 发表于 2021-3-14 22:49
请问怎么调CPU并行数?我在.bashrc里调OMP_NUM_THREADS,发现有时并不起作用,请问是什么问题呢?
但有时 ...

你是怎么查看的?top或者ps aux是吗?
xTB并行效率不是太高,可能指定4核的时候4核全都用上了,但是每个核平均只占用一半,导致CPU利用率只有200%
作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-15 11:02
wzkchem5 发表于 2021-3-15 01:23
你是怎么查看的?top或者ps aux是吗?
xTB并行效率不是太高,可能指定4核的时候4核全都用上了,但是每个 ...

对,我是top看的

作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-15 11:07
ms860309 发表于 2021-3-15 01:17
試試看command手動指定 -P 4  !?

-P 4也可以。不过top查看并行效率还是200%,有可能是xtb本身并行效率就不高导致的,如9#楼所说。
作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-15 11:14
本帖最后由 lizw@dicp.ac.cn 于 2021-3-15 11:38 编辑

对于附件中的输入文件,1个cpu可以算,两个以上并行就出错,出错信息如下:
----------------------------------------------------------------------------------------------------------------
          ...................................................
          :                      SETUP                      :
          :.................................................:
          :  # basis functions                1845          :
          :  # atomic orbitals                1842          :
          :  # shells                         1106          :
          :  # electrons                      2020          :
          :  max. iterations                   250          :
          :  Hamiltonian                  GFN2-xTB          :
          :  restarted?                      false          :
          :  GBSA solvation                  false          :
          :  PC potential                    false          :
          :  electronic temp.          300.0000000     K    :
          :  accuracy                    1.0000000          :
          :  -> integral cutoff          0.2500000E+02      :shi
          :  -> integral neglect         0.1000000E-07      :
          :  -> SCF convergence          0.1000000E-05 Eh   :
          :  -> wf. convergence          0.1000000E-03 e    :
          :  Broyden damping             0.4000000          :
          ...................................................
Segmentation fault (core dumped)

---------------------------------------------------------------------------------------------------------------

我在.bashrc里的设置如下:
----------------------------------------------------------------------------------------------------------------
export PATH=$PATH:/home/li/opt/xtb-6.3.3/bin
export XTBPATH=/home/li/opt/xtb-6.3.3/share/xtb
export OMP_NUM_THREADS=2
export MKL_NUM_THREADS=2
ulimit -s unlimited

----------------------------------------------------------------------------------------------------------------

通过调节“OMP_NUM_THREADS=2"或提交作业时手动"-P 2"来设置并行。我的内存是16G,运行时查看内存还剩很多,好像并没有溢出。
比它原子数少的体系(比如500个原子)就不会出现这样的问题,请问这是什么原因呢?


作者
Author:
ms860309    时间: 2021-3-15 11:54
btw, 我有遇到過1, 2 core正常但是4 core scf不收斂
結果我那時用orca當optimizer似乎沒確認scf convergence導致誤差越來越大
作者
Author:
lyj714    时间: 2021-3-15 13:05
lizw@dicp.ac.cn 发表于 2021-3-15 11:14
对于附件中的输入文件,1个cpu可以算,两个以上并行就出错,出错信息如下:
---------------------------- ...

把OMP_STACKSIZE设置大点,比如export OMP_STACKSIZE=4G
作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-15 13:17
本帖最后由 lizw@dicp.ac.cn 于 2021-3-15 13:18 编辑
lyj714 发表于 2021-3-15 13:05
把OMP_STACKSIZE设置大点,比如export OMP_STACKSIZE=4G

谢谢!试了,也不行,很奇怪。请问附件中的输入文件在您机器上可以多核并行吗?

作者
Author:
lyj714    时间: 2021-3-15 16:53
lizw@dicp.ac.cn 发表于 2021-3-15 13:17
谢谢!试了,也不行,很奇怪。请问附件中的输入文件在您机器上可以多核并行吗?

当然可以,我直接是在Windows跑的也没有任何问题,只要设置了OPM_STACKSIZE。单点gfn2非常快,设置的是4核心并行。你可以查看我的log
作者
Author:
lizw@dicp.ac.cn    时间: 2021-3-16 20:46
lyj714 发表于 2021-3-15 16:53
当然可以,我直接是在Windows跑的也没有任何问题,只要设置了OPM_STACKSIZE。单点gfn2非常快,设置的是4 ...

谢了!这么说应该是我机器设置的问题,我找找原因。
作者
Author:
TaylorWu    时间: 2021-11-22 10:24
lyj714 发表于 2021-2-2 12:23
应该还可以测试下不同主频cpu下的差异,我认为高主频的cpu效率会高不少。xtb的并行策略应该是mkl thread +  ...

最近我试了一下xTB-6.4.1,感觉似乎利用CPU多核并行(36核)计算的速度有所上升,不知道是因为我的服务器升级到了CentOS7然后用的CentOS7对应编译版本带来的效率提高所致。
作者
Author:
zby    时间: 2022-5-19 19:20
lizw@dicp.ac.cn 发表于 2021-3-15 11:14
对于附件中的输入文件,1个cpu可以算,两个以上并行就出错,出错信息如下:
---------------------------- ...

你好,请问你的问题解决了么,我现在也有这个问题




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