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 – (如需转载图文请与公众号后台联系) ——————————-
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高效计算,发布固液界面计算新功能