用户工具

站点工具

本页面的其他翻译:
  • zh

adf:mdactivelearning

AMS软件:从AIMD从头训练或微调机器学习势M3GNet、NequIP

从 AMS2024 开始,包含一个简单主动学习功能,用于在分子动力学模拟过程中,动态训练机器学习势。在本教程中,将展示:

  • 应用“迁移学习”对 M3GNet(M3GNet-UP-2022)进行微调,使其对于特定体系更加准确
  • 在 MD 模拟过程中动态生成“训练”和“验证”数据

该功能需要Advanced Workflow、Force Field & Ml Pot,以及参考引擎的license,例如本例中从DFTB训练M3GNet,因此还需要DFTB & Mopac 的license。请确保SCM → Package中M3GNet已经安装(安装教程参考:机器学习力场的安装)。

对于有O2参与的化学反应

本例演示从DFTB训练M3GNet,当然也可以类似从BAND/QE(即,DFT)训练M3GNet。DFTB本身描述化学反应就不太准确,误差很大,用它来训练机器学习势,没有什么优势。本教程之所以用DFTB训练,只是为了方便快速学习该功能的逻辑和工作方式。

对于有O2参与的化学反应,反应物是三重态,产物应该是单重态,过程中,有自旋的翻转。BAND-MD的Unrestricted虽然允许自旋翻转,但应用于Active learning,该功能被限制了,用户可以通过将Relativity改为Spi-Orbit,来允许MD过程中的自旋翻转(此时,Unrestricted勾选与否都不再起作用)。

一、创建输入

AMSinput中,将模块从默认的ADF切换到MD Active Learning,输入内容包括 5 种:

  1. 初始结构
  2. 参考引擎设置
  3. 分子动力学设置
  4. 机器学习模型(例如M3GNet)设置
  5. 主动学习设置

1.1 初始结构

和一般分子动力学没有太大区别,不过如果是训练分子,则同类分子一个分子就足够了。如果是固液模型,则液体分子只保留一个是最好的,固体则选用尽量小的单包(当然也不能太小,否则固体表面浓度过高)。

一个SiO2单包是非常好的,如果用较大的超胞来学习,效果反而更差,因为相关数据太复杂了,多种效应叠加在一起,反而掩盖了本有规律,导致学习非常困难。

如何从一个结果作为参考起点,继续训练,文末会介绍。

建模参考:建模

注意Active Learning只能对1~3维周期性体系进行训练。

1.2 参考引擎的参数设置

这里以DFTB为参考,因此MD Active Learning窗口的第一个项目(Engine)选择DFTB,则窗口底部多了DFTB一栏,点进去之后,就可以设置DFTB相关的参数了:

这里作为演示,我们使用DFTB中速度最快的GFN1-xTB,k点原则上越精确越好,但这里我们使用默认值更快速,Parameters directory不需要选择,如果Model选择了DFTB3或SCC-DFTB,则需要选择参数,不同的参数适用于不同的体系,而有的体系没有可用参数。

点击底部A-ML回到MD active learning主窗口

1.3 分子动力学设置

点击 Task 后面的 > 按钮,进入分子动力学的详细设置。

这里我们只是作为范例,因此没有用很长时间的MD模拟,例如1万步可能结果会更好一些。这里只用了3000步,非常小。另外,这里不关心化学反应机理,而只是为了生成一些偏离稳定结构的样本结构能量等信息,而且温度也不高,因此步长设置为0.5fs没有什么问题,甚至建议设置的更大,例如2fs。

点击Thermostat后面的>按钮进入恒温器的详细设置:

不同的系综设置,参考:【入门基础教程】NVT、NPT、NVE系综的设置。这里Damping Constant设置为10(注意该参数必须设置,否则无法进行计算),是为了让体系迅速稳定下来(Damping Constant即振荡时间长度,振荡期间温度、能量、结构都不稳定),否则如果初始结构不稳定,或探索ML Pot之前没有涉及到的构型空间的话,将会导致急速升温。

1.4 机器学习模型设置

回到Main面板:

其中:

  • Max epochs,机器学习势后端的最大周期
  • Committee size,同时训练几个模型?一般一个即可,多个模型往往差别不太大,但是大大降低了计算效率
  • Backend选择M3GNet

简单设置的话,以上这样就可以了。

用户也可以点击load model后面的按钮,加载之前在ParAMS作业中训练出来的机器学习势,例如*.results/step5_attempt4_training/results,里面包含 optimization 和 settings_and_initial_data 两个文件夹。点击Machine learning后面的>可以进行更详细设置: 如果要从头训练M3GNet,而不是微调,此处Model选择Custom即可。默认的Universal Potential则表示在软件自带M3GNet基础上微调。

1.5 主动学习设置

1.5.1 Reference data 初始参考数据

点击Reference data后面的>按钮,进入详细设置。 参考数据如果是您指定之前用ParAMS生成的,则此处的Directory选项选择对应的ParAMS作业的ParAMS.yaml文件所在的目录即可。

否则建议您勾选M3GNet-Up short MD效果更加,或者什么也不勾选、不选择也可以。如果此页面什么都没有设置,默认会使用Reference MD这个选项。

