计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1343|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[辅助/分析程序] Gaussian + QUICK 联用脚本

[复制链接 Copy URL]

68

帖子

7

威望

1901

eV
积分
2109

Level 5 (御坂)

本帖最后由 mizu-bai 于 2023-6-6 21:40 编辑

Gaussian + QUICK 联用脚本
2023.06.06

之前在论坛帖子看到了一个 GPU 加速的量化软件 QUICK,见 [其它量化程序] 经验交流:GPU加速的量化程序QUICK,正好导师给配的工位电脑有张 GTX 1660,最近考试考完了,就打算玩玩看。

1. QUICK 的编译

QUICK 在 GitHub 上开源,地址 https://github.com/merzlab/QUICK。笔者从 Release 里下载了 QUICK-22.03 版本,放到 /opt 下解压,进入源码包后,创建编译目录。然后运行 cmake 配置,这里笔者使用的编译器为 gcc 9.4.0,CUDA 版本 11.3。

$ cd QUICK-QUICK-22.03
$ mkdir build
$ cd build
$ cmake .. -DCOMPILER=GNU -DMPI=TRUE -DCUDA=TRUE -DQUICK_USER_ARCH=turing -DCMAKE_INSTALL_PREFIX=/opt/QUICK-QUICK-22.03

注意这里 QUICK_USER_ARCH 选项要根据自己的显卡设置,GTX 1660 属于 Turing 架构,所在这里写了 Turing。如果是其他的显卡请自己查。cmake 最后会给出一个 Summary,可以检查一下有没有问题。

-- **************************************************************************
--                               Build Report
--                              Compiler Flags:
-- C No-Opt:          -O0
-- C Optimized:       -O2 -mtune=native
--
-- CXX No-Opt:        -O0
-- CXX Optimized:     -O2 -mtune=native
--
-- Fortran No-Opt:     -ffree-line-length-none -cpp -O0
-- Fortran Optimized:  -ffree-line-length-none -cpp -O2 -mtune=native
--
--                           3rd Party Libraries
-- ---building bundled: -----------------------------------------------------
-- ---using installed: ------------------------------------------------------
-- mkl - alternate implementation of lapack and blas that is tuned for speed  
-- ---disabled: ------------------------------------------------
-- blas - for fundamental linear algebra calculations
-- lapack - for fundamental linear algebra calculations
-- mirp - MolSSI Integral Reference Project library for computing the Boys function in QUICK

--                                Features:
-- MPI:                     ON
-- CUDA:                    ON
-- Build Shared Libraries:  ON
-- Build configuration:     RELEASE
-- Target Processor:        x86_64
-- Build Documentation:     OFF
-- Install location:        /opt/QUICK-QUICK-22.03/

--                               Compilers:
--         C: GNU 9.4.0 (/usr/bin/gcc)
--       CXX: GNU 9.4.0 (/usr/bin/g++)
--   Fortran: GNU 9.4.0 (/usr/bin/gfortran)
-- **************************************************************************
-- Configuring done (9.7s)
-- Generating done (0.5s)
-- Build files have been written to: /opt/QUICK-QUICK-22.03/build

然后就可以编译安装了。

$ make -j20
$ make install

使用之前需要 source 一下 /opt/QUICK-QUICK-22.03/quick.rc 这一文件,以设置 QUICK 的相关环境变量。

2. QUICK 使用

QUICK 使用基本在手册里讲得挺清楚了,见 User ManualHands-on Tutorials。输入文件还挺好写的,Hands-on Tutorial 里讲得还挺清楚,但居然没讲到自旋多重度怎么设置,后来翻来一下源码发现是 MULT=,这里绝大多数软件一样是 2S + 1(某蓝拱门是 2S)。看了一下支持的计算级别有 HF 和 DFT,计算任务有单点,梯度和优化。上次看到介绍 QUICK 的帖子里说 QUICK 还不支持色散校正了,现在已经可以用了。

