DP-GEN的VASP、ABACUS与CP2K标注
展示三种DFT后端的实际输入、提交入口、数据转换和能量力应力单位。
阅读本篇目录
下载完整输入、教学模型、实算数据和操作脚本(ZIP)。机器学习势需要同一精度口径的真实DFT标签。本例主循环使用VASP,另对同一八原子候选结构实际运行ABACUS和CP2K,演示三种输入与数据读取方式。两个独立后端的标签没有混入VASP训练集。
1 VASP:完整流程自动标注#
bash prepare.sh
bash workflow.sh
已有工作目录直接运行第二条续算,不要重新准备。进入 iter.000000/02.fp 可看到四个候选的POSCAR、INCAR和KPOINTS。
cat inputs/vasp/task.000.000000/POSCAR
cat inputs/INCAR.fp
cat inputs/vasp/task.000.000000/KPOINTS
实际模板:
SYSTEM=Si actual labels PBE
ENCUT=450
EDIFF=1E-6
PREC=Accurate
ISYM=0
ISIF=2
NSW=0
IBRION=-1
ISMEAR=0
SIGMA=0.05
LWAVE=.FALSE.
LCHARG=.FALSE.
LREAL=.FALSE.
ADDGRID=.TRUE.
ALGO=Normal
NELM=120
NCORE=1
GGA=PE
KSPACING=0.5
KGAMMA=.TRUE.
NSW=0 对候选构型做单点,不重新优化。若把候选都弛豫到相同平衡点,便丢失主动学习需要的偏离平衡构型。EDIFF=1E-6 控制电子收敛;ISIF=2 输出应力。KSPACING=0.5 配合Γ中心生成网格,随候选晶胞变化,本例出现2×2×2及3×3×3。
第一个候选实际生成的 KPOINTS 为:
Automatic mesh
0
Gamma
2 2 2
初始48标签与新探索构型的k点密度设置需结合材料另行收敛检查。本专题展示短流程,不把不同体积上的这组稀疏网格当成精确状态方程数据。
find work/loop/iter.000000/02.fp -name energy.npy
find work/loop/iter.000000/02.fp -name force.npy
原生输出是多系统数据,实际标签位于 data.000/Si8/set.000/,不是把所有原子数硬塞进同一数组。
2 ABACUS:生成输入、SCF和原生回收#
bash backend.sh abacus
cat inputs/abacus/INPUT
cat inputs/abacus/KPT
该入口调用DP-GEN生成候选输入,通过Slurm运行ABACUS 3.10.1 GPU PW,再以原生后处理提取标签。
INPUT_PARAMETERS
calculation scf
suffix ABACUS
ntype 1
basis_type pw
device gpu
precision double
ks_solver cg
ecutwfc 60.000000
scf_thr 1.000000e-08
scf_nmax 150
nbands 24
symmetry 0
cal_force 1
cal_stress 1
smearing_method gauss
smearing_sigma 0.003675
mixing_beta 0.300000
ecutwfc 的单位是Ry,本例60 Ry;smearing_sigma 也是Ry,0.003675 Ry约0.05 eV。ABACUS这里用 smearing_method gauss,不要照搬其他程序的 occupations 关键字。cal_force/cal_stress 确保训练所需的力与应力输出。
cat inputs/abacus/STRU
cat work/backend-abacus/RESULTS.json
find work/backend-abacus -name energy.npy
Si质量设28.085;STRU 的 LATTICE_CONSTANT=1.889726... 对应1 Å,晶格向量和坐标需配合该尺度解释,不能再重复乘一次Å转Bohr因子。完整STRU和带来源/许可证的Si ONCV PBE赝势已附。
3 CP2K:GPW力与应力标注#
bash backend.sh cp2k
cat inputs/cp2k/input.inp
cat work/backend-cp2k/RESULTS.json
实际使用CP2K 2026.2、PBE、DZVP-MOLOPT-SR-GTH基组与GTH-PBE-q4,Γ点、400 Ry密度网格截断、50 Ry相对截断,RUN_TYPE ENERGY_FORCE,解析应力,电子收敛1E-6。关键段如下:
&GLOBAL
PROJECT DPGEN
RUN_TYPE ENERGY_FORCE
&END GLOBAL
&FORCE_EVAL
METHOD QS
STRESS_TENSOR ANALYTICAL
&DFT
&MGRID
CUTOFF 400
REL_CUTOFF 50
&END MGRID
&SCF
EPS_SCF 1E-6
MAX_SCF 100
&OT
MINIMIZER CG
PRECONDITIONER FULL_SINGLE_INVERSE
&END OT
&OUTER_SCF
EPS_SCF 1E-6
MAX_SCF 10
&END OUTER_SCF
&END SCF
&END DFT
&END FORCE_EVAL
这是参数摘录,完整输入还包括基组/势文件、XC、晶胞、坐标及Si元素定义,已在附件中,不要仅拿摘录单独运行。本例真实总能量为−30.9209494734 Hartree;转换为训练数据时统一到eV。
CP2K 2026输出的能量、力、应力行格式与较早读取器不同,附件 cp2k2026_reader.py 在当前进程注册读取适配,保留原始文本不变。应力输出bar转换为GPa,再按晶胞体积转换为virial;不可把bar直接当eV/ų。该适配只随本例脚本装载,不要求修改公共安装。
cat cp2k2026_reader.py
cat post_backend.py
find work/backend-cp2k -name virial.npy
4 三种结果怎么比较#

图中是同一候选的逐原子力模长。三种程序采用不同基组、赝势和k点设置;绝对总能量零点不同,不横向比较总能量大小,也不把三种能量拼成一个训练集。这里展示的是后端实际输入与接口,不是跨软件精度排名。
cat analysis/backend-labels.csv
ls reference/backend-*.json
cat configs/backend-abacus.json
cat configs/backend-cp2k.json
VASP使用6.6.1 P100版本;ABACUS使用3.10.1 V100版本;CP2K使用2026.2 V100版本。入口各自装载匹配模块,包括相应编译器、MPI与CUDA依赖;详细依赖可用 module show 查看,避免把DeePMD所用的MPI环境带进CP2K进程。DP-GEN参数说明列出各DFT后端配置字段。