1.5.2 Step sequence type 步进序列类型

其中Step sequence type,是确定每个主动学习step的MD步数的方案。如此设置,会将 MD 模拟划分为6个部分。第一个部分包含 10 帧,这意味着在前 10 帧MD模拟后,将对当前 MD 结构进行“参考计算”,并将结果与“预测计算”结果进行比较,如果“预测计算”结果足够准确,则 MD 模拟继续,如果“预测计算”不够精确不够准确,那么模型将重新训练。

如果用户不是很熟悉各种方案,则选择默认Geomitric就可以了。

1.5.3 Success criteria 成功标准

粗略而言,只需要设置Relative energy和Max dviation for zero force就可以了。您可以使用默认值,也可以改小,改小后应该质量更好,但是可能更难以收敛。

详细设置,可以点击Success criteria后面的>按钮:

包含上面2个参数外的另外3个参数。

详细含义参考(较为专业):https://www.scm.com/doc/Workflows/SimpleActiveLearning/Input.html#success-criteria

1.5.4 Reasonable simulation criteria 合理的模拟标准

Model → Reasonable Simulation Criteria:

您可以在此处设置允许的最高温度和允许的最小原子间距离。如果超出这些标准,则所有后续 MD 帧都将被丢弃,然后模型将重新训练。我们会希望这些标准永远不会被超越,否则需要考虑增加主动学习Step的数量,以更频繁地运行“参考计算”。如果训练的不知一个Committee,能量和力量预测中,最大不确定性相关的标准,就可以进行设置了。这里是灰色的,是因为Committee为1,且保持默认值即可。

1.5.5 其他主动学习设置

这是非必要设置。Details → Active Learning :

在这里可以设置:

设置完毕,保存作业,并运行。

二、查看结果

2.1 日志文件

运行过程中,到结束,SCM → logfile,可能包括如下内容:

[26.05|22:06:03] Current (cumulative) timings:
[26.05|22:06:03]                                 Time (s) Fraction
[26.05|22:06:03]     Ref. calcs                    303.50    0.220
[26.05|22:06:03]     ML training                   474.15    0.343
[26.05|22:06:03]     Simulations                   603.79    0.437
[26.05|22:06:03] 
[26.05|22:06:03] 
[26.05|22:06:03] Step 6 finished successfully!
[26.05|22:06:03] 
[26.05|22:06:03] --- Begin summary ---
[26.05|22:06:03] Step  Attempt  Status   Reason               finalframe_forces_max_delta
[26.05|22:06:03]     1        1 SUCCESS  Accurate                                     0.1362
[26.05|22:06:03]     2        1 SUCCESS  Accurate                                     0.1427
[26.05|22:06:03]     3        1 FAILED   Inaccurate                                   0.3674
[26.05|22:06:03]     3        2 SUCCESS  Accurate                                     0.2205
[26.05|22:06:03]     4        1 FAILED   Inaccurate                                   0.4643
[26.05|22:06:03]     4        2 SUCCESS  Accurate                                     0.3947
[26.05|22:06:03]     5        1 SUCCESS  Accurate                                     0.3940
[26.05|22:06:03]     6        1 FAILED   Inaccurate                                   0.4788
[26.05|22:06:03]     6        2 SUCCESS  Accurate                                     0.3025
[26.05|22:06:03] --- End summary ---
[26.05|22:06:03] 
[26.05|22:06:03] The engine settings for the final trained ML engine are:
[26.05|22:06:03] 
Engine MLPotential
  Backend M3GNet
  MLDistanceUnit angstrom
  MLEnergyUnit eV
  Model Custom
  ParameterDir D:\ADF_DATA\tes-dftb.results\step6_attempt1_training\results\optimization\m3gnet\m3gnet
EndEngine



[26.05|22:06:03] Active learning finished!
[26.05|22:06:03] Rerunning the simulation with the final parameters...
[26.05|22:11:01] Copying final_production_simulation/ams.rkf to ams.rkf
[26.05|22:11:01] Goodbye!
Job tes-dftb has finished

其中:

  1. Current (cumulative) timings:是参考计算耗时、训练耗时、模拟耗时。
  2. Begin summary:记录训练历史。例如1 1 SUCCESS,表示第一个step训练成功,3 1 FAILED表示第二Step的第一次训练尝试失败了,因此进行第2次训练,然后SUCCESS了,以此类推。被标记为失败的那一次训练尝试,是指与参考方法相比,训练的 MD 模拟中,结构的能量/力的预测不够准确,没有达到我们前面设定的标准,从而会触发重新训练,然后重新尝试该步骤。
  3. Engine MLPotential这一行到EndEngine这一行的内容,是一个典型的机器学习势分子动力学模拟作业的*.run文件中,设定机器学习势的脚本内容,因此如果把这几行,代替一个机器学习势分子动力学模拟中原本的Engine MLPotential到EndEngine的内容,就表示该分子动力学模拟,将使用此处训练出来的这个M3GNet机器学习势。
  4. finalframe_forces_max_delta,对每一个Step,如果存在多次尝试,则随着尝试的次数增多,最终SUCCESS,这个值越来越小。但是第一个Step的finalframe_forces_max_delta和第二个Step的finalframe_forces_max_delta实际上没有什么可比性,因为后面增加了新的数据,因此差值必然变大。

