hiPhive 截断与阶数实测
用同一组Si温度轨迹比较五种力常数空间,分开报告训练、验证和独立种子测试误差。
阅读本篇目录
做力常数拟合时,先保持数据划分一致,再比较截断和阶数。本例用相同600K Si64轨迹,比较三个二阶截断和两个二加三阶组合,避免把数据差异误当成模型改进。

1. 固定参考结构和训练划分#
Si金刚石常规晶胞2×2×2,共64原子,晶胞边长10.86Å。两条轨迹使用不同初速度种子,每条5ps准备、20ps生产,每0.1ps输出,拟合每1ps抽一帧。
| 用途 | 轨迹来源 | 构型数 |
|---|---|---|
| 训练 | 种子1,生产1–12ps | 12 |
| 参数选择的验证 | 种子1,生产13–20ps | 8 |
| 最后报告的测试 | 种子2,生产1–20ps | 20 |
每个构型的全部3N个力分量归到同一部分。相隔1ps并不自动意味着统计独立,相关性示意另见有限温度拟合。
2. 按阶数定义截断#
from ase.io import read
from hiphive import ClusterSpace
ref = read('Si-reference.xyz')
spaces = ([3.0], [4.2], [5.0], [3.0, 3.0], [4.2, 3.0])
for cutoffs in spaces:
cs = ClusterSpace(ref, cutoffs)
print(cutoffs, cs.n_dofs)
列表只含一个数是二阶;两个数分别为二阶、三阶截断。本例5Å小于晶胞半边长5.43Å,但这个几何条件只帮助避免当前截断的明显周期重复问题,不证明超胞已收敛。三阶项仍可含同一个原子的重复位移因子,见簇空间。
3. 拟合并提取对照#
六条轨迹完成后,在已分配的计算资源内:
bash fit.sh
bash analyze.sh work fit static-checks
head -n 8 work/analysis/fit-comparison.csv
cat fit/600K-c4p2-3p0/SELECTION.json
fit_models.py 为600K的五个空间各做OLS和四个Ridge强度,还为300/900K各做一个固定5Å谐模型;fit_replicates.py 再独立拟合三个种子2谐模型。这里先比较OLS,力误差单位都是eV/Å:
| FC2/FC3截断/Å | 最高阶 | 参数数 | 训练RMSE | 验证RMSE | 独立种子测试RMSE |
|---|---|---|---|---|---|
| 3 | 2 | 2 | 0.206641 | 0.207567 | 0.206667 |
| 4.2 | 2 | 6 | 0.187802 | 0.190305 | 0.185791 |
| 5 | 2 | 10 | 0.187190 | 0.190808 | 0.185726 |
| 3/3 | 3 | 5 | 0.102975 | 0.098506 | 0.109198 |
| 4.2/3 | 3 | 9 | 0.062725 | 0.058457 | 0.062836 |
4. 怎样判断结果#
二阶截断从3增到4.2Å,测试RMSE从约0.20667降到0.18579;继续增到5Å只降到0.18573,说明在这个数据和二阶模型中该段截断收益已很小。它不是所有性质、温度或超胞都收敛的证明。
加入三阶项的4.2/3Å模型测试RMSE约0.06284,比当前谐模型明显低。这是有限振幅下非谐力表达能力的改善,不能只用“参数越多越好”解释。应继续查看矩阵秩、验证误差和物理结果;本例各训练矩阵均满秩。
5. 换成自己的数据#
先准备一致晶胞和原子对应,再扩大超胞、截断、阶数或训练构型数中的一个量。验证集用于选参数,测试集留到最后。若连续多次看测试误差再修改模型,这个测试集也参与了选择,应增加真正独立的数据。不要只以训练误差下降为依据。
下载与运行#
下载Si64轨迹、输入、拟合模型与绘图脚本。解压后先看随包结果:
bash analyze.sh
结果位于 reference/analysis/,图片位于 reference/figures/。在新的解压目录重新运行全部六个温度/种子条件、拟合和声子处理:
sbatch run.slurm
默认一张P100、一个CPU核、30分钟,分区为 gpu-8p100-hs;套餐用户按自己的权限改为例如 gpu-8p100-tc。也可将六个条件并行提交:
bash submit.sh
并行入口在 submit.py 中修改分区;只生成脚本用 bash submit.sh --dry-run。全部完成后:
bash analyze.sh work fit static-checks
bash run.sh si-600K-seed1 是已经分配GPU资源后的单例入口,会做该条MD和三个末态抽查;拟合需要六条轨迹齐全,再用 bash fit.sh。不要在登录节点直接运行MD。重跑请重新解压,脚本不会覆盖已有work/fit/jobs目录。
本例环境为GPUMD5.9.1 P100构建(GCC13.3、CUDA12.9)、hiPhive1.5与Phonopy4.8.3,入口已配置所需Python工具环境。力标签由 Si_2022_NEP4_5body.txt 产生,不是DFT力;它用于低成本演示拟合与判断参数。64原子、每条20ps生产轨迹和两个种子不足以给出收敛材料频移、完整稳定性或精度排名。