CP2K专题

CP2K神经网络势:单模型与八模型平均

使用现有原生NNP模型,给出完整输入、提交命令、模型平均及能量分歧的真实结果。

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

本例使用鸢算科技集群CP2K 2026.2的原生Behler–Parrinello NNP接口,分别执行八个单模型、八模型平均、平移与旋转对照、18个有限差分能量点及10步NVE,共30个实际运行条件。模型采用现有CP2K数据目录中的bulkH2O-jcp2020-cnnp,没有新训练,也没有调用DFT。

下载完整输入、原始结果和读取绘图工具,保存为example.zip:

python3 -m zipfile -e example.zip .
cd cp2k-nnp-committee-example
bash results.sh
bash read.sh
bash plot.sh

以上读取已经完成的结果,图片在figures/,CSV在analysis-read/。本例用一个三原子水分子降低学习成本;所用势在体相水上训练,所以这里用于演示接口、模型平均和导数关系,不证明孤立分子或其他水相的预测精度。模型的能量零点也不能直接与另一种DFT总能相比。

程序采用Intel oneAPI 2024.2/ifx、Intel MPI 2021.13和MKL构建,选择cp2k/2026.2-8173m。此原生NNP入口使用已安装的对称函数和网络权重,不需要LibTorch;NequIP、Allegro、MACE等另外的接口有各自依赖,不能据此推断它们已在同一构建中可用。

1. 先确认模型的三个部分#

module purge
module load cp2k/2026.2-8173m
ls /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-1

每组模型含input.nn、scaling.data、weights.001.data与weights.008.data。前两者规定描述符、网络结构和归一化,后两者是H和O对应的网络权重。只有文件名相似不代表模型可以混用。

本例八个模型使用同一组描述符与缩放定义,逐个权重文件的SHA256保存在PLAN.json。运行脚本先检查现有模型文件,不覆盖公共模型。模型出处为Schran等人的committee neural network potentials工作。

2. 读完整的八模型输入#

cat inputs/committee/input.inp
cat inputs/single-1/input.inp

八模型输入如下:

&GLOBAL
 PROJECT nnp
 RUN_TYPE ENERGY_FORCE
 PRINT_LEVEL MEDIUM
 SEED 792101
&END GLOBAL
&FORCE_EVAL
 METHOD NNP
 &NNP
  NNP_INPUT_FILE_NAME /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-1/input.nn
  SCALE_FILE_NAME /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-1/scaling.data
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-1/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-2/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-3/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-4/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-5/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-6/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-7/weights
  &END MODEL
  &MODEL
   WEIGHTS /public/software/cp2k/2026.2/8173m/share/cp2k/data/NNP/bulkH2O-jcp2020-cnnp/nnp-8/weights
  &END MODEL
  &PRINT
   &ENERGIES
   &END ENERGIES
   &EXTRAPOLATION
   &END EXTRAPOLATION
  &END PRINT
 &END NNP
 &SUBSYS
  &CELL
   ABC 20 20 20
   PERIODIC NONE
  &END CELL
  &COORD
   O 0.000000000000 0.000000000000 0.000000000000
   H 0.962400000000 -0.074500000000 0.002950000000
   H -0.250100000000 -0.825500000000 0.412620000000
  &END COORD
 &END SUBSYS
 &PRINT
  &FORCES ON
  &END FORCES
 &END PRINT
&END FORCE_EVAL

METHOD NNP选择原生NNP力评估;多个&MODEL共享上面的描述符和缩放,给出八组权重。PERIODIC NONE是本例非周期单分子设置;不应把它当作体相水生产输入。

改单模型时,保留一段&MODEL即可。更换元素、原子类型、描述符、单位和归一化时要成套检查,不能只把权重文件路径换成任意另一个模型。

3. 提交自己的小测试#

sbatch run.slurm
squeue -u "$USER"
# 所有小测试结束后
bash read.sh work analysis-new
bash plot.sh analysis-new figures-new

CPU脚本申请整节点56核,实际每次用1线程顺序执行小条件。本例用于学习,不能据此评估56核并行效率。已有work/目录会保留,请在新的解压目录重算。

单个目录的原生命令是:

cd work/committee
cp2k.psmp -i input.inp -o output.log

只在已申请的计算资源中执行;配套总脚本已经完成的目录不要再次覆盖。正常结束后,output.log包含总能和原子力,nnp-nnp-energies-1.data含各模型能量、平均值和分歧。

4. 模型平均与分歧分别说明什么#

真实单模型能量与结构受力

八次单模型能量的算术平均,与原生committee总能一致;力的最大平均差约3.75×10⁻¹¹ Hartree/Bohr。模型能量的总体标准差约0.00232508 Hartree,即63.2687 meV;本例按ddof=0计算,不能与样本标准差的定义混淆。

cat analysis-read/NNP-model-committee.csv
head reference-results/committee/nnp-nnp-energies-1.data

分歧大通常提示应进一步检查模型覆盖范围,但分歧小也不保证DFT误差小。八个模型可能共同偏离参考,因此不能把标准差直接当成经过标定的预测误差。下一篇用有限差分和短MD核对工具操作。

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

查看配图

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

100%查看原图 ↗