DeePMD专题

DeePMD Hessian检查点与结果分析

区分PyTorch检查点和冻结模型的输出能力,比较能量力、二阶导数、坐标变换和设备结果。

更新于 2026-11-11约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

完成训练篇后,先分清要读取哪个文件。本篇使用同一个完整实例包,无需再提交训练。

1 要取Hessian,用检查点#

ls new-work/*-h2-hessian/model.pt

本例安装版本的实际行为:

文件 能量与力 Hessian
PyTorch model.pt 检查点 有 有
TorchScript frozen_model.pth 有,与检查点一致 本冻结路线不保留

原生冻结命令为 dp --pt freeze -c model.pt -o frozen_model.pth。随后 dp --pt test -m frozen_model.pth -s ../data/test -n 6 -d frozen 测能量/力,不应把这条命令的完成理解为冻结文件也输出了二阶矩阵。

本例CLI测试不加 -a。本安装版本 -a 要求额外的原子能标签;它的含义是比较原子输出,并不等于“启用Hessian”。检查点自身有Hessian能力且提供了 hessian.npy 时,不加 -a 也会生成 checkpoint.h.out。不要为让命令运行而人为分摊总能量充当量化原子能。

checkpoint.e.out、.f.out、.h.out 分别保存能量、力与完整矩阵对照。原生程序也可能写出 .v.out,但本例没有virial参考标签,里面的参考占位不能当作真实应力数据。

2 重绘实际能量与力#

bash plot.sh

读取已提供的参考结果重新绘图,不运行训练。原始NPZ中含6个测试姿态的能量、力、Hessian,及新旋转/平移和相同原子交换后的预测。

检查点预测与实际量化能量力

同一权重的检查点和冻结图给出一致的能量/力,差异约10⁻¹⁶ eV或eV/Å量级。图左是分子总能量,而结果表的能量误差按每原子归一;H₂中两者相差2倍。

head -n 8 tables-new/your-Hessian-results.csv

3 如何取出并核对矩阵#

程序使用 from deepmd.infer import DeepPot,先查看 model.has_hessian。本例检查点的 model.eval(coords, None, [0,0], atomic=False) 返回能量、力、virial及附加的Hessian,最后一项重排为“帧数×6×6”;冻结能量图则没有最后这一项。不能拿固定的元组下标把两种模型混读。

对同一冻结能量模型的力再做±10⁻⁴ Å坐标差分,得到的矩阵与检查点Hessian最大差异约3.41×10⁻⁶ eV/Ų。这是同一个学习模型的导数一致性,与模型对量化Hessian约0.09945 eV/Ų的误差是两个问题。

head -n 8 tables/Hessian-results.csv

CPU/GPU使用同一个检查点分别推断,能量、力、二阶矩阵一致到本例数值精度。整体旋转后Hessian按AHAᵀ变化,整体平移不改变结果;交换两个同种H原子时,对应3×3块随原子顺序交换。包内保留实际变换矩阵和原始预测,没有把不同坐标系的分量直接硬比。

4 从局部曲率到振动,还差什么#

实际固定几何的电子能量、原子力与沿键方向曲率

灰色点来自10个真实量化结构,连线仅连接离散样本;蓝绿标记是两个测试键长的模型预测。相对能量以这些采样结构中最低的HF能量为零,没有据此拟合平衡态或宣称完成结构优化。中图为第一个H指向另一个H的原子力分量。

这些固定几何通常受力非零,不能把每个矩阵的特征值直接当成平衡振动频率。实际振动计算应先达到合适的平衡结构,再做质量加权、单位换算并处理平移/转动模式;本例没有计算平衡振动谱、零点能或MD轨迹。更大体系的Hessian有(3N)²个分量,适合先从小体系熟悉标签和输出方式。输出路线可查DeePMD官方Hessian教程。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