计算化学公社

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

[其它量化程序] PySCF计算CASSCF的并行效率问题

[复制链接 Copy URL]

140

帖子

0

威望

860

eV
积分
1000

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 ZetaFunction 于 2024-8-16 17:17 编辑

原本打算使用ORCA计算一个28个原子含铁-镍核心的体系的CAS(8,8)/cc-pVDZ,遇到了SCF不收敛的问题。使用Mokit将最后一轮迭代的.gbw轨道文件转为PySCF的输入文件,在迭代了30轮左右后成功收敛,但是耗时远远超过了ORCA。32核服务器中ORCA中仅需不到一小时就能到达75轮的迭代上限,而PySCF每一轮迭代却需要四十分钟,最终收敛用时接近一天,这明显不合理。我尝试过设置并行线程数和内存,都没什么作用。尽管输出文件中的CPU总耗时和wall time确实是大约30倍的关系,但是Python有不少伪并行的多线程库,虽然是多线程但实际使用同一个物理核心。以下是我的输入文件,由Mokit生成的文件修改而来,请各位老师看看有没有什么问题:


from pyscf import gto, scf, mcscf
from mokit.lib.fch2py import fch2py
from mokit.lib.py2fch import py2fch
from mokit.lib import py2orca
from shutil import copyfile

from pyscf import lib
from pyscf import __config__
print(lib.num_threads()) #显示确实是32线程


mol = gto.M()
mol.max_memory = 16384
# 28 atom(s)
mol.atom = '''
C1        -18.71419998       -7.81380000       15.80720000
S1        -17.42080002       -7.34854999       17.03330000
H1        -18.43912800       -7.44484897       14.84122399
......

# Remember to check the charge and spin
mol.charge = -2
mol.spin = 0
mol.verbose = 4
mol.build(parse_arg=False)

mf = scf.RHF(mol)
mf.max_memory = 16384
mf.max_cycle = 1
mf.init_guess = '1e'
mf.kernel()

# read MOs from .fch(k) file
hf_fch = 'SIa-S1-UHF-UNO-CAS88.fch'
nbf = mf.mo_coeff.shape[0]
nif = mf.mo_coeff.shape[1]
mf.mo_coeff = fch2py(hf_fch, nbf, nif, 'a')
# read done

mc = mcscf.CASSCF(mf, 8, 8)
mc.max_memory = 65536
mc.verbose = 5
mc.natorb = True
mc.kernel()

py2orca(mc, 'mc-S1.inp')

11

帖子

0

威望

53

eV
积分
64

Level 2 能力者

9#
发表于 Post on 2024-9-28 14:10:38 | 只看该作者 Only view this author
hebrewsnabla 发表于 2024-8-16 17:18
建议上传输出文件。

不错

211

帖子

0

威望

572

eV
积分
783

Level 4 (黑子)

8#
发表于 Post on 2024-8-16 23:09:33 | 只看该作者 Only view this author
ZetaFunction 发表于 2024-8-16 18:27
把内存从64G加大到128G,问题解决了。PySCF这么吃内存的吗?28个原子CASSCF(8,8)/cc-pVDZ就要这么多内存 ...

scf的双电子积分(数量大概是轨道数的四次方)有很多处理方法,内存足够多就常驻在内存里(in-core),内存不够就即算即用(direct)或放到磁盘上(disk)。in-core是最快的。你可以看一下程序的详细输出看用的哪一种。

928

帖子

1

威望

8262

eV
积分
9210

Level 6 (一方通行)

7#
发表于 Post on 2024-8-16 22:08:03 | 只看该作者 Only view this author
ZetaFunction 发表于 2024-8-16 21:50
重新测试了一下,问题应该不在mcscf,而在于前面的mol.max_memory和mf.max_memory,把这两步的内存从16G ...

不清楚,没输出文件没法说。

140

帖子

0

威望

860

eV
积分
1000

Level 4 (黑子)

6#
 楼主 Author| 发表于 Post on 2024-8-16 21:50:32 | 只看该作者 Only view this author
hebrewsnabla 发表于 2024-8-16 18:35
正常情况不需要这么多内存。如果你的意思是加大内存就能明显算得很快,这恐怕不太正常。

重新测试了一下,问题应该不在mcscf,而在于前面的mol.max_memory和mf.max_memory,把这两步的内存从16G增加到32G,速度立刻提示十几倍。看上去子类会继承内存?

928

帖子

1

威望

8262

eV
积分
9210

Level 6 (一方通行)

5#
发表于 Post on 2024-8-16 18:35:07 | 只看该作者 Only view this author
本帖最后由 hebrewsnabla 于 2024-8-16 21:06 编辑
ZetaFunction 发表于 2024-8-16 18:27
把内存从64G加大到128G,问题解决了。PySCF这么吃内存的吗?28个原子CASSCF(8,8)/cc-pVDZ就要这么多内存 ...

正常情况不需要这么多内存。如果你的意思是加大内存就能明显算得很快,这恐怕不太正常。

140

帖子

0

威望

860

eV
积分
1000

Level 4 (黑子)

4#
 楼主 Author| 发表于 Post on 2024-8-16 18:27:11 | 只看该作者 Only view this author
hebrewsnabla 发表于 2024-8-16 17:18
建议上传输出文件。

把内存从64G加大到128G,问题解决了。PySCF这么吃内存的吗?28个原子CASSCF(8,8)/cc-pVDZ就要这么多内存,如果用更大的基组和活性空间,一般的机子内存这么吃得消啊?

928

帖子

1

威望

8262

eV
积分
9210

Level 6 (一方通行)

3#
发表于 Post on 2024-8-16 17:45:53 | 只看该作者 Only view this author
你在orca里面用了赝势吗?由于mkl文件不含赝势,传给pyscf的时候是会丢失赝势信息的。

928

帖子

1

威望

8262

eV
积分
9210

Level 6 (一方通行)

2#
发表于 Post on 2024-8-16 17:18:13 | 只看该作者 Only view this author
建议上传输出文件。

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
zjxitcc + 1 建议gbw,py全都上传

查看全部评分 View all ratings

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

GMT+8, 2026-2-22 06:21 , Processed in 0.183166 second(s), 22 queries , Gzip On.

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