Calorine专题

Calorine配置NEP89微调

用真实Si数据演示NEP89微调输入、原生训练、独立测试与模型选择。

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

下载模型、真实数据、完整脚本与参考图片。相关教程:偶极与极化率 · 红外与拉曼谱 · 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 数据先划分,再训练#

本例复用集群真实计算的Si2/Si8小晶体PBE数据:32帧训练、8帧内部验证、8帧外部测试。包含小变形和部分受压晶胞,不是覆盖缺陷、熔化或所有相的生产数据集。能量是VASP自由能F,单位eV/构型;力eV/Å;virial是整个构型的eV总量,ASE拉伸为正的应力满足W=−Vσ。

在动手前查看数据说明和划分:

cat data/SPLIT.json
head -n 4 data/train.xyz
head -n 4 data/test.xyz

完整NEP89父模型与restart在models。微调需要二者;不要用一个新建的随机restart替代已训练父模型的搜索状态。架构参数应与父模型一致,训练预算和损失权重可以按目标任务调整。

3 用API生成输入#

calculate会自动配置并训练两组200代示例。若要理解输入生成,可以在work里为一个新目录执行:

from pathlib import Path
from ase.io import read
from calorine.nep import setup_fine_tuning_nep89
setup_fine_tuning_nep89(
    dict(type=[1,'Si'], generation=200, population=20, batch=32,
         seed=13579, lambda_e=1, lambda_f=1, lambda_v=0.1,
         lambda_1=0, lambda_2=0),
    nep=Path('models/nep89_20250409.txt'),
    restart=Path('models/nep89_20250409.restart'),
    train_structures=read('data/train.xyz', ':'),
    test_structures=read('data/valid.xyz', ':'),
    rootdir='my-finetune', mode='fixed', seed=13579)

生成输入不等于已经训练。下面是本例实际训练输入,路径以work/NEP89-s13579/nepmodel为起点:

fine_tune ../../models/nep89_20250409.txt ../../models/nep89_20250409.restart
type 1 Si
generation 200
population 20
batch 32
seed 13579
lambda_e 1.0
lambda_f 1.0
lambda_v 0.1
lambda_1 0.0
lambda_2 0.0
version 4
zbl 2
cutoff 6 5
n_max 4 4
basis_size 8 8
l_max 4 2 1
neuron 80

4 训练后读哪些文件#

本包在Slurm作业中进入每个nepmodel目录调用原生nep;平时使用calculate提交即可。完成后查看:

cat work/NEP89-s13579/nepmodel/native.exit
tail -n 4 work/NEP89-s13579/nepmodel/loss.out
cat work/analysis/CALORINE-NEP89-independent.csv

native.exit为0说明程序正常结束;还要检查独立误差和目标结构范围。loss.out是训练过程,不能拿它代替外部测试。calorine.nep.read_loss返回以代数为索引的DataFrame,需要普通generation列时用rename_axis('generation').reset_index()。

父模型和两种子微调模型在同一独立八帧上的误差

模型 能量RMSE/eV·atom⁻¹ 力RMSE/eV·Å⁻¹ 压力张量RMSE/GPa
NEP89父模型 0.10944 0.16385 2.3790
微调,种子13579 0.04029 0.04311 0.7175
微调,种子24680 0.04053 0.04447 0.7307

参考两种子分别在P100和V10016G训练,种子与设备同时变化,不能据此判断平台精度差别。资料包完整复跑在P100上执行两种子;小数可能略有变化。200代只展示流程,不能据此声称生产势收敛。

参考NEP89官方输入示例及原生fine_tune说明。

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

查看配图

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

100%查看原图 ↗