本教程将带您深入了解如何利用 NVIDIA GPU 和 Magnum IO 技术,在超级计算机上高效并行运行材料科学中的第一性原理计算。我们以氧化铪 (HfO₂) 的混合密度泛函理论(DFT)计算为例,展示从单节点到数百个 GPU 的扩展方法与性能优化技巧。无论您是计算化学领域的研究人员,还是 HPC 系统管理员,都能从中获得实用的指导。
背景:为何需要关注铪与氧化铪?
尽管硅和其他半导体材料是当今电子工业的基石,但下一代技术可能依赖于其他特殊材料,例如高温超导体、光伏材料、石墨烯电池和超级电容器。半导体芯片的设计本身就需要对新材料进行复杂的搜索——而VASP这样的第一性原理计算工具正是实现这种搜索的核心。
本文聚焦于一种名为铪(Hafnium)的金属及其氧化物氧化铪(HfO₂)。纯铪是电绝缘体,但在半导体制造中,它作为高κ介电膜用于动态随机存取存储器(DRAM),以及作为金属氧化物半导体场效应晶体管(MOSFET)的栅极绝缘体。此外,HfO₂对非易失性电阻式RAM非常感兴趣——这可能让计算机的启动过程成为历史。
理想的纯 HfO₂ 晶体理论上只需 12 个原子即可描述,但这只是一个理论模型。真实晶体含有杂质,有时还必须添加掺杂剂以获得所需特性。例如,在 100 个原子中替换掉 1 个原子,就需要上百个原子的计算单元。本文演示了如何在数百甚至数千 GPU 上高效并行化此类计算——HfO₂只是一个例子,原理可推广到类似规模的计算。
关键术语定义
- Speedup(加速比):相对于参考的无量纲性能度量。本文参考为使用 8×A100 80GB SXM4 GPU(不启用 NCCL)的单节点性能。加速比等于参考运行时间除以实际运行时间。
- Linear scaling(线性缩放):完全并行应用的理想加速曲线。根据阿姆达尔定律,100%并行且互连无限快时,2倍资源将使运行时间减半,10倍资源使时间减为十分之一。如果实际加速比高于线性,称为超线性缩放。
- Parallel efficiency(并行效率):无量纲度量,表示特定应用执行与理想线性缩放的接近程度。计算公式:
并行效率 = (实际加速比) / (线性缩放加速比) ×100%。大多数 HPC 数据中心设定最低并行效率目标(50-70%),以避免浪费计算时间。
VASP 与混合 DFT 的特殊性
VASP(Vienna Ab initio Simulation Package)是电子结构计算和第一性原理分子动力学中最广泛使用的应用之一。它与 NAMD、GROMACS、LAMMPS、AMBER 等分子动力学(MD)代码不同:MD 将原子视为点电荷,计算代价低;而 VASP 在量子水平处理电子相互作用,计算化学键。它还可以用于从头算分子动力学(AIMD)。
本文侧重使用混合 DFT(Hybrid DFT)方法——将精确交换计算与 DFT 的近似值混合,获得更高精度的带隙预测。带隙决定材料是绝缘体、半导体还是导体。对于铪基材料,这种额外精度至关重要,但计算复杂度剧增。结合多原子需求,就需要扩展到多节点 GPU 超级计算机。幸运的是,VASP 6 提供了高效实现。
何时需要多节点运行?
许多 VASP 计算化学系统较小,不用 HPC 即可完成。但有以下情况时,多节点运行成为必要:
- 单节点运行时间不可接受(即使单节点效率更高)。
- 大型计算所需内存超出单节点容量——需要分布式并行。大多数计算量可分解,每个节点所需内存大致由并行节点数决定。
关于多节点并行性和计算效率,可参考 NVIDIA 的电子书《HPC for the Age of AI and Cloud Computing》。
Magnum IO 并行通信工具:MPI vs NCCL
VASP 使用 NVIDIA Magnum IO 库优化多 GPU 和多节点编程。本文重点介绍两个库:
- MPI (Message Passing Interface):编程分布式内存系统的标准。
- NCCL (NVIDIA Collective Communications Library):通过全聚集、全规约、广播等例程,实现高度优化的多 GPU 通信,并利用 NVLink 和 InfiniBand 加速。
VASP 默认使用 NCCL,因为性能通常显著优于 MPI。 差异源于两点:
- 流感知与异步性:NCCL 通信由 GPU 启动,可像 CUDA 内核一样排队在流上,实现异步操作,避免 GPU 空闲。
- 拓扑感知:NCCL 了解 GPU 拓扑,节点内使用 NVLink,节点间优化 InfiniBand 通信。而 MPI 需要在 CPU 端同步,且数据在 CPU 上汇总,单线程内存带宽可能成为瓶颈。
小提示: 如果应用程序有 CPU 内核可用,可生成线程推进 MPI 通信进度,但会增加代码复杂度。使用 NCCL 则更简洁高效。
计算建模测试用例:HfO₂ 超级单元
铪晶体由 Hf(黄色)和 O(红色)构成。最小晶胞包含 4 个 Hf 和 8 个 O 原子(共12个)。图 2 展示了结构:

