DeePMD 旧类型嵌入se_a_tpe冻结模型实操
按实际文件格式读取模型,核对CPU和GPU、能量差分及逐原子受力。
阅读本篇目录
本篇接着训练与结果读取,查看原生冻结模型,理解能量、受力和设备对照。下载完整实例包。
1 找到模型#
ls new-work/p100-se_a_tpe
实际推断读取frozen_model.pb。训练入口中的兼容处理只恢复被展平后的帧数:把nframes×natoms先除以natoms,再恢复四维嵌入数组。没有改标签、学习率、损失、网络参数或最终预测,也没有在推断后投影受力。训练后的标准.pb包含完整计算图,推断不需要再次修改描述符函数。若改用其他软件版本,请先检查接口和自己的数值结果。
2 查看同一权重的设备比较#
cat tables-new/cpu-gpu-errors.csv
程序将自己的同一模型分别放在CPU和Slurm分配的GPU上,比较测试集能量与力。另检查平移、旋转、同种H原子换序、分子合力,并对6个坐标方向做两档独立能量差分,位移为0.0001与0.00003Å。

上图左侧是模型的受力与自身能量差分,说明能量与导数的一致性;实际量子化学力误差见上一页的测试表。右侧是相同权重跨设备的浮点数值差别,不是速度比较。
3 核对原生测试输出#
head -n 12 new-work/p100-se_a_tpe/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-se_a_tpe/frozen_model.pb")
energy, force, virial = model.eval(
coordinates.reshape(1, 12), None, [0, 1, 1, 1]
)
print(energy, force)
此处使用公共TensorFlow环境即可读取冻结图。如果结构、类型顺序或模型化学元素不同,必须一并修改输入,不能只替换坐标文件名。
4 重画参考图#
bash plot.sh
这个命令读取reference重画六张真实参考图,不重新训练。自己的结果仍看tables-new与new-work。软件依据:DeePMD-kit3.2.0官方版本。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。