VASP MLFF:从已有DFT标签重选与重拟合
用13个已有硅构型生成ML_AB,完成select和refit,并与未参与训练的6个构型对照。
阅读本篇目录
下载VASP MLFF重拟合、补点与短轨迹完整示例,保存为example.zip:
python3 -m zipfile -e example.zip .
cd vasp-mlff-active-examples
bash results.sh
bash plot.sh
这几步读取参考数据并绘图,不启动新的VASP计算。完整输入在inputs/,原生结果在reference-results/,两个自有模型在models/,数值标签与七份CSV在data/。自己运行时,在本目录准备与标签一致的合法PBE64 Si POTCAR,再提交sbatch run.slurm。附件不含POTCAR、WAVECAR或VASP程序。
本例VASP6.6.1 GPU入口使用NVHPC25.3、CUDA12.8、HPC-X2.22.1、MKL2023.2;实际选择/重拟合/测试/末端DFT在P100,在线学习在V100 16G,每次1MPI进程、1CPU线程、1GPU。附带单作业模板选择P100,串起各阶段。
1. 先分开数据,避免把测试点放进训练集#
本例复用此前真实计算的25个Si₁₆构型:静态构型,以及0、300、600K热位移构型。它们是单点标签,不是平衡MD轨迹。所有标签使用PBE、PAW64 Si、ENCUT550eV、4×4×4Gamma、EDIFF1E−6、ISMEAR0、SIGMA0.05eV。
按独立位移方向分组:13个训练、6个验证、6个测试。同一方向在不同温度及正负位移下的构型放在同一组,避免相关样本跨组。测试标签只用于读出误差,不进入ML_AB。

能量使用与原子力一致的VASP自由能F,而不是随意混用E0。data/LABELS.json保留晶胞、坐标、能量、全部原子力、原生kbar应力和源文件哈希;原数据流程见从VASP数据训练DeePMD。这里重用标签,不需要把25个DFT重新计算一遍。
2. 先生成ML_AB#
python3 make_ml_ab.py
head -40 ML_AB
cp ML_AB inputs/select/ML_AB
脚本只选split=train的13行数据,写出文本训练数据库。这个最小生成器专用于本包Si16;换元素或原子数时,要同步修改头部、质量、种类顺序、最大原子数和每个构型的内容。
ML_AB不仅有能量,也有Å坐标、eV/Å原子力、kbar应力。头部的示例局域参考配置1 1是供select读取的占位段;局域参考环境随后由程序重新选择,不能把这个占位当作“只训练1个原子”。
3. select阶段的完整输入#
实际INCAR:
SYSTEM = si-thermal-static
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
NSW = 1
IBRION = 0
ISMEAR = 0
SIGMA = 0.05
ISYM = 0
LREAL = .FALSE.
LASPH = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
NBANDS = 48
ISTART = 0
ICHARG = 2
ML_LMLFF = .TRUE.
ML_MODE = select
ML_CTIFOR = .02
ML_MB = 256
ML_MCONF = 128
ML_MCONF_NEW = 8
TEBEG = 300
TEEND = 300
POTIM = 1
MDALGO = 2
SMASS = 0
实际POSCAR:
generated by phonopy
1.0
0.0000000000000000 5.4689259125969842 5.4689259125969842
5.4689259125969842 0.0000000000000000 5.4689259125969842
5.4689259125969842 5.4689259125969842 0.0000000000000000
Si
16
Direct
0.0000000000000000 0.0000000000000000 0.0000000000000000
0.5000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 0.5000000000000000 0.0000000000000000
0.5000000000000000 0.5000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 0.5000000000000000
0.5000000000000000 0.0000000000000000 0.5000000000000000
0.0000000000000000 0.5000000000000000 0.5000000000000000
0.5000000000000000 0.5000000000000000 0.5000000000000000
0.1250000000000000 0.1250000000000000 0.1250000000000000
0.6250000000000000 0.1250000000000000 0.1250000000000000
0.1250000000000000 0.6250000000000000 0.1250000000000000
0.6250000000000000 0.6250000000000000 0.1250000000000000
0.1250000000000000 0.1250000000000000 0.6250000000000000
0.6250000000000000 0.1250000000000000 0.6250000000000000
0.1250000000000000 0.6250000000000000 0.6250000000000000
0.6250000000000000 0.6250000000000000 0.6250000000000000
实际KPOINTS:
Gamma mesh
0
Gamma
4 4 4
0 0 0
核心操作是把数据库命名为ML_AB,设置ML_MODE=select,然后在该目录的已分配资源中运行:
mpirun -np 1 vasp_std > vasp.stdout
select从已有标签选择局域参考环境并生成ML_ABN和模型,不进行旧标签的DFT重算。它与重新对原子结构做SCF是不同步骤。
4. refit阶段怎样衔接#
复制选择后的数据库:
cp ../select/ML_ABN ML_AB
INCAR将模式改为:
ML_LMLFF = .TRUE.
ML_MODE = refit
实际完整INCAR在inputs/refit-before/INCAR,其他物理标签设置仍与原数据保持一致。输出ML_FFN是新模型;纯预测时将它复制为ML_FF,设置ML_MODE=run。
完整附件用一条提交命令自动传递这些文件:
sbatch run.slurm
squeue -u "$USER"
5. 必须看未参与训练的结构#

初始13标签模型的6构型能量RMSE约0.1314meV/atom,力分量RMSE约0.01143eV/Å。能量先除以16个原子;原子力统计6×16×3个分量。
cat data/frozen-heldout-tests.csv
bash extract.sh
extract.sh读取自己完成的work/。原生ML输出与普通DFT的标题不同,通用OUTCAR读取器可能无法直接识别;附件按ML TOTEN与实际力块读取,DFT标签使用ASE读取。不能把“不认识ML格式”误判为VASP没算完。
这仍是很小的固定体积模型,不能据此直接预测熔点、表面、缺陷或压力性质。下一步见在线学习补点。参数含义可查VASP ML_MODE和ML_AB格式。