图 2. 氧化铪 (HfO₂) 晶胞可视化
框线表示单位晶胞,在三维空间重复延伸。尺寸为 51.4×51.9×53.2 Å,一个角度为 99.7°。为研究杂质(如 1% 氧空位),需要构建超级单元。本研究中使用的超级单元及其原子数和轨道数(band)如下:
- 2x2x2:96 原子,512 轨道
- 3x3x2:216 原子,1280 轨道
- 3x3x3:324 原子,1792 轨道
- 4x4x3:576 原子,3072 轨道
- 4x4x4:768 原子,3840 轨道
注意: 计算工作量与原子数或体积不成正比,本研究估计与原子数或体积的立方近似成正比。
准备输入文件
如果您想用 HfO₂ 做测试,可以下载输入文件(链接仅供示意)。由于版权原因,POTCAR 文件需由 VASP 许可证持有者自行生成:
# cat PAW_PBE_54/Hf_sv/POTCAR PAW_PBE_54/O/POTCAR > POTCAR
为保持实验一致性,我们强制使用恒定数量的轨道(bands),并固定 k 点为 8。
测试方法:环境与计时
所有基准测试使用 VASP 6.3.2,编译环境为 NVIDIA HPC SDK 22.5 + CUDA 11.7。在 NVIDIA Selene 超级计算机上运行(560 个 DGX A100 节点,每节点 8 个 A100-80GB GPU、8 个 ConnectX-6 HDR InfiniBand NIC、双 AMD EPYC 7742 CPU)。
进程绑定如下(对应 NUMA、GPU、NIC 理想位置):
| Node local rank | CPU NUMA node | GPU ID | NIC ID |
| 0 | 3 | 0 | mlx5_0 |
| 1 | 2 | 1 | mlx5_1 |
| 2 | 1 | 2 | mlx5_2 |
| 3 | 0 | 3 | mlx5_3 |
| 4 | 7 | 4 | mlx5_6 |
| 5 | 6 | 5 | mlx5_7 |
| 6 | 5 | 6 | mlx5_8 |
| 7 | 4 | 7 | mlx5_9 |
表 1. 计算节点 GPU 和 NIC ID 映射
可下载脚本 selenerun-ucx.sh,通过工作负载管理器(如 Slurm)包装 VASP 调用:
# export EXE=/your/path/to/vasp_std
# srun ./selenerun-ucx.sh
为快速获得性能数据,在 INCAR 中设置 NELM=1,仅运行一个电子步骤(19 次迭代收敛于 3x3x2 超级单元)。实际运行总时间可用公式预测:
其中 titer 从 LOOP 计时器获取,tpost-iter 为 LOOP+ 与 LOOP 之差,tinit 为总时间减去 LOOP+。首次迭代稍长(因一次性分配),但误差通常小于 2%。
并行效率结果分析
96 原子(2x2x2)
单节点 19 次迭代约 40 分钟。MPI 在两节点上效率 93%,四节点 83%,八节点 63%;而 NCCL 在两节点上 97%,四节点 90%,八节点 71%。在 16 节点时差距最大:NCCL 相对加速 >10 倍,MPI 仅 6 倍。超过 64 节点时出现负缩放(轨道数增加导致)。

