VASP 机器学习力场微调
Vienna Ab initio Simulation Package(VASP:The VASP Manual – VASP Wiki )是一个计算机程序,用于从第一性原理进行原子尺度材料建模,例如电子结构计算和量子力学分子动力学。
机器学习力场(Category:Machine-learned force fields – VASP Wiki)能够与从头算分子动力学(MD)结合使用,既能从第一性原理出发捕捉底层物理机制,又能以相对较低的计算成本实现长时间模拟。通常,由于需要对电子进行量子力学处理,例如在密度泛函理论(DFT)框架下,单次从头算分子动力学步骤的计算成本极高。在完全经典的分子动力学计算中,力场被用于替代 DFT 来计算作用于每个原子的力。这些原子间势能传统上基于实验观测,并通过经验方法纳入已知作用力(如范德华力、静电荷相互作用等)。因此,力场的质量取决于特定体系中相互作用的认知程度。而 VASP 提供实时机器学习力场,以解决上述两大问题。
教程内容
本次教程我们将通过不断更改机器学习超参数,生成一系列对应的声子谱图,得到对应的最佳机器学习力场参数文件。通过本次教程,您将了解如下 VASP 机器学习的超参数:
ML_IWEIGHT #权重选取模式
ML_WTSIF #权重系数
ML_WTOTEN #总能权重系数
ML_WIFOR #力权重系数
ML_SIGW0 #拟合步长精度
ML_RCUT1 #径向截断距离
ML_RCUT2 #夹角截断距离
ML_EPS_LOW #拟合精度
通过合理地调整参数,我们最终将得到与 DFT 几乎一模一样的结果。

输入文件
├── dft_phonon
│ ├── band.yaml(DFT 参考声子谱)
├── ml_phonon(机器学习声子谱计算文件夹)
├── refit(微调文件夹)
│ ├── INCAR
│ ├── KPOINTS
│ ├── ML_AB
│ ├── POSCAR
│ ├── POTCAR
│ ├── clean.sh
│ └── run.sh
├── t.py
本教程只关注 ~/refit 文件夹下的输入文件即可
run.sh
#进行机器学习拟合
mpirun -n 1 vasp_std
#将力场参数文件转移到声子计算文件夹中
cp ML_FFN ../ml_phonon/ml/ML_FF
#进行声子机器学习计算
cd ../ml_phonon/
chmod 777 *.sh
./run.sh
cd ../
#绘制对比图
python t.py
INCAR 机器学习拟合设置
SYSTEM = Si
IVDW = 11 #范德华力
ISMEAR = 0 #费米展宽
SIGMA = 0.02 #展宽
LWAVE = F #不保留波函数
LCHARG = F #不保留电荷
IBRION = 0 #MD (treat ionic degrees of freedom)
NSW = 1 #机器学习需要设置成 1
POTIM = 1 #MD time step in fs
ISIF = 3 #
# 机器学习
ML_LMLFF = T #启用机器学习力场
ML_ISTART = 3 #重新拟合模式(微调模式)
ML_IWEIGHT = 3 #权重选取模式
ML_WTSIF = 1 #权重系数
ML_WTOTEN = 1 #总能权重系数
ML_WIFOR = 1 #力权重系数
ML_SIGW0 = 1E-20 #拟合步长精度
ML_RCUT1 = 8. #径向截断距离
ML_RCUT2 = 6. #夹角截断距离
ML_EPS_LOW = 1E-20 #拟合精度
ML_MB = 5000 #运行内存设置
KPOINTS(启用机器学习时不使用,随便设置一个即可)
K-Spacing Value to Generate K-Mesh: 0.040
0
Gamma
4 4 4
0.0 0.0 0.0
POSCAR
机器学习训练的超胞大小,可参考教程:使用 VASP 进行机器学习力场训练
POTCAR
系统对应元素的赝势组合,这里为 Si 的赝势
ML_AB
这是事先计算好的系统对应的分子动力学数据,具体训练流程可参考教程:使用 VASP 进行机器学习力场训练,然后将 ML_ABN 重命名为 ML_AB,这里为 Si 的分子动力学数据,已经事先准备好了。
上手体验
1. 克隆容器
找到教程工作目录克隆容器
2. 设置容器
选择 4090 — 按量付费 — vasp 6.3.0-cuda11.8 — 工作空间

加载完毕后打开工作空间

打开终端

进入 refit 文件夹
cd refit
上传准备好的硅赝势,这里可以使用「官网例子」里的赝势 POTCAR 。
把 POTCAR 放到目录中,并复制到 ml_phonon/ml 中
cp POTCAR ../ml_phonon/ml/

3. 安装 phonopy 环境
conda install -c conda-forge phonopy
然后输入 y 回车,同意安装

4. 运行脚本
chmod 777 *.sh
./run.sh
5. 微调参数
查看文件 ml.png

回到 refit 文件夹,更改权重模式为 ML_IWEIGHT = 2,再次运行脚本查看结果

可以看到结果更差了,回头更改权重模式 ML_IWEIGHT = 1 再观察结果

综合比较可以发现 1 和 3 的结果差不多,甚至 1 的细节更好(光学支),接下来在 ML_IWEIGHT = 1 的情况下,进行改进。
我们尝试单独增加拟合力的精度,将 ML_WIFOR 改小。

我们发现变化不大,这说明我们应该尝试增加截断距离,给予更多拟合空间。

可以看到,结果反而更差(光学支),那这说明参数空间过大,找到的极值点反而不是最小值点。我们应当反过来减小截断距离。

更改参数,重新运行后,我们最后得到了能生成与 DFT 一模一样声子谱的机器学习力场参数。