DeePMD DPA4C紧凑描述符检查点推断实操
按实际文件格式读取模型,核对CPU和GPU、能量差分及逐原子受力。
阅读本篇目录
本篇接着训练与结果读取,查看原生检查点,理解能量、受力和设备对照。下载完整实例包。
1 找到模型#
ls new-work/p100-dpa4c
实际推断读取model.pt。这里使用原生model.pt检查点。该后端会识别PyTorch Exportable的检查点并读取对应模型;不能把文件简单改名为.pth、.pte或.pt2当成导出。DPA4C压缩需要官方支持的CUDA路径、float32及对应配置;本例的float64检查点没有提供压缩成品,也没有测试其LAMMPS接入。需要部署时,应另外完成相应导出与目标程序的实际计算。
2 查看同一权重的设备比较#
cat tables-new/cpu-gpu-errors.csv
程序将自己的同一模型分别放在CPU和Slurm分配的GPU上,比较测试集能量与力。另检查平移、旋转、同种H原子换序、分子合力,并对6个坐标方向做两档独立能量差分,位移为0.0001与0.00003Å。

上图左侧是模型的受力与自身能量差分,说明能量与导数的一致性;实际量子化学力误差见上一页的测试表。右侧是相同权重跨设备的浮点数值差别,不是速度比较。
3 核对原生测试输出#
head -n 12 new-work/p100-dpa4c/test.log
完整测试预测保存在heldout.e.out与heldout.f.out,完整推断数组在相邻的API-*目录。能量的单位为eV,力为eV/Å;做每原子能量误差时再除以4。本例没有用virial来推断压力,也没有把原子能量贡献当成独立量子化学标签。

如果在相应环境和Slurm脚本中自行写Python,单帧调用可使用:
import numpy as np
from deepmd.infer import DeepPot
coordinates = np.load("data/test/set.000/coord.npy")[0]
model = DeepPot("new-work/p100-dpa4c/model.pt")
energy, force, virial = model.eval(
coordinates.reshape(1, 12), None, [0, 1, 1, 1]
)
print(energy, force)
此处使用包内.venv的解释器,以便读取Vesin邻居依赖。如果结构、类型顺序或模型化学元素不同,必须一并修改输入,不能只替换坐标文件名。
4 重画参考图#
bash plot.sh
这个命令读取reference重画六张真实参考图,不重新训练。自己的结果仍看tables-new与new-work。软件依据:DeePMD-kit3.2.0官方版本、DPA4C官方文档。