编译 CUDA 版本时候,会一同编译出 quick, quick.MPI, quick.cuda, 和 quick.cuda.MPI。其中带 MPI 后缀的是 MPI 并行版,不带 cuda 的是 CPU 版本。运行方式如下:

$ quick water.in & # CPU 串行
$ mpirun -np 10 quick.MPI water.in & # CPU 并行
$ quick.cuda water.in & # 一块 GPU 上跑
$ mpirun -np 2 quick.cuda.MPI water.in & # 两块 GPU 上跑

3. Gaussian + QUICK = Gauick

QUICK 能算单点和梯度还有优化,但好像不能算频率,以及优化过渡态。看了一下 QUICK 的输入文件比较好构造,输出文件比较好解析,就写了一个 Python 脚本和 Gaussian 联用好了!取了个名字叫 Gauick,代码在 GitHub 上开源了,仓库 https://github.com/mizu-bai/Gauick,欢迎 star。

用法和 gmm.py 挺像的,因为就是用 gmm.py 改的。有一个 gauick.json 配置文件,长这个样子:

{
    "exec": "mpirun -np 1 quick.cuda.MPI",
    "job": "DFT B3LYP GD3BJ BASIS=6-31G*"
}


"exec" 指定了用哪个 QUICK 可执行文件,"job" 指定了计算级别,如果是开壳层分子记得在 HF 或 DFT 前面加个 U。

Gaussian 输入文件写法如下,这是一个水分子的 opt + freq 任务,由于解析了 QUICK 输出的偶极矩,因此 Gaussian 输出的频率分析可以看到红外强度。

%nproc=1
%chk=water.chk
#p external="python3 -u gauick.py" opt=nomicro

water

0 1
O                 -0.06756756   -0.31531531    0.00000000
H                  0.89243244   -0.31531531    0.00000000
H                 -0.38802215    0.58962052    0.00000000


--link1--
%nproc=1
%chk=water.chk
#p external="python3 -u gauick.py" freq=num geom=allcheck



过渡态和 IRC 可以去看看 gmm.py 里是怎么写的,几乎一样。

4. 总结

折腾了一下 QUICK 软件的编译和运行,开发了一个 Gaussian 与 QUICK 联用的脚本。但是根据笔者测试,分子小的时候 QUICK 自己的 CPU 串行甚至都可能比 CPU MPI 并行或 CUDA 版本要快。由于做优化的时候,还没折腾出 QUICK 读取自己的波函数做初猜,因此接了 Gaussian 优化每一步都要从头进行 SCF 迭代。频率计算部分,只能半数值做频率,因此整个 opt + freq 任务跑起来比 Gaussian 慢不少。暂时感觉没什么使用价值,反正折腾折腾玩得挺有意思就是了。

gauick.py (3.52 KB, 下载次数 Times of downloads: 5)

评分 Rate

参与人数
Participants 4
威望 +1 eV +9 收起 理由
Reason
LittlePupil + 5 GJ!
hebrewsnabla + 3 赞!
sobereva + 1
zjxitcc + 1 赞!

查看全部评分 View all ratings

68

帖子

7

威望

1901

eV
积分
2109

Level 5 (御坂)

2#
 楼主 Author| 发表于 Post on 2023-6-7 15:54:18 | 只看该作者 Only view this author
用 Gaussian 的 test0397 测个速度,把 Gaussian 输入文件转成了 QUICK 格式,由于 QUICK 的 SCF 收敛限与积分格点等与 Gaussian 不相等,因此仅 QUICK 之间的结果比比吧。

E5-2680v2 + GTX 1660, 在 WSL2 中运行

- MPI 并行 10 核 SCF 耗时 645 s,梯度耗时 736 s,总耗时 1392 s
- CUDA 版 SCF 耗时 676 s,梯度耗时 496 s,总耗时 1227 s

846

帖子

16

威望

4634

eV
积分
5800

Level 6 (一方通行)

小屁孩

3#
发表于 Post on 2023-6-7 15:58:11 | 只看该作者 Only view this author
mizu-bai 发表于 2023-6-7 15:54
用 Gaussian 的 test0397 测个速度,把 Gaussian 输入文件转成了 QUICK 格式,由于 QUICK 的 SCF 收敛限与 ...

