计算化学公社
标题:
请教DeepMD potential 预测声子谱不准确的原因
[打印本页]
作者Author:
benz_25
时间:
yesterday 03:12
标题:
请教DeepMD potential 预测声子谱不准确的原因
感谢各位路过的老师和同行大佬,本人想用deepmd训练InGaAs合金体系的势函数,这是我现在的步骤:
一、首先用VASP通过AIMD准备了216 原子的InAs,GaAs 和In0.5Ga0.5As三个材料的300K数据集;
二、接着做了一组pre-training model,一共四个,用的是4-fold cross-validation的方式切换不同顺序的training/validation训练的(后面打算用这四个models自己搓同步学习,类似于dpgen的流程,但是我想控制每次标注都留点独立数据最后test用);
三、然后我想在探索更多合金组分之前,先用这些model验证一下是否能准确预测InAs和GaAs的声子谱,
我一共对比了四个情况:
1.自己之前用VASP弛豫之后算的声子谱,图例:DFT;
2.基于这个DFT弛豫的结构又用model 通过lammps做了结构优化,进而计算的声子谱,图例:DFT_relax
3.下载Materials Project结构用model只优化原子位置,图例:MP_atomrelax
4.下载Materials Project结构用model优化体积和位置,图例:MP_fullrelax
目前的问题:
1.GaAs在model优化体积和位置的情况下直接是大范围虚频,检查发现优化的晶格常数和DFT相比偏小(~3.83 Å vs DFT 3.99 Å)
2.其他情况和DFT计算的数据相差的也相对较大
如图所示:
(, 下载次数 Times of downloads: 0)
上传 Uploaded
点击下载Click to download
(, 下载次数 Times of downloads: 0)
上传 Uploaded
点击下载Click to download
个人猜想:
针对上面的问题,我有几个分析,但是我没有精力盲目耗费计算资源去逐个排查,希望各位有经验的能给我一些见解。
1.初始数据集数据量不足:我目前的AIMD给每个材料216atoms跑了2000 frames,然后每个材料的frames打乱5等分,其中一份作为单独隔离的test,剩下四份就轮换顺序作3:1的training和validation;
2.训练模型不能这样强行把三个物质凑一起:我这个地方有点困惑,三个体系的能量确实在测试过程中发现是三团,有一些差异,但我觉得训练复杂的general的model不应该受这样的学习顺序限制,因此倾向于觉得这个all in乱炖的方法应该不影响;
(, 下载次数 Times of downloads: 0)
上传 Uploaded
点击下载Click to download
3.我在model优化体积和位置的情况下出现了虚频,说明GaAs的stress可能没有学好。我在训练模型的时候把virial关掉了,是否是需要学习virial才行?
(相关设置如下: "loss": {
"start_pref_e": 0.02,
"limit_pref_e": 0.1,
"start_pref_f": 1000,
"limit_pref_f": 100,
"start_pref_v": 0, "limit_pref_v": 0,)
4. 我的AIMD设置有问题,这个我其实不专业,不清楚是否这个数据集产生就出现了问题,也或许是我直接把温度设为300K,也就没有低温的信息导致对声子谱的预测出现了偏差。
INCAR:
Global Parameters
ISTART
=
1
(Read existing wavefunction, if there)
ICHARG
=
0
(Non
-
self
-
consistent
:
GGA
/
LDA band structures)
LREAL
=
Auto
(
Projection
operators
:
automatic)
ENCUT
=
450
(Cut
-
off energy for plane wave basis set,
in
eV)
PREC
=
Normal
(
Precision
level
:
Normal
or
Accurate,
set
Accurate
when
perform
structure
lattice
relaxation
calculation)
LWAVE
=
.FALSE.
(
Write
WAVECAR
or
not)
LCHARG
=
.FALSE.
(
Write
CHGCAR
or
not)
ADDGRID
=
.TRUE.
(
Increase
grid,
helps
GGA
convergence)
NWRITE
=
2
(Medium
-
level output)
Electronic Relaxation
ISMEAR
=
0
SIGMA
=
0.05
EDIFF
=
1E-08
Molecular Dynamics
IBRION
=
0
(Activate MD)
NSW
=
2000
(Max ionic steps)
EDIFFG
=
-
1E-03
(Ionic convergence, eV
/
A)
POTIM
=
0.5
(Timestep
in
fs)
SMASS
=
0
(MD Algorithm
:
-
3
-
microcanonical ensemble,
0
-
canonical ensemble)
TEBEG
=
300
(Start temperature K)
TEEND
=
300
(Final temperature K)
MDALGO
=
3
(Andersen Thermostat)
ISYM
=
0
(Switch symmetry off)
ISIF
=
2
LANGEVIN_GAMMA
=
50
50
50
LANGEVIN_GAMMA_L
=
50
PMASS
=
20
PSTRESS
=
0
KPOINTS都是111
5.我的DeePMD训练设置参数有问题,这个我放一下大家看看吧,我个人没发现问题
{
"_comment"
:
"that's all"
,
"model"
: {
"type_map"
: [
"In"
,
"Ga"
,
"As"
],
"descriptor"
: {
"type"
:
"se_atten_v2"
,
"sel"
:
"auto:1.2"
,
"rcut_smth"
:
4.5
,
"rcut"
:
9.0
,
"neuron"
: [
25
,
50
,
100
],
"resnet_dt"
: false,
"axis_neuron"
:
16
,
"attn_layer"
:
0
,
"seed"
:
1
,
"_comment"
:
" that's all"
},
"fitting_net"
: {
"neuron"
: [
240
,
240
,
240
],
"resnet_dt"
: true,
"seed"
:
1
,
"_comment"
:
" that's all"
},
"_comment"
:
" that's all"
},
"learning_rate"
: {
"type"
:
"exp"
,
"decay_steps"
:
2000
,
"start_lr"
:
0.001
,
"stop_lr"
:
3.51e-08
,
"_comment"
:
"that's all"
},
"loss"
: {
"start_pref_e"
:
0.02
,
"limit_pref_e"
:
0.1
,
"start_pref_f"
:
1000
,
"limit_pref_f"
:
100
,
"start_pref_v"
:
0
,
"limit_pref_v"
:
0
,
"_comment"
:
" that's all"
},
"training"
: {
"stop_batch"
:
300000
,
"seed"
:
1
,
"_comment"
:
"that's all"
,
"disp_file"
:
"lcurve4.out"
,
"disp_freq"
:
100
,
"numb_test"
:
10
,
"save_freq"
:
1000
,
"save_ckpt"
:
"model.ckpt"
,
"disp_training"
: true,
"time_training"
: true,
"profiling"
: false,
"profiling_file"
:
"timeline.json"
,
"training_data"
: {
"systems"
: [
"../deepmd_data/InAs_300K/2"
,
"../deepmd_data/InAs_300K/3"
,
"../deepmd_data/InAs_300K/4"
,
"
../
deepmd_data/GaAs_300K/2"
,
"
..
/deepmd_data/GaAs_300K/3"
,
"
../
deepmd_data/GaAs_300K/4"
,
"
../
deepmd_data/In0.5Ga0.5As_300K/2"
,
"
../
deepmd_data/In0.5Ga0.5As_300K/3"
,
"
../
deepmd_data/In0.5Ga0.5As_300K/4"
],
"batch_size"
:
"auto"
},
"validation_data"
: {
"systems"
: [
"
../
deepmd_data/InAs_300K/1"
,
"
../
deepmd_data/GaAs_300K/1"
,
"
../
deepmd_data/In0.5Ga0.5As_300K/1"
],
"batch_size"
:
"auto"
}
}
}
顺便放一下loss curve
(, 下载次数 Times of downloads: 0)
上传 Uploaded
点击下载Click to download
感谢各位的宝贵时间,本人的能力可能有限,自学的一些东西有点零碎,有低级错误的话还请多多指正!!
作者Author:
Uus/pMeC6H4-/キ
时间:
yesterday 11:13
In0.5Ga0.5As的结构是哪来的,其中In和Ga的排布有多少随机性?如果要尽可能覆盖InxGa1-xAs的空间,x只取0, 0.5, 1是感觉少了点,我感觉应该0, 0.2, 0.4, 0.6, 0.8, 1起步吧,而且每个组成可以跑不止一个体系的。
AIMD是在NVT系综canonical ensemble下跑的话,训练集的数据根本没体现晶格参数变化的影响,训练出来的模型当然不能描述好优化体积的过程,此外AIMD的采样过程也未必涵盖优化所得的极小点附近的构型。我认为应该把目标压力下NPT系综模拟以及变胞优化到极小点的过程全都加进训练集,并且应当考虑virial。
我不知道你是否可视化观察过300 K温度下的AIMD轨迹,很可能因为温度不够高、原子热运动幅度不够大,表面上有2000帧的数据实际上有很多相似的重复部分。一方面适当升温、延长轨迹可以让采样更充分,另一方面也可以尝试根据各帧与相邻帧的描述符相近程度去一下重(可能需要自己写脚本实现)。
最后,计算资源不怎么充裕的话,也可能需要综合训练所需数据量,考虑是否要把VASP换成别的更快更高效的软件。
作者Author:
benz_25
时间:
yesterday 12:26
谢谢老师的宝贵意见。
这个结构是用ASE从InAs和GaAs拼的,x的其他值以及0.5的其他随机结构我目前是打算在主动学习阶段探索然后标注逐步进行微调训练。目前的数据集只是作为第一轮的初始模型。确实按道理来说得准备不同温度、不同体积缩放以及不同原子扰动的数据,我看dpgen的流程里会准备大范围的数据,然后每种跑10帧。
这个NVT可能就是我GaAs最后那个虚频的原因,我会先考虑一下virial看看。
关于AIMD轨迹,这个2000帧确实无法稳定温度,后面还有一部分温度很高,但我也看到一些别的地方的帖子说这个轨迹状态实际上影响不大,因为本质上是学每一帧的力和能量,我觉得这也能解释dpgen生产数据集里只跑10帧的行为,一开始我也困惑这个10帧是否真的到达稳定状态,后面我只是默认接受了可以这样。或许我要更谨慎查证一下文献。
关于软件我会考虑的,之前入了这个VASP的坑,就惯性不想折腾了,我之后试试CP2K
作者Author:
organic
时间:
yesterday 22:20
benz_25 发表于 2026-4-16 12:26
谢谢老师的宝贵意见。
这个结构是用ASE从InAs和GaAs拼的,x的其他值以及0.5的其他随机结构我目前是打算 ...
https://sidereus-ai.com/workbenc ... it&taskType=kit
,你可以试试训练一个mace看看,或者在
https://sidereus-ai.com/workbenc ... it&taskType=kit
里面直接用mace-mh-1预训练模型先算个这个声子谱看看,你只有300K AIMD的问题在于温度太低了,需要加一些rattle甚至是直接的原胞振动模式的轨迹的label,目前我发的这个平台支持你直接训练mace模型和调用自己/内置的mace模型做计算,开应力/维利对需要变胞的任务还是很重要的
作者Author:
organic
时间:
yesterday 22:36
mace-mh-1算了一个InAs
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3