GPUMD:电荷模型与电荷+vdW实操
用真实NaCl能量受力训练两种长程模型,比较独立测试与Ewald静态结果,并说明电荷输出约定。
阅读本篇目录
本例接续NaCl标签准备,分别训练 charge_mode 1 与 charge_vdw 1。它们都能在当前 nep 中训练和预测;当前 gpumd 支持电荷模型 nep4_charge1,尚不能加载 nep4_charge_vdw。不要通过改模型头把不支持的模型用于动力学。
1. 生成训练目录#
下载完整实例资料包,保存为 gpumd-NaCl-longrange-wave218.zip。
unzip gpumd-NaCl-longrange-wave218.zip -d nacl-longrange
cd nacl-longrange
source /etc/profile
module load ase/3.29.0
python3 prepare_models.py
ls cases
四个目录对应两种模型、两个固定种子。训练12、验证4、独立测试4个父构型,另6个位移点只做差分检查。
2. 电荷模型的完整输入#
version 4
model_type 0
charge_mode 1
type 2 Na Cl
cutoff 4.5 4.0
n_max 4 4
basis_size 4 4
l_max 4 2 1
neuron 20
population 30
batch 12
lambda_1 0.0
lambda_2 0.0
lambda_e 1.0
lambda_f 1.0
lambda_v 0.0
lambda_q 0.0
seed 13579
generation 20000
output_interval 100
电荷+vdW模型把 charge_mode 1 替换为 charge_vdw 1,不是同时写两条。此处 model_type 0为能量势;不要把较新开发版的输入关键字直接套到已安装5.9.1。
本例只有真实能量和力标签,显式 lambda_q=0,不拟合未提供的原子电荷;lambda_v=0不拟合应力。XYZ中的 charge=0表示整个晶胞中性,不是给每个原子添加零电荷参考。
3. 提交单卡训练#
cd cases/charge1-p100-s13579
sbatch job.slurm
其余任务分别在以下目录执行 sbatch job.slurm:
cases/charge1-v100-s24680
cases/charge-vdw-p100-s13579
cases/charge-vdw-v100-s24680
每个作业1GPU、1CPU,自动加载对应P100或V10016G模块。先训练20,000代,再预测训练、验证、独立测试与差分集合。charge1还自动运行固定坐标的GPUMD静态对照;电荷+vdW目录只做NEP训练与预测。
想查看真实文件:
head training/nep.txt
tail training/loss.out
cat prediction-heldout/energy_train.out
head prediction-heldout/force_train.out
能量输出两列依次为预测、参考,每原子eV;力输出六列依次为预测Fx/Fy/Fz、参考Fx/Fy/Fz,单位eV/Å。
4. 读取全部独立测试结果#
四个任务结束后回到包根目录:
module load ase/3.29.0
python3 analyze_models.py --new
cat analysis-new/metrics.csv
| 模型 | 种子/平台 | 能量RMSE,meV/原子 | 力分量RMSE,eV/Å |
|---|---|---|---|
| charge1 | 13579 / P100 | 0.04694 | 0.000948 |
| charge1 | 24680 / V10016G | 0.06223 | 0.001038 |
| charge+vdW | 13579 / P100 | 0.03393 | 0.000544 |
| charge+vdW | 24680 / V10016G | 0.00871 | 0.000552 |
以上报告两种模型的全部固定种子,不按独立测试误差挑选种子。这里只比较此有限数据范围,不能把一行误差较小解释为所有材料都应选同一种模型。


NEP原生文本只输出六位有效数字,约−3.6 eV/原子的能量末位分辨率约1E-5 eV;脚本按实际float32与文本格式精确核对参考列。模型与原始DFT比较仍使用保留精度的真实标签,不能把显示位数当作计算精度。
5. 电荷输出为什么要先减平均值#
cat reference-results/charge1-p100-s13579/prediction-heldout/charge_train.out
cat analysis/charge1-static-interface.csv
NEP输出的电荷没有做中性平移;GPUMD输出满足指定总电荷。对本例每个8原子晶胞,将NEP的8个电荷减去它们的平均值,再与GPUMD比较。不能把整个文件的多个晶胞一起减一个平均值。
原始电荷文件保持不变。此模型只用E/F训练,电荷反号可能无法从能量与受力损失中区分;图中两个种子确实得到相反符号。这些是模型内部电荷,不能直接解释为Bader电荷、氧化态或电子转移测量。 C6也没有独立DFT参考精度结论。

6. 同一个模型在 GPUMD 中怎么检查#
charge1作业自动生成的单点输入如下:
potential nep.txt
kspace ewald
velocity 1 seed 13579
ensemble nve
time_step 0
dump_xyz 1 dump.xyz force charge precision double
dump_thermo 1
run 1
用显式Ewald保持求解器约定一致,time_step 0固定坐标。这是能量、受力和电荷接口检查,不是平衡MD轨迹。每个电荷模型覆盖13个实际配置;两个模型共26个静态对照。
cat analysis/charge1-static-interface.csv
cat analysis/model-force-gradients.csv
源模型的GPUMD与NEP最大能量差约7.05E-6 eV/原子,受力差约1.61E-6 eV/Å,中性平移后电荷差约5.99E-6 e。原生能量差分也逐点检查,不能只因两个程序输出相近就认为力一定是能量导数。
7. 用自己的数据时#
准备与目标体系一致的真实能量、受力、周期边界和总电荷,先按父构型或轨迹划分训练与独立测试,再训练;不要把同一构型的小位移拆到不同组充当独立泛化证据。保持参考方法、能量零点、单位和元素顺序一致。
GPUMD5.9.1使用GCC13.3/CUDA12.9.86,VASP6.5.1使用NVHPC25.3,后处理ASE3.29.0。软件和输入依据GPUMD固定版本源码。本例不提供缺陷、表面、液态或长期动力学的通用精度保证。