花3000捡个V100 16G或者TITAN V试试吧,GeForce卡跑吃双精度的任务,加速比没法看。
- 向着虚无前进 -

68

帖子

7

威望

1901

eV
积分
2109

Level 5 (御坂)

4#
 楼主 Author| 发表于 Post on 2023-6-7 16:40:05 | 只看该作者 Only view this author
Entropy.S.I 发表于 2023-6-7 15:58
花3000捡个V100 16G或者TITAN V试试吧,GeForce卡跑吃双精度的任务,加速比没法看。

哈哈哈哈哈哈只是玩玩,就不买那么贵的卡了

32

帖子

0

威望

3315

eV
积分
3347

Level 5 (御坂)

5#
发表于 Post on 2024-5-8 12:38:32 | 只看该作者 Only view this author
试了一下4090,QUICK 24.03 跑0397体系耗时51.8s。不过具体设置不一样可能不太能相互比较。

quick_0397.out

38.6 KB, 下载次数 Times of downloads: 3

quick_0397.in

6.79 KB, 下载次数 Times of downloads: 5

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
mizu-bai + 1 GJ!

查看全部评分 View all ratings

339

帖子

0

威望

4999

eV
积分
5338

Level 6 (一方通行)

6#
发表于 Post on 2024-5-9 10:05:38 | 只看该作者 Only view this author
zhouoh 发表于 2024-5-8 12:38
试了一下4090,QUICK 24.03 跑0397体系耗时51.8s。不过具体设置不一样可能不太能相互比较。

用几乎相同的 输入文件setup, 注意这个QUICK的DFT计算用的是SG1(50,194)GRID, 这个GRID比g16默认的(99,590)小太多了,当然一般情况而言,SG1对于B3LYP是足够了。

7950X跑一个397,平均只要43秒。4090的优势似乎完全没有体现出来。可以搞个大基组再测试看看。有很大可能QUICK的CUDA加速也是个鸡肋,目前看局域基组NAO/GTO的GPU加速似乎没有太可观的gain,当年ORCA尝试搞了一下就放弃了,以前大名鼎鼎Terachem也就那样,官网N久都没有更新,连之前的Forum都直接给关了。

现在还在使劲推的就剩下BrianQC , 官网上例子居然拿8core E5-2620v4 对比4个V100/4个1080Ti,这都忽悠得没脸没皮了。

基于局域基组的QC程序由于其固有的稀疏性/精巧性,用GPU计算的gain先天就很小/很难,不像基于平面波这种very dense基组,用GPU加速的gain就非常大。

32

帖子

0

威望

3315

eV
积分
3347

Level 5 (御坂)

7#
发表于 Post on 2024-5-9 11:57:35 | 只看该作者 Only view this author
试了下基组换成def2-SVP,耗时228s. 不过中间显存占用达到了12G。

339

帖子

0

威望

4999

eV
积分
5338

Level 6 (一方通行)

8#
发表于 Post on 2024-5-9 13:02:34 | 只看该作者 Only view this author
zhouoh 发表于 2024-5-9 11:57
试了下基组换成def2-SVP,耗时228s. 不过中间显存占用达到了12G。

看来确实如此,4090也干不过7950X下的Gaussian16,我这测试的def2svp,  平均210s, 内存开销不超过800m。所以,就如前述, 基于AO的局域基组QC程序, 用GPU计算基本没啥gain, 当然这也说明Gaussian的积分算法确实是牛比。

4090现在差不多要2万块钱,现在一颗9654也就这个价格, 但是9654差不多是7950X的4-6倍性能......

所以 Gaussian/ORCA/CP2K/CRYSTAL...等等基于AO的局域基组程序,目前来看用CPU计算才是性价比最高的选择。

至于基于平面波基组的第一性原理程序,用GPU计算确实有极大的gain。

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 16:22 , Processed in 0.403816 second(s), 28 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list