单节点 48 核并行的 Gamma 点孤立体系参数优化
在拥有较多核心数的服务器上运行 VASP 进行 DFT 计算时,合理的并行参数设置对于提升计算效率至关重要。
特别是对于孤立体系(如分子、团簇、纳米管等)且仅使用 Gamma点 进行计算的情况,并行策略有其特殊性。
本文整理了相关参数作用和普遍接受的经验,目的是提醒像我一样的半路出家党,上了超算一定要关注并行计算效率,毕竟直接关乎有限经费的消耗速度。下面以宁夏超算中心单节点 48 核服务器为例,对 INCAR 的参数设置进行讨论。
核心并行参数解析
对于 Gamma 点计算,核心数将全部用于处理这一个 K 点,因此 K 点并行参数KPAR不再是优化的重点。我们的主要目标是优化节点内的核心协作。
1. NCORE (NPAR在 VASP < 5.4.4 使用,这里不讨论)
作用:控制多少个核心(core)协同处理一个能带(band)或 FFT 任务。总核心数(48)将被分为 NPROCS / NCORE 个组,每个组有 NCORE 个核心。
值:
NCORE必须是总核心数 (48) 的约数。48的约数有:1, 2, 3, 4, 6, 8, 12, 16, 24, 48。- 经验法则是
NCORE约等于节点核心数的平方根 (sqrt(48) ≈ 6.9)。 - 对于 Gamma 点计算,内存带宽和核心间通信是关键。
- 建议测试范围:
NCORE = 4, 6, 8, 12, 16。 - 初始推荐:
NCORE = 8或NCORE = 12。通常,对于单节点Gamma点计算,稍高的NCORE可能表现更优,但需要通过测试验证。
# INCAR
NCORE = 8 # 或 NCORE = 12,从这里开始测试
2. KPAR
作用:控制 K 点的并行。
值:由于是 Gamma 点计算(NKPTS = 1),此参数无效或应明确设为1。
# KPAR = 1 # (默认值,对于Gamma点计算无需更改)
3. NSIM
作用:控制同时处理的能带块(block)的数量。与NCORE和ALGO协同工作。
值:通常保持默认值 4 即可。在NCORE优化后,如果效率仍不理想,可以尝试 NSIM = 1 或 NSIM = 8 并进行基准测试。
# NSIM = 4 # (默认值,通常不用调整)
电子迭代算法选择
ALGO
作用:选择电子自洽迭代(SCF)的算法。
值:
ALGO = Fast:现代 VASP 版本中常用的快速 RMM-DIIS 算法,并行性较好。ALGO = Normal:Blocked Davidson 算法,对于某些孤立体系可能更稳定,收敛更快。ALGO = All:共轭梯度算法,有时对大体系或需要精确力的计算有优势。- 初始推荐:
ALGO = Fast或ALGO = Normal。两者都值得测试。ALGO = Fast # 或 ALGO = Normal
孤立体系的特殊考虑
LREAL
作用:是否在实空间进行投影操作。对于超胞较大的孤立体系,可以显著加速计算。
值:
.FALSE.(默认):对于精度要求极高或体系不是特别大的情况,这是最安全的选择。Auto或.TRUE.:仅当你的孤立体系导致了非常大的元胞(例如,大量原子或非常厚的真空层)时考虑使用。 使用时务必配合PREC = Accurate,并仔细检查计算结果的收敛性和准确性(例如,与LREAL = .FALSE.的结果对比)。# LREAL = .FALSE. # 默认,精度优先 # LREAL = Auto # 针对超大孤立体系,需配合 PREC = Accurate 并验证结果
推荐INCAR参数模板 (Gamma点, 48核单节点)
# --- General Settings ---
# PREC = Accurate # 使用LREAL时推荐
# ENCUT = ...
# IBRION = ... # e.g., 2 (CG) or 1 (RMM-DIIS) for opt, -1 for static
# NSW = ... # Number of ionic steps
# ISIF = ... # e.g., 2 or 3 for geometry optimization
# EDIFF = 1E-5 # SCF energy convergence criterion
# EDIFFG = -2E-2 # Ionic step convergence criterion (for forces)
# ISMEAR = 0 # Gaussian smearing, appropriate for isolated systems
# SIGMA = 0.05 # Small sigma for ISMEAR=0
# --- Parallelization Settings ---
NCORE = 8 # **测试值:8, 12, 6, 16, 4**
# KPAR = 1 # (默认,Gamma点无需设置)
# NSIM = 4 # (默认,通常无需首先调整)
# LREAL = .FALSE. # 默认。若体系超大,可试 LREAL = Auto (并用 PREC=Accurate 仔细验证)
# --- Algorithm ---
ALGO = Fast
# --- Output Control (Optional but Recommended) ---
LWAVE = .T.
LCHARG = .T.
总结
归根结底,NCORE是最重要的并行优化参数。通过系统地测试不同的NCORE值,并结合合适的ALGO和LREAL等设置,可以显著提升 VASP 的计算效率。
当然,不用非得在每项计算中次次计较最优,知道设置哪里能接近效率曲线的峰顶即可。