图 4. 96 原子案例的缩放与性能(NCCL vs MPI)
216 原子(3x3x2)
单节点需 7.5 小时。NCCL 在 16 节点前效率保持 91% 以上,128 节点约 50%;MPI 在 8 节点低于 90%,64 节点仅 41%。注意:NCCL 在较大模型下异步通信效果更好。
324 原子(3x3x3)
单节点需一天。NCCL 与 MPI 差距更大,128 节点时 NCCL 相对加速比为 2 倍。
576 原子(4x4x3)
单节点需 5 天以上。在此尺寸下,内存容量成为因素:单节点无法在所有 k 点上并行(需减少并行度),从两节点起可充分利用。MPI 在两节点出现轻微超线性(102%),因为并行度提升。NCCL 扩展到 256 节点(2048 GPU)仍保持 67% 效率。
768 原子(4x4x4)
类似情况,256 节点时 NCCL 并行效率 75%,相对 MPI 快 3 倍。

图 6. 576 和 768 原子案例的缩放与性能
使用 NCCL 的建议与总结
基于以上测试,我们给出如下指南(图 7):

图 7. 对类似 HfO₂ 的 VASP 模拟使用 NCCL 的指导
- 除最小计算外,均使用 GPU 加速。
- 对于大型原子系统,考虑多节点以缩短洞察时间。
- 对所有多节点计算启用 NCCL——只会提高效率,初始化开销很小。
总之,混合 DFT 的可伸缩性取决于数据集大小。图 8 展示了不同节点数下的并行效率:

图 8. 并行效率作为节点数函数(对数尺度)
对于计算密集型数据集,VASP 在 32 节点上效率 >80%;对于最苛刻的数据集,可在 256 节点上高效扩展。
常见问题解答
Q: 为什么 NCCL 比 MPI 快那么多?
A: NCCL 通信由 GPU 启动且流感知,可隐藏在计算后异步进行;而 MPI 需要 CPU 同步和额外数据拷贝,导致 GPU 空闲。此外,NCCL 支持拓扑感知(NVLink、InfiniBand),节点内通信延迟更低。
Q: 如何预测完整运行的总时间?
A: 使用公式:总时间 ≈ tinit + (Niter × titer) + tpost-iter。其中 titer 可从单次迭代计时器获得,tinit 和 tpost-iter 可从上一次完整运行记录估算。首次迭代略长,但误差通常 <2%。
Q: 我的集群没有 8 个 GPU 每节点怎么办?
A: 脚本 selenerun-ucx.sh 需要根据实际 GPU/NIC 数量定制映射。请参考表 1 的模式,调整进程绑定以确保 NUMA 亲和性。
Q: 使用 NCCL 是否有风险或缺点?
A: NCCL 的初始化开销极小(通常数秒),远低于多节点运行节省的时间。唯一潜在问题是 NCCL 需要 GPU 直接通信能力(如 NVLink 和 InfiniBand),传统以太网环境可能效果较差。但只要您有高性能互连,NCCL 总是优于 MPI。
用户与管理员获益
研究人员: 利用 GPU 加速和 NCCL,可以运行比以往更大、更复杂的模型,在合理时间内获得科学洞察。之前因运行时间过长而放弃的模型,现在可以在数小时内完成。
HPC 系统管理员: 许多数据中心有并行效率最低限制(如 50%),以避免用户浪费资源。本教程表明,使用 NCCL 后,VASP 在更大节点数上仍能保持良好效率,从而在不违反策略的前提下最大化系统吞吐量。管理员可以放心允许用户使用更多节点,以快速完成计算。
