GPUMDkit NEP 网络扩容与裁剪
将真实PbTe模型从30神经元扩到32或裁到28,导出并比较预测变化。
阅读本篇目录
下载输入、实际结果和绘图资料包。解压后进入资料包目录,inputs 是可修改输入,reference 是鸢算科技集群的参考结果。脚本每次在 work 下新建目录,结果位置写入 LAST-RUN.txt。计算请放在已分配的资源内执行。
从已有模型改变网络规模#
网络扩容用于增加可训练参数;裁剪用于减小网络。两者都需要检查配套优化器、重新训练策略与目标数据。不要把“文件可以导出”理解成“模型已经适用于新任务”。
本例使用模型检查与初始化中的同一 NEP4 PbTe 模型,原网络有 30 个神经元、3075 个总系数。先准备好配套输入:
module purge
module load gpumdkit/1.5.8
python init_optimizer.py
若已生成 model-input,继续使用它,不要重复初始化覆盖自己的文件。

1. 从 30 扩到 32 个神经元#
gpumdkit.sh -nep_modifier model-input/nep.txt \
model-input/nep.restart model-input/nep.in
本例的菜单输入顺序:
1 扩容
1 选择神经元数量
32 目标神经元数
回车 接受本次菜单的默认初始化设置
y 确认修改
7 查看修改记录
8 导出
expand 新输出目录
y 确认导出
0 退出
请按实际提示逐项输入,解释文字不是要输入的字符。扩容后的原参数保留,新参数使用本次菜单显示的初始化设置;当前 Calorine 4.0 入口为新增神经元参数设置 sigma=0.01。
head -n 6 expand/nep_modified.txt
cat expand/nep_modified.changes.txt
本例得到 32 个神经元、3251 个模型总系数、3209 行 SNES 参数。原来的 42 个 q scaler 仍在模型文件中。
2. 从原模型裁到 28 个神经元#
退出后重新打开原来的 model-input,这样扩容和裁剪是两个独立对照:
gpumdkit.sh -nep_modifier model-input/nep.txt \
model-input/nep.restart model-input/nep.in
输入:2 裁剪 → 1 神经元数量 → 28 → 回车接受本次初始化设置 → y 确认 → 7 记录 → 8 导出 → prune → y → 0。
head -n 6 prune/nep_modified.txt
cat prune/nep_modified.changes.txt
结果为 28 个神经元、2899 个模型总系数、2857 行 SNES 参数。
3. 实际对照告诉我们什么#
集群对同一个真实 PbTe 标签结构重新计算能量、原子力和应力:
| 操作 | 总系数 | 该结构最大原子力变化(eV/Å) |
|---|---|---|
| 原样导出 | 3075 | 0 |
| 30 → 32 | 3251 | 0 |
| 30 → 28 | 2899 | 0.07341056 |
本次扩容保持了这个已有结构上的输出;裁剪去掉参数后预测发生变化,结构总能量变化约 3.04387 eV。裁剪后的有限数值说明接口可运行,不代表仍有原来的预测精度。
完整对照由原生编辑命令和 Calorine CPU 预测完成:
bash run.sh models
输出目录中的 MODEL-MODIFIER-PUBLIC-VALIDATION.json 记录各模型的架构、系数数量和探针差值。models/augment-neurons/export 与 models/prune-neurons/export 保存成组文件。
4. 正式使用前继续做什么#
将导出模型、同组 nep.in 与 nep.restart 放到新的训练目录,再提供与任务相符的 train.xyz、test.xyz。检查学习误差、独立测试集及短 MD 稳定性;先确定自己的训练设置,再启动 nep。此篇只运行模型编辑与预测对照,不把编辑后的模型当作已经完成再训练。
菜单另有四体/五体项、高阶不变量及电荷输出头等选项;它们有各自模型与版本前提,不能仅凭本篇神经元示例假定所有组合都已验证。