【DP系列教程-01】如何在5分钟之内setup一个DeePMD-kit训练
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)
开始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": 500000,
"batch_size": "auto",
dp train input.json
就可以坐等结果了。训练过程中,可以看lcurve.out这个输出文件观察误差下降情况。其中4, 5 列分别是能量(normalize原子数)的测试和训练误差,6,7列分别是受力的测试和训练误差。
当训练结束,我们就可以冻结模型了,执行
dp freeze
默认输出的模型名称为frozen_model.pb。到目前为止,我们就得到了一个好/或者可能不太好的DP模型。至于这个模型靠不靠谱,怎么用,我们将在下一篇推送中给大家带来详细说明。
欢迎大家继续关注干货满满的深度势能公号哦,喜欢的话欢迎转发哦!
end
DP视角
是不是已经迫不及待的要试试了呢?还有大量教程正在赶来!