从 AMS2024 开始,包含一个简单主动学习功能,用于在分子动力学模拟过程中,动态训练机器学习势。在本教程中,将展示:
该功能需要Advanced Workflow、Force Field & Ml Pot,以及参考引擎的license,例如本例中从DFTB训练M3GNet,因此还需要DFTB & Mopac 的license。请确保SCM → Package中M3GNet已经安装(安装教程参考:机器学习力场的安装)。
本例演示从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 种:
和一般分子动力学没有太大区别,不过如果是训练分子,则同类分子一个分子就足够了。如果是固液模型,则液体分子只保留一个是最好的,固体则选用尽量小的单包(当然也不能太小,否则固体表面浓度过高)。
一个SiO2单包是非常好的,如果用较大的超胞来学习,效果反而更差,因为相关数据太复杂了,多种效应叠加在一起,反而掩盖了本有规律,导致学习非常困难。
如何从一个结果作为参考起点,继续训练,文末会介绍。
建模参考:建模。
注意Active Learning只能对1~3维周期性体系进行训练。
这里以DFTB为参考,因此MD Active Learning窗口的第一个项目(Engine)选择DFTB,则窗口底部多了DFTB一栏,点进去之后,就可以设置DFTB相关的参数了:
这里作为演示,我们使用DFTB中速度最快的GFN1-xTB,k点原则上越精确越好,但这里我们使用默认值更快速,Parameters directory不需要选择,如果Model选择了DFTB3或SCC-DFTB,则需要选择参数,不同的参数适用于不同的体系,而有的体系没有可用参数。
点击底部A-ML回到MD active learning主窗口
点击 Task 后面的 > 按钮,进入分子动力学的详细设置。
这里我们只是作为范例,因此没有用很长时间的MD模拟,例如1万步可能结果会更好一些。这里只用了3000步,非常小。另外,这里不关心化学反应机理,而只是为了生成一些偏离稳定结构的样本结构能量等信息,而且温度也不高,因此步长设置为0.5fs没有什么问题,甚至建议设置的更大,例如2fs。
点击Thermostat后面的>按钮进入恒温器的详细设置:
不同的系综设置,参考:【入门基础教程】NVT、NPT、NVE系综的设置。这里Damping Constant设置为10(注意该参数必须设置,否则无法进行计算),是为了让体系迅速稳定下来(Damping Constant即振荡时间长度,振荡期间温度、能量、结构都不稳定),否则如果初始结构不稳定,或探索ML Pot之前没有涉及到的构型空间的话,将会导致急速升温。
回到Main面板:
其中:
简单设置的话,以上这样就可以了。
用户也可以点击load model后面的按钮,加载之前在ParAMS作业中训练出来的机器学习势,例如*.results/step5_attempt4_training/results,里面包含 optimization 和 settings_and_initial_data 两个文件夹。点击Machine learning后面的>可以进行更详细设置: 如果要从头训练M3GNet,而不是微调,此处Model选择Custom即可。默认的Universal Potential则表示在软件自带M3GNet基础上微调。
点击Reference data后面的>按钮,进入详细设置。 参考数据如果是您指定之前用ParAMS生成的,则此处的Directory选项选择对应的ParAMS作业的ParAMS.yaml文件所在的目录即可。
否则建议您勾选M3GNet-Up short MD效果更加,或者什么也不勾选、不选择也可以。如果此页面什么都没有设置,默认会使用Reference MD这个选项。
其中Step sequence type,是确定每个主动学习step的MD步数的方案。如此设置,会将 MD 模拟划分为6个部分。第一个部分包含 10 帧,这意味着在前 10 帧MD模拟后,将对当前 MD 结构进行“参考计算”,并将结果与“预测计算”结果进行比较,如果“预测计算”结果足够准确,则 MD 模拟继续,如果“预测计算”不够精确不够准确,那么模型将重新训练。
如果用户不是很熟悉各种方案,则选择默认Geomitric就可以了。
粗略而言,只需要设置Relative energy和Max dviation for zero force就可以了。您可以使用默认值,也可以改小,改小后应该质量更好,但是可能更难以收敛。
详细设置,可以点击Success criteria后面的>按钮:
包含上面2个参数外的另外3个参数。
详细含义参考(较为专业):https://www.scm.com/doc/Workflows/SimpleActiveLearning/Input.html#success-criteria
Model → Reasonable Simulation Criteria:
您可以在此处设置允许的最高温度和允许的最小原子间距离。如果超出这些标准,则所有后续 MD 帧都将被丢弃,然后模型将重新训练。我们会希望这些标准永远不会被超越,否则需要考虑增加主动学习Step的数量,以更频繁地运行“参考计算”。如果训练的不知一个Committee,能量和力量预测中,最大不确定性相关的标准,就可以进行设置了。这里是灰色的,是因为Committee为1,且保持默认值即可。
这是非必要设置。Details → Active Learning :
在这里可以设置:
设置完毕,保存作业,并运行。
运行过程中,到结束,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
其中:
SCM → Movie,注意Movie只显示当前这个学习Step的轨迹,因此在训练过程中会不断刷新。有可能前面一段看到的轨迹,和后面一段时间看到的轨迹完全不一样,因为不是同一个Step。
默认开启了Rerun simulation at end这个选项,因此训练结束后,在.results\final_production_simulation\ams.rkf文件中,包含整个M3GNet-MD的轨迹。
SCM → ParAMS,
右下角显示该训练结果的损失函数(越小越好),横坐标为epoch总共200,也就是前面我们设置Main里面的Max epochs值。最右侧所有数据点与直线约靠拢,训练质量越好。
在Main窗口Reference Data后面的>按钮,读取前一次训练最后一个Step的结果:
即,读取前一个作业*.results\文件夹下的step*_attempt*_reference_data这个文件夹。这个文件夹包含很多*.yaml文件。
可以逐渐减小成功标准的阈值进行训练。
训练结束后,*.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中重新保存,否则手动修改的内容会被覆盖掉)
训练效果如何,实际上可以通过AMS里面的Replay功能,非常形象的看到。Replay是指,我们先用例如DFTB做了一个标准的MD,然后换一个计算引擎,例如机器学习势,调用我们训练出来的机器学习势,来重复前面这个MD的轨迹,从而可以得到另一条能量变化曲线,和原先MD的能量变化曲线可以进行比较。
在ParAMS窗口,也可以直接实现新建作业,调用我们训练出来的机器学习势:
用户可以选择使用训练的最好的那个,也可以选择验证效果最好的那个(因为训练和验证,要求不能使用相同的参考集)。您可以通过右下角点线图,切换两个选项,看看二者哪个符合的更好,一般差别不大。如果差别大,就说明训练不完善,得重新训练了。
虽然上图第三个点线图已经表征了训练质量,用户仍然可以先用DFTB跑一个MD,然后用训练好的机器学习势去沿着DFTB-MD的轨迹走一遍,然后看看二者的能量差异(注意,能量是相对量,能量曲线可以整体上下平移)。Replay功能的使用,参考:分子动力学的Replay:采用其他计算引擎、力场,复现轨迹、对比能量
AIMD 中发生化学反应的过程往往非常缓慢,很多反应集中在 ns 级别,甚至整个 MD 过程完成也没有得到预期的反应。因此一般的 AIMD 学习软件,即使学习算法高效,但是由于学习样本本身的问题,导致学习的效率非常低。
AMS 可以通过强制反应功能,从根本上解决这个问题。用户只需要将上述训练过程,与强制反应功能结合起来,就可以实现高效训练了。