ABACUS DeePKS:结构、标签与描述符
以八个真实水分子构型生成LDA描述符与PBE目标,说明数据划分、文件形状和新版能量单位。
阅读本篇目录
DeePKS学习参考方法与基础方法之间的能量差,并把学习项的密度导数加入自洽势。本组从小型水分子开始,依次完成:准备几何 → LDA与PBE标签 → 投影描述符 → 训练 → 加入模型重新自洽 → 对照目标结果。
八个几何都在本集群实际计算。前六个用于训练,最后两个在训练和停止条件中均不使用,留作独立检查。为展示功能,LDA和PBE使用相同的PBE ONCV赝势与NAO基组;这些结果只比较本组固定基组模型中的两种泛函,不构成完整LDA赝势体系或普适精度基准。
unzip abacus-deepks-water-wave680-*.zip
cd abacus-deepks-water
bash results.sh
bash plot.sh
以上仅读取已完成的参考数据并重绘,未启动新计算。reference-data/是本集群实算参考,重新执行的原生结果放在work/、提取的数值和图片放在analysis/。每次完整重算使用新解压的目录,避免覆盖已有结果。
本组使用独立CPU环境。先编译一次,再在本资料包目录选择它:
bash use-toolchain.sh ../abacus-ml-env/toolchain
程序为固定ABACUS 3.11.0-beta10;编译器icx/icpx/ifx 2024.2、Intel MPI 2021.13、顺序MKL 2024.2,链接现有PyTorch 2.8.0+cu126,本文实际使用CPU。公共3.10.1模块保持原用途。计算脚本通过cpu-8173m申请56核独占整节点,小例内部采用少量进程,仍按整节点计费;本篇不作CPU节点性能对照。CPU资源暂不可用时可先查看参考数据。
1. 看结构和划分#
| 构型 | 第一根O–H / Å | 第二根O–H / Å | H–O–H / ° | 用途 |
|---|---|---|---|---|
| 0 | 0.96 | 0.96 | 104.5 | 训练 |
| 1 | 0.94 | 0.97 | 102 | 训练 |
| 2 | 0.98 | 0.95 | 107 | 训练 |
| 3 | 1.00 | 0.98 | 105 | 训练 |
| 4 | 0.96 | 1.01 | 110 | 训练 |
| 5 | 0.93 | 0.95 | 108 | 训练 |
| 6 | 0.97 | 0.99 | 103 | 独立检查 |
| 7 | 0.99 | 0.94 | 106 | 独立检查 |
所有构型均为给定几何单点,放在14 Å立方周期胞内,未做位置优化。第0个完整STRU为:
ATOMIC_SPECIES
O 15.999 O_ONCV_PBE-1.0.upf
H 1.008 H_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
O_gga_6au_60Ry_2s2p1d.orb
H_gga_6au_60Ry_2s1p.orb
NUMERICAL_DESCRIPTOR
jle.orb
LATTICE_CONSTANT
1.8897268777743552
LATTICE_VECTORS
14 0 0
0 14 0
0 0 14
ATOMIC_POSITIONS
Direct
O
0
1
0.500000000000000 0.500000000000000 0.500000000000000 1 1 1
H
0
2
0.568571428571429 0.500000000000000 0.500000000000000 1 1 1
0.482831085436267 0.566387266768784 0.500000000000000 1 1 1
NUMERICAL_ORBITAL指定LCAO基组,NUMERICAL_DESCRIPTOR指定投影文件。这里jle.orb为截断半径2 Bohr、能量参数20 Ry、lmax=2、每个s/p/d各两个径向函数,最终每个原子有18维本征值描述符。基组本身使用6 Bohr半径、60 Ry参数,二者的用途和数值不同。
2. LDA输入与PBE目标#
cat inputs/water0-lda/INPUT
cat inputs/water0-pbe/INPUT
LDA完整输入如下:
INPUT_PARAMETERS
suffix dk
calculation scf
basis_type lcao
ntype 2
ecutwfc 60
scf_thr 1e-6
scf_nmax 120
dft_functional lda
gamma_only 1
ks_solver genelpa
nbands 8
smearing_method fixed
mixing_type broyden
mixing_beta 0.3
cal_force 1
cal_stress 0
out_chg 0
deepks_out_labels 1
deepks_scf 0
PBE目标把dft_functional设成pbe、deepks_out_labels设成0,其余几何、势文件和基组保持匹配。ecutwfc单位Ry,scf_thr为1E-6;gamma_only 1与单个Γ点KPT一起使用。
K_POINTS
0
Gamma
1 1 1 0 0 0
3. 提交标签阶段#
sbatch labels.slurm
脚本先从固定公开源码准备势文件、基组和投影文件,再依次运行八个LDA与八个PBE单点。ZIP不直接附带UPF或轨道文件;实际使用的文件由环境准备步骤提供。
ls work/water0-lda/OUT.dk/*npy
grep FINAL_ETOT_IS work/water0-lda/OUT.dk/running_scf.log
主要文件为deepks_dm_eig.npy、deepks_ebase.npy、deepks_etot.npy及力数组。单个水分子的描述符形状是(3,18);训练集合并后是(6,3,18)。
4. 先把能量单位读对#
本固定beta版本的deepks_ebase.npy和deepks_etot.npy已经是Hartree。水0的原生数组值约−17.0284256548 Ha,对应日志−463.3672337503 eV。这里采用1 Ha = 27.211396 eV与程序常数匹配;不要再照旧版本转换脚本把数组除以2。
source ./env.sh
"$PYTHON_FOR_ANALYSIS" - <<'EOF'
import numpy as np
p='work/water0-lda/OUT.dk/'
print('描述符形状', np.load(p+'deepks_dm_eig.npy').shape)
print('能量 / Ha', np.load(p+'deepks_ebase.npy'))
EOF
训练脚本生成data/train/与data/heldout/,其中l_e_delta.npy = PBE目标能量 − LDA基础能量,全部使用Hartree。几何、描述符与能量必须保持同一帧顺序。

继续模型训练。也可以在全新目录用sbatch job.slurm一次运行整个流程,不需要再分别提交各阶段。