跳转至

8.4 为机器学习工作流导出第一性原理标签

8.4.1 训练集是科学测量记录

转换器能读取 ABACUS 轨迹,不等于数据可信。每帧需要匹配的能量、结构、原子顺序及训练使用的力/维里标签。SCF 失败、电子分支改变、赝势混用和相关训练/测试样本都会制造误导性准确度。

本例为未执行的数据审计模板,从 ABACUS 3.9.0 轨迹分析出发,使用当前官方 dpdata 插件 API;dpdata 版本需独立记录。插件支持 abacus/scf、abacus/md 计算目录,但不断演进的解析器未必适用于所有输出版本。应锁定安装版本,先人工核对一帧,再批量导出。

本课没有生成轨迹或训练模型,Python 仅为拟议转换与检查,不是已执行基准。真实帧应符合参考质量策略,保留完整日志。只有 STRU 的目录是无标签结构,System 也不自动等于 LabeledSystem。

8.4.2 单位与身份契约

DeePMD 标准坐标/晶胞单位为 Å,能量与维里为 eV,力为 eV/Å。维里是九分量能量张量,不是日志中 kbar 压力。应力转换涉及符号、体积和单位,不能直接复制九个数字。

\[ \mathbf F_i=-\frac{\partial E}{\partial\mathbf R_i},\qquad \delta F_{i\alpha}\approx F_{i\alpha}+\frac{E(\mathbf R+\epsilon\mathbf e_{i\alpha})-E(\mathbf R-\epsilon\mathbf e_{i\alpha})}{2\epsilon}. \]

位移和电子阈值收敛后,有限差分偏差才应较小。它能诊断符号/标签错误,却不证明参考泛函物理精确。先检查小量代表帧,再决定大规模采样。

原子帧与力矢量示意,以及按独立轨迹分组的训练、验证、测试划分以避免相邻帧泄漏

打开原尺寸图

箭头和分组图都是概念示意,不包含已计算力或实测模型误差。

8.4.3 ABACUS 标签输出增量

保持 MD 父任务物种、顺序、泛函、自旋和数值精度,请求所需输出:

# ABACUS 3.9.0 MD parent delta; no job executed here
cal_force   1
cal_stress  1
md_dumpfreq 1
dump_force  1
dump_virial 1

参数以对应基组/方法支持力和应力为前提,不能为旧轨迹补出未保存标签。力/应力需要独立收敛,必要时检查 Pulay 基组效应。MD 快照可能需更严格静态重标记,并明确标签来自在线 MD 还是独立 SCF。

不能把某步的力配到另一帧坐标。对照 MD_dump、running_md.log 检查步号、输出频率和缺失未收敛步。静态 SCF 解析器需要含 INPUT、STRU、OUT 的计算目录,不是孤立日志路径。

8.4.4 拟议 dpdata 检查与导出

Python 为未执行模板,真实使用需替换路径、核对锁定解析器并先拒绝不合格帧;明确 Si 映射仅适用于单元素硅教学轨迹。

import dpdata
import numpy as np

system = dpdata.LabeledSystem("accepted_md", fmt="abacus/md")
data = system.data
nframe = len(system)
natom = system.get_natoms()
assert nframe > 0 and natom > 0
assert data["coords"].shape == (nframe, natom, 3)
assert data["cells"].shape == (nframe, 3, 3)
assert data["energies"].shape == (nframe,)
assert data["forces"].shape == (nframe, natom, 3)
assert data["atom_names"] == ["Si"]
for name in ("coords", "cells", "energies", "forces"):
    assert np.isfinite(data[name]).all(), name
assert np.all(np.abs(np.linalg.det(data["cells"])) > 1e-8)
system.to("deepmd/npy", "audited_si_export")

形状和有限值检查必要却不充分,不能认证 SCF、原子映射和物理单位。人工比较一帧导出坐标、能量和全部力分量,维里符号及单位另验。源文件与数组都应哈希,保留解析器版本、帧列表和排除记录。

多组分任务应为所有组设统一明确元素/类型映射,不能认为字母排序无害;类型编号、坐标和力必须对齐。不同原子数或周期性的体系,按所选 DeepMD 版本分组。

8.4.5 空白质量与划分记录

来源组 帧号/频率 方法与文件哈希 合格 SCF 数 单位检查? 力/维里检查 数据分组 排除原因
轨迹 A 训练
独立轨迹 B 验证
保留晶相/条件 测试

训练前按独立轨迹、结构或热力学条件划分,不随机打散相邻帧;保留真正最终测试组。除整体 RMSE 外,还应报告域内误差和失效模式。小平均值可能掩盖短原子距、表面、相变帧的巨大力误差。重复检测和按组分比较能量,能避免虚假改善。

8.4.6 易错点、练习与答案

易错点。 解析器可读取不收敛输出却不知道验收阈值;压力当 eV 维里会改变尺度与符号;不同泛函混池产生不一致目标能面;相邻帧随机划分泄漏相关信息;不记录拒绝困难帧会暗中缩小适用域;模型误差小不消除 DFT 系统偏差。

练习 1。 所有形状通过,但力比原记录大固定倍数,检查什么?答案: 源/目标单位、转换系数、原子顺序和帧号;用一致能量长度单位做有限差分力。

练习 2。 随机测试误差小,独立轨迹误差大,哪个更有部署意义?答案: 独立组暴露真实泛化问题。保持分组评估,报告失效,而不反复针对最终测试调参。

8.4.7 参考与课程收尾

回到课程总览:先建立可信电子参考,再记录导出过程,最后做独立模型验证。