DPmoire:为莫尔超晶格定制高精度机器学习力场的自动化方案 1. 项目概述当莫尔物理遇上机器学习力场在凝聚态物理和计算材料科学的前沿莫尔Moiré超晶格系统正以其丰富而奇特的物理现象吸引着全球研究者的目光。通过简单地扭转两层二维材料如石墨烯或过渡金属硫族化合物之间的角度或者堆叠两种具有微小晶格失配的材料就能“凭空”创造出全新的量子材料平台。在这个平台上我们观测到了诸如非常规超导、莫特绝缘态、量子反常霍尔效应等一系列在传统材料中难以企及的现象。然而要深入理解这些现象背后的物理机制一个无法绕开的基石便是精确的结构弛豫计算。为什么结构弛豫如此关键想象一下当你扭转两张透明网格时那些明暗相间的波纹莫尔图案不仅视觉上复杂其对应的原子排布也发生了微妙的扭曲和重构。这种原子尺度的晶格弛豫会显著改变材料的电子能带结构尤其是当莫尔超晶格导致能带变得极窄仅几个meV量级时微小的原子位移就足以引发电子性质的剧变。传统上我们依赖密度泛函理论DFT来进行这种高精度的第一性原理弛豫计算。但问题在于DFT的计算成本随原子数呈三次方增长。对于一个典型的小角度莫尔超晶格其原胞可能包含成千上万个原子进行一次完整的DFT弛豫所需的计算资源是天文数字甚至是不现实的。这就引出了本文的核心机器学习力场MLFF。MLFF的目标是“师从”DFT通过机器学习模型从有限的DFT计算数据中学习原子间的相互作用势能面。一旦训练完成MLFF在预测新结构能量和原子受力时其计算成本仅与原子数呈线性关系。这就像一位技艺高超的学徒在掌握了大师DFT的精髓后能以极高的效率完成类似的工作。然而通用型的MLFF模型在应对莫尔系统时遇到了瓶颈莫尔体系中我们关心的能量尺度常常在meV级别这与许多通用MLFF模型的精度极限处于同一量级。用一把刻度为厘米的尺子去测量毫米级的细微变化其结果自然不可靠。因此为莫尔系统“量身定制”高精度的MLFF成为了一个迫切的需求。这正是开源工具DPmoire所要解决的核心问题。它不是另一个通用的MLFF训练框架而是一套专门针对莫尔超晶格特点设计的、自动化的专用MLFF构建流程。DPmoire巧妙地利用非扭转的简单双层结构来构建训练数据集并整合了VASP的on-the-fly MLFF模块进行高效数据生成最终训练出能够精准捕捉莫尔体系微妙原子弛豫的专用力场。对于从事二维材料、莫尔物理、计算材料模拟的研究者而言掌握这样一套工具意味着你能够以可承受的计算成本去探索那些之前因体系过大而无法触及的物理问题例如更小扭转角度下的弛豫效应、复杂莫尔结构的声子谱计算等。接下来我将深入拆解DPmoire的设计思路、实操细节以及我在使用过程中积累的经验和避坑指南。2. DPmoire的核心设计思路与原理拆解要理解DPmoire为何有效我们需要先回到莫尔超晶格的本质。一个莫尔结构可以看作是由两个晶格常数相近或相同的二维层以一个小夹角扭转或直接堆叠而成。当扭转角非常小时莫尔超晶格的周期变得极大但其局域的原子排布却与零扭转角即非扭转时双层材料中各种可能的堆叠构型如AA、AB、MX、XM等高度相似。2.1 从“局部相似性”到数据构建策略这是一个关键洞察。DPmoire方法论的核心前提是一个复杂大体系小角度莫尔的势能面可以由其基本组成单元各种非扭转堆叠构型的势能面来近似描述。基于此DPmoire的整个数据构建策略变得清晰且高效放弃直接对小角度莫尔结构进行昂贵采样直接对包含数千原子的小角度莫尔超晶格做从头算分子动力学AIMD来采集训练数据在计算上是灾难性的。转向对简单单元进行充分采样我们转而构建一个2x2的超胞原子数可控通过系统地在面内平移其中一层来枚举所有可能的堆叠构型AA, AB, MX, XM等。对每一种构型我们进行DFT弛豫计算。这个过程中需要固定每层中一个参考原子的XY坐标并保持晶格常数不变以防止结构弛豫到能量最低的单一堆叠模式从而丢失其他构型的信息。利用On-the-fly MLFF扩大构型空间仅靠静态弛豫得到的数据点对于训练一个稳健的力场来说可能还不够“丰富”。DPmoire进一步引入了VASP内置的MLFF模块在之前弛豫得到的结构基础上施加前述约束并进行分子动力学MD模拟。VASP MLFF模块的巧妙之处在于其“在线学习”能力在MD过程中它利用贝叶斯线性回归实时估计自身预测的不确定性。当不确定性低时直接使用MLFF的预测推进模拟当不确定性高时则触发一次DFT计算并将该精确数据加入训练集更新模型。如此循环可以用相对较少的DFT计算步数探索到非常广泛的原子构型空间高效地构建出高质量数据集。这个策略的精妙之处在于它将一个“大海捞针”在大体系中寻找代表性构型的问题转化为了“池塘捕鱼”在小体系中系统采样的问题极大地降低了数据制备的成本和难度。2.2 测试集的构建与模型泛化能力保障一个只在训练集上表现良好的模型可能是过拟合的。为了确保我们训练的MLFF能够真正推广到目标体系——扭转的莫尔结构DPmoire专门设计了测试集的构建方法。测试集并非从训练数据中随机划分而是专门用较大扭转角如7.34°、9.34°的莫尔结构经过DFT弛豫后得到的数据构成。这样做有两个目的第一大角度莫尔结构的原胞尺寸相对较小进行DFT弛豫计算尚可承受第二更重要的是这些扭转结构的原子环境与训练所用的非扭转结构存在差异用它们来测试可以严格检验MLFF模型对于真实目标任务的泛化能力防止模型仅仅记住了非扭转构型而无法处理扭转引入的复杂变形。2.3 软件架构与工作流DPmoire作为一个自动化工具其代码结构清晰地反映了上述工作流主要分为四个模块形成了一个完整的管道DPmoire.preprocess预处理模块。用户提供单层的晶胞结构文件如POSCAR和DFT计算模板INCAR该模块会自动构建双层非扭转超胞、生成一系列面内平移的堆叠构型、以及构建用于测试的大角度扭转结构。它负责准备好所有VASP计算所需的输入文件。DPmoire.dft计算任务提交模块。该模块负责将通过preprocess生成的大量DFT计算任务利用Slurm等作业管理系统提交到超算集群上执行。DPmoire.data数据收集与格式化模块。在所有DFT计算完成后此模块会从输出文件如OUTCAR,ML_ABN中提取能量、力和应力等关键信息并将其整理、合并成标准的extxyz格式文件分为训练集data.extxyz和测试集valid.extxyz。这种格式是Allegro、NequIP等主流MLFF训练框架可直接读取的。DPmoire.train训练模块。该模块根据用户提供的配置文件模板配置并提交MLFF模型的训练任务。DPmoire默认支持并推荐使用Allegro——一种基于E(3)-等变图神经网络的先进力场模型。Allegro因其在保持高精度的同时对大规模体系的计算效率和并行化支持非常友好而备受青睐。当然生成的通用extxyz数据集也可以用于训练如DeepMD、NequIP等其他模型。这套流程将原本繁琐、容易出错的手工步骤——结构建模、任务提交、数据提取、格式转换、模型训练——全部自动化让研究者能够专注于科学问题本身而非计算工程细节。3. 实操要点从环境配置到成功运行理论很美好但把工具用起来才是关键。下面我将结合自己的使用经验详细说明部署和运行DPmoire的完整步骤及核心注意事项。3.1 基础环境搭建与依赖安装DPmoire的运行依赖于一个相对完整的计算化学软件生态。你需要提前准备好以下环境Python环境建议使用conda创建一个独立的环境。DPmoire本身是一个Python包但其主要功能是流程编排核心计算依赖于其他软件。conda create -n dpmoire python3.9 conda activate dpmoire pip install dpmoire # 从PyPI安装或从GitHub源码安装第一性原理计算软件VASP是必须的。DPmoire利用VASP进行DFT计算和其内置的on-the-fly MLFF数据生成。你需要确保在计算节点上可以调用VASP通常由超算中心提供已编译好的版本。特别注意要使用VASP的MLFF功能你需要有相应的许可证并编译了MLFF模块。机器学习力场训练框架Allegro是DPmoire默认和推荐的训练后端。你需要单独安装Allegro。pip install allegro-ml同时确保你的环境中有PyTorch等深度学习库。如果打算用NequIP也需要相应安装。作业管理系统DPmoire的dft模块默认通过Slurm提交任务。你需要确保在运行节点上sbatch,squeue等命令可用并且DPmoire能正确识别到集群的排队系统。对于其他作业系统如PBS可能需要稍微修改dft模块的提交脚本。注意环境配置是第一步也是最容易出错的一步。一个常见的坑是Python环境与VASP的兼容性问题。确保你的conda环境没有引入与系统科学计算库如Intel MKL冲突的版本。最稳妥的方式是在超算上使用模块module加载系统提供的优化版Python和编译器再在其上创建虚拟环境。3.2 输入文件准备详解运行DPmoire前你需要准备一个清晰的工作目录和几个关键的输入文件。以下是一个典型目录结构moire_project/ ├── input/ │ ├── top.POSCAR # 顶层材料的晶胞文件 │ ├── bot.POSCAR # 底层材料的晶胞文件对于同质双层两者相同 │ └── INCAR.template # VASP计算的参数模板 ├── config.yaml # DPmoire的主配置文件 └── train_config.yaml # Allegro模型的训练配置模板关键文件配置解析POSCAR文件这是晶体结构信息文件。你需要为顶层和底层分别准备。对于像MoS2这样的材料POSCAR应包含一个单层例如1T相的晶胞原子坐标。坐标的分数坐标表示要准确这直接影响后续堆叠的构建。INCAR.template文件这是VASP计算的核心参数模板。DPmoire会基于此模板为每个具体计算任务生成最终的INCAR。对于莫尔体系有几点至关重要范德华vdW修正层间相互作用主导了莫尔结构的弛豫行为因此必须选择正确的vdW修正方法。DPmoire原文附录A用了大量篇幅对比不同方法。例如对于MoS2和WSe2Grimme的DFT-D3零阻尼IVDW11效果较好对于MoSe2和WS2vdW-DF-cx方法更优。你需要在模板中设置正确的IVDW或GGA标签。精度控制ENCUT截断能、EDIFF电子步收敛标准、EDIFFG离子步收敛标准需要设置得比常规体相计算更严格一些因为我们在处理微弱的层间相互作用和弛豫。MLFF相关参数当使用VASP MLFF模块进行数据生成时需要在INCAR中激活ML_LMLFF.TRUE.并设置相关参数如ML_ISTART0开始新的训练ML_IALGO_LMLFF1使用在线学习模式等。这部分参数需要仔细阅读VASP手册。config.yaml文件这是DPmoire的流程控制文件。你需要指定layer_top/bot_file: 顶层/底层POSCAR路径。incar_template:INCAR模板路径。supercell_size: 构建非扭转训练结构时的超胞大小默认为[2,2,1]。shift_grid: 面内平移采样的网格密度例如[5,5]表示在a和b方向各取5个点共生成25种堆叠构型。twist_angles: 用于构建测试集的大扭转角度列表如[7.34, 9.43]。dft_cmd: 在计算节点上运行VASP的命令如“srun vasp_std”。slurm_partition: 提交作业的Slurm分区。3.3 分步执行与监控配置妥当后执行流程是线性的但每一步都需要关注其输出。步骤一预处理dpmoire-preprocess -c config.yaml执行后会在当前目录生成一系列以任务ID命名的文件夹如calc_001,calc_002每个文件夹内包含了该特定堆叠构型或扭转结构的VASP输入文件POSCAR,INCAR,KPOINTS,POTCAR。检查生成的POSCAR确认堆叠方式是否符合预期原子数量是否正确。步骤二提交DFT计算dpmoire-dft -c config.yaml此命令会遍历所有计算文件夹并向Slurm提交作业。务必使用sqeue命令监控作业状态。由于任务量可能很大几十甚至上百个建议先用小网格如[2,2]和单个扭转角试运行确保整个流程无误后再进行大规模计算。计算可能耗时数天取决于任务数量和资源。步骤三收集数据dpmoire-data -c config.yaml在所有DFT作业成功完成后运行。此模块会读取所有计算结果提取数据并生成data.extxyz训练集和valid.extxyz测试集。这是关键检查点打开生成的.extxyz文件查看数据量是否完整能量和力的数值范围是否合理例如力通常在eV/Å量级异常大的力可能预示计算未收敛或出错。步骤四训练MLFF模型dpmoire-train -c config.yaml -t train_config.yaml这是最耗资源的步骤通常需要在GPU节点上进行。train_config.yaml是Allegro模型的配置文件你需要根据体系大小和精度要求设置模型参数如num_layers交互层数max_epochs训练轮数learning_rate学习率batch_size批大小训练过程中要密切关注损失函数loss在训练集和测试集上的下降情况。一个健康的训练过程应该是训练损失和测试损失同步下降并在后期趋于平稳。如果测试损失很早就开始上升而训练损失持续下降则是过拟合的典型标志需要调整模型复杂度或增加数据。3.4 模型验证与应用训练完成后你会得到模型文件如best_model.pth。DPmoire本身不直接进行弛豫计算但生成的模型可以无缝接入两个主流的分子动力学/结构优化软件与ASEAtomic Simulation Environment结合ASE是一个强大的Python原子模库。你可以加载训练好的Allegro模型并利用其内置的优化器如BFGS对莫尔结构进行弛豫。from ase import Atoms from ase.io import read, write from ase.optimize import BFGS # 假设有加载Allegro模型的接口需根据Allegro的API调整 # calculator AllegroCalculator(modelbest_model.pth) # atoms read(twisted_structure.POSCAR) # atoms.set_calculator(calculator) # dyn BFGS(atoms) # dyn.run(fmax0.01) # 运行弛豫直到最大力小于0.01 eV/Å与LAMMPS结合Allegro提供了LAMMPS的接口lib/allegro。你需要编译支持此接口的LAMMPS版本。之后可以在LAMMPS的in文件中通过pair_style allegro命令调用模型进行大规模的MD或弛豫模拟这对于处理超大体系尤其有用。验证环节必不可少不要直接相信训练日志。你应该用训练好的模型去弛豫一个新的、不在训练集和测试集中的莫尔结构例如一个更小的扭转角然后将结果与DFT弛豫如果计算资源允许或已知的物理规律如原子在AA区向上、在MX/XM区向下位移的趋势进行对比。同时计算弛豫后结构的电子能带与DFT结果对比这是检验MLFF是否“学到”了关键物理作用的终极试金石。4. 关键参数选择与性能优化经验在实际操作中参数的选择直接影响到数据质量、模型精度和计算效率。以下是我从多次实践中总结出的经验。4.1 范德华修正的选择精度基石vdW修正的选择是DFT计算部分最关键的决策它从根本上决定了训练数据的“真值”质量。DPmoire的论文附录A提供了详尽的对比表格这是一个极好的起点但并非金科玉律。参考但不盲从论文给出的推荐如MoS2用DFT-D3MoSe2用vdW-DF-cx是基于其采用的特定赝势和计算设置。如果你使用的赝势库如PAW-PBE版本不同最佳方法可能略有差异。执行你自己的基准测试在开始大规模数据生成前务必对你所研究的材料进行一个快速的基准测试。方法如下使用不同的vdW修正方法IVDW10, 11, 12, 20, 4以及GGARE,LUSE_VDW.TRUE.等对应不同泛函对材料的体相bulk或自由单层进行几何优化。比较优化后的晶格常数a, b, c与实验值可从ICSD数据库查找的吻合程度。对于层状材料c轴晶格常数即层间距对vdW修正尤为敏感是判断的关键指标。选择那个能最准确预测层间距的方法。一致性原则一旦选定了一种vdW修正方法在整个DPmoire流程的所有DFT计算包括训练数据生成和测试集生成中都必须严格一致。混用不同修正方法得到的数据训练模型会导致模型学习到矛盾的物理规律。4.2 训练数据生成的策略质量与效率的平衡shift_grid平移网格和分子动力学MD采样是构建训练集的两个主要手段。shift_grid的密度网格越密如[7,7]采样的堆叠构型越精细能更完整地覆盖势能面但计算量呈平方增长。对于像TMDs这样层间势能面变化较平滑的材料[5,5]通常是一个不错的起点。可以先试算[3,3]观察不同堆叠构型的能量差异如果变化剧烈则需要更密的网格。MD采样的作用静态弛豫只提供了势能面上的极小点或鞍点信息。MD模拟特别是在一定温度下如300K可以让原子在平衡位置附近振动采样到更多的非平衡构型这对于训练一个能够准确预测“力”的模型至关重要。VASP MLFF模块中的TEBEG起始温度参数可以控制MD的初始动能。MD的步数与约束MD模拟的步数需要足够长以使系统充分采样构型空间但也要考虑成本。通常在固定了层间相对位移后运行数万步MD是常见的。切记在MD过程中必须保持与弛豫阶段相同的约束固定参考原子XY坐标和晶格常数否则系统会弛豫到全局能量最低点破坏我们精心设计的多样化堆叠采样。4.3 MLFF模型训练的超参数调优使用Allegro训练时配置文件中的超参数需要根据体系大小和数据集规模进行调整。模型容量num_layers,max_neighbors,node_feature_dim对于原子种类少但结构复杂的莫尔体系如只有Mo和S两种原子但原子数多模型需要有足够的容量来捕捉长程的莫尔调制效应。可以适当增加num_layers交互块层数来增加感受野但也会增加计算量和过拟合风险。一个实用的策略是从一个中等规模的模型开始如Allegro的默认配置如果训练集损失容易收敛但测试集损失很高可能是欠拟合可增大模型如果训练集损失远低于测试集则是过拟合需减小模型或增加数据/使用正则化。训练轮次max_epochs与学习率调度使用验证集validation set来早停early stopping是防止过拟合的有效方法。不要一味追求训练轮次多。学习率通常采用带热重启的余弦退火CosineAnnealingWarmRestarts策略这有助于模型跳出局部极小值。批量大小batch_size在GPU内存允许的范围内使用较大的批量大小通常能使训练更稳定收敛更快。但对于包含大量小结构每个结构原子数少的数据集可能需要调整。实操心得训练一个高质量的MLFF更像一门艺术而非纯技术。建议采用“迭代开发”模式先用一个较小的数据集稀疏网格、短MD和默认模型参数快速训练一个原型验证流程然后分析原型在测试集上的误差分布针对误差大的区域例如某种特定堆叠附近增加采样密度最后再用完整数据集和微调后的超参数进行最终训练。这样比一次性投入全部资源盲目训练更高效。5. 常见问题排查与实战技巧即使按照指南操作在实际运行中仍会遇到各种问题。这里汇总了一些典型故障及其解决方法。5.1 DFT计算失败或异常问题dpmoire-dft提交作业后大量作业失败VASP报错或未完成。排查检查单个任务进入一个失败的任务目录查看OUTCAR文件末尾的报错信息。常见原因有内存不足莫尔超胞原子数多需要增加NCORE或KPAR并行设置或申请更多内存节点。收敛困难特别是对于某些金属性较强的堆叠构型电子自洽迭代不收敛。尝试在INCAR中调整ALGO如改用All或Normal或添加AMIX,BMIX参数或使用LDIAG.TRUE.。范德华参数冲突确保INCAR中关于vdW的设置是自洽且与所选赝势兼容的。检查输入文件确认POTCAR文件包含了所有涉及元素的赝势且顺序与POSCAR中的元素顺序一致。这是VASP计算中最常见的错误之一。检查作业脚本dpmoire-dft生成的提交脚本可能包含特定的模块加载命令或路径需要适配你的超算环境。你可能需要修改DPmoire源码中关于作业提交的部分。5.2 训练数据集extxyz为空或数据异常问题dpmoire-data执行后生成的data.extxyz文件很小或为空或者其中的能量/力值为NaN。排查确认DFT计算全部成功完成dpmoire-data只会读取那些有正常结束标志如OUTCAR中包含“General timing and accounting informations for this job”的目录。检查数据提取路径确认dpmoire-data模块正确指向了VASP输出文件的位置。有时输出文可能被命名为OUTCAR.gz压缩格式需要代码支持解压读取。检查能量和力的单位与量级用文本编辑器或Python脚本快速浏览extxyz文件。力的典型值应在-1到1eV/Å之间。如果出现极大的值如1e10很可能是在DFT计算中某些原子位置过于接近导致计算发散。需要检查初始结构是否合理。5.3 MLFF训练不收敛或精度差问题训练过程中损失函数居高不下或者震荡剧烈或者训练完成后模型在测试集上预测的力与DFT结果偏差很大RMSE 0.05 eV/Å。排查数据质量检查这是最常见的原因。用脚本计算训练集中力的分布直方图检查是否存在异常值outliers。异常值可能来自未收敛的DFT计算会严重干扰模型训练。可以考虑过滤掉力大于某个阈值的数据点。数据集划分问题确保测试集大角度莫尔结构与训练集非扭转结构没有数据泄露。同时检查训练集内部是否覆盖了足够的构型多样性。可视化一下训练集中不同堆叠构型的能量分布看看是否有明显的空白区域。模型复杂度与数据量匹配如果数据量很少例如只有几十个构型却使用了一个非常复杂的模型多层、高维度极易导致过拟合。此时应简化模型或通过增加MD采样步数、加密shift_grid来扩充数据。学习率问题过高的学习率会导致损失震荡过低则收敛缓慢。使用学习率预热warm-up和衰减策略通常是必要的。数值精度确保DFT计算和MLFF训练使用相同的单位制和原子质量。Allegro等框架通常使用“金属单位制”eV, Å。5.4 使用训练好的模型进行弛豫时结构失真问题用训练好的MLFF模型去弛豫一个全新的小角度莫尔结构结果原子飞散或结构发生不合理的巨大形变。排查模型泛化能力不足这是最可能的原因。模型在训练集非扭转上表现良好但无法外推到它从未见过的、应变模式更复杂的极小角度扭转结构。解决方案在训练集中引入一些“中间状态”。例如除了零扭转还可以在构建训练集时引入几个中等角度如3°-5°的扭转结构进行DFT弛豫并将这些数据加入训练集。这能显著提升模型对扭转形变的捕捉能力。弛豫算法和参数在ASE或LAMMPS中进行弛豫时优化器的选择如FIRE比最速下降法更稳定和收敛阈值fmax的设置很重要。对于初始受力可能较大的结构先用一个较松的阈值如fmax0.1进行预弛豫再用紧的阈值如fmax0.01进行精弛豫可以提高成功率。模型推理稳定性检查在弛豫过程中模型预测的力是否出现突变或NaN。这可能是模型在输入构型超出其训练数据分布时的不稳定表现。可以考虑在模型推理时加入简单的数值截断。最后一个非常重要的建议是建立你的基准测试案例。选择一种材料如AA堆叠的WSe2用一个公开的、DFT弛豫结果已知的莫尔结构例如某个特定角度作为你的“金标准”。用DPmoire流程为该材料训练一个MLFF然后去弛豫这个测试结构将得到的原子位置、层间距离、甚至电子能带与“金标准”进行定量比较。这个案例将成为你评估整个DPmoire流程在你本地环境和工作流中是否可靠的关键。通过不断迭代和调试这个基准案例你不仅能熟练掌握工具更能深刻理解影响MLFF精度的各个因素从而更有信心地将其应用于全新的未知材料体系探索中。