GPUMDkit专题

GPUMDkit 主动学习选帧与时间配对

真实短轨迹示范偏差日志和稀疏结构如何配对,再运行原生最大偏差筛选。

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

下载本组输入、真实参考输出与绘图脚本,解压后进入资料包根目录。所有示例在自己的新目录执行,inputs和reference保留。默认bash run.sh all只做工具处理;需要重新训练时才提交compute.sbatch。

第一步:准备真实候选输出#

本例使用同一小型Si训练的两个阶段模型,在P100运行100步NVE,步长0.1fs,总长10fs;仅演示模型分歧和候选选择,不用于生产采样。两个训练阶段不是独立训练的模型集合,分歧也不等于DFT误差或已校准不确定度。

完整run.in如下:

potential nep1.txt
potential nep2.txt
velocity 300 seed 20261028
time_step 0.1
ensemble nve
active 1 0 1 1 0.05
dump_thermo 1
run 100

active后依次是每1步检查、不存速度、存力、存不确定度、输出结构阈值0.05eV/Å。第一模型驱动MD;第二模型用于委员会比较。模型元素顺序一致,本例都是Si。

运行方式与普通GPUMD相同:

module load gpumd/5.9.1-p100
gpumd > gpumd.log 2>&1

请在新的计算目录、已分配的计算资源内执行,不能在已有输出后继续混写。

第二步:先数帧,不能直接假设逐行对应#

本次两种实际输出设置如下,使用同一初始速度种子、同一100步轨迹:

输出结构阈值 active.out行数 active.xyz帧数
0 100 100
0.05eV/Å 100 64

日志记录每个检查时刻,xyz只写超过输出阈值的构型。如果直接用日志行号去索引64帧xyz,会取错位置或越界。

第三步:按Time配对#

资料包根目录执行:

module load gpumdkit/1.5.8
python prepare_pairs.py \
  reference/training/committee-threshold/active.out \
  reference/training/committee-threshold/active.xyz work/active-paired

辅助脚本读取每帧Time,在原始日志中寻找唯一对应行,输出配好的active.out、active.xyz和frame-map.json。原始100行日志仍保留。这里的时间是fs;匹配不依赖“xyz第几帧”。

若日志和结构数量不同又没有Time,就不能自动恢复对应关系。应找回完整元数据或生成完整候选输出,不凭猜测补行。重复时间、无法匹配的时间与已有输出目录都会被拒绝。

第四步:调用GPUMDkit原生筛选#

cd work/active-paired
python "$GPUMDkit_path/Scripts/sample_structures/select_max_modev.py" 3 0.05

先保留偏差严格大于0.05eV/Å的候选,再按偏差降序取3个,写出selected.xyz。本次100帧和64帧两种输入配对后都正确选到原始轨迹中相同的3帧;最大模型分歧0.09889009eV/Å。

实际100行偏差日志、64个保存帧及最大的3个候选;先按时间对应再筛选

第五步:将候选送去DFT标注#

active.xyz中的能量和力来自NEP模型,不能当作新DFT真值。先转换选中结构、执行自洽DFT单点,再将真实结果合入训练集:

gpumdkit.sh -exyz2pos selected.xyz
ls POSCAR_*.vasp

转换后的原子可能按元素分组;涉及逐原子标签时要保留映射。本例只有Si,不发生跨元素重排。DFT结果按VASP标签转换、ABACUS标签转换等教程读取,再执行数据去重与分组拆分,避免把同一轨迹邻近帧同时放进训练和测试。

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

查看配图

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

100%查看原图 ↗