LAMMPS POD预测与P100精度对照
独立测试结构的原生CPU与P100 Kokkos推断、完整输入、误差图和必要后端设置。
阅读本篇目录
本组实际完成一个小型POD机器学习势流程:为32个Cu108近FCC结构计算ASE EMT参考能量和力,24个用于训练、8个独立测试;调用LAMMPS原生 fitpod,再做CPU/P100推断、描述符和导数检查。
参考标签是半经验ASE EMT,不是DFT。 这个例子用于学习输入格式和工具流程,不是可直接用于任意铜体系的第一性原理势。原生fitpod日志沿用 DFT energy/force 列名,本包这些列实际对应EMT参考值。
下载全部输入、参考标签、模型、原始结果与图片,在个人目录执行:
mkdir pod-demo
cd pod-demo
curl -fL https://yuansuan.top/assets/downloads/full-function/lammps-pod-wave81-13e715e5efcc.zip -o examples.zip
unzip examples.zip
sbatch submit.slurm
脚本申请一个CPU核、一个P100,自动生成标签、训练、分析已有模型、CPU与Kokkos推断并画图。模块为 ase/3.29.0、lammps/30Sep2026-p100-gpu 和 lammps/30Sep2026-p100-kokkos;LAMMPS基础构建使用GCC13.3、OpenMPI5.0.10、CUDA12.8,Kokkos推断为双精度。
完成后在整包目录运行:
module purge
module load ase/3.29.0
python analyze.py work
python export_descriptors.py work
python plot_results.py work
head -10 work/analysis/heldout-errors.csv
reference/ 保存已有实算,可把后处理命令的 work 换成 reference 先看结果。新计算使用新解压目录。整包一直采用单MPI进程;本版本四种POD描述符compute也要求单MPI,不要直接把它们改成多MPI提交。
1 先保持模型文件与元素映射一致#
params.pod 定义描述符,coefficients.pod 对应实际拟合系数,pair_coeff 最后的Cu把LAMMPS原子类型映射到模型的Cu元素。文件或元素映射不匹配时,不能靠改一下文件名继续使用。
下面是Cu024独立测试结构的CPU完整输入:
units metal
atom_style atomic
atom_modify map array
boundary p p p
read_data structure.data
mass 1 63.546
pair_style pod
pair_coeff * * params.pod coefficients.pod Cu
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
compute ea all pe/atom
thermo_modify norm no format float %.16g
compute desc all pod/atom params.pod coefficients.pod Cu
dump descriptor all custom 1 descriptors.dump id type c_ea c_desc[*]
dump_modify descriptor sort id format float %.16g
run 0
print "POD $(pe:%.16g)" file energy.dat screen no
write_dump all custom forces.dump id type x y z fx fy fz c_ea modify sort id format float %.16g
本例只做 run 0 单点能量和力,没有时间积分。compute pe/atom 用于核对每原子能量之和,首个CPU例还导出逐原子POD描述符。模型的MD稳定性和相变行为需要另行验证。
2 P100 Kokkos完整输入#
package kokkos neigh half
newton on
units metal
atom_style atomic/kk
atom_modify map array
boundary p p p
read_data structure.data
mass 1 63.546
pair_style pod/kk
pair_coeff * * params.pod coefficients.pod Cu
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
compute ea all pe/atom
thermo_modify norm no format float %.16g
run_style verlet/kk
run 0
print "POD $(pe:%.16g)" file energy.dat screen no
write_dump all custom forces.dump id type x y z fx fy fz c_ea modify sort id format float %.16g
三个设置必须一起保留:package kokkos neigh half、newton on、run_style verlet/kk。它们是这个POD/Kokkos构建所需的设置,不直接套用其他势函数的默认Kokkos输入。运行还需用Kokkos模块并启用GPU,整包脚本已经处理。
在已经分配的资源内,原生调用关系为:
module purge
module load lammps/30Sep2026-p100-kokkos
cd work/cases/Cu-024-kk
lmp -k on g 1 -in in.lammps
cd ../../..
g 1 使用当前分配可见的一张卡;不要直接硬编码节点物理GPU编号。整包在这张卡上顺序计算8个测试结构。
3 看独立测试误差#
能量误差按原子数归一,力误差按全部笛卡尔分量计算RMSE。8个结构共864个原子、2592个力分量。

| 量 | 本例8个测试结构 |
|---|---|
| 能量RMSE/eV·atom⁻¹ | 0.0009623323 |
| 力RMSE/eV·Å⁻¹ | 0.005184491 |
这里的误差表示POD重现EMT的程度,不是对DFT或实验的误差。要建立实际科研模型,需要有代表性的参考数据与明确独立测试,不能只根据近FCC小样本的误差决定生产使用。
4 CPU与P100是另一个比较#
CPU和P100使用完全相同的参数、系数及几何结构。此处对照后端数值,不再与EMT误差混在一起:

本次8个静态结构的最大总能量差约 8.76e-14 eV,最大力分量差约 5.83e-14 eV/Å,处于本例双精度实现的舍入量级。这不是对所有模型和体系的统一误差上限,也不是GPU性能测试。小单点包含初始化开销,不能用它推断生产MD加速比。
head -10 work/analysis/heldout-errors.csv
head -12 work/cases/Cu-024-cpu/forces.dump
head -12 work/cases/Cu-024-kk/forces.dump
5 保存与再使用#
保存参数、系数、参考数据来源、结构、模型版本和原生输入。POD势信息不写进二进制restart,读入对应重启后还需重新声明配套 pair_style 和 pair_coeff;本例没有把单点演示写成已经完成MD续算。
训练流程、描述符与导数工具。势函数接口见官方pair_style pod说明。