DeePMD专题

DeePMD DOS模型训练实操

通过普通账户提交NH3占据价轨道谱模型训练,完成冻结、测试与CPU GPU同权重预测。

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

完成标签准备后,在同一 NH3-DOS 目录执行。也可重新下载完整实例包后从标签篇的解压步骤开始。

1 先看已有结果#

bash analyze.sh

核对提供的文件并重建标签,输出 tables/DOS-results.csv、labels-rebuilt/ 和六张 figures/ 图片。它读取已有数据,不提交训练。

head -n 12 tables/DOS-results.csv

initial 是初始8个训练几何的模型,refined 是使用原数据续训的对照,expanded 是最终16个训练几何的新训练;默认复跑 expanded。较大误差的早期权重与原始曲线也保留,可结合数据选取与误差分析阅读。

2 提交自己的小训练#

bash run.sh

默认提交核时P100分区1GPU、2个CPU核额度,训练一个 dos-more-data 模型,共3000步,依次完成冻结、CLI测试、GPU和CPU数值预测。V10016G权限用户可改为 bash run.sh v100。训练与推断均在Slurm分配的计算节点执行;CPU对照也在该作业内隐藏CUDA设备进行,不能用作CPU节点速度对比。

脚本等待已经提交的作业,作业号在 new-work/SUBMISSIONS.json,排队时不要重复提交。重算请新建解压目录,保留原结果。

head -n 8 tables-new/your-DOS-results.csv

新结果在 new-work/,汇总为 tables-new/your-DOS-results.csv;参考数据仍在 reference/。表中的RMSE是整个分子总谱的逐网格分量RMSE,积分误差与负值面积是电子数,不能直接把三种量当成同一单位。

3 完整训练输入#

{
  "model": {
    "type_map": [
      "N",
      "H"
    ],
    "data_stat_nbatch": 6,
    "descriptor": {
      "type": "se_e2_a",
      "sel": [
        4,
        8
      ],
      "rcut": 4.0,
      "rcut_smth": 3.5,
      "neuron": [
        8,
        16
      ],
      "axis_neuron": 4,
      "precision": "float64",
      "seed": 568001,
      "type_one_side": true,
      "resnet_dt": false
    },
    "fitting_net": {
      "type": "dos",
      "numb_dos": 181,
      "neuron": [
        32,
        32
      ],
      "resnet_dt": false,
      "precision": "float64",
      "seed": 572002
    }
  },
  "learning_rate": {
    "type": "exp",
    "start_lr": 0.005,
    "stop_lr": 1e-06,
    "decay_steps": 300
  },
  "loss": {
    "type": "dos",
    "start_pref_dos": 1.0,
    "limit_pref_dos": 1.0,
    "start_pref_cdf": 0.0,
    "limit_pref_cdf": 0.0,
    "start_pref_ados": 0.0,
    "limit_pref_ados": 0.0,
    "start_pref_acdf": 0.0,
    "limit_pref_acdf": 0.0
  },
  "training": {
    "training_data": {
      "systems": [
        "../data/train"
      ],
      "batch_size": 4
    },
    "validation_data": {
      "systems": [
        "../data/validation"
      ],
      "batch_size": 4,
      "numb_btch": 3
    },
    "numb_steps": 3000,
    "seed": 572003,
    "disp_file": "lcurve.out",
    "disp_freq": 100,
    "save_freq": 1000
  }
}

fitting_net.type=dos,输出长度 numb_dos=181,必须与 dos.npy 的列数一致。loss.type=dos,本例 start_pref_dos=limit_pref_dos=1,其余累计谱/原子谱权重为0,使用全局总谱监督。全部N/H中心的输出可加成总谱,但这些内部贡献不是量化原子投影态密度,不能当作N或H的真实PDOS。

实际原生命令为 dp --tf train input.json、dp --tf freeze -o model.pb 和 dp --tf test -m model.pb -s ../data/test -n 12 -d test。本例只有全局DOS标签,CLI测试不加 -a;本安装版本加 -a 会要求额外的 atom_dos.npy 参考标签,不能为了让命令运行而伪造原子谱。

环境使用DeePMD-kit3.2.0源码版、TensorFlow2.21.0,集群配套源码环境为GCC13.3、CUDA12.9;Gaussian使用厂商AVX程序,标签整理和Matplotlib绘图通过ASE3.29.0环境内的Python/NumPy完成。作业脚本加载 deepmd-kit/3.2.0,限制CPU与TensorFlow线程数为1。

4 学习曲线和实际预测#

实际原生DOS学习曲线

lcurve.out 的 rmse_dos_val 是本例原生训练程序输出的每原子归一误差;图保留这一含义。CLI同时输出 DOS RMSE 与 DOS RMSE/Natoms,本例4原子,两者相差4倍。不要把学习曲线上的每原子数值误当成总谱误差。

四个独立测试几何的真实总谱预测

最终模型在P100与V10016G上的测试总谱RMSE均约0.05344 states/eV,最大分量偏差约0.35695 states/eV。曲线有可见峰高误差,近零区域也有小负值,图保留原始预测。它适合学习标签、训练和测试流程,不能据此宣称获得了生产精度的NH₃谱模型。

预测程序实际使用 from deepmd.infer.deep_dos import DeepDOS。global_dos, atomic_dos = model.eval(coords, None, [0,1,1,1], atomic=True) 分别返回总谱和内部中心贡献;没有能量、力输出,不能把返回值当作 DeepPot 的能量/力/virial。原始NPZ、能量网格和两种设备预测都在包内。继续数据与负值尾部分析。

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

查看配图

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

100%查看原图 ↗