“第10届量子化学波函数分析与Multiwfn程序培训班将于5月4-8日于北京举办,这是一次性完整、系统学习波函数分析的各种理论知识和全面掌握强大的Multiwfn波函数分析程序使用的最不可错过的机会!请点击此链接查看详情和报名方式,欢迎参加!

“第18届北京科音分子动力学与GROMACS培训班” 将于5月23-26日于北京举办。这是一次性全面、系统学习分子动力学模拟知识和最流行的分子动力学程序GROMACS的关键机会!报名正在进行中,请点击此链接查看详情,欢迎参加!

计算化学公社

 找回密码 Forget password
 注册 Register
Views: 104|回复 Reply: 4
打印 Print 上一主题 Last thread 下一主题 Next thread

[其它程序] 请教DeepMD potential 预测声子谱不准确的原因

[复制链接 Copy URL]

2

帖子

0

威望

27

eV
积分
29

Level 2 能力者

感谢各位路过的老师和同行大佬,本人想用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计算的数据相差的也相对较大
如图所示:



个人猜想:
针对上面的问题,我有几个分析,但是我没有精力盲目耗费计算资源去逐个排查,希望各位有经验的能给我一些见解。
1.初始数据集数据量不足:我目前的AIMD给每个材料216atoms跑了2000 frames,然后每个材料的frames打乱5等分,其中一份作为单独隔离的test,剩下四份就轮换顺序作3:1的training和validation;
2.训练模型不能这样强行把三个物质凑一起:我这个地方有点困惑,三个体系的能量确实在测试过程中发现是三团,有一些差异,但我觉得训练复杂的general的model不应该受这样的学习顺序限制,因此倾向于觉得这个all in乱炖的方法应该不影响;

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


感谢各位的宝贵时间,本人的能力可能有限,自学的一些东西有点零碎,有低级错误的话还请多多指正!!

1307

帖子

6

威望

2767

eV
积分
4194

Level 6 (一方通行)

傻傻的木瓜

2#
发表于 Post on yesterday 11:13 | 只看该作者 Only view this author
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换成别的更快更高效的软件。
√546=23.36664289109

2

帖子

0

威望

27

eV
积分
29

Level 2 能力者

3#
 楼主 Author| 发表于 Post on yesterday 12:26 | 只看该作者 Only view this author
谢谢老师的宝贵意见。

这个结构是用ASE从InAs和GaAs拼的,x的其他值以及0.5的其他随机结构我目前是打算在主动学习阶段探索然后标注逐步进行微调训练。目前的数据集只是作为第一轮的初始模型。确实按道理来说得准备不同温度、不同体积缩放以及不同原子扰动的数据,我看dpgen的流程里会准备大范围的数据,然后每种跑10帧。

这个NVT可能就是我GaAs最后那个虚频的原因,我会先考虑一下virial看看。

关于AIMD轨迹,这个2000帧确实无法稳定温度,后面还有一部分温度很高,但我也看到一些别的地方的帖子说这个轨迹状态实际上影响不大,因为本质上是学每一帧的力和能量,我觉得这也能解释dpgen生产数据集里只跑10帧的行为,一开始我也困惑这个10帧是否真的到达稳定状态,后面我只是默认接受了可以这样。或许我要更谨慎查证一下文献。

关于软件我会考虑的,之前入了这个VASP的坑,就惯性不想折腾了,我之后试试CP2K

3

帖子

0

威望

201

eV
积分
204

Level 3 能力者

4#
发表于 Post on yesterday 22:20 | 只看该作者 Only view this author
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模型做计算,开应力/维利对需要变胞的任务还是很重要的

3

帖子

0

威望

201

eV
积分
204

Level 3 能力者

5#
发表于 Post on yesterday 22:36 | 只看该作者 Only view this author
mace-mh-1算了一个InAs

202604162235502138..png (184.14 KB, 下载次数 Times of downloads: 0)

202604162235502138..png

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-4-17 03:21 , Processed in 1.789828 second(s), 24 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list