NepTrain描述符接口、virial单位与续算
实际Python接口、八条CLI入口和NEP检查点续训的操作说明。
阅读本篇目录
下载输入、模型、真实数据和短命令脚本(ZIP)。本篇把常用命令、Python结果和续算入口对应起来,避免只拿到一个nep.txt却不知道如何检查。
1 安装版八条CLI#
module load gpumdkit/1.5.8
NepTrain --help
NepTrain nep --help
NepTrain gpumd --help
NepTrain train --help
| 入口 | 用途 | 本专题对应 |
|---|---|---|
| init | 生成调度模板 | initialize.sh,四种模板 |
| perturb | 生成扰动构型 | perturb.sh |
| select | 描述符筛选、降维图 | 三种select短脚本 |
| nep | 调用原生训练或预测 | 闭环训练、独立预测、续训分支 |
| gpumd | 用势进行MD | 两温度探索 |
| dft | 选后端进行标签计算 | 四帧VASP补标 |
| vasp | 单独VASP标签入口 | 同一初始Si8实际单点 |
| train | 统筹上述流程 | workflow.sh |
这些是安装版2.2.0的实际入口。源码中还有内部和历史辅助函数,不应把每个名字都当作稳定公共接口;本专题没有宣称已验证所有内部函数或ABACUS插件路径。
2 先运行API例子#
bash api.sh
cat analysis/API-results.json
ls analysis/*descriptors.npy
这个入口使用附件的第一代参考模型,输出八个测试结构的描述符、能量、力和virial。它与 evaluate.sh 不同:后者使用自己新训练出的第二代模型。
核心Python操作如下,完整可执行版本是 api_example.py,已包含当前环境所需的项目内配置衔接:
from ase.io import read
from NepTrain.core.nep.calculator import Nep3Calculator
frames = read('data/test.xyz', ':')
calc = Nep3Calculator('models/round1-nep.txt')
per_atom = calc.get_descriptors(frames[0])
per_structure = calc.get_structures_descriptors(frames)
energy, forces, mean_virial = calc.calculate(frames)
实际第一个Si2得到2×30原子描述符,八个结构得到8×30结构描述符。单结构描述符为对应原子描述符平均,描述符坐标不是带有eV或Å单位的直接材料物理量。
3 virial最容易差一个原子数#
默认 mean_virial 为每原子eV;转为总virial要乘原子数。
import numpy as np
i = 0
W = np.asarray(mean_virial[i]).reshape(3, 3) * len(frames[i])
pressure_GPa = W / frames[i].get_volume() * 160.21766208
ase_stress_eV_A3 = -W / frames[i].get_volume()
总virial除体积是压力张量;上式压力采用压缩为正,ASE应力符号相反。calculate(..., mean_virial=False) 给出原子贡献,求和后也应得到同一个总virial。

同一个pilot模型在CPU接口、P100和V100 16G原生预测中逐项对照能量、力及每原子virial;还用Si2、Si8的体积应变和xy剪切做有限差分,最大virial偏差约0.001463 eV。比较前必须确认使用的是同一组权重,不能拿两个独立训练模型要求逐项相等。
4 两种续算分别解决什么#
工作流中断后,在原目录继续:
bash workflow.sh
bash status.sh
脚本优先读取 loop/restart.yaml,复用已完成阶段。本例完整流程结束后再次运行,没有新增Slurm作业。保留cache、配置和任务记录,不要只复制一个restart.yaml到空目录。
NEP检查点则是训练器的另一层续训。附件含本例训练产生的 models/pilot-nep.restart;本集群另做了V100 16G原生续训1000代并重新评价独立测试,结果见误差表。配置应明确启用检查点并指定续训代数,而不是把nep.txt重命名为restart。
ls models/pilot-nep.restart
cat analysis/neptrain-heldout.csv
cat inputs/nep.in
本次续训分支显式设置 lambda_1=0,没有把它称为与未中断长训练完全相同的轨迹;原始检查点和第二代模型用途不同。需要自己的续训时,在新的工作目录保留原检查点和输入,核对原生训练日志确实读取检查点,再判断独立误差。
5 结果交付时保留什么#
保留输入、数据拆分、nep.in、模型、训练曲线、独立测试误差、候选标签及单位说明。最短检查顺序:
bash run.sh
bash api.sh
bash evaluate.sh
最后一条要求自己已完成完整训练;前两条可直接使用附件参考结果。不要把参考模型图、自己模型误差和训练点回算混成同一组独立测试结论。
Python工具与ABACUS标签#
继续阅读NepTrain Python接口与结构筛选和NepTrain用ABACUS计算能量力标签。提供安装版入口索引、周期几何/描述符/FPS操作、完整INPUT与KPT、真实Si单点以及能量定义和virial单位转换。原VASP闭环数据与ABACUS标签保持各自一致的DFT标准。