

背景介绍
在训练深度势能模型(Deep Potential, DP)与使用深度势能模型进行推断的过程中,常常面临希望能进一步提升模型精度的情形,然而社区用户们往往缺乏一套定位与分析问题的方法论指引,也并不具备有效的分析工具,从而限制了讨论与分析问题的深入程度。
因此,本文希望提供的帮助有三:
- 分析框架:为进一步检查问题、迭代改进模型提供一个分析框架;
- 分析代码:在社区范围内收集可复用的分析脚本,并提出待补充完善的分析脚本;
- 分析案例:提供典型的分析案例(Case Study),并持续汇总成功经验。
本文标黄部分为待补充部分,可以以Notebook的形式补充,并贴在本文对应评论区。 欢迎大家贡献与共同讨论!
前置内容索引
小白友好,1-2小时快速入门 DeePMD-kit|训练甲烷深度势能分子动力学模型
建议至少阅读这篇Notebook并结合自己的实际体系进行一定尝试。
将DP-GEN运行 无痛上手指南--LiSi晶体的DP势函数构建 中的分析脚本Bohrium Notebook化
问题分析
检验模型精度的标准是什么?
模型训练及测试误差
首先回顾下深度势能的工作原理,即“基于第一性原理的计算数据,通过深度神经网络对原子相互作用势能进行参数化,构建了能够有效克服“维数灾难”的模型。得到的深度势能模型可以在保证第一性原理计算精度的同时,将分子动力学模拟计算速度提升数个数量级"。
一个基本的检验自然是深度势能模型的训练及测试误差,即其对势能 、原子受力 (以及维里张量 )的预测与拟合对象(第一性原理计算值)的偏差。
各物理量的定义以及完整的训练过程原理可以参考DeePMD-kit v2:深度势能模型的软件包。
因此在许多文章中也能看到下图右上角一样的模型预测误差对比图。
- [分析脚本] 训练曲线分析脚本、能量/力/维里精度对比脚本、挑选对预测误差大的体系等脚本
需要特别指出的是,以力误差为例,虽然模型对很多体系的力训练误差能达到0.05-0.1eV/atom甚至更低,但模型误差究竟达到多少时才认为满意一般没有泛之四海而皆准的指标,而是需要根据问题具体分析。比如,模拟高温或高压(如燃烧反应、温稠密物质、地质物理、辐照损伤等)时由于原子受力一般非常大,模型预测的偏差的绝对值也会更大。这时自然不能使用机械的数值标准来定义模型准确度。 一般来讲,力误差降低到训练体系中的原子受力的平均值1/10以下,可以认为模型具有一定的精度。

与本章节配套的视频讲解可见下方链接,因视频网站设置,在本网页的显示清晰度可能不佳,可能需要访问原网站获取更清晰观看体验。
实际物理性质检验 [往往更重要]
模型对我们实际关心的物理问题的解决程度往往需要对一系列物理性质模拟效果的检验,这点相比单纯比较模型与拟合对象(第一性原理计算)的数值偏差更重要。常见的物理性质检验包括状态方程、晶格常数、径向分布函数、密度、扩散系数、热导、电导、光谱、声子谱、弹性模量、缺陷/空位/表面形成能、相变转变温度、自由能等。
状态方程
- [分析脚本] 使用APEX工作流进行E-V状态方程计算
晶格常数
[分析案例] Ar的晶格常数LAMMPS计算
[分析脚本] 往往作为初始benchmark,更需要的分析脚本往往是对第一性原理计算软件如ABACUS或泛函如PBE/PBE-SOL的benchmark的脚本
径向分布函数
[分析案例] LiCl径向分布函数
[分析案例] - 需要更原理类的讲解,可以拿LJ/水作为更深入的例子,待完善
密度
扩散系数
[分析案例] 动力学性质计算与检验——以计算电解液体系扩散性质为例
[分析案例] 使用深度势能分子动力学进行固态电解质研究实战
电导
热导
[分析脚本] ABACUS+ShengBTE 计算晶格热导率
[分析脚本] ABACUS+Phono3py 计算晶格热导率
光谱
声子谱
[分析案例] 声子谱计算不准是一个很常见的案例,需要提供一个分析案例
[分析脚本] APEX/dpgen autotest对声子谱的支持?
弹性模量
[分析案例] 探讨使用DP进行弹性性质计算
[分析脚本] 使用APEX工作流进行弹性模量计算
空位/缺陷/表面形成能
- [分析脚本] 使用APEX工作流进行空位/缺陷/表面形成能计算
Gamma Line
- [分析脚本] 使用APEX工作流进行Gamma Line计算
相变转变温度(eg熔点等)
- [分析脚本] ABACUS+DPMD+dflow快速测试熔点性质
热力学自由能
- DP-TI代码及案例优化
...
当模型精度没有达到预期的时候,该如何排查和调整?
在清楚了模型的检验标准之后,接下来的问题在于当希望进一步提升模型精度的时候,我们该如何排查和调整。 大体来讲,我们可以从以下四个方面进行思考与分析。
检查数据自洽性(第一性原理计算);
检查训练拟合过程(DeePMD-kit参数与模型架构等);
检查数据分布与采样问题(这也是DP-GEN一定程度上解决的问题);
检查对物理问题本身的理解。
数据自洽性
需要特别强调的是,模型输入的质量将很大程度上影响模型的质量。对于深度势能模型来讲,拟合对象一般是第一性原理计算数据。在进行大批量第一性原理计算(或大规模DP-GEN)之前对第一性原理计算参数和设置应该进行细致、严谨的检验,否则很有可能造成过多的计算资源和时间的浪费。
因此常需要进行第一性原理计算的测试,大致可以分为两个类型
- 首先是计算方法
- 选择平面波方法或原子轨道方法,选择什么赝势(不同价电子)或原子轨道的选择;
- 选择什么泛函/基组,如PBE/SCAN,是否需要加各类矫正;
- ...
- 其次是参数的数值收敛性
- 平面波截断能(VASP中对应参数名称是ENCUT);
- K点密度(VASP对应参数名称是kspacing);
- 自洽计算收敛准则(VASP中对应参数名称是EDIFF和EDIFFG等);
- ...
声子谱、弹性模量、热导(高阶力常数)等性质因为是能量的高阶信息,对第一性原理计算的精度因而要求往往比较高,若第一性原理计算自身带来的数值误差已比较高,那么使用深度势能拟合该数据进行的计算结果也往往有高的偏差。 此外,不同的泛函对熔点/密度/晶格常数等性质的影响也较直接,因此往往需要仔细测试。
[分析脚本] 第一性原理参数收敛性自动化测试脚本
以ABACUS为例、补充原子轨道的例子

