DeePMD专题

DeePMD 旧类型嵌入se_a_tpe冻结模型实操

按实际文件格式读取模型,核对CPU和GPU、能量差分及逐原子受力。

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

本篇接着训练与结果读取,查看原生冻结模型,理解能量、受力和设备对照。下载完整实例包。

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Å。

energy-derivatives-and-device-consistency

上图左侧是模型的受力与自身能量差分,说明能量与导数的一致性;实际量子化学力误差见上一页的测试表。右侧是相同权重跨设备的浮点数值差别,不是速度比较。

3 核对原生测试输出#

head -n 12 new-work/p100-se_a_tpe/test.log

完整测试预测保存在heldout.e.out与heldout.f.out,完整推断数组在相邻的API-*目录。能量的单位为eV,力为eV/Å;做每原子能量误差时再除以4。本例没有用virial来推断压力,也没有把原子能量贡献当成独立量子化学标签。

predicted-atomic-forces-and-errors

如果在相应环境和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官方版本。

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

查看配图

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

100%查看原图 ↗