DeePMD专题

DeePMD能量力与Hessian联合训练

提交H2能量、力和二阶力常数联合训练,理解Hessian损失、原生学习曲线及实际矩阵误差。

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

完成量化标签篇的解压后,进入同一个 H2-Hessian 目录。所需数据、模型和程序也可从完整实例包下载。

1 整理参考结果#

bash analyze.sh

核对提供的参考文件、重建标签,生成 tables/Hessian-results.csv 与六张 figures/ 图片,不提交训练。

head -n 8 tables/Hessian-results.csv

2 提交自己的联合训练#

bash run.sh

默认提交核时P100分区1GPU、2个CPU核额度,训练一个1500步的PyTorch能量/力/Hessian模型,测试检查点,冻结并测试能量/力图,再比较同一权重的GPU和CPU结果。V10016G权限用户可改为 bash run.sh v100;两者均通过Slurm申请计算节点。

提交号在 new-work/SUBMISSIONS.json。脚本等待已有作业,排队或训练时不要重复运行。若重新开始,另建解压目录保留原结果。二阶监督需要计算更高阶导数,即使本例只有2原子,也比普通能量/力小训练更费时。

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

新训练在 new-work/,结果表为 tables-new/your-Hessian-results.csv;参考数据仍保存在 reference/。CPU推断也在本次GPU作业的计算节点内隐藏CUDA设备运行,仅作数值对照,不能用来衡量CPU节点速度。

3 完整输入#

{
  "model": {
    "type_map": [
      "H"
    ],
    "data_stat_nbatch": 6,
    "descriptor": {
      "type": "se_e2_a",
      "sel": [
        4
      ],
      "rcut": 2.0,
      "rcut_smth": 1.5,
      "neuron": [
        8,
        16
      ],
      "axis_neuron": 4,
      "precision": "float64",
      "seed": 578001,
      "type_one_side": true,
      "resnet_dt": false
    },
    "fitting_net": {
      "neuron": [
        16,
        16
      ],
      "resnet_dt": false,
      "precision": "float64",
      "seed": 578002
    }
  },
  "learning_rate": {
    "type": "exp",
    "start_lr": 0.002,
    "stop_lr": 1e-05,
    "decay_steps": 150
  },
  "loss": {
    "type": "ener",
    "start_pref_e": 1.0,
    "limit_pref_e": 1.0,
    "start_pref_f": 1.0,
    "limit_pref_f": 1.0,
    "start_pref_v": 0.0,
    "limit_pref_v": 0.0,
    "start_pref_h": 0.1,
    "limit_pref_h": 0.1
  },
  "training": {
    "training_data": {
      "systems": [
        "../data/train"
      ],
      "batch_size": 2
    },
    "validation_data": {
      "systems": [
        "../data/validation"
      ],
      "batch_size": 2,
      "numb_btch": 3
    },
    "numb_steps": 1500,
    "seed": 578003,
    "disp_file": "lcurve.out",
    "disp_freq": 100,
    "save_freq": 500,
    "save_ckpt": "model"
  }
}

使用 loss.type=ener,能量、力权重均为1,Hessian权重 start_pref_h=limit_pref_h=0.1;virial权重为0,本例没有量化virial标签。Hessian监督由非零 pref_h 启用,不需要把拟合类型改成其他名字。描述符为 se_e2_a,截止2 Å,双精度,嵌入网络[8,16]、拟合网络[16,16],批量2帧。

环境为DeePMD-kit3.2.0源码版、PyTorch2.12.0,配套GCC13.3、CUDA12.9。Gaussian使用厂商AVX程序;标签整理与Matplotlib绘图由ASE3.29.0环境内Python/NumPy完成。作业加载 deepmd-kit/3.2.0,训练和数据加载线程受限,不在登录节点做模型训练。

4 原生命令和学习曲线#

作业内先执行 dp --pt train input.json,再用 dp --pt test -m model.pt -s ../data/test -n 6 -d checkpoint 测试带Hessian能力的检查点。model.pt 指向当前神经网络检查点,1500是优化器步数,不是MD步数。

原生能量力Hessian验证曲线

图直接来自 lcurve.out,没有拟合平滑或错开重叠曲线。能量列按每原子归一,力与Hessian是各自分量的RMSE,单位不同,数值不应直接相互比较。验证曲线与独立测试集也不是同一组原始几何。

5 看完整矩阵误差#

两个测试几何的实际Hessian参考矩阵、预测和差值

两种显卡的本例测试结果均约为:

量 实际误差
能量RMSE/原子 2.969×10⁻⁴ eV/atom
力分量RMSE 0.006103 eV/Å
Hessian分量RMSE 0.09945 eV/Ų
沿键方向曲率最大绝对误差 0.3316 eV/Ų
沿键方向曲率最大相对误差 约1.17%

图中为非质量加权的笛卡尔矩阵,不是振动模式矩阵。只用整体RMSE可能掩盖关键分量,因此另看沿H—H方向的曲率。它仍是小范围H₂教学模型,不代表解离、其他分子或大体系的精度。下一步看检查点与冻结结果。

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

查看配图

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

100%查看原图 ↗