Calorine模型裁剪、扩展与重启状态
演示保留和新增元素、调整神经元、初始化参数和SNES搜索宽度,分清模型编辑与训练。
阅读本篇目录
下载模型、真实数据、完整脚本与参考图片。相关教程:偶极与极化率 · 红外与拉曼谱 · NEP89微调 · 模型编辑 · GPUMD数据读写 · 完整接口索引
1 准备与运行#
先解压并重画已经完成的参考结果:
unzip calorine-response-workflows-wave266-*.zip
cd calorine-response-workflows-wave266
bash run.sh
六张参考图在figures,CSV在analysis。若要自己重新计算,在新解压目录以普通账号执行:
bash prepare.sh
bash calculate.sh
bash status.sh
calculate通过Slurm分配一张P100,自动完成本包所有计算;新结果在work,参考图与新算结果分开。已提交时继续查看status,不要删除记录重复提交。结束后:
cat work/COMPLETE.json
ls work/analysis
本例环境为Calorine 4.0、Python 3.11、GPUMD 5.9.1;GPUMD采用GCC 13.3/CUDA 12.9系列环境。可以用module show calorine/4.0和module show gpumd/5.9.1-p100查看当前模块。下面的Python片段在计算完成后的work目录执行;MD和训练由calculate提交。
2 模型文件和restart各保存什么#
nep.txt保存用于预测的模型参数;nep.restart保存SNES的均值和搜索宽度。编辑模型结构时,要同时考虑新参数如何初始化,以及它们的搜索宽度是否已设置。搜索宽度σ不是MD温度;0表示冻结,未设置是NaN,二者含义不同。
查看本包实跑的编辑结果:
cat work/Model-API/RESULTS.json
ls work/Model-API
ls models/NEP89-Si-parent*
NEP89-Si-parent由完整父模型保留Si元素得到,八个Si外部构型的能量、力和virial与完整父模型一致。它只保留Si,不能再用来预测其他88个元素。
3 从已有势建立搜索状态#
from calorine.nep import read_model
m = read_model('models/water-energy.txt')
m = m.set_restart_sigma(strategy='constant', value=0.01, target='all')
print(m.training_parameters)
print(m.parameter_counts)
print(m.n_frozen_parameters, m.n_unset_parameters)
m.write('my-nep.txt', restart_file='my-nep.restart')
如果有真实的已训练restart,优先用read_model(..., restart_file='...')读取;不要用上面的统一宽度覆盖原状态。read_restart和write_restart也可以单独读写搜索状态。
4 元素与网络的实际编辑#
grown = m.add_species(['He'], seed=13579)
kept = grown.keep_species(['O','H'])
removed = grown.remove_species(['He'])
reordered = m.reorder(['H','O'])
aug = m.augment(n_neuron=m.n_neuron + 2)
aug = aug.initialize_parameters(strategy='constant', value=0, target='unset')
aug = aug.set_restart_sigma(strategy='constant', value=0.01, target='unset')
pruned = aug.prune(n_neuron=m.n_neuron)
pruned.write('edited-nep.txt', restart_file='edited-nep.restart')
这些操作返回新Model。新增He的初值不代表He势已经能用;它还需要相应真实数据和训练。本例新增零输出神经元用于说明参数管理,在原O/H体系上保持预测值;不是靠增加两个神经元自动提高准确率。prune缩减一般模型时可能损失精度,不能把本例的零扩展对照当成任意剪枝都无损。

5 完整Model入口#
| 入口 | 用途 |
|---|---|
| training_parameters / write_nepfile | 查看训练参数、写nep.in |
| parameter_counts | 按网络和描述符统计总量、冻结与未设置数量 |
| n_frozen_parameters / n_unset_parameters | 查询状态 |
| read_restart / write_restart | 读写SNES状态 |
| write | 写预测模型,可一并写restart |
| keep_species / remove_species / reorder | 保留、删除或重排元素 |
| add_species | 新增元素和相关参数 |
| augment / prune | 扩展或缩减网络与描述符 |
| initialize_parameters | 设置选定参数值 |
| set_restart_sigma | 设置选定参数的搜索宽度 |
本包model_api.py逐项调用上述16个成员,并比较编辑前后的原体系预测。对自己新建的物理模型仍需重新检查数据覆盖、外部误差和MD稳定性。