首页 >> 仿真软件说明 >>ABACUS >>朱雪刚版 >> 3.2.2 运行DPGEN init_bulk功能2024.04.04 (操作演示还是用Bohrium的notebook方便)
详细内容

3.2.2 运行DPGEN init_bulk功能2024.04.04 (操作演示还是用Bohrium的notebook方便)

准备好STRU、INPUT、init.json、machine.json就可以在服务器上提交任务。

  1. 运行DPGEN init_bulk

nohup dpgen init_bulk init.json machine.json 1>log 2>err&

提交任务之后会在当前文件夹下生成几个文件夹

Be108_fcc.STRU.01x01x01
dpdispatcher.log
dpgen.log
err
init_Be108_fcc.json
log

其中Be108_fcc.STRU.01x01x01包含了计算获得的所有信息,计算任务结束则在其下生成三个文件夹

(base) zxg@zxg:~/BeCu/dpgennew/init_bulk/Be/Be108_fcc$ tree Be108_fcc.STRU.01x01x01/ -L 1
Be108_fcc.STRU.01x01x01/
├── 00.place_ele
├── 01.scale_pert
├── 02.md
└── param.json

3 directories, 1 file

00.place_ele是结构优化文件夹,01.scale_pert是微扰结构创建文件夹,02.md是微扰结构计算和计算结果搜集并做格式转换的文件夹

其中转换好的训练集在02.md/sys-0108/deepmd/下通过运行 ls 02.md/sys-0108/deepmd/

box.raw  
coord.raw  
energy.raw  
force.raw  
set.000  
type_map.raw  
type.raw  
virial.raw

box.raw  是所有计算体系的盒子的大小,盒子大小用9个浮点数记录,每个构型占一行。

coord.raw 是所有数据集的原子位置信息,每个原子三个坐标,一行包含一个结构。

energy.raw是体系能量信息,一个结构一个能量,一行即一个构型的能量,该文件只有一列。

force.raw是所有数据集的原子受力信息,每个原子三个受力,一行包含同一个构型下多个原子的受力,每个构型一行。

type_map.raw  是元素匹配信息,跟init.json中的设定一致,我的是Be  Cu,一个元素一行

type.raw  原子构型,用0,1,2,……来表示,一个原子一行

virial.raw 是原子维力信息,即压力信息。一行是一个构型的压力信息,有9个分量。

如果正常结束则可获得deepmd文件夹,通过dpdata可以对文件夹内的信息进行画图分析。

  1. 训练集结构和结果分析2024.04.04

  1. 单次init_bulk准备数据集的最大受力分布和分析

训练集的好坏可以从力的分布来看,同上给出最大力的计算脚本,这里获得是每个构型中的最大受力,并根据AIMD的步数来画图。

对于单次init_bulk的计算结果,可直接读取其形成的deepmd格式的数据,然后画图。

#!/usr/bin/env python
import os
import dpdata
import numpy as np
import matplotlib.pylab as plt
folder_path = '/home/zxg/BeCu/dpgennew/deepmd_file/deepmd/'
print(folder_path)
data=dpdata.LabeledSystem(folder_path, fmt="deepmd/raw")
forces = np.absolute(data["forces"])
ff = []
for i in range(len(data)):
   ff.append(np.max(forces[i]))
plt.plot(ff,'-o')
plt.savefig('max_f_Be16.png')
plt.clf()

  1. 受力分布画图dpdata的具体使用

可以更改脚本,使得获取所有原子的受力,并输出类似于moddev中的状态分布的图,即在0.0--0.2受力中统计有多少数据,0.2-0.4中有多少数据然后作图,暂且不给出脚本,研究者可自行探索。


  1. 所有训练集最大受力分布提取和画图

即在使用脚本之前需要先执行,然后再deepmd_file下会生成很多个init_bulk获得的文件夹。

cp -r /you/path/to/deepmd /order/path/to/savedataset/deepmd_file/

#!/usr/bin/env python
import os
import dpdata
import numpy as np
import matplotlib.pylab as plt
folder_path = '/home/zxg/BeCu/dpgennew/deepmd_file/'
file_list = os.listdir(folder_path)
for file in file_list:
   print(file)
   folder_list = os.path.join(folder_path, file, 'deepmd/')
   print(folder_list)
   data=dpdata.LabeledSystem(folder_list, fmt="deepmd/raw")
   forces = np.absolute(data["forces"])
   ff = []
   for i in range(len(data)):
       ff.append(np.max(forces[i]))
   plt.plot(ff,'-o')
   plt.savefig(file+'max.png')
   plt.clf()

