ABACUS 专题

ABACUS与DeePTB:训练模型并预测能带

从六个训练结构出发,在P100上训练H和S模型,再对独立结构预测全部八条能带。

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

本例用同一批Si标签,在单张P100 16G上训练DeePTB模型,同时学习哈密顿量H和重叠矩阵S,再从新结构的几何信息预测能带。参考模型由本集群实际训练得到,没有借用上游预训练权重。

下载完整输入、训练配置、模型、预测脚本和数据。

unzip abacus-deeptb-wave696-*.zip
cd abacus-deeptb
bash results.sh
bash plot.sh

1. 先用参考模型走一遍#

准备个人环境和标签数据包,三个解压目录并排放置。

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

prepare.sh按固定划分整理数据并生成train.json,不会开始训练。predict.sh默认读取trained-model/nnenv.best.pth,只从元素、晶胞和坐标创建预测输入;参考H和S只在预测结束后比较误差。

输出analysis/Si-DeePTB-summary.csv、Si-DeePTB-bands.csv,以及每个结构的预测矩阵HDF5。

2. 看懂模型输入与训练配置#

每个Si使用1s1p轨道,2个Si共8个轨道。使用2层SLEM等变嵌入、7Å邻居范围,输出E3TB矩阵。完整配置随包提供,核心部分如下:

{
  "common_options": {
    "basis": {
      "Si": "1s1p"
    },
    "device": "cuda",
    "dtype": "float32",
    "overlap": true,
    "seed": 69617
  },
  "model_options": {
    "embedding": {
      "method": "slem",
      "r_max": {
        "Si": 7.0
      },
      "irreps_hidden": "8x0e+8x1o+4x2e",
      "n_layers": 2,
      "avg_num_neighbors": 70,
      "tp_radial_emb": true
    },
    "prediction": {
      "method": "e3tb",
      "neurons": [
        32,
        32
      ]
    }
  },
  "train_options": {
    "num_epoch": 1200,
    "batch_size": 2,
    "val_batch_size": 2,
    "optimizer": {
      "lr": 0.005,
      "type": "Adam"
    },
    "lr_scheduler": {
      "type": "rop",
      "factor": 0.7,
      "patience": 50,
      "min_lr": 1e-05
    },
    "loss_options": {
      "train": {
        "method": "hamil_abs"
      },
      "validation": {
        "method": "hamil_abs"
      }
    },
    "save_freq": 200,
    "validation_freq": 10,
    "display_freq": 20
  },
  "data_options": {
    "train": {
      "root": "data/train",
      "prefix": "Si",
      "get_Hamiltonian": true,
      "get_overlap": true
    },
    "validation": {
      "root": "data/validation",
      "prefix": "Si",
      "get_Hamiltonian": true,
      "get_overlap": true
    }
  }
}

train只含6个结构,validation含2个结构;独立测试目录不写入训练配置。overlap: true表示同时学习S,S不是从目标DFT矩阵直接提供给模型。hamil_abs是训练H和S的绝对误差损失,图上的数值不能直接当成能带误差。

3. 自己训练#

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

参考运行使用单P100 16G、2个CPU线程,固定种子69617,1200轮,约14分钟。以验证集损失选出的参考模型为原生epoch 1118检查点。最终一轮的模型不一定最好。

训练与验证损失

自己的训练完成后,使用自己的验证集最优模型:

export YS_MODEL="$PWD/output/checkpoint/nnenv.best.pth"
bash predict.sh

这样会替换预测时使用的模型路径,不会再次训练。

4. 独立结构的实际结果#

两种独立晶格参数的八条能带

测试结构 H矩阵MAE/eV S矩阵MAE 能带MAE/eV 能带最大误差/eV
Si-08,a=5.35Å 0.000503 0.0000254 0.02470 0.4544
Si-09,a=5.48Å 0.000482 0.0000221 0.01910 0.1758

能带误差统计包含8个原生网格点和Γ–X–L–Γ路径61点的全部8条带,比较绝对能量,没有用整体平移人为减小误差。图中蓝实线是完整DFT实空间矩阵的傅里叶参考,橙虚线是模型预测。

平均误差较小不代表每个k点都精确,个别点最大差异达到0.45eV;CSV保留每一条数据。预测S在全部检查点正定,没有删除小本征值来强行求解。配套脚本还把原生DeePTB本征值与独立的矩阵傅里叶求解比较,检查轨道、相位和单位。

5. 换成自己的体系前#

先增加构型覆盖、收敛DFT基组和k网格,再重新划分训练与独立测试。这个模型只见过同一Si2结构的小范围均匀伸缩,没有学习原子扰动、温度、缺陷或不同元素。训练损失下降不能替代这些构型上的实际误差检查。

原生方法与接口:DeePTB E3训练示例、固定源码。

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

查看配图

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

100%查看原图 ↗