更详细的关于收敛性测试的说明可以参考 https://tutorials.deepmodeling.com/en/latest/CaseStudies/Convergence-Test/Convergence-Test.html 。
与本章节配套的视频讲解可见下方链接,因视频网站设置,在本网页的显示清晰度可能不佳,可能需要访问原网站获取更清晰观看体验。
训练拟合过程
对于大多数周期性体系的第一性原理计算数据,DeePMD-kit仓库中默认的例子(se_e2_a模型)可以作为一次方便快速的测试起点,只需要进行type_map
, decay_steps
, training_data
, (validation_data
), numb_steps
等的调整。

- 模型架构,以及特别是预训练模型的发展
完善DPA的使用文档与技巧, attention layer选取, Finetune, 模型压缩与模型蒸馏
Step1:验证模型精度/速度的提升(对复杂体系的模型训练,有更好的训练精度/训练速度)
- 特别是多组元体系(可训练多达元素周期表内元素数目),如高熵合金、电解液、固溶体、有机小分子。
- 建议测试 attention layer 2 和0,以及se_e2的模型对比。
Step2:验证迁移能力的提升,在DP-GEN的迭代过程中使用DPA模型进行迭代
- 在一些复杂体系上对数据量的要求会降低减少2-10倍;
- 只需要将param.json中修改模型参数;
Step3:验证基于预训练模型的Finetune模式
- 更加自动化/用户友好的finetune工作流,见 DP-Combo 深度势能模型一键生成工具箱
- 更加自动化/用户友好的finetune工作流,见 DP-Combo 深度势能模型一键生成工具箱
Step4:验证对DPA模型部署的加速
- 目前单卡可推断约数千原子,模型压缩/蒸馏的开发正在进行中。
针对部分体系的某些性质可能需要很强的局域角度信息(如具有较强共价特征的材料,金属W,碳等)参与,可能需要添加se_e3进行hybird训练。 Reference to be added. 添加se_e3的案例
显示刻画电子温度的深度势能模型(TDDP)
适用于其他函数输入不局限于原子坐标的势能面的构建场景,也可以拓展至每一个原子上有额外信息需要被显示考虑进神经网络的场景。
有效考虑和处理磁性体系的深度势能模型 利用DeePSPIN训练锂离子电池过渡金属氧化物正极材料的机器学习势函数
快速开始 DeepSPIN|训练NiO深度势能分子动力学模型
DP+ZBL与辐照损伤/高压物理的案例
考虑长程相互作用的模型 DPLR
...
- 参数选择与训练技巧
[分析案例/脚本] 长训经验
[分析案例/脚本] 使用init-model模式调整energy shift情况
数据分布与采样问题
采样不充分或错误采样
- 分析Lost atoms等crash的原因及解决办法/
- 引入副作用的数据
DP-GEN原理和案例介绍
- DP-GEN相关分析脚本,如trust level选择标准,accurate ratio report等功能
对物理问题本身的理解
例一,尺寸效应,以扩散系数和rdf为例
例二,模拟平衡分析、error bar分析,以电解液扩散系数为例
例三,“聊一下与实验的比较”
案例分析
案例分析一:使用DP进行弹性模量计算
弹性性质表征材料刚度的性质,是材料最基础最重要的性质之一,对认识材料具有重要的意义。我们也可以使用深度势能模型进行弹性模量的计算。比如,在Jiang, W., Zhang, Y., Zhang, L., & Wang, H. (2021). Accurate deep potential model for the Al–Cu–Mg alloy in the full concentration space.Chinese Physics B,30(5), 050706. 这篇文章构造出的势函数可以用于Al-Cu-Mg任意比例混合的合金相互作用,在58个从Materials Project上选取的结构上进行一系列测试中,展现出了DP对弹性模量的计算能力,见Fig3. (a),近70%DP对弹性模量的预测可以在5GPa的误差之内,90%的预测可以在10GPa的误差之内。当然,在一些高温高压的情况下,误差可能会比这里的计算误差大,比如地质科学中的一些碳酸/硅酸化合物的弹性常数计算。

