MACE上手与训练数据准备
从Si结构、DFT标签、单位和数据拆分开始,认识MACE推断、训练与分子动力学的完整流程。
阅读本篇目录
下载本专题输入、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平衡附近的小应变、小位移范围。这里的测试集与训练集结构编号互不重复,但仍属于同一窄分布;结果不能直接证明模型适合熔化、断键、表面、缺陷或其他元素。
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
行数不等于构型数,应以读取程序统计为准。训练集优化参数;验证集用于观察训练过程和模型选择;独立测试集最后报告误差。本例训练命令没有传入测试文件。接着阅读从头训练。