DeePMD通用标量性质训练
通过短命令提交两种property训练,给出完整输入并解释性质名称、输出维度与intensive归约。
阅读本篇目录
先按标签准备解压实例包,在同一个 NH3-property 目录执行。
1 整理参考数据#
bash analyze.sh
生成 labels-rebuilt/ 和 tables/property-results.csv。参考表包含P100、V10016G各两种拟合配置及同一权重的GPU/CPU推断。
2 提交自己的两次训练#
bash run.sh
默认以普通账号申请核时P100分区1GPU、2个CPU核额度,在Slurm作业内依次训练两个3000步模型,分别冻结并执行原生 dp --pt test,随后在GPU与CPU上读取冻结模型。V10016G用户可使用 bash run.sh v100。CPU推断在已分配的计算节点内隐藏CUDA设备执行,只比较数值,不代表CPU节点性能。
head -n 8 tables-new/property-results.csv
新训练、日志和模型保存在 new-work/,新结果表在 tables-new/,原参考数据保持独立。这里实际重新训练两个配置,不是只重画参考曲线。排队时不要重复启动;重新开始应另建解压目录。
cat new-work/SUBMISSIONS.json
这个文件保存已有Slurm作业号,日志为 new-work/native-作业号.out。脚本会等待已有作业,正常完成后导出结果。
3 完整单输出输入#
{
"model": {
"type_map": [
"N",
"H"
],
"descriptor": {
"type": "se_e2_a",
"sel": [
4,
8
],
"rcut": 3.0,
"rcut_smth": 2.5,
"neuron": [
8,
16
],
"axis_neuron": 4,
"precision": "float64",
"seed": 582001
},
"fitting_net": {
"type": "property",
"property_name": "homo_lumo_gap",
"task_dim": 1,
"intensive": true,
"neuron": [
16,
16
],
"precision": "float64",
"seed": 582002
}
},
"learning_rate": {
"type": "exp",
"start_lr": 0.002,
"stop_lr": 1e-05,
"decay_steps": 300
},
"loss": {
"type": "property",
"loss_func": "mse",
"metric": [
"mae",
"rmse"
]
},
"training": {
"training_data": {
"systems": [
"../data/train"
],
"batch_size": 4
},
"validation_data": {
"systems": [
"../data/validation"
],
"batch_size": 4,
"numb_btch": 3
},
"numb_steps": 3000,
"seed": 582003,
"disp_file": "lcurve.out",
"disp_freq": 100,
"save_freq": 1000,
"save_ckpt": "model"
}
}
关键参数是 fitting_net.type=property、property_name=homo_lumo_gap、task_dim=1。loss.type 同样为 property;loss_func=mse 用于拟合,metric 输出MAE与RMSE。描述符为 se_e2_a、截止3 Å、嵌入网络[8,16]、拟合网络[16,16]、双精度、批量4帧。
intensive=true 让分子预测量按模型的原子中间项取平均。本例的轨道能级不是各原子独立能级的和,使用该设置描述固定体系的标量目标。即使接口能返回原子中间项,它们也不是可直接作物理解释的“各原子HOMO/LUMO”。
双输出配置的拟合部分如下,其余训练步骤、数据划分与3000步优化保持一致:
{
"type": "property",
"property_name": "orbital_edges",
"task_dim": 2,
"intensive": true,
"neuron": [
16,
16
],
"precision": "float64",
"seed": 582002
}
完整输入位于 reference/inputs/edges.json。多个输出在这里表示多个旋转不变标量;不能直接把方向相关的x、y、z向量分量塞进标量网络,偶极矩、极化率应选相应张量模型。
4 原生命令与环境#
作业内依次执行 dp --pt train input.json、dp --pt freeze -c model.pt -o frozen_model.pth、dp --pt test -m frozen_model.pth -s ../data/test -n 12 -d heldout。本例只有全局真实标签,不加 -a,也不为原子输出制造参考标签。

图直接读取 lcurve.out 中的原生 rmse_trn 与 rmse_val,未平滑曲线;本例 intensive=true 且标签为eV,这两列RMSE单位也是eV。验证曲线与测试误差对应不同原始几何。
环境为DeePMD-kit3.2.0、PyTorch2.12.0、GCC13.3与CUDA12.9,加载 deepmd-kit/3.2.0。NumPy与Matplotlib使用ASE3.29.0环境。量化标签来自先前真实Gaussian16 C.01 AVX计算,当前训练没有重新提交Gaussian。
5 查看独立测试预测#

两种GPU的本次结果接近:轨道能差RMSE约0.00558 eV;双输出整体RMSE约0.01423 eV,其中HOMO约0.01877 eV、LUMO约0.00725 eV。整体RMSE按两种输出的全部分量计算,不是把两个RMSE直接相加。三种姿态重合,只画四个原始测试几何。继续多输出与结果分析。