DeePMD类型嵌入concat与strip训练
用单卡Slurm训练两种类型嵌入设置,读取学习曲线和真实测试集能量受力误差。
阅读本篇目录
本篇在已准备的数据与环境上训练se_e3_tebd类型嵌入的concat、strip两个变体,同时训练一个DPA4模型,便于后面读取同一批输出。下载完整实例包。
1 一条命令提交#
bash run.sh
默认使用P100分区,申请单卡、2个CPU核、8GB内存,三个小模型依次训练,各3000步。V10016G用户在新解压目录中使用bash run.sh v100。程序打印Slurm作业号并等待结束;排队时不要重复启动。已有new-work时应保留结果,另建目录重算。作业管理仍按集群的普通用户权限执行。
完整顺序为:复制数据和输入→concat训练、冻结、测试→GPU与CPU推断→strip同样操作→DPA4训练与测试→生成自己的结果表。训练均从头开始;没有直接把参考模型复制成新模型。
2 类型嵌入输入怎么读#
concat的实际完整model配置如下:
{
"type": "standard",
"type_map": [
"N",
"H"
],
"descriptor": {
"type": "se_e3_tebd",
"rcut": 3.0,
"rcut_smth": 2.5,
"sel": [
4,
8
],
"neuron": [
8,
16
],
"tebd_dim": 4,
"tebd_input_mode": "concat",
"resnet_dt": false,
"precision": "float64",
"seed": 596001
},
"fitting_net": {
"type": "ener",
"neuron": [
32,
32
],
"resnet_dt": false,
"precision": "float64",
"seed": 596002
}
}
type_map必须与数据类型编号一致。sel=[4,8]给N、H邻居预留容量,不是体系原子数;rcut=3、rcut_smth=2.5单位Å。tebd_dim=4是类型嵌入维数。concat把类型信息接入嵌入网络;strip使用另一种原生类型嵌入结合方式,两者是同一描述符家族的两个设置,不代表两种独立软件功能。
strip的完整输入见inputs/se3tebd-strip.json,本例主要将tebd_input_mode改成strip。训练部分固定3000步、batch 4、起始学习率0.002、终值0.00001;验证集仅用于观察,测试集不参与优化。损失为总能量与原子力,virial权重为0。

3 查看新计算#
head -n 5 tables-new/model-results.csv
三行分别是concat、strip、DPA4。energy_RMSE_peratom_eV是按4个真实原子归一的总能量RMSE;force_RMSE_eVA是测试帧所有原子三方向的分量RMSE。12个测试姿态来自4个独立原始构型,应按4个原始构型理解数据范围。
本次P100和V10016G实算的concat能量RMSE约0.001656 eV/原子、力RMSE约0.05834 eV/Å;strip约0.0003743 eV/原子与0.02097 eV/Å。两块卡得到一致数值范围。此处只比较这个固定小数据集,不能据此得出strip对所有化学体系更好。

4 查看训练过程#
head -n 8 new-work/p100-se3tebd-concat/lcurve.out
V100运行时目录前缀改为v100-。lcurve.out包含训练与验证误差,模型目录还保存训练输入、原生训练日志和测试预测。concat与strip既保留model.pt检查点,也输出frozen_model.pth。继续训练应使用检查点,并明确区分恢复优化器与只初始化模型;本例没有自动续算旧目录。
5 检查本次完整结果#
python3 code/summary.py
应看到3个新模型、9000次优化更新和新计算的检查摘要。自己的受力与能量结果在new-work中,下载包reference中的曲线仅是配套参考。下一篇说明DPA4的邻居依赖、模型格式和CPU/GPU比较。