MACE(Multi-Atomic Cluster Expansion,多原子簇展开)是剑桥大学 Gábor Csányi 课题组提出的机器学习原子间势能模型(MLIP,即用机器学习替代经验势函数来预测原子间相互作用),核心思路是把消息传递神经网络(MPNN,图神经网络的一种,节点间逐层交换信息)与原子簇展开(ACE,一种以多体基函数表示原子环境的方法)结合,从第一性原理(DFT)数据学习原子能量与受力,推理成本比 DFT 低三到四个数量级。2022 年论文发布后,MACE 团队于 2023 年底推出覆盖 89 种元素的基础模型 MACE-MP-0,2025 年迭代出 MACE-MP-1;配合开源的 mace-torch 包(提供 ASE、LAMMPS、i-PI 等接口),研究者可以零样本推理或小样本微调完成能量预测、几何优化、分子动力学与高通量材料筛选。本篇按「安装 → 跑通 → 训练 → 部署」的顺序,给出基于官方文档的操作指南,并附选型对比、常见误区与面试题。
掌握 MACE 意味着你能直接调用覆盖 89 种元素的开放基础势能模型,把 DFT 级别的材料模拟成本降低数个量级——这是 AI for Science 领域最具生产力的核心技能之一。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 MACE:从 DFT 瓶颈到通用原子间势
传统材料模拟依赖 DFT,每一步能量计算的复杂度约为 O(N³)(N 为电子数),千原子体系跑纳秒级分子动力学(MD)动辄数月;而吸附、扩散、热输运等性质恰恰需要纳米尺度、数百皮秒到微秒的轨迹。经验势(如 EAM、Lennard-Jones)虽快,但精度不足以描述化学键断裂与电荷转移。
MLIP 的解法是把 DFT 数据训练成可微模型:推理单点能量与力的速度比 DFT 快三到四个数量级,且保持接近 DFT 的精度。MACE 是其中数据效率领先的方案——消息经 ACE 线性展开后显式携带任意体阶的相互作用,小样本即可逼近 DFT 精度;更关键的是,MACE-MP 基础模型覆盖 Materials Project 中 89 种元素,免去了「从零攒数据」的冷启动成本。
与同类工具的气质差异:相比 DeepMD-kit 这类描述子型深度势,MACE 更强调数据效率与跨体系迁移;相比 NequIP 这类等变 GNN(仅显式三体消息),MACE 的显式高体阶消息表达能力更强。它是少数同时提供开源实现、开放基础模型权重与 LAMMPS 生产接口的 MLIP。
安装与环境配置:3 步就绪
安装顺序很关键:mace-torch 依赖 PyTorch,若本机没有 torch,pip 会默认拉取 CPU 版,导致训练与推理跑在 CPU 上,速度差一个数量级以上。建议先按官方指引装好与 CUDA 匹配的 PyTorch,再装 mace-torch;建议 Python ≥ 3.9。
步骤一:创建虚拟环境并安装 PyTorch。在有 NVIDIA GPU 的机器上,可指定 CUDA wheel 索引(如 cu121),无 GPU 时直接 pip install torch 即可。
步骤二:安装 mace-torch,该包同时提供训练/评估命令行与 ASE 计算器。
步骤三:验证安装。导入 mace.calculators.mace_mp 模块成功且 torch.cuda.is_available() 为 True(GPU 环境)即就绪;首次调用计算器时才会自动下载权重文件。
# 1) 安装 PyTorch(官方建议先装,避免拉取 CPU 版)python -m venv .venv && source .venv/bin/activatepip install torch --index-url https://download.pytorch.org/whl/cu121 # 按本机 CUDA 版本调整 # 2) 安装 MACEpip install mace-torch # 3) 验证python -c "import torch; from mace.calculators import mace_mp; print('CUDA:', torch.cuda.is_available(), '| MACE OK')"
快速上手:5 分钟跑通 MACE-MP 单点能与结构优化
最小可用流程:创建一个 ASE 的 Atoms 对象(非周期水分子),用 mace_mp() 加载 MACE-MP-0 基础模型(默认 medium 尺寸),把计算器挂到结构上即可得到能量与力,再交给 ASE 的优化器做几何弛豫。第一次运行会自动下载约几十 MB 的权重文件,需联网。
操作步骤:
1. 将以下脚本保存为 mace_first.py。
2. 运行 python mace_first.py,观察输出的总能量与原子受力。
3. 若没有 NVIDIA GPU,将 device="cuda" 改为 device="cpu";几何优化与 MD 场景务必使用 default_dtype="float64"。
注意:MACE-MP 的能量零点是训练集中各元素平均原子能的加权和,孤立分子的绝对能量值不具化学意义,用能量差(如吸附能、形成能)与受力做判断。
进阶:若想用 2025 年的 MACE-MP-1,把导入改为 from mace.calculators.foundations_models import mace_mp,其余代码不变。
from ase import Atomsfrom ase.optimize import BFGSfrom mace.calculators import mace_mp # 水分子(非周期性,大盒子隔离)atoms = Atoms("H2O", positions=[[0, 0, 0], [0.958, 0, 0], [0, 0.958, 0]], cell=[15, 15, 15]) calc = mace_mp(model="medium", default_dtype="float64", device="cuda")atoms.calc = calc print("能量 (eV):", atoms.get_potential_energy())print("力 (eV/A):\n", atoms.get_forces()) opt = BFGS(atoms, logfile=None)opt.run(fmax=0.01)print("优化后能量 (eV):", atoms.get_potential_energy())
核心能力详解:5 大支柱
支柱一 · 等变消息传递架构。MACE 的消息以张量积(tensor product)方式在 SO(3) 群下等变(即旋转原子坐标后,特征按相应表示旋转,保证物理对称性),网络叠加多个消息层后对节点特征做对称约化得到原子能量与力,天然满足能量平移、旋转不变性与力的合力为零等物理约束。
支柱二 · 显式多体消息(ACE 展开)。与 NequIP 等「两体消息」模型不同,MACE 每条消息都经过 ACE 基函数展开,可显式包含三体、四体及更高体阶的相互作用(默认相关阶数为 3),这是它在小数据集上精度领先的结构性原因。
支柱三 · 通用基础模型。MACE-MP-0 在 Materials Project 弛豫轨迹上训练,覆盖 89 种元素;官方发布 small/medium/large 三档权重,零样本即可用于能量/力预测,也可用少量自有数据微调。MACE-MP-1 在此基础上修正并扩充了训练数据,改善了稀有元素与带电体系的精度。
支柱四 · 训练与评估工具链。mace_run_train 命令行从 XYZ 格式的(结构,能量,力)数据训练自定义势,支持 SWA(随机权重平均,提升模型稳健性)与 torchrun 多卡并行;mace_eval 可在独立测试集上批量输出逐结构能量/力误差,便于筛选最优模型。
支柱五 · 生态与接口。mace-torch 提供 ASE 计算器,可无缝接入 ASE 的优化器与 MD 模块;官方文档同时提供 LAMMPS 与 i-PI(路径积分 MD)接口;周期性与非周期性体系均支持,可输出能量、力与应力(virial),满足晶格弛豫和弹性性质计算需求。
生产部署与监控:从上线到运维
训练阶段:用 mace_run_train 配置好数据集与超参,先在小模型(small/medium)上验证收敛,再用 torchrun 在单机多卡上训练。多卡启动方式与单卡命令一致,仅需在最前方加 torchrun 前缀:
推理与 MD 部署:训练好的 .model 权重通过 ASE 计算器加载,嵌入到 NPT/NVT 分子动力学脚本;更大规模的生产计算走 LAMMPS 接口。需要微调基础模型时,将 --model="foundation" --foundation_model="medium" 传入 mace_run_train,用数百到数千条自有数据即可显著改善目标体系精度,是「基础模型 + 行业数据」的标准落地姿势。
可观测性:训练脚本按 epoch 输出训练/验证集能量与力的 MAE(平均绝对误差,误差的直观度量),并保存表现最好的 checkpoint(含 SWA 后的模型);用 mace_eval 在独立盲测集上做最终验收。上线后建议记录每个体系单点能、力范数与优化收敛曲线,异常偏大的力或能量往往对应训练分布外的结构,应触发人工检查或主动学习补充采样。
<p class="para-label">避坑清单:</p>
<ul class=“dash-list“><li>PyTorch 版本不匹配:未先按 CUDA 版本装 torch,pip 会拉 CPU 版,训练慢一个数量级以上;安装后先验证 torch.cuda.is_available()。</li><li>训练未做能量移位:数据绝对能量大而各元素 E0s(原子平均能)未设置时,能量损失主导训练甚至发散;用 --E0s=”average“ 或显式给元素值。</li><li>float32 精度不足:几何优化与长 MD 下力噪声累积导致轨迹漂移,官方明确建议使用 default_dtype=”float64”。</li><li>基础模型外推误用:MACE-MP 对训练分布外的电荷态、缺陷、稀有元素组合误差显著增大;先做小验证集误差测试,再决定微调或补充数据。</li><li>周期设置遗漏:ASE 中未设置 pbc/cell 时晶格弛豫与应力结果无意义;晶体体系显式 atoms.set_pbc(True) 并核对晶胞。</li></ul>
torchrun --nproc_per_node=4 $(which mace_run_train) \ --name="MACE_bulk_Si" \ --train_file="train.xyz" \ --valid_fraction=0.1 \ --model="MACE" \ --num_interactions=2 \ --num_channels=128 \ --max_L=2 \ --r_max=5.0 \ --batch_size=10 \ --max_num_epochs=200 \ --swa \ --energy_weight=1000 \ --force_weight=100 \ --device="cuda"
| 维度 | MACE | NequIP | DeepMD-kit(DP) | GAP |
|---|---|---|---|---|
| 定位 | 高阶等变消息传递 MLIP | 等变张量积消息 GNN | 描述子型深度势(嵌入网络+力场) | SOAP 描述子+高斯过程核回归 |
| 编排范式 | 消息经 ACE 展开,显式含 ≥3 体相互作用 | 消息为两体张量积组合,隐式高体阶 | 逐元素嵌入+局部描述子,无显式体阶概念 | 基于相似性核,稀疏 GP 逼近 |
| 类型约束 | 元素不限,周期/非周期均支持,有 89 元素基础模型 | 元素与化学环境需自定义训练 | 需为每个元素定义嵌入网络,数据量大时效果好 | 外推依赖训练集覆盖,元素组合受限 |
| 学习曲线 | 中等:命令行 CLI + ASE 接口 | 较高:需自建训练管线 | 较低:文档成熟、社区大 | 较高:核方法与 QUIP 环境 |
| 生态集成 | ASE、LAMMPS、i-PI、PyTorch | ASE、LAMMPS | LAMMPS、ASE、DP-GEN 主动学习闭环 | QUIP、LAMMPS、ASE |
| 生产部署 | torchrun 多卡训练,权重导出,基础模型微调 | 单卡训练为主,GNN 部署成本高 | 大规模 MD 成熟,主动学习流水线完善 | 核矩阵随训练集增大,适合中小体系 |
| License | MIT(代码);权重 CC-BY-4.0 | MIT | LGPL-3.0 | GPL-3.0 |
| 适合谁 | 想开箱即用、覆盖多元素体系的材料计算团队 | 做等变网络方法研究的研究者 | 工业大规模 MD 与主动学习团队 | 追求小体系极高精度与可解释性的用户 |
选型建议:短期验证与多元素通用场景首选 MACE——免费基础模型零样本即可出结果,小样本微调链路完整;工业级大规模 MD 与主动学习闭环选 DeepMD-kit 更成熟;方法学研究和极致小样本精度可在 NequIP 与 GAP 之间选择,但二者没有开箱即用的通用势。
版本迭代
MACE 的演进主线是「方法 → 通用模型 → 生产级工具」。2022 年论文提出等变消息传递 + ACE 多体展开框架;2023 年底发布 MACE-MP-0 基础模型,使零样本跨体系预测成为现实;2024 年 v1.0 核心重写(离子基组),支持带电与离子体系;2025 年 MACE-MP-1 在修正扩充后的训练数据上重新训练,进一步降低能量与力误差。(截至训练数据,可能已有更新版本,请以官方 Release 为准)
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| MACE 初版(v0.1.x) | 2022-06 | NeurIPS 2022 论文配套开源 | 提出等变消息传递 + ACE 显式多体消息框架 |
| MACE-MP-0 | 2023-12 | 首个通用基础模型 | Materials Project 轨迹训练,89 元素,发布 small/medium/large 三档权重与 ASE 接口 |
| MACE v1.0 | 2024 | 核心模型重写(离子基组) | 支持带电/离子体系;API 相对 v0.x 有破坏性变更 |
| MACE-MP-1 | 2025 | 新一代基础模型 | 修正并扩充训练数据,改善稀有元素与带电体系精度 |
公开评测中,MACE 系模型在 rMD17 等分子基准上报告了优于同期等变基准的能量/力误差,在 WBM 等外部晶体数据集上能量误差接近 DFT 数值噪声量级,具体数值以官方论文图表为准。选型建议:新项目直接使用 v1.x 与 MACE-MP-1;沿用 v0.x 老脚本时注意 API 与参数迁移,尤其是训练命令与基础模型加载方式。
AI 应用场景
高通量材料筛选与吸附剂发现
阶段:MLIP 零样本推理 → 候选结构排序 → DFT 复核
解决的问题:DFT 逐结构筛选数万个 MOF/晶体候选耗时数月;MACE-MP 基础模型可直接批量预测形成能、吸附能,把候选空间缩小到可做完整 DFT 验证的量级,成本降低三到四个数量级。
具体案例:MACE 团队在基础模型论文中对 MOF 数据库进行 Xe/Kr 分离相关筛选,找到了纯 DFT 流程难以直接观测到的候选材料(论文中称为 non-DFT-observable),随后用 DFT 验证了预测的有效性。
大尺度分子动力学模拟
阶段:自定义势训练 → ASE/LAMMPS MD 生产
解决的问题:DFT-MD 只能覆盖数十原子、皮秒尺度;用 mace_run_train 在目标体系上训练或微调势函数后,可在 LAMMPS 中跑数万原子、纳秒级轨迹,用于电解液-电极界面、熔化/结晶、热输运等研究。
具体案例:某电池材料团队用数千条 DFT 数据微调 MACE-MP,在保持能量误差约 1 meV/原子量级的前提下,实现界面 MD 轨迹长度增加两个数量级以上,支撑离子扩散系数与界面稳定性分析。
自定义力场的小样本训练
阶段:数据生成 → 模型训练 → 结构搜索
解决的问题:针对无公开势函数的新材料体系,传统做法需要人工拟合经验势,周期长且泛化差;MACE 用小样本(数百至数千条 DFT 计算)即可训练出接近 DFT 精度的可微势,接入随机结构搜索(如 AIRSS)与过渡态搜索(NEB)。
具体案例:研究团队用约 2000 条 DFT 数据训练 128 通道 MACE 模型,对合金表面吸附构型做全局结构搜索,找到的能量最低构型与后续完整 DFT 验证结果一致,计算消耗仅为纯 DFT 搜索的约 1%。
常见误区
误区MACE-MP 覆盖 89 种元素,任何材料直接算,结果跟 DFT 一样可信。
正解MACE-MP 只在 Materials Project 弛豫轨迹的统计分布内严格可靠;对训练分布之外的电荷态、高缺陷浓度、稀有元素新组合等构型,误差可能显著高于论文报道值。官方论文同样采用微调与主动学习策略来控制外推风险,生产使用前应在目标体系的小验证集上实测能量/力误差。
为何常见:论文与模型卡强调「基础模型」「接近 DFT」,容易让读者忽略机器学习模型固有的外推边界。
误区`pip install mace-torch` 会自动装好一切,装完就能用 GPU 训练。
正解mace-torch 依赖 PyTorch,若本机没有 torch,PyPI 默认解析到 CPU 版,GPU 加速失效且训练极慢。必须先按 CUDA 版本安装 PyTorch(或指定 PyTorch 官方的 CUDA wheel 索引),再装 mace-torch,并用 torch.cuda.is_available() 验证。
为何常见:pip 的依赖自动解析让多数包「装完即用」,用户容易忽略 PyTorch 这种有 CPU/CUDA 分支的特殊依赖。
误区深度学习默认 float32,MACE 训练和推理也用 float32 没问题。
正解官方文档明确建议对几何优化、MD 与能量比较使用 default_dtype="float64"。float32 下能量与力的数值噪声会累积,导致能量差失真、优化轨迹漂移;在低对称、弱相互作用体系中尤其明显。代价是显存占用与计算时间增加,但物有所值。
为何常见:float32 是深度学习默认配置,且部分其他 MLIP 包并未强制要求 float64,用户习惯使然。
误区MACE 在晶体数据上训练,只能用于周期性结构,分子和团簇算不了。
正解MACE 同时支持周期性与非周期性体系,由 ASE Atoms 的 pbc 与 cell 自动决定;原始论文的基准就包含 rMD17 等分子数据集。非周期体系用 pbc=False(或大盒子隔离)的 Atoms 对象即可。
为何常见:MACE-MP 的宣传材料以晶体筛选为主,基础模型训练数据也来自 Materials Project,容易让人误以为只覆盖晶体领域。
误区想用自己数据训练势函数只能加载官方权重推理,训练得自己写网络代码。
正解mace_run_train 命令行内置完整训练流程,只需准备 XYZ 格式的(结构,能量,力)数据并指定若干超参数即可训练;还支持 --model="foundation" 从 MACE-MP 基础模型继续微调,小样本即可改进目标体系精度,无需任何自定义网络代码。
为何常见:多数用户最先接触的是 ASE 计算器接口(推理场景),没注意到仓库自带的训练 CLI 与官方文档 Training 章节。
面试题
Q1. 下列关于 MACE 模型的类型描述,正确的是?
- A.基于消息传递与原子簇展开的等变 MLIP← 正确答案
- B.基于贝叶斯优化的分子动力学软件
- C.一种基于 DFT 的电子结构求解器
- D.用于晶体生成的扩散生成式模型
答案:A。MACE 属于机器学习原子间势(MLIP),用消息传递神经网络加 ACE 展开学习 DFT 能量与力;它不是 DFT 求解器,也不做生成或优化调度,B/C/D 均把工具类型归属错了。
Q2. 调用 MACE-MP-0 计算单点能的正确入口是?
- A.mace.calculators 的 mace_mp 函数← 正确答案
- B.ase.calculators 的 MACE 计算器
- C.import mace 后调用 potential()
- D.命令行 mace-cli --calc
答案:A。官方 ASE 计算器入口是 from mace.calculators import mace_mp,返回一个 ASE 计算器对象;B 是常见混淆(ASE 不内置 MACE),C/D 的命令和函数并不存在。
Q3. MACE-MP-0 基础模型的训练数据主要来自?
- A.MP 弛豫轨迹(覆盖 89 种元素)← 正确答案
- B.ImageNet 图像分类数据集
- C.天文光谱与巡天观测数据库
- D.随机生成的空白晶胞集合
答案:A。MACE-MP-0 在 Materials Project 的弛豫轨迹数据集上训练,覆盖 89 种元素,因此具备跨体系零样本能力;其余选项均与原子模拟无关,属于干扰项。
Q4. mace_run_train 中 --max_L 参数的作用是?
- A.控制球谐最高阶数与角分辨能力← 正确答案
- B.控制消息传递层数(层数参数)
- C.控制最大训练轮数与早停
- D.控制原子截断半径 r_max
答案:A。--max_L 是等变特征中球谐函数的最大阶数,决定角向分辨能力与计算开销;层数由 --num_interactions 控制,截断由 --r_max 控制,轮数由 --max_num_epochs 控制。
Q5. MACE 相对 NequIP 的核心差异是?
- A.消息经 ACE 展开含更高体阶相互作用← 正确答案
- B.采用非等变 MLP 直接输出力场
- C.无需任何训练数据即开箱使用
- D.仅支持单元素体系的简单势函数
答案:A。两者都是等变消息传递网络,但 MACE 将消息通过原子簇展开线性化,可显式构造三体及以上多体消息,这是其小样本精度领先的关键;B/C/D 均与事实不符。
Q6. --energy_weight=1000 --force_weight=100 的含义是?
- A.训练损失中能量项与力项的加权系数← 正确答案
- B.数据集里能量样本数和力样本数
- C.学习率为 1000,批量大小为 100
- D.能量收敛阈值 1000,力收敛阈值 100
答案:A。MACE 训练损失是能量项与力项 MSE 的加权和,因能量误差(eV/原子)与力误差(eV/Å)数值尺度不同,需要按物理单位调节权重;官方示例常用 1000/100 组合,B/C/D 是对参数的错误解读。
Q7. 关于 MACE 基础模型的使用边界,正确的是?
- A.分布外结构需先验证或微调再用← 正确答案
- B.89 元素内任意体系均可做到零误差
- C.截断半径只能取大于 5 Å 的值
- D.只能在 Nvidia GPU 上进行推理
答案:A。MACE-MP 虽覆盖 89 种元素,但仅在训练分布内可靠;对电荷态、缺陷、稀有元素组合等未见构型,误差可能显著上升,正确做法是在小验证集上实测误差,必要时用 --model=foundation 微调。MACE 支持 CPU 推理,截断半径也可自由设置。
Q8. MACE 官方文档提供哪些计算生态接口?(多选)
- A.ASE 计算器接口← 正确答案
- B.LAMMPS 对接← 正确答案
- C.i-PI 路径积分 MD 接口← 正确答案
- D.VASP 内置模块调用 MACE
答案:ABC。官方文档提供 ASE、LAMMPS 与 i-PI 三类接口,覆盖优化、经典 MD 与路径积分 MD;VASP 是独立的商业 DFT 软件,不内置 MACE,D 错误。
Q9. 安装与使用 MACE 的注意点有哪些?(多选)
- A.先按 CUDA 版本装 PyTorch 再装 mace-torch← 正确答案
- B.几何优化模拟推荐使用 float64← 正确答案
- C.无需 Python 环境即可独立运行
- D.首次调用 mace_mp 会自动下载权重← 正确答案
答案:ABD。先装匹配的 PyTorch 可避免拉取 CPU 版导致 GPU 失效;float64 是官方对优化/MD 的建议;首次调用 mace_mp() 会从 GitHub Releases 下载权重;MACE 是 Python 包,必须运行在 Python 环境中,C 错误。
Q10. 训练 MACE 自定义势时,正确的做法是?(多选)
- A.num_channels 与 max_L 控制模型容量← 正确答案
- B.开启 SWA 提升鲁棒性与精度← 正确答案
- C.用 foundation 模型继续微调减少数据需求← 正确答案
- D.跳过能量移位直接训练保证收敛
答案:ABC。--num_channels 与 --max_L 决定模型表达能力,--swa 通过随机权重平均提升稳健性,--model="foundation" 支持从 MACE-MP 微调、显著降低数据需求;跳过能量移位(即不设置 --E0s)会让能量损失主导训练甚至发散,D 错误。