编译 GPU 版本的 ABACUS
内容提要
本文介绍ABACUS第一性原理计算软件GPU版本的编译方法。文章对比平面波与数值原子轨道基组,指出GPU可加速电子步等耗时计算。详细说明使用conda配置CUDA 12.2环境、安装依赖库、编译ELPA及ABACUS的步骤,并通过BaTiO3示例验证GPU版本比CPU快1.60倍,且数值精度几乎一致。
延伸解读
GPU加速的适用场景
文章指出,ABACUS的GPU版本主要将电子步中的对角化等耗时步骤迁移至GPU,而离子步仍保留在CPU上。因此,对于以电子步为主导的DFT计算,GPU加速效果显著;若计算中离子步占比较大,则加速收益可能有限。用户可根据自身计算类型评估GPU版本的适用性。
环境一致性的重要性
编译GPU版本时,需确保编译环境与运行环境一致,尤其是CUDA和NVCC版本。文章建议使用conda统一管理依赖,以避免因GPU驱动或CUDA版本不匹配导致的编译或运行问题。此外,OpenMPI需与cuda-toolkit一同安装,否则可能无法正常使用GPU。
性能与精度验证
通过BaTiO3示例测试,GPU版本相比CPU版本加速1.60倍,其中哈密顿量更新函数加速达2.94倍,且能量等数值几乎一致,表明GPU版本在保证精度的同时提升了效率。用户可参考此方法验证自身体系的加速效果和数值可靠性。
Q&A
如何编译ABACUS的GPU版本?
编译ABACUS GPU版本需要先安装conda环境,创建Python 3.10环境,然后安装cmake、openmpi、openblas、liblapack、scalapack、fftw、libxc、rapidjson、cereal、cuda-toolkit=12.2等依赖,再编译安装ELPA库,最后用cmake配置ABACUS并指定USE_CUDA=ON进行编译。
ABACUS GPU版本相比CPU版本加速效果如何?
在BaTiO3示例中,GPU版本比CPU版本快1.60倍,其中HamiltLCAO::updateHk函数加速最明显,达到2.94倍。
ABACUS GPU版本与CPU版本在数值精度上有差异吗?
通过对比运行结果,CPU和GPU得到的能量等数值几乎一模一样,说明GPU版本在数值计算上误差极小。
为什么ABACUS要支持GPU加速?
因为DFT计算中最耗时的对角化相关步骤(电子步)可以搬上GPU加速,从而显著降低对CPU的需求,提高计算效率。
ABACUS GPU版本需要哪些依赖库?
需要BLAS、LAPACK、SCALAPACK、FFTW、LIBXC、CEREAL、OpenMPI、CUDA工具包(包括cuda-nvtx-dev)等,以及libnpy头文件库。
如何验证ABACUS GPU版本编译成功?
编译完成后,运行命令`abacus --version`,如果输出`ABACUS version v3.10.0`则说明编译成功。
ABACUS GPU版本运行时需要设置什么参数?
在INPUT文件中需要将device参数设置为gpu,例如`device gpu`。
为什么推荐使用conda来管理ABACUS的GPU编译环境?
因为conda可以统一管理CUDA版本和依赖库,避免因GPU驱动和CUDA版本不一致导致的编译和运行问题。