ABACUS 专题

ABACUS与DeepH:从几何结构预测能带

用固定半径几何建图,在V100 16G训练DeepH,结合独立计算的重叠矩阵获得能带。

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

DeepH用局部坐标系中的哈密顿量作为学习对象。本例在单张V100 16G上实际训练原版DeepH,再把预测矩阵旋转回全局坐标系,结合重叠矩阵S计算能带。其DFT标签与DeePTB示例一致,便于理解两种流程的区别。

下载模型、配置、预测脚本、重叠矩阵和参考数据。

unzip abacus-deeph-wave697-*.zip
cd abacus-deeph
bash results.sh
bash plot.sh

1. 快速得到参考结果#

先准备个人环境和Si标签包。

bash use-tools.sh ../abacus-ml-env ../abacus-ml-labels
bash prepare.sh
bash predict.sh

准备阶段按几何生成训练图和配置,不训练模型。预测默认使用trained-model,以及包内实际通过ABACUS get_S算出的两个重叠矩阵。输出analysis/Si-DeepH-summary.csv和Si-DeepH-bands.csv。

2. 几何建图与数据划分#

训练6个结构,验证2个结构,独立测试2个结构,编号和用途见标签教程。每条边对应7Å内的一对原子和一个周期平移;还保留在位项。预测图根据元素、坐标、晶胞和固定半径生成,不读取目标DFT的H数值,也不用目标H有哪些非零块来挑边。

配套脚本用ASE生成几何邻接表,再交给DeepH原生局部坐标和图接口。create_from_DFT=True在此用于读取已生成的邻接键,并不表示用目标DFT哈密顿量建图。训练和预测采用同一套几何规则。

关键配置:

[basic]
target = hamiltonian
interface = h5
seed = 69717
num_threads = 1
statistics = False
normalizer = False

[graph]
radius = 7.0
create_from_DFT = True
if_lcmp_graph = True

[train]
epochs = 1000
early_stopping_loss = 0.0001

[hyperparameter]
batch_size = 2
learning_rate = 0.001
criterion = MaskMSELoss

[network]
atom_fea_len = 32
edge_fea_len = 64
gauss_stop = 7.0
num_l = 3

完整train.template.ini还包含4×4共16种轨道通道,覆盖两个Si之间s+p矩阵的全部元素。固定划分由SPLIT.json和run_fixed.py传给原生训练程序,不采用每次重新随机划分。关闭全数据统计归一化,避免独立测试标签参与训练预处理。

3. 提交训练并使用自己的模型#

sbatch train.slurm
squeue -u "$USER"
tail -n 20 training.log

参考运行使用单V100 16G、2个CPU线程,在原生日志epoch 524达到预先设定的验证集MSE小于10⁻⁴ eV²条件后停止;原生保存文件按下一轮计数标为epoch 525。选择模型只使用验证集,测试集在模型选定后才评估。

DeepH训练和验证损失

export YS_MODEL="$PWD/output"
bash predict.sh

默认预测用随包模型;上面两行切换到自己训练的模型目录。

4. 新结构还需要重叠矩阵S#

本例DeepH只学习H,没有训练S。非正交NAO基组要解H(k)c = E S(k)c,所以仍需对应结构、相同基组的S。S是基组重叠积分,可以用ABACUS的get_S计算,不需要电子自洽或目标H。

本例使用现有abacus/3.10.1-p100的CPU执行路径,get_S是该版本要求的大小写。配套脚本通过P100分区调度运行,不把这个操作称为GPU加速。

# 参数为标签教程所用的个人ABACUS源码/编译环境根目录
sbatch getS.slurm ../abacus-ri-env/toolchain

以Si-08为例,getS/Si-08/INPUT如下:

INPUT_PARAMETERS
suffix getS
calculation get_S
basis_type lcao
device cpu
ntype 1
nspin 1
nelec 8
nbands 8
ecutwfc 100
symmetry -1
gamma_only 0
out_mat_hs2 1

对应STRU、KPT随包提供。计算后的getS/Si-08/OUT.getS/SR.csr会被预测脚本优先读取;不存在时使用同一结构的配套参考S。换结构时必须生成自己的S,不能沿用本例Si-08或Si-09的矩阵。本例两次get_S所得S与对应SCF标签最大差异小于5×10⁻¹⁰。

5. 预测、旋转回全局坐标并画能带#

bash predict.sh
cat analysis/Si-DeepH-summary.csv
bash plot.sh

predict.sh依次执行原生模型预测、rotate_back局部到全局旋转、H/S傅里叶变换和广义本征值求解。inference/Si-08/hamiltonians_pred.h5是全局H;rh_pred.h5仍是局部矩阵,不能直接当成全局H画能带。

DeepH预测与完整DFT矩阵参考

独立结构 H矩阵MAE/eV 能带MAE/eV 能带最大误差/eV
Si-08,a=5.35Å 0.003197 0.09291 0.4910
Si-09,a=5.48Å 0.002781 0.07044 0.3432

比较包括8个网格点和Γ–X–L–Γ路径61点的全部8条带,没有能量平移。预测H一般不会严格满足厄米关系;这里按DeepH官方dense_calc.py方式使用(H+H†)/2求能带,同时保留未对称化矩阵。原始反厄米残差最大约0.0604和0.0442 eV,不把这项误差隐藏。S正定,没有投影删除轨道。

本例只覆盖Si2小范围均匀伸缩,使用SZ轨道、Gaussian0.01Ry。模型半径7Å,完整参考中的较远H块有小量截断差异;文中的误差已和完整参考比较,不能据此声称能准确处理任意Si结构或真实材料带隙。

原生方法与格式:DeepH固定源码、ABACUS接口说明。

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

查看配图

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

100%查看原图 ↗