DeePMD专题

DeePMD通用标量性质训练

通过短命令提交两种property训练,给出完整输入并解释性质名称、输出维度与intensive归约。

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

先按标签准备解压实例包,在同一个 NH3-property 目录执行。

1 整理参考数据#

bash analyze.sh

生成 labels-rebuilt/ 和 tables/property-results.csv。参考表包含P100、V10016G各两种拟合配置及同一权重的GPU/CPU推断。

2 提交自己的两次训练#

bash run.sh

默认以普通账号申请核时P100分区1GPU、2个CPU核额度,在Slurm作业内依次训练两个3000步模型,分别冻结并执行原生 dp --pt test,随后在GPU与CPU上读取冻结模型。V10016G用户可使用 bash run.sh v100。CPU推断在已分配的计算节点内隐藏CUDA设备执行,只比较数值,不代表CPU节点性能。

head -n 8 tables-new/property-results.csv

新训练、日志和模型保存在 new-work/,新结果表在 tables-new/,原参考数据保持独立。这里实际重新训练两个配置,不是只重画参考曲线。排队时不要重复启动;重新开始应另建解压目录。

cat new-work/SUBMISSIONS.json

这个文件保存已有Slurm作业号,日志为 new-work/native-作业号.out。脚本会等待已有作业,正常完成后导出结果。

3 完整单输出输入#

{
  "model": {
    "type_map": [
      "N",
      "H"
    ],
    "descriptor": {
      "type": "se_e2_a",
      "sel": [
        4,
        8
      ],
      "rcut": 3.0,
      "rcut_smth": 2.5,
      "neuron": [
        8,
        16
      ],
      "axis_neuron": 4,
      "precision": "float64",
      "seed": 582001
    },
    "fitting_net": {
      "type": "property",
      "property_name": "homo_lumo_gap",
      "task_dim": 1,
      "intensive": true,
      "neuron": [
        16,
        16
      ],
      "precision": "float64",
      "seed": 582002
    }
  },
  "learning_rate": {
    "type": "exp",
    "start_lr": 0.002,
    "stop_lr": 1e-05,
    "decay_steps": 300
  },
  "loss": {
    "type": "property",
    "loss_func": "mse",
    "metric": [
      "mae",
      "rmse"
    ]
  },
  "training": {
    "training_data": {
      "systems": [
        "../data/train"
      ],
      "batch_size": 4
    },
    "validation_data": {
      "systems": [
        "../data/validation"
      ],
      "batch_size": 4,
      "numb_btch": 3
    },
    "numb_steps": 3000,
    "seed": 582003,
    "disp_file": "lcurve.out",
    "disp_freq": 100,
    "save_freq": 1000,
    "save_ckpt": "model"
  }
}

关键参数是 fitting_net.type=property、property_name=homo_lumo_gap、task_dim=1。loss.type 同样为 property;loss_func=mse 用于拟合,metric 输出MAE与RMSE。描述符为 se_e2_a、截止3 Å、嵌入网络[8,16]、拟合网络[16,16]、双精度、批量4帧。

intensive=true 让分子预测量按模型的原子中间项取平均。本例的轨道能级不是各原子独立能级的和,使用该设置描述固定体系的标量目标。即使接口能返回原子中间项,它们也不是可直接作物理解释的“各原子HOMO/LUMO”。

双输出配置的拟合部分如下,其余训练步骤、数据划分与3000步优化保持一致:

{
  "type": "property",
  "property_name": "orbital_edges",
  "task_dim": 2,
  "intensive": true,
  "neuron": [
    16,
    16
  ],
  "precision": "float64",
  "seed": 582002
}

完整输入位于 reference/inputs/edges.json。多个输出在这里表示多个旋转不变标量;不能直接把方向相关的x、y、z向量分量塞进标量网络,偶极矩、极化率应选相应张量模型。

4 原生命令与环境#

作业内依次执行 dp --pt train input.json、dp --pt freeze -c model.pt -o frozen_model.pth、dp --pt test -m frozen_model.pth -s ../data/test -n 12 -d heldout。本例只有全局真实标签,不加 -a,也不为原子输出制造参考标签。

原生3000步单输出和双输出训练验证曲线

图直接读取 lcurve.out 中的原生 rmse_trn 与 rmse_val,未平滑曲线;本例 intensive=true 且标签为eV,这两列RMSE单位也是eV。验证曲线与测试误差对应不同原始几何。

环境为DeePMD-kit3.2.0、PyTorch2.12.0、GCC13.3与CUDA12.9,加载 deepmd-kit/3.2.0。NumPy与Matplotlib使用ASE3.29.0环境。量化标签来自先前真实Gaussian16 C.01 AVX计算,当前训练没有重新提交Gaussian。

5 查看独立测试预测#

四个原始测试几何的轨道能差、HOMO和LUMO预测

两种GPU的本次结果接近:轨道能差RMSE约0.00558 eV;双输出整体RMSE约0.01423 eV,其中HOMO约0.01877 eV、LUMO约0.00725 eV。整体RMSE按两种输出的全部分量计算,不是把两个RMSE直接相加。三种姿态重合,只画四个原始测试几何。继续多输出与结果分析。

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

查看配图

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

100%查看原图 ↗