ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

 

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模块,定期收集整理用户关心的问题。

 

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

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

ABACUS 3.1发布,支持平面波基组下的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发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

新功能:固液界面的修正

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

近年来,电化学表面反应,例如一些电催化系统,无论是在工业界还是科学研究领域,都受到了广泛的关注。而对于一个真实电极表面反应体系,需要考虑许多复杂的情况,例如恒定电位,电极材料表面与溶剂相互作用,双电层等。

 

对材料模拟中经常遇到的固液体系进行精确的第一性原理计算时,往往应考虑溶剂化效应。隐式溶剂化模型就是一种发展完善的溶剂化效应处理方法,在有限和周期性系统中都得到了广泛的应用。这种方法将溶剂抽象为连续电介质而不是单个“显性”溶剂分子,溶质分子所占据的空腔则被包围在电介质中。这种处理方法可以使计算效率大幅提升。

 

此外,模拟恒定电位的电子化学表面反应时需要调整模型中的电子数。同时,由于周期性的边界条件,我们需要保持超胞的中性。因此,当从系统中添加/减少额外的电子时,需要在表面模型的真空区域中实现补偿电荷的分布。

 

而在模拟电化学表面时,由于结构的不对称性,在平板模型中会产生偶极矩,导致平板两侧静电势不同。然而,基于密度泛函的方法对静电势施加周期性的边界条件,在真空处会出现非真实的“电场”,以消除边界处的电位跳跃。偶极校正将通过添加反向电场,实现在周期性模型中抵消偶极场。

 

ABACUS的3.1版本中,实现了隐式溶剂化模型、补偿电荷和偶极修正的方法,可用于固液界面体系的计算。

 

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

快速访问地址

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

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

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

功能更新列表

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

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

v3.0.2

  • 为MD添加Berendsen和Velocity Rescaling两种Rescaling方法

  • 添加对OFDFT算法的支持

  • 添加cmake用于单独构建PW版本的ABACUS

  • 支持输出kpoints文件

  • 为hpsi添加对GPU等异构设备的支持

v3.0.3

  • 新的晶格弛豫算法

  • 分子动力学NPT系综

  • 支持平面波的CG法在GPU上运行

  • 带有自旋的RPA计算接口程序

  • 输出电子步对角化步数

v3.0.4

  • 实现了平面波的SCF流程的GPU化 by @denghuilu in #1535

  • 添加了R空间密度矩阵的输出功能 by @wenfei-li in #1541 and #1577

  • 添加了nupdown参数用于控制磁矩 by @dyzheng in #1549

v3.0.5

  • 优化了能带计算数默认值 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

v3.1.0

  • 平面波非局域赝势的GPU化

  • ftable_k的OpenMP并行

  • SCF计算过程中输出能隙

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

Bug修复列表

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

本次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

v3.0.2

  • 修复MD中cal_stress=0时的bug

  • 输出笛卡尔坐标到cube文件

  • cell改变后不resize psi

  • 添加real_brav的对称性分析

  • 保持ks_pw中operator类和ks_lcao的一致性

  • 修复集成测试中部分文件比对的测试

  • 修复OFDFT的stress计算

  • 修复module_vdw的Makefile和CMake文件

  • 当__CUDA flag设置时,保持数值上的一致性

  • 删除容易引起误解的注释

v3.0.3

  • 修复了TDDFT中的能量输出

  • 修复了MD热库Nose-Hoover Chain中的问题

  • 修正了速度算子的测试结果

  • 修复了LCAO中从文件初始化电荷时读入参数的问题

  • 更新了K点的输出方式

  • 修正了283_NO_restart的测试结果

v3.0.4

  • 修复了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

v3.0.5

  • 修复了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

v3.1.0

  • 修复了计数ntype的函数

  • 修复了上下自旋电子数的计算

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

代码重构列表

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

v3.0.1

  • Operator部分完全重构,by @dyzheng in #1243

  • 在Charge类中添加了init_rho函数,by @hongriTianqi in #1367

  • 加入了esolver_dp和esolver_lj,by @YuLiu98 in #1406

v3.0.2

  • 将module目录更名为cmake

  • 将vdw类移动到module_vdw目录下

  • 移除wfc_k和wfc_gamma

  • 在md_lgv中从总力中分离虚力

  • 修复UT中冗余的文件路径

v3.0.3

  • 分拆charge与charge_mixing模块

  • 删除hm, ufft的全局变量

  • 删除若干波函数模块中无用变量

  • 使用新模块替代pot全局变量

  • 删除UnitCell_pseudo类

  • 删除chr全局变量

v3.0.4

  • 删去了GlobalC::CHR by @wenfei-li in #1527

  • 改用H_TDDFT_pw类处理TDDFT时的外加电场 by @dyzheng in #1562

v3.0.5

  • 将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

v3.1.0

  • 修复了输入参数中读入布尔型的工具函数

  • 将一部分输入参数从整型改成布尔型

  • 整理了DFT+U的代码

  • 调整了CG和Davidson方法的接口,提高效率

  • 为GPU代码添加了注释

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

测试列表

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

本次3.1版本在测试的多样性和覆盖完整性上都有大量的进步,并达到了70%的代码测试覆盖率。

v3.0.1

  • 添加了klist的单元测试,by @hongriTianqi in #1378

  • 在run.sh中加入了可以设置的参数,by @pxlxingliang in #1380

  • 添加了从电荷开始计算的lcao集成测试算例,by @hongriTianqi in #1403

v3.0.2

  • 添加了测试覆盖率检查

  • 添加symmetry的单元测试

v3.0.3

  • 加入代码覆盖率测试结果看板

  • 定时构建Docker镜像

  • 完善MD模块的测试与文档

  • 对于文档的更改跳过测试

v3.0.4

  • 去掉了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

v3.0.5

  • 添加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

v3.1.0

  • 更新了input.cpp的单元测试

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

完整的更新列表

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

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

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

贡献者

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能
ouqi0711AlcanderianhongriTianqidenghuiluwenfei-lidyzhenghaozhihancaic99ruiyiQMxinyangdsunliang98QianruipkuPeizeLinSrlive1201maki49baixiaokuangFandosWangYuLiu98lyb9812LiangWenshuo1118pxlxingliangSatinelamp
相关链接[1]http://abacus.deepmodeling.com/en/latest/advanced/acceleration/index.html
 

– End –

(如需转载图文请与公众号后台联系)

——————————-

ABACUS :携手DeepModeling,做源自中国、开源开放的DFT软件

探索 AI+DFT 最前线,「原子算筹」ABACUS 3.0 重磅发布!

ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能

原文始发于微信公众号(科学智能AISI):ABACUS 3.1发布,支持平面波基组下的GPU高效计算,发布固液界面计算新功能