查看原文
其他

【DP系列教程-01】如何在5分钟之内setup一个DeePMD-kit训练

DP 深度势能 2022-09-11

DeePMD-kit 是一款实现深度势能(Deep Potential)训练的软件。虽然网上的资料和信息已经很多了,但是针对我等小白用户的教程还不是很多,官方手册冗长又没有提供中文版,这对用户非常不友好。今天DP君就带大家5分钟入门DeePMD-kit。

首先让我们看一下DeePMD-kit 的训练流程:


什么?只有三步?对!就是这么简单粗暴。准备数据将DFT软件算出来的计算结果转化为DeePMD-kit能够识别的数据格式。训练顾名思义就是以前一步准备好的数据,用DeePMD-kit训练一个深度势能模型。最后我们需要将训练过程中的重启动文件冻结为一个模型,也就是将其中的神经网络的参数提取到一个文件中,供后续使用。相信大家和DP君一样已经迫不及待要上手使用了,让我们赶紧开始!

DeePMD-kit 的数据格式在官网上有介绍,但是很复杂的亚子。。别怕,DP君给大家介绍一款数据处理神器:dpdata,只用一行python 命令就能处理好数据,方便程度让人根本停不下来!

>>> import dpdata>>> dpdata.LabeledSystem(‘OUTCAR’).to(‘deepmd/npy’,‘data’, set_size=200)
这个例子中我们把OUTCAR中的vasp计算结果转化成了DeePMD-kit的数据格式,存在了一个叫data的文件夹中。其中npy是指numpy压缩格式,也就是DeePMD-kit训练所用的数据格式。我们假设OUTCAR 存储了1000步分子动力学的结果,因此转化后有1000个数据点。set_size=200意味着这1000个数据点被分为5个子集,分别命名为data/set.000~data/set.004,每个集合的大小为200。这五个集合中,data/set.000~data/set.003被DeePMD-kit当作训练集,data/set.004被DeePMD-kit当作测试集。DeePMD-kit默认最后一个集合为测试集。如果只有一个集合,这个集合既是训练集又是测试集(当然这个测试的参考意义就不大了)。

开始DeePMD-kit训练需要准备一个输入脚本,大家是不是还有没从被INCAR脚本支配的恐惧中走出来?别怕,配置DeePMD-kit比配置vasp简单多了。首先,我们下载一个例子,并保存到input.json

wget https://raw.githubusercontent.com/deepmodeling/deepmd-kit/master/examples/water/train/water_se_a.json -O input.json

DeePMD-kit强大的地方就在于,同样的训练参数适用于各种不同的体系,我们只需对input.json稍作修改就能开始训练。首先需要修改的参数是

"type_map":     ["O", "H"],

DeePMD-kit数据中对每个原子类型是按从0开始的整数编号的。这个参数给了这样的编号系统中每个原子类型一个元素名。这里我们照抄data/type_map.raw 中的内容就好了。比如我们改成了

"type_map": ["A", "B","C"],

其次,我们修改一下邻居搜索参数

"sel": [46, 92],

这个list中每个数给出了某原子的邻居原子中,各个类型的原子的最大数目。比如46就是类型为0,元素为"O"的邻居最多有46个。这里我们的元素换成了ABC,这个参数当然要做相应的修改。不知道最大邻居数怎么办?可以用体系的密度粗略估计一个。或者可以盲试一个数,如果不够大DeePMD-kit会告诉你的。下面我们改成了

"sel":       [64, 64, 64]

此外我们修改的参数是:

"systems":     ["../data/"],

我们把它改成

"systems": ["./data/"],

原因是我们的数据写入的文件夹叫"./data/",在当前目录中。这里DP君稍微介绍一下DeePMD-kit中data system的概念。DeePMD-kit认为,具有同样原子数,且原子类型相同的数据能够形成一个system。我们的数据是从一个分子动力学模拟生成的,当然满足这个条件,因此可以放到一个system中。dpdata也是这么帮我们做的。当数据无法放到一个system中时,就需要设置多个system,写成一个list。 

最后,我们可能还需要修改另外两个参数

"stop_batch": 1000000,"batch_size":   1,
stop_batch是深度学习的SGD方法训练多少步,而batch_size时指每步用的数据的mini-batch的大小。我们想偷懒减小stop_batch,并且使用DeePMD-kit推荐的batch_size
"stop_batch": 500000,"batch_size": "auto",
配置脚本大功告成!训练开始。我们执行
dp train input.json

就可以坐等结果了。训练过程中,可以看lcurve.out这个输出文件观察误差下降情况。其中4, 5 列分别是能量(normalize原子数)的测试和训练误差,6,7列分别是受力的测试和训练误差。

当训练结束,我们就可以冻结模型了,执行

dp freeze

默认输出的模型名称为frozen_model.pb。到目前为止,我们就得到了一个好/或者可能不太好的DP模型。至于这个模型靠不靠谱,怎么用,我们将在下一篇推送中给大家带来详细说明。

欢迎大家继续关注干货满满的深度势能公号哦,喜欢的话欢迎转发哦!


end

  



DP视角


是不是已经迫不及待的要试试了呢?还有大量教程正在赶来!



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存