UMA 模型吸附能预测:把 DFT 数小时压到秒级的完整催化剂筛选流程
【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp
本文面向计算催化新手,带你用开源项目 FAIR Chemistry(OCP)里的 UMA 模型完成吸附能预测:从环境配置、自动生成吸附构型、ML 结构弛豫,到能量参考扣除和异常剔除,一条流水线跑通,并给出批量提速与排错清单。
筛选上千个催化剂时,传统做法卡在哪
催化研究里最关键的一个数往往是吸附能——分子在表面绑得多紧,直接决定活性和选择性。传统做法是 DFT:每个构型都要迭代到收敛,单算一次几分钟到几小时,而一个催化位点为了找最稳吸附构态,通常要试几十个初始摆放。体系一大,排队等算就成常态,高通量筛选几乎停摆。
UMA(Universal Models for Atoms)换了一条路:用等变图神经网络当"能量计算器",把结构画成原子间图,一次前向传播直接给出能量和力,单次推理毫秒级。代价是精度略低于高精度 DFT,但对"筛出值得精算的少数候选"这一步,速度优势是决定性的。🔧
UMA 凭什么又快又准
模型主干是等变图网络:原子坐标经过半径图(radius graph)连接,各层变换在旋转下严格不变,天然符合物理对称性。工程上最值得注意的是 MoLE(Mixture of Linear Experts,混合线性专家):把每层拆成一组小线性专家,按化学环境动态加权组合——不同表面、不同吸附质可以"走不同的通道",参数量撑得起来,推理却不会随专家数线性变慢。官方称该模型在约 5 亿个 DFT 样本上训练,覆盖体相、表面、分子、催化等多类体系。
架构与数据流的示意图见仓库自带文档图:
环境一键就绪
三件事搞定即可开始:
git clone https://gitcode.com/GitHub_Trending/oc/ocp pip install fairchem-core fairchem-data-oc权重放在 HuggingFace 的门控仓库facebook/UMA,需要先申请访问权并登录,否则下载会报 401:
huggingface-cli login有 GPU 体验最佳(弛豫单构型秒级),CPU 能跑但明显更慢。
三步跑通:枚举构型 → 弛豫结构 → 扣参考能量
第一步:自动生成吸附构型。你只需给出体相 ID、晶面指数和吸附质 SMILES,AdsorbateSlabConfig会沿表面铺开一批初始摆放(*是吸附锚点符号):
from fairchem.data.oc.core import Bulk, Slab, Adsorbate, AdsorbateSlabConfig bulk = Bulk(bulk_src_id_from_db="oqmd-343039", bulk_db_path="NRR_example_bulks.pkl") slab = Slab.from_bulk_get_specific_millers(bulk=bulk, specific_millers=(1, 1, 1)) ads = Adsorbate(adsorbate_smiles_from_db="*H", adsorbate_db_path="adsorbates.pkl") adslabs = AdsorbateSlabConfig(slab[0], ads, mode="random_site_heuristic_placement", num_sites=10)mode还支持"heuristic"(纯启发式站点);num_sites越大越接近穷举,但计算量同步上涨。
第二步:ML 结构弛豫。FAIRChemCalculator是标准 ASE 计算器,接到任何 ASE 优化器上就能用:
from fairchem.core import FAIRChemCalculator, pretrained_mlip from ase.optimize import QuasiNewton predictor = pretrained_mlip.get_predict_unit("uma-s-1p2p1") calc = FAIRChemCalculator(predictor, task_name="oc20") adslab.calc = calc opt = QuasiNewton(adslab, trajectory="h_adsorption.traj") opt.run(fmax=0.05, steps=100)task_name="oc20"对应催化表面任务,别和分子任务omol混用。
第三步:扣参考算吸附能。弛豫结束后取三个总能做差:
E_ads = E(adslab) − E(slab) − E(adsorbate_ref)三项分别是含吸附物的表面、空表面、气相参考分子。能量越负,吸附越强。参考能量用同一模型算气相分子即可保持自洽。
完整案例:Ni(111) 表面 H* 吸附能
以氮气还原(NRR)研究为例,官方教程复现了文献中 H* 与 NNH* 吸附能的筛选图(NRR_example_bulks.pkl内置 19 个合金体相)。流程是:
- 输入:体相 ID
oqmd-343039、晶面 (111)、吸附质*H; - 操作:先单独弛豫空 slab(
slab[0].atoms挂上同一个calc),再对adslabs.atoms_list里每个构型跑弛豫,结果存成.traj轨迹; - 结果:遍历所有轨迹取每个表面最负吸附能,即可得到该表面的 H* 结合强度,多表面汇总后就能对比不同合金的 NRR/HER 倾向。
这一步是天然可并行的:每个构型互相独立,直接多进程或分布式铺开即可,注意控制内存。完整可交互版本见官方教程 docs/catalysts/examples_tutorials/adsorption_energies/adsorption_energies.md。
踩坑与排错:5 个高频问题
Q1:模型下载报 401 / 权限错误?确认已申请facebook/UMA门控仓库权限,并用huggingface-cli login或环境变量HF_TOKEN注入 token。权重与参考能量文件会自动缓存到~/.cache/fairchem。
Q2:弛豫不收敛怎么办?放宽判据(fmax=0.1)或加步数(steps=300);仍不收敛时检查初始构型是否原子重叠、slab 层数是否足够厚(底层需冻结或加厚)。
Q3:算出的吸附能和文献差很多?按顺序排查:task_name与模型训练任务是否匹配;参考能量是否与模型同来源(用 DFT 参考配 ML 总能会引入系统偏差);吸附质是否在弛豫中跑位了(见下条)。
Q4:轨迹里吸附质解离或飞走了?这是最常见的"假吸附能"来源——解离、脱附、嵌入体相都会让能量失去吸附能含义。用官方异常检测器剔除:
from fairchem.data.oc.utils import DetectTrajAnomaly detector = DetectTrajAnomaly(initial_atoms, final_atoms, tags) valid = not (detector.is_adsorbate_dissociated() or detector.is_adsorbate_desorbed())Q5:随机摆放没覆盖到真实最稳位点?把heuristic与random_site_heuristic_placement两种模式各跑一批再取并集,并增大num_sites。这本质是概率性搜索,多采一点总概率更高。⚠️
进阶与延伸:更快、更准的路
速度侧。推理设置传inference_settings="turbo"可启用融合 MOLE + 编译的快速路径(并自动回退);多卡多进程用get_predict_unit(..., workers=2);大批量预测建议跳过逐个 ASE 调用,直接把Atoms转成AtomicData后组 batch 一次前向:
from fairchem.core.datasets.atomic_data import AtomicData, atomicdata_list_to_batch batch = atomicdata_list_to_batch([AtomicData.from_ase(a, task_name="oc20") for a in adslabs]) preds = predictor.predict(batch)精度侧。用更大的uma-m-1p1换精度;或走"ML 弛豫 + DFT 单点校正"两阶段路线——用 UMA 找到最稳构型,再只对终态跑一次 DFT,总成本仍远低于全程 DFT。
应用侧。同一套fairchem.data.oc构型生成工具链也支撑 CO₂ 还原(CO₂RR)等电催化反应路径分析,cattsunami 应用可直接在其上做反应能垒枚举:
📈 继续深入的出口:推理接口细节见 docs/core/common_tasks/ase_calculator.md、批量推理见 docs/core/common_tasks/batch_inference.md、模型注册表源码见 src/fairchem/core/calculate/pretrained_mlip.py。随着训练数据扩充,UMA 后续还会纳入更多泛函与元素体系,值得持续关注更新日志。
【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考