DeePMD模型接入LAMMPS实操
从冻结模型和64原子硅结构出发,提交LAMMPS与Python接口对照,理解模块、类型映射和模型适用范围。
阅读本篇目录
把已经训练的势接入LAMMPS,先用固定结构确认能量、力、virial与模型原接口一致,再考虑优化或动力学。本篇复用鸢算科技集群既有的教学冻结权重,完整经过P100和V10016G实际计算;没有重新训练,也没有把PyTorch权重转换成TensorFlow。
1 下载与目录#
下载模型、输入、原始输出、压力步长对照和绘图脚本,将ZIP放在登录目录:
mkdir DP-LAMMPS
python3 -m zipfile -e deepmd-lammps-interface-*.zip DP-LAMMPS
cd DP-LAMMPS
bash analyze.sh
分析已有数据,生成 tables/ 和 figures/,不提交计算:
head -n 10 tables/energies-forces.csv
reference/original/ 保存初始接口对照,reference/pressure/ 保存同一实际坐标的小步长压力对照。原先10⁻⁵微应变的压力差分偏差也保留,原因和选择方法见压力差分步长。
2 本例的结构和四种模型#
| 文件标签 | 实际模型 | 格式与来源 |
|---|---|---|
pt_se_e2_a |
PyTorch se_e2_a | 原生 .pth 教学权重 |
pt_compressed |
同一PyTorch模型的压缩版本 | 由上一行模型压缩得到 |
pt_dpa1 |
PyTorch DPA1 | 另一份原生 .pth 权重 |
tf_se_e2_a |
TensorFlow se_e2_a | 在TensorFlow中独立训练的 .pb |
只有前两行适合同权重压缩对照;TensorFlow模型与PyTorch模型分别训练,不应要求它们给出相同的材料预测。对应训练流程和输入见DeePMD训练教程。
结构为金刚石硅常规胞2×2×2,共64原子,a=5.43 Å、基准盒长10.86 Å,三维周期边界。四个条件分别是均匀缩放0.98、1.00、1.02,以及标准差0.03 Å的坐标扰动。

图中颜色表示z坐标,沿z方向重合的原子会投影在同一位置。所有模型使用同一份结构,便于核对接口;没有把松弛前后的几何混在一起。
3 提交自己的接口算例#
bash run.sh
默认申请核时P100分区1GPU、2个CPU核额度,依次完成16个LAMMPS固定结构条件和8次Python批量求值。V10016G权限用户可将命令换为 bash run.sh v100。脚本在计算节点运行推断,不在登录节点执行LAMMPS或模型求值;登录节点只负责准备、提交和小文件分析。
每次Python批量求值包含四种结构。CPU模式也在本次GPU作业的计算节点内运行,通过隐藏CUDA设备作数值对照,不能当作Intel Xeon 8173M节点的性能数据。
脚本等待现有作业,提交号在 new-work/SUBMISSIONS.json;可另开终端用 squeue -u "$USER" 查看。不要因排队重复提交。重做请另建解压目录,保留原结果。
head -n 10 tables-new/your-energies-forces.csv
新结果位于 new-work/,汇总在 tables-new/;参考结果留在 reference/。本例全部是零步求能量与力,不积分MD时间。
4 LAMMPS输入与模块#
cat input-example.lmp
下面是实际复跑使用的PyTorch se_e2_a扰动结构输入。文件路径相对于生成的单个计算目录;后半段的±位移和±应变用于能量导数对照。
units metal
atom_style atomic
boundary p p p
read_data ../models/perturbed.data
pair_style deepmd ../potentials/pt_se_e2_a.pth
pair_coeff * * Si
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
compute e all pe/atom
thermo 1
thermo_style custom step atoms pe press vol pxx pyy pzz pxy pxz pyz
thermo_modify norm no format float %.16g
dump d all custom 1 base.dump id type x y z fx fy fz c_e
dump_modify d sort id format float %.16g
run 0
undump d
print "base $(pe:%.16g) $(press:%.16g) $(vol:%.16g) $(pxx:%.16g) $(pyy:%.16g) $(pzz:%.16g) $(pxy:%.16g) $(pxz:%.16g) $(pyz:%.16g)" append properties.dat screen no
group probe id 1
displace_atoms probe move 1e-05 0 0 units box
run 0
print "FD 1 0 plus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move -2e-05 0 0 units box
run 0
print "FD 1 0 minus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move 1e-05 0 0 units box
group probe delete
group probe id 17
displace_atoms probe move 0 1e-05 0 units box
run 0
print "FD 17 1 plus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move 0 -2e-05 0 units box
run 0
print "FD 17 1 minus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move 0 1e-05 0 units box
group probe delete
group probe id 43
displace_atoms probe move 0 0 1e-05 units box
run 0
print "FD 43 2 plus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move 0 0 -2e-05 units box
run 0
print "FD 43 2 minus $(pe:%.16g)" append properties.dat screen no
displace_atoms probe move 0 0 1e-05 units box
group probe delete
change_box all x scale 1.000001 y scale 1.000001 z scale 1.000001 remap
run 0
print "strain plus $(pe:%.16g) $(vol:%.16g)" append properties.dat screen no
change_box all x scale 0.999998000002 y scale 0.999998000002 z scale 0.999998000002 remap
run 0
print "strain minus $(pe:%.16g) $(vol:%.16g)" append properties.dat screen no
核心设置是 pair_style deepmd 和 pair_coeff * * Si,将原子类型1映射到模型的Si。替换模型时保持自己的元素顺序和类型映射一致。
本例作业加载 lammps/22Jul2025_update6-deepmd-3.2.0-source-p100-gpu,V100使用对应的 source-v100-gpu 模块。它与独立源码版DeePMD-kit3.2.0配套,使用GCC13.3、CUDA12.9和HPC-X25.0的MPI环境;Python后端为PyTorch2.12.0、TensorFlow2.21.0。
作业中的原生求解命令为 mpirun -np 1 --bind-to none lmp -in in.lmp。这里的DeePMD后端按CUDA设备选择推断,不需要给 deepmd 强加 -sf gpu 或 -sf kk。普通新版LAMMPS模块与DeePMD配套模块应按自己的模型接口选择。
5 接口一致以后,还要检查模型#

例如基准晶格下,PyTorch se_e2_a预测约41.158 GPa,DPA1约5.407 GPa,独立TensorFlow模型约−63.042 GPa。这些是模型的实际输出,显示这几份教学权重不能直接当作已验证的生产硅势。三点折线只是连接固定结构结果,不能据此拟合平衡EOS。
本包用于熟悉接口和结果核对;正式计算应换成经过自己体系验证的势,检查能量、力、应力、训练覆盖和MD稳定性。两套接口给出相同结果,不能替代这些材料检查。继续看能量、力与virial对照;输入选项见DeePMD官方LAMMPS接口说明。