DeePMD能量力与Hessian联合训练
提交H2能量、力和二阶力常数联合训练,理解Hessian损失、原生学习曲线及实际矩阵误差。
阅读本篇目录
完成量化标签篇的解压后,进入同一个 H2-Hessian 目录。所需数据、模型和程序也可从完整实例包下载。
1 整理参考结果#
bash analyze.sh
核对提供的参考文件、重建标签,生成 tables/Hessian-results.csv 与六张 figures/ 图片,不提交训练。
head -n 8 tables/Hessian-results.csv
2 提交自己的联合训练#
bash run.sh
默认提交核时P100分区1GPU、2个CPU核额度,训练一个1500步的PyTorch能量/力/Hessian模型,测试检查点,冻结并测试能量/力图,再比较同一权重的GPU和CPU结果。V10016G权限用户可改为 bash run.sh v100;两者均通过Slurm申请计算节点。
提交号在 new-work/SUBMISSIONS.json。脚本等待已有作业,排队或训练时不要重复运行。若重新开始,另建解压目录保留原结果。二阶监督需要计算更高阶导数,即使本例只有2原子,也比普通能量/力小训练更费时。
head -n 8 tables-new/your-Hessian-results.csv
新训练在 new-work/,结果表为 tables-new/your-Hessian-results.csv;参考数据仍保存在 reference/。CPU推断也在本次GPU作业的计算节点内隐藏CUDA设备运行,仅作数值对照,不能用来衡量CPU节点速度。
3 完整输入#
{
"model": {
"type_map": [
"H"
],
"data_stat_nbatch": 6,
"descriptor": {
"type": "se_e2_a",
"sel": [
4
],
"rcut": 2.0,
"rcut_smth": 1.5,
"neuron": [
8,
16
],
"axis_neuron": 4,
"precision": "float64",
"seed": 578001,
"type_one_side": true,
"resnet_dt": false
},
"fitting_net": {
"neuron": [
16,
16
],
"resnet_dt": false,
"precision": "float64",
"seed": 578002
}
},
"learning_rate": {
"type": "exp",
"start_lr": 0.002,
"stop_lr": 1e-05,
"decay_steps": 150
},
"loss": {
"type": "ener",
"start_pref_e": 1.0,
"limit_pref_e": 1.0,
"start_pref_f": 1.0,
"limit_pref_f": 1.0,
"start_pref_v": 0.0,
"limit_pref_v": 0.0,
"start_pref_h": 0.1,
"limit_pref_h": 0.1
},
"training": {
"training_data": {
"systems": [
"../data/train"
],
"batch_size": 2
},
"validation_data": {
"systems": [
"../data/validation"
],
"batch_size": 2,
"numb_btch": 3
},
"numb_steps": 1500,
"seed": 578003,
"disp_file": "lcurve.out",
"disp_freq": 100,
"save_freq": 500,
"save_ckpt": "model"
}
}
使用 loss.type=ener,能量、力权重均为1,Hessian权重 start_pref_h=limit_pref_h=0.1;virial权重为0,本例没有量化virial标签。Hessian监督由非零 pref_h 启用,不需要把拟合类型改成其他名字。描述符为 se_e2_a,截止2 Å,双精度,嵌入网络[8,16]、拟合网络[16,16],批量2帧。
环境为DeePMD-kit3.2.0源码版、PyTorch2.12.0,配套GCC13.3、CUDA12.9。Gaussian使用厂商AVX程序;标签整理与Matplotlib绘图由ASE3.29.0环境内Python/NumPy完成。作业加载 deepmd-kit/3.2.0,训练和数据加载线程受限,不在登录节点做模型训练。
4 原生命令和学习曲线#
作业内先执行 dp --pt train input.json,再用 dp --pt test -m model.pt -s ../data/test -n 6 -d checkpoint 测试带Hessian能力的检查点。model.pt 指向当前神经网络检查点,1500是优化器步数,不是MD步数。

图直接来自 lcurve.out,没有拟合平滑或错开重叠曲线。能量列按每原子归一,力与Hessian是各自分量的RMSE,单位不同,数值不应直接相互比较。验证曲线与独立测试集也不是同一组原始几何。
5 看完整矩阵误差#

两种显卡的本例测试结果均约为:
| 量 | 实际误差 |
|---|---|
| 能量RMSE/原子 | 2.969×10⁻⁴ eV/atom |
| 力分量RMSE | 0.006103 eV/Å |
| Hessian分量RMSE | 0.09945 eV/Ų |
| 沿键方向曲率最大绝对误差 | 0.3316 eV/Ų |
| 沿键方向曲率最大相对误差 | 约1.17% |
图中为非质量加权的笛卡尔矩阵,不是振动模式矩阵。只用整体RMSE可能掩盖关键分量,因此另看沿H—H方向的曲率。它仍是小范围H₂教学模型,不代表解离、其他分子或大体系的精度。下一步看检查点与冻结结果。