1月1日ABACUS新版本3.1重磅发布。自2022年10月发布3.0版本以来,ABACUS开发团队紧锣密鼓地发布了五个小版本(ABACUS v3.0.1-v3.0.5版本),相关更新也已完全收录在本次3.1版本中。
新版本对平面波的SCF流程、力与应力的计算进行了完整的GPU化,支持CG和Davidson两种对角化方法;许审镇和欧琪带领孙梦琳、董昊森、刘裕等人实现了隐式溶剂模型、偶极修正等一系列修正方法,可用于固液界面体系的计算;通过接入LibRI(试用版),ABACUS中杂化泛函的计算更加稳定、也支持更多的并行线程数。来自商汤科技的开源社区合作伙伴对LCAO基组下的OpenMP实现进行了深入优化,带来了效率更高、内存消耗更少的线程并行方案。此外,也实现了新的CG弛豫算法,不仅收敛效率有所提高,晶胞弛豫时也支持更多限制条件;调整了分子动力学过程中哈密顿矩阵和重叠矩阵的输出,更好地支持DeepH训练的需求。
为了使安装更方便,编译新版本的ABACUS时,ELPA库被调整为可选;在传统的源码安装方式之外,我们还提供了通过Conda安装的途径,便于用户快速上手部署。
此外,我们也致力于代码生态的维护,以测试覆盖率为基础指标对CI测试算例进行了补充和优化。现在,ABACUS已达到70%的代码覆盖率。我们还于在线文档中加入了FAQ模块,定期收集整理用户关心的问题。

新功能:平面波基组的GPU加速

图形计算单元(Graphic Processing Unit,GPU)已经成为人工智能和科学计算领域的基础算力工具。通常而言,使用GPU硬件可以大幅度优化应用软件的计算效率和并行性,为用户提供更好的使用体验。在最新的ABACUS 3.1版本中,我们实现了在GPU硬件上求解Kohn-Sham方程的新功能,新功能支持平面波(PW)基组下采用CG或Davidson方法来高效的进行电子体系的能级和波函数求解。新版本的代码较好地利用了GPU设备的运算资源,波函数Psi模块、能量求解器Esolver模块、哈密顿量求解器模块Hsolver等核心模块都已经实现了平面波的GPU化。
在具备合适的硬件环境并且编译了GPU版本的情况下,用户只需要在INPUT文件中设置device标志为gpu,无需做其他修改,就可简单方便地上手GPU版本。需要注意的是,目前GPU版本暂不支持原子轨道基组(LCAO);在并行策略上,ABACUS支持多GPU同时计算,不同GPU处理的是不同K点的Kohn-Sham方程。更多关于GPU版本的使用和编译细节,用户可参阅ABACUS的GPU说明文档[1]。
在精度表现上,我们测试了ABACUS自带的样例,验证了GPU版本具有和CPU版本一致的收敛精度。在性能表现上,GPU版本表现出了明显的计算时间优势:单GPU的计算时间大致与64核心CPU相当,具体加速比受使用硬件及计算体系影响。欢迎广大社区用户测试和使用,并在GitHub和沟通交流群等地给我们提供相应反馈,帮助我们进行ABACUS的高性能优化。
新功能:固液界面的修正
近年来,电化学表面反应,例如一些电催化系统,无论是在工业界还是科学研究领域,都受到了广泛的关注。而对于一个真实电极表面反应体系,需要考虑许多复杂的情况,例如恒定电位,电极材料表面与溶剂相互作用,双电层等。
对材料模拟中经常遇到的固液体系进行精确的第一性原理计算时,往往应考虑溶剂化效应。隐式溶剂化模型就是一种发展完善的溶剂化效应处理方法,在有限和周期性系统中都得到了广泛的应用。这种方法将溶剂抽象为连续电介质而不是单个“显性”溶剂分子,溶质分子所占据的空腔则被包围在电介质中。这种处理方法可以使计算效率大幅提升。
此外,模拟恒定电位的电子化学表面反应时需要调整模型中的电子数。同时,由于周期性的边界条件,我们需要保持超胞的中性。因此,当从系统中添加/减少额外的电子时,需要在表面模型的真空区域中实现补偿电荷的分布。
而在模拟电化学表面时,由于结构的不对称性,在平板模型中会产生偶极矩,导致平板两侧静电势不同。然而,基于密度泛函的方法对静电势施加周期性的边界条件,在真空处会出现非真实的“电场”,以消除边界处的电位跳跃。偶极校正将通过添加反向电场,实现在周期性模型中抵消偶极场。
ABACUS的3.1版本中,实现了隐式溶剂化模型、补偿电荷和偶极修正的方法,可用于固液界面体系的计算。

快速访问地址

