DeePMD DOS模型训练实操
通过普通账户提交NH3占据价轨道谱模型训练,完成冻结、测试与CPU GPU同权重预测。
阅读本篇目录
完成标签准备后,在同一 NH3-DOS 目录执行。也可重新下载完整实例包后从标签篇的解压步骤开始。
1 先看已有结果#
bash analyze.sh
核对提供的文件并重建标签,输出 tables/DOS-results.csv、labels-rebuilt/ 和六张 figures/ 图片。它读取已有数据,不提交训练。
head -n 12 tables/DOS-results.csv
initial 是初始8个训练几何的模型,refined 是使用原数据续训的对照,expanded 是最终16个训练几何的新训练;默认复跑 expanded。较大误差的早期权重与原始曲线也保留,可结合数据选取与误差分析阅读。
2 提交自己的小训练#
bash run.sh
默认提交核时P100分区1GPU、2个CPU核额度,训练一个 dos-more-data 模型,共3000步,依次完成冻结、CLI测试、GPU和CPU数值预测。V10016G权限用户可改为 bash run.sh v100。训练与推断均在Slurm分配的计算节点执行;CPU对照也在该作业内隐藏CUDA设备进行,不能用作CPU节点速度对比。
脚本等待已经提交的作业,作业号在 new-work/SUBMISSIONS.json,排队时不要重复提交。重算请新建解压目录,保留原结果。
head -n 8 tables-new/your-DOS-results.csv
新结果在 new-work/,汇总为 tables-new/your-DOS-results.csv;参考数据仍在 reference/。表中的RMSE是整个分子总谱的逐网格分量RMSE,积分误差与负值面积是电子数,不能直接把三种量当成同一单位。
3 完整训练输入#
{
"model": {
"type_map": [
"N",
"H"
],
"data_stat_nbatch": 6,
"descriptor": {
"type": "se_e2_a",
"sel": [
4,
8
],
"rcut": 4.0,
"rcut_smth": 3.5,
"neuron": [
8,
16
],
"axis_neuron": 4,
"precision": "float64",
"seed": 568001,
"type_one_side": true,
"resnet_dt": false
},
"fitting_net": {
"type": "dos",
"numb_dos": 181,
"neuron": [
32,
32
],
"resnet_dt": false,
"precision": "float64",
"seed": 572002
}
},
"learning_rate": {
"type": "exp",
"start_lr": 0.005,
"stop_lr": 1e-06,
"decay_steps": 300
},
"loss": {
"type": "dos",
"start_pref_dos": 1.0,
"limit_pref_dos": 1.0,
"start_pref_cdf": 0.0,
"limit_pref_cdf": 0.0,
"start_pref_ados": 0.0,
"limit_pref_ados": 0.0,
"start_pref_acdf": 0.0,
"limit_pref_acdf": 0.0
},
"training": {
"training_data": {
"systems": [
"../data/train"
],
"batch_size": 4
},
"validation_data": {
"systems": [
"../data/validation"
],
"batch_size": 4,
"numb_btch": 3
},
"numb_steps": 3000,
"seed": 572003,
"disp_file": "lcurve.out",
"disp_freq": 100,
"save_freq": 1000
}
}
fitting_net.type=dos,输出长度 numb_dos=181,必须与 dos.npy 的列数一致。loss.type=dos,本例 start_pref_dos=limit_pref_dos=1,其余累计谱/原子谱权重为0,使用全局总谱监督。全部N/H中心的输出可加成总谱,但这些内部贡献不是量化原子投影态密度,不能当作N或H的真实PDOS。
实际原生命令为 dp --tf train input.json、dp --tf freeze -o model.pb 和 dp --tf test -m model.pb -s ../data/test -n 12 -d test。本例只有全局DOS标签,CLI测试不加 -a;本安装版本加 -a 会要求额外的 atom_dos.npy 参考标签,不能为了让命令运行而伪造原子谱。
环境使用DeePMD-kit3.2.0源码版、TensorFlow2.21.0,集群配套源码环境为GCC13.3、CUDA12.9;Gaussian使用厂商AVX程序,标签整理和Matplotlib绘图通过ASE3.29.0环境内的Python/NumPy完成。作业脚本加载 deepmd-kit/3.2.0,限制CPU与TensorFlow线程数为1。
4 学习曲线和实际预测#

lcurve.out 的 rmse_dos_val 是本例原生训练程序输出的每原子归一误差;图保留这一含义。CLI同时输出 DOS RMSE 与 DOS RMSE/Natoms,本例4原子,两者相差4倍。不要把学习曲线上的每原子数值误当成总谱误差。

最终模型在P100与V10016G上的测试总谱RMSE均约0.05344 states/eV,最大分量偏差约0.35695 states/eV。曲线有可见峰高误差,近零区域也有小负值,图保留原始预测。它适合学习标签、训练和测试流程,不能据此宣称获得了生产精度的NH₃谱模型。
预测程序实际使用 from deepmd.infer.deep_dos import DeepDOS。global_dos, atomic_dos = model.eval(coords, None, [0,1,1,1], atomic=True) 分别返回总谱和内部中心贡献;没有能量、力输出,不能把返回值当作 DeepPot 的能量/力/virial。原始NPZ、能量网格和两种设备预测都在包内。继续数据与负值尾部分析。