当遇到使用DP计算弹性模量不准确的时候,可以考虑参考本文的分析框架,从以下几个角度检查问题原因。
- 在https://tutorials.deepmodeling.com/en/latest/CaseStudies/Convergence-Test/Convergence-Test.html 这篇文档中举了一个TaC弹性模量计算的例子,在别的参数不变的情况下,VASP中kspacing参数从0.15到0.05变化后,分量结果的偏差甚至可达100GPa,这说明弹性常数在DFT存在数值误差的条件下本身也存在数值误差,再累加神经网络拟合的误差,精度只会更低。

考虑你的数据集中是否覆盖了一定程度形变的结构。计算弹性常数需要产生应变结构,并计算应力,因此数据集不能只有平衡态结构。一种可以考虑的做法是DP-GEN采样过程中常选取的在不同温度下(比如对合金而言可能会到2倍熔点)的分子动力学模拟,随着温度升高,一些无序、不规则的结构会被采样,这使得势函数描述的范围一般也更大。仍以上述Al-Cu-Mg为例,虽然我们只从hcp, fcc, bcc等晶形出发,但构建出来的势函数却可以描述Materials Project上其他没有显示被加入数据集的结构的性质。
检查你的DeePMD-kit的参数设置。
- 因为弹性模量与能量的二阶导数相关,对能量的拟合准确度是比较敏感的,因此一般来讲需要训练较长步数,以保证能量的收敛性。建议训练步长至少100万步 (batch),并在训练完成后使用dp test进行能量精度的检查(特别地,可以对你所关心的结构)。在Al-Cu-Mg这篇文章中,因为数据集比较庞大,我们训练了1600万步。
- 因为virial是能量对盒子的导数,如果能量和力的精度都足够高的情况下,准确计算维里是可以做到的。在Al-Cu-Mg这篇文章中我们也并没有加入维里数据,便已经可以足够准确地预测弹性常数了。但当数据自洽性没有那么高的时候,并且你不想重新再算一遍,你可以尝试在DeePMD-kit的训练过程中把维里也作为一个拟合项,看看精度是否能够提升。
"start_pref_e": 0.01,
"limit_pref_e": 1,
"start_pref_f": 1000,
"limit_pref_f": 1,
"start_pref_v": 0.01,
"limit_pref_v": 1
案例分析二...
基础问题诊断表
为方便深入排查,推荐使用Bohrium Notebook的方式将面临的问题整理出来。 可以使用Bohrium数据集功能将下方带有🔗标注的文件以数据集的形式分享,挂载到Bohrium Notebook中。
遇到的精度问题是什么? $______$
使用的第一性原理计算软件(以及版本)是什么?数据转化是如何做的的?
第一性原理计算软件: $______$ (VASP 5.4/VASP 6.3/ABACUS 3.4/CP2K 7.1/CP2K 2022/...)
数据转化方式: $______$ (使用dpdata的什么版本进行转化,如0.2.15/手写代码转化)
第一性原理计算参数是如何设置的?
- 📎 提供指定第一性原理计算文件 如VASP中的INCAR/ABACUS中的INPUT文件
- 所有拟合的数据中的一致性是否统一?$______$
- 计算方法以及计算参数的数值收敛性如何?$______$
检查DeePMD-kit训练情况。
- 📎 提供训练参数文件
input.json
- 模型架构(se_a/se_atten/se_e3等);$______$
- 训练步长(stop_batch参数)$______$
- 能量/力/维里训练权重(各类pref参数)$______$
- 📎 如果认为训练拟合精度不够,画出训练进行具体测试(如
dp test
)
- 📎 提供训练参数文件
数据采样是如何做的?
物理性质计算是如何做的?