ABACUS在DeepModeling社区中的GitHub仓库地址为:
https://github.com/deepmodeling/abacus-develop
ABACUS的Gitee镜像仓库地址为:
https://gitee.com/deepmodeling/abacus-develop
ABACUS网站访问:
http://abacus.ustc.edu.cn/
ABACUS 3.1版本的release tag:
https://github.com/deepmodeling/abacus-develop/releases/tag/v3.1.0
文档(包括安装方法、输入输出参数介绍、功能介绍、算例介绍、开发者须知等):
https://abacus.deepmodeling.com/en/latest/
供用户和开发者提问和讨论的地方:
https://github.com/deepmodeling/abacus-develop/issues
https://github.com/deepmodeling/abacus-develop/discussions
FAQ:
https://abacus.deepmodeling.com/en/latest/community/faq.html
功能更新列表 v3.0.1 在原子过近时给出更明显的warning信息,by @pxlxingliang in #1374 加入了RPA输出接口,可以和LibRPA配合计算RPA关联能,by @xinyangd and @Srlive1201 in #1391 在计算电导率时加入了赝势非局域项的修正, by @Qianruipku in #1392 输出与out_mat_r相关的文件时使用稀疏矩阵,by @dyzheng in #1410
为MD添加Berendsen和Velocity Rescaling两种Rescaling方法 添加对OFDFT算法的支持 添加cmake用于单独构建PW版本的ABACUS 支持输出kpoints文件 为hpsi添加对GPU等异构设备的支持
新的晶格弛豫算法 分子动力学NPT系综 支持平面波的CG法在GPU上运行 带有自旋的RPA计算接口程序 输出电子步对角化步数
实现了平面波的SCF流程的GPU化 by @denghuilu in #1535 添加了R空间密度矩阵的输出功能 by @wenfei-li in #1541 and #1577 添加了nupdown参数用于控制磁矩 by @dyzheng in #1549
优化了能带计算数默认值 by @dyzheng in #1582 对LCAO求力部分代码优化了OpenMP支持 by @Alcanderian(来自商汤科技HPC团队) in #1559, #1596, #1589, #1594, #1635, #1580, 1628 支持平面波的GPU Davidson对角化方法和k点并行 by @haozhihan in #1566,#1645 对平面波流程中的部分函数添加CUDA/multi-device支持 by @denghuilu in #1595, #1653, #1641, #1661 更改了新的relaxtion方法的收敛判据 by @wenfei-li in #1626 添加了分子动力学运行时控制HSR的输出参数 by @wenfei-li in #1630 支持通过STRU文件读取原子种类数,INPUT文件的ntype参数可以不写 by @sunliang98 in #1640 优化了杂化泛函的计算效率 by @PeizeLin in #1665 添加了MGGA泛函动能密度的输出/混合功能 by @wenfei-li in #1682
平面波非局域赝势的GPU化 ftable_k的OpenMP并行 SCF计算过程中输出能隙 Bug修复列表 本次3.1版本中修复了3.0版本发布后收集到的许多bug,增强了程序稳定性。 v3.0.1 修复了输出信息中Base Centered Cell部分 by @hongriTianqi in #1379 修复了输出信息中简单立方格子的晶格常数A,by @hongriTianqi in #1384 释放LIBXC分配的内存,by @wenfei-li in #1395 删除了一个没有被调用的文件write_rho_dipole.cpp @dyzheng in #1423 在MPI并行传输数据时用MPI_COMPLEX, by @caic99 in #1381 使用docker文件安装时把libtorch移动到一个单独的文件夹 @caic99 in #1382
修复MD中cal_stress=0时的bug 输出笛卡尔坐标到cube文件 cell改变后不resize psi 添加real_brav的对称性分析 保持ks_pw中operator类和ks_lcao的一致性 修复集成测试中部分文件比对的测试 修复OFDFT的stress计算 修复module_vdw的Makefile和CMake文件 当__CUDA flag设置时,保持数值上的一致性 删除容易引起误解的注释
修复了TDDFT中的能量输出 修复了MD热库Nose-Hoover Chain中的问题 修正了速度算子的测试结果 修复了LCAO中从文件初始化电荷时读入参数的问题 更新了K点的输出方式 修正了283_NO_restart的测试结果
修复了rpa接口的bug by @Srlive1201 in #1542 修复了使用LIBXC进行stress计算时的bug case by @ouqi0711 in #1553 修复了两个nscf计算中的bug by @hongriTianqi in #1551 使用fabs而非abs计算double型的绝对值 by @maki49 in #1568 修复了极化体系多k点DFT+U计算的bug by @dyzheng in #1570 修复了读入blps赝势时的初始化错误 by @xinyangd in #1572
修复了energy_dos内存泄漏问题 by @caic99 in #1576 修复了SCAN0泛函应力计算问题 by @ouqi0711 in #1585 修复了杂化泛函结构弛豫计算问题 by @xinyangd in #1593 修复了Local_Orbital_Charge内存泄漏问题 by @caic99 in #1629 修复了symmetry = -1导致的冗余对称性操作问题 by @dyzheng in #1648 修复了应力过大时的输出显示 by @Qianruipku in #1642 修复了DFT+U的占据矩阵控制 by @wenfei-li in #1656 修复了SDFT在nbands>0 && bndpar>0 && total kpoints > kpar情况下的问题,修复了sKG在scf_nmax == 0情况下的问题 by @Qianruipku in #1680 解决了输出文件中SCF及NSCF与Relax计算时输出的标签不对应的问题 by @hongriTianqi in #1686
修复了计数ntype的函数 修复了上下自旋电子数的计算
代码重构列表 Operator部分完全重构,by @dyzheng in #1243 在Charge类中添加了init_rho函数,by @hongriTianqi in #1367 加入了esolver_dp和esolver_lj,by @YuLiu98 in #1406
将module目录更名为cmake 将vdw类移动到module_vdw目录下 移除wfc_k和wfc_gamma 在md_lgv中从总力中分离虚力 修复UT中冗余的文件路径
分拆charge与charge_mixing模块 删除hm, ufft的全局变量 删除若干波函数模块中无用变量 使用新模块替代pot全局变量 删除UnitCell_pseudo类 删除chr全局变量
删去了GlobalC::CHR by @wenfei-li in #1527 改用H_TDDFT_pw类处理TDDFT时的外加电场 by @dyzheng in #1562
将OFDFT中KEDF部分代码移至module_hamilt/of_pw by @sunliang98 in #1579 冗余代码移除 by @hongriTianqi in #1581, #1624, #1663, #1664, #1679, and by @denghuilu in #1621 冗余memory device operation移除 by @denghuilu in #1620 废弃关键字tot_magnetization移除 by @wenfei-li in #1651
修复了输入参数中读入布尔型的工具函数 将一部分输入参数从整型改成布尔型 整理了DFT+U的代码 调整了CG和Davidson方法的接口,提高效率 为GPU代码添加了注释
测试列表 本次3.1版本在测试的多样性和覆盖完整性上都有大量的进步,并达到了70%的代码测试覆盖率。
添加了klist的单元测试,by @hongriTianqi in #1378 在run.sh中加入了可以设置的参数,by @pxlxingliang in #1380 添加了从电荷开始计算的lcao集成测试算例,by @hongriTianqi in #1403
添加了测试覆盖率检查 添加symmetry的单元测试
加入代码覆盖率测试结果看板 定时构建Docker镜像 完善MD模块的测试与文档 对于文档的更改跳过测试
去掉了src_pdiag模块当中的陈旧代码 by @hongriTianqi in #1545 将DeePKS算例加入覆盖率测试 by @caic99 in #1537 去掉了一些陈旧代码,并加入一些新测试算例 by @wenfei-li in #1538, #1539, #1544, #1550, #1561, #1563, #1567 去掉了symmetry模块当中的陈旧代码 by @pxlxingliang in #1548 去掉了spectrum模块和旧HSolver中的陈旧代码 by @dyzheng in #1564
添加vdwd3 e2e测试 by @xinyangd in #1639 添加单元测试 K_Vectors::renew() 及read_kpoints (“Line_Cartesian”)by @ruiyiQM in #1646, #1675 添加代码覆盖率测试的超时设定 by @caic99 in #1652 集成测试算例更新 by @hongriTianqi in #1654, #1657, 1660 Indel docker镜像中添加vtune by @caic99 in #1571 添加输入文件的单元测试 by @hongriTianqi in #1683
更新了input.cpp的单元测试
完整的更新列表 3.0.1版本 https://github.com/deepmodeling/abacus-develop/releases/tag/v3.0.1
3.0.2版本 https://github.com/deepmodeling/abacus-develop/releases/tag/v3.0.2
3.0.3版本 https://github.com/deepmodeling/abacus-develop/releases/tag/v3.0.3
3.0.4版本 https://github.com/deepmodeling/abacus-develop/releases/tag/v3.0.4
3.0.5版本 https://github.com/deepmodeling/abacus-develop/releases/tag/v3.0.5
贡献者 – End – (如需转载图文请与公众号后台联系) ——————————- ABACUS :携手DeepModeling,做源自中国、开源开放的DFT软件 探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布!
v3.0.2
v3.0.3
v3.0.4
v3.0.5
v3.1.0
v3.0.2
v3.0.3
v3.0.4
v3.0.5
v3.1.0
v3.0.1
v3.0.2
v3.0.3
v3.0.4
v3.0.5
v3.1.0
v3.0.1
v3.0.2
v3.0.3
v3.0.4
v3.0.5
v3.1.0
ouqi0711
Alcanderian
hongriTianqi
denghuilu
wenfei-li
dyzheng
haozhihan
caic99
ruiyiQM
xinyangd
sunliang98
Qianruipku
PeizeLin
Srlive1201
maki49
baixiaokuang
FandosWang
YuLiu98
lyb9812
LiangWenshuo1118
pxlxingliang
Satinelamp
原文始发于微信公众号(科学智能AISI):ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能