脚本解释请自行咨询chatgpt,大致为读取对应文件夹,并在对应文件夹下利用dpdata读取数据,然后获取数据中的最大力并画图。然后删除数据,再整下一个文件夹(如果不删除数据,则下次循环所有的数据都会输出)

这里,如果我用tree来查看我的deepmd_file则包含下列部分输出,文件的整理在后续的操作中,这些文件是init执行完成之后我把所有训练集手动搜集到了一起。

tree ~/BeCu/dpgennew/deepmd_file
/home/zxg/BeCu/dpgennew/deepmd_file
├── Be108_fcc
│   └── deepmd
│       ├── box.raw
│       ├── coord.raw
│       ├── energy.raw
│       ├── force.raw
│       ├── set.000
│       │   ├── box.npy
│       │   ├── coord.npy
│       │   ├── energy.npy
│       │   ├── force.npy
│       │   └── virial.npy
│       ├── type_map.raw
│       ├── type.raw
│       └── virial.raw
├── Be108.gro
├── Be127_Cu1_hcp
│   └── deepmd
│       ├── box.raw
│       ├── coord.raw
│       ├── energy.raw
│       ├── force.raw
│       ├── set.000
│       │   ├── box.npy
│       │   ├── coord.npy
│       │   ├── energy.npy
│       │   ├── force.npy
│       │   └── virial.npy
│       ├── type_map.raw
│       ├── type.raw
│       └── virial.raw
…………………………

结果展示(ABACUS3.4.0,旧数据,有舍弃的数据)

主要结果:

force的大小在0.0-0.8之间,表明该数据集力的范围比较合理,可考虑增大盒子变化尺度,增大受力,增加采样多样性

Be16 铍单质的晶体结构hcp晶胞

力主要集中在0.5-2.0之间,数据可用

铍铜合金结构示意图Be16Cu8

2:1含量

DPGEN关键词设置和结论都同上边的2.1

即数据集可用,但采样空间可能过多,后续还要用DPGEN采样,初始训练集尽可能丰富多样,类似结构可少一些。

力的范围先暂定为0-10

目前要废弃的数据

力的范围在0-150左右,训练集范围太大,训练会不稳定难以收敛(张为老师建议)不可用。

Cu32单晶构型获得错误结果,错误原因好像是dpdata转换缩放时比率没整对,具体原因没细查。

显然这个构型并未达到平衡态,如果用他做训练集,应该是起始的DPGEN探索需要花费大量的经历来排错,例如LAMMPS运行跑崩问题。

目前要废弃的数据,错误结果没用

暂时我准备的数据貌似10md步长没有达到平衡态结构,但目前来看我的DP训练在常温下第一次迭代用0.15到0.3的收敛标准的话,准确率在90%以上,还是可行的(第一次做DP经验不足,下次再做再测试md步数多少合适,希望我的提示可以让后续做DP的人有个初步经验,并做一下相关步数的测试)。


作者:朱雪刚 邮箱:xuegangzhu@qq.com; 工作单位:石家庄学院 理学院/北京科学智能研究院(AISI)访问学者2023.07-2024.09,访问导师北京大学陈默涵; 徐张满仓 邮箱: xuzhangmancang@dp.tech

截止2024.07.21录制视频教程已上传至Bohrium的课程《DeePMD应用案例讲解:铜原子掺杂铍晶体的机器学习势函数拟合过程演示》网址: https://bohrium.dp.tech/courses/1075495070?tab=courses 后续会在Bohrium平台更新

注意:后续的更新,大部分会在Bohrium课程平台进行,请看教程入门的同学加入课程进行学习;且录制的视频课程会把一些个人观点给加入,从个人观点来看比文字教程的内容更多

写教程内容讨论QQ群:143276924 DPGEN+ABACUS教程准备;

ABACUS软件的QQ群:759914681,群内有专职开发人员,目前ABACUS提问问题以github的issue为主,群内可作为辅助提问。

欢迎大家推广本教程,让更多的dp入门学习者有个参考,目前2024.09.16我联系的微信公众号推广是 lammps加油站的小马老师(我也报名了小马老师的一对一辅导)。当然也看到lammps爱好者在转发推广。感谢大家公众号的推广。


技术支持: CLOUD | 管理登录
seo seo