MACE专题

MACE上手与训练数据准备

从Si结构、DFT标签、单位和数据拆分开始,认识MACE推断、训练与分子动力学的完整流程。

更新于 2026-11-07约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载本专题输入、Si实算数据、教学模型与工具(ZIP)。本专题按实际操作拆成七篇:数据准备 → 从头训练 → 基础模型微调 → 多头模型 → 设备与精度 → ASE结构优化与MD → LAMMPS联用。

1 先得到可以查看的结果#

unzip mace-practical-wave260-*.zip
cd mace-practical-wave260
bash run.sh

这个入口读取附件中的真实参考数值,生成 analysis/ 下五张CSV和 figures/ 下七张PNG,不重新计算DFT,也不重新训练。先看数据、误差和曲线,再选择后面的计算入口。计算与绘图脚本应在已分配的计算资源内运行;登录节点用于编辑、上传和提交。

ls data
ls models
ls figures

如果单独提交CPU评估,可以在解压目录建立 evaluate.slurm:

#!/usr/bin/env bash
#SBATCH --partition=cpu-8173m
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=56
#SBATCH --time=00:10:00
#SBATCH --output=eval-%j.log
bash calculate.sh eval
sbatch evaluate.slurm

这是按CPU整节点56核规则写的调度模板,作业会等待对应资源;本小例Python仍限制为一线程,并不意味着它能利用56线程加速。训练则使用后文的 train.sh 申请GPU;不要把申请GPU与选择推断设备混为一谈。

MACE把结构映射成能量,并通过能量对坐标、形变的导数得到力和应力。一个能量接近的模型,力或应力仍可能不准,因此训练和测试都要同时检查这些量。官方训练说明介绍了标签键名、参考能量和模型参数。

2 本例用了什么结构与标签#

本集群实际计算了48个不同的Si构型:24个二原子晶胞、24个八原子晶胞,包含小幅晶格应变和原子位移。对每个构型分别计算PBE、PBEsol,得到96组DFT能量、力、应力标签。另外做了16次正负位移或形变计算,用有限差分检查力与应力;这16组不进入训练数据。

Si二原子与八原子结构及实际DFT标签分布

这些构型属于Si平衡附近的小应变、小位移范围。这里的测试集与训练集结构编号互不重复,但仍属于同一窄分布;结果不能直接证明模型适合熔化、断键、表面、缺陷或其他元素。

3 DFT输入是什么#

以下是实际单点标签计算的关键 INCAR:

ENCUT = 450
EDIFF = 1E-6
PREC = Accurate
ISYM = 0
ISIF = 2
IBRION = -1
NSW = 0
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
ADDGRID = .TRUE.
ALGO = Normal
NELM = 120
LWAVE = .FALSE.
LCHARG = .FALSE.

NSW=0 是对已有构型做单点标注,不是把每个扰动结构重新优化到同一个最低点。二原子晶胞使用Γ中心4×4×4,八原子使用3×3×3网格。PBEsol另加 GGA=PS,PBE使用对应PBE设置。完整 INCAR、KPOINTS、POSCAR 在 dft-inputs/;POTCAR按用户自身授权准备。

cat dft-inputs/Si2-00-PBE/POSCAR
cat dft-inputs/Si2-00-PBE/KPOINTS
cat dft-inputs/Si8-20-PBE/INCAR

本例使用VASP 6.6.1 GPU版生成标签,电子收敛 1E-6。它与后面MACE推断是两个步骤,预训练MACE预测值没有被当作DFT真值。

4 怎样读extxyz#

module load mace/0.3.16
python inspect_data.py data/PBE-train.xyz
head -n 5 data/PBE-train.xyz

extxyz每个结构先写原子数,再写晶胞、周期性和能量等信息,后面每行写元素、坐标及力。附件明确使用这些键名:

键 含义 单位
REF_energy 该构型的VASP总自由能F,不是每原子能量 eV/构型
REF_forces 每个原子的三个力分量 eV/Å
REF_stress 3×3应力张量,ASE拉伸为正约定 eV/ų
REF_virials -体积 × 应力 的3×3张量 eV
geometry_id 结构编号 无
split train、valid或test 无

1 eV/ų = 160.21766208 GPa。VASP原始应力的符号和单位需要转换,不能把原始kbar数字直接填入上述键。有限差分对照中,最大力差为0.000277 eV/Å,最大静水应力差为0.00735 GPa。

5 拆分为什么重要#

每个DFT级别均为32个训练、8个验证、8个测试结构。PBE与PBEsol共用同一套结构拆分:同一个构型不会一边作为PBE训练数据、一边作为PBEsol测试数据。

wc -l data/PBE-*.xyz
python inspect_data.py data/PBE-valid.xyz
python inspect_data.py data/PBE-test.xyz

行数不等于构型数,应以读取程序统计为准。训练集优化参数;验证集用于观察训练过程和模型选择;独立测试集最后报告误差。本例训练命令没有传入测试文件。接着阅读从头训练。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