2.2 Movie

SCM → Movie,注意Movie只显示当前这个学习Step的轨迹,因此在训练过程中会不断刷新。有可能前面一段看到的轨迹,和后面一段时间看到的轨迹完全不一样,因为不是同一个Step。

默认开启了Rerun simulation at end这个选项,因此训练结束后,在.results\final_production_simulation\ams.rkf文件中,包含整个M3GNet-MD的轨迹。

2.3 结果质量评估

SCM → ParAMS,

右下角显示该训练结果的损失函数(越小越好),横坐标为epoch总共200,也就是前面我们设置Main里面的Max epochs值。最右侧所有数据点与直线约靠拢,训练质量越好。

三、如何接着继续训练?

在Main窗口Reference Data后面的>按钮,读取前一次训练最后一个Step的结果:

即,读取前一个作业*.results\文件夹下的step*_attempt*_reference_data这个文件夹。这个文件夹包含很多*.yaml文件。

可以逐渐减小成功标准的阈值进行训练。

四、如何使用训练出来的M3GNEt?

训练结束后,*.logfile最后一页有一段内容,类似:

.......省略
[26.05|22:06:03] The engine settings for the final trained ML engine are:
[26.05|22:06:03] 
Engine MLPotential
  Backend M3GNet
  MLDistanceUnit angstrom
  MLEnergyUnit eV
  Model Custom
  ParameterDir D:\ADF_DATA\tes-dftb.results\step6_attempt1_training\results\optimization\m3gnet\m3gnet
EndEngine



[26.05|22:06:03] Active learning finished!
[26.05|22:06:03] Rerunning the simulation with the final parameters...
[26.05|22:11:01] Copying final_production_simulation/ams.rkf to ams.rkf
[26.05|22:11:01] Goodbye!
Job tes-dftb has finished

这里给出了我们训练得到的M3GNET的位置,例如本例显示的是:D:\ADF_DATA\tes-dftb.results\step6_attempt1_training\results\optimization\m3gnet\m3gnet

那么我们在使用ML Pot模块进行计算的时候,Main → Model 选择 Custom,点击右侧的 > 按钮,Parameter Directory输入该路径即可:

保存作业后,我们可以看到 *.run 文件包含类似如下内容:

Engine MLPotential
    Backend M3GNet
    Model Custom
    ParameterDir dep-m3gnet
EndEngine
eor

# dependency: {} {D:\ADF_DATA\tes-dftb.results\step6_attempt1_training\results\optimization\m3gnet\m3gnet} dep-m3gnet

保险起见,可以将ParameterDir dep-m3gnet替换为(不替换应该也可以正常运行):

ParameterDir D:\ADF_DATA\tes-dftb.results\step6_attempt1_training\results\optimization\m3gnet\m3gnet

然后保存*.run文件,直接运行作业即可(不要再在AMSinput中重新保存,否则手动修改的内容会被覆盖掉)

五、如何通过和DFTB-MD进行对比,直观地看到训练出来的机器学习势与之的差别?

训练效果如何,实际上可以通过AMS里面的Replay功能,非常形象的看到。Replay是指,我们先用例如DFTB做了一个标准的MD,然后换一个计算引擎,例如机器学习势,调用我们训练出来的机器学习势,来重复前面这个MD的轨迹,从而可以得到另一条能量变化曲线,和原先MD的能量变化曲线可以进行比较。

在ParAMS窗口,也可以直接实现新建作业,调用我们训练出来的机器学习势:

用户可以选择使用训练的最好的那个,也可以选择验证效果最好的那个(因为训练和验证,要求不能使用相同的参考集)。您可以通过右下角点线图,切换两个选项,看看二者哪个符合的更好,一般差别不大。如果差别大,就说明训练不完善,得重新训练了。

虽然上图第三个点线图已经表征了训练质量,用户仍然可以先用DFTB跑一个MD,然后用训练好的机器学习势去沿着DFTB-MD的轨迹走一遍,然后看看二者的能量差异(注意,能量是相对量,能量曲线可以整体上下平移)。Replay功能的使用,参考:分子动力学的Replay:采用其他计算引擎、力场,复现轨迹、对比能量

六、参考资料

七、重要补充

AIMD 中发生化学反应的过程往往非常缓慢,很多反应集中在 ns 级别,甚至整个 MD 过程完成也没有得到预期的反应。因此一般的 AIMD 学习软件,即使学习算法高效,但是由于学习样本本身的问题,导致学习的效率非常低。

AMS 可以通过强制反应功能,从根本上解决这个问题。用户只需要将上述训练过程,与强制反应功能结合起来,就可以实现高效训练了。

adf/mdactivelearning.txt · 最后更改: 2024/11/21 15:07 由 liu.jun

© 2014-2022 费米科技(京ICP备14023855号