oCP 吸附能计算上手指南:零基础 15 分钟跑通 UMA 完整吸附能流程
【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp
传统 DFT 算一个吸附能要几小时,高通量筛选几十种催化剂表面几乎不可行。oCP 工具包里的 UMA 模型把表面结构弛豫和吸附能预测压缩到秒级,整个流程只需要三段代码。
它到底能做什么
oCP 是 FAIR 发布的化学机器学习工具包,UMA 是其中的主力模型:一个等变图神经网络,输入原子结构就自动构建原子邻域图,输出总能量和原子力。架构里有一组叫 MoLE 层的"专家通道",遇到不同化学环境会自动切换到最擅长的那一组,像一队按专长分工的专家。模型在约 5 亿 DFT 数据点上训练,覆盖催化、分子、无机材料等场景。
这一节我们完成催化里最经典的动作:搭一个 Pt(111) 表面,放一个 O 原子,做结构优化,最后拿到吸附能。
从零到第一次出结果
拉环境与装依赖
环境只有两个硬依赖:核心推理库和催化数据工具包。UMA 权重放在 Hugging Face 的受限仓库里,第一次用要登录账号:
pip install fairchem-core fairchem-data-oc huggingface-cli login注意这里:后面如果报 401 或下载失败,问题基本都出在这一步。
准备你的第一组吸附体系
下面这段一次完成模型加载和结构构建:fcc111生成 2×2×5 的 Pt 板层,20 Å 真空层用来隔开周期镜像,避免上下两层表面互相串扰;O 原子放在 fcc 空心位。task_name="oc20"让模型返回 RPBE 级别的总能量,后面就能完全按 DFT 的"能量差"逻辑算。
from ase.build import fcc111, add_adsorbate from fairchem.core import FAIRChemCalculator, pretrained_mlip predictor = pretrained_mlip.get_predict_unit("uma-s-1p2p1") calc = FAIRChemCalculator(predictor, task_name="oc20") slab = fcc111("Pt", size=(2, 2, 5), vacuum=20.0) slab.pbc = True adslab = slab.copy() add_adsorbate(adslab, "O", height=1.2, position="fcc")跑优化并拿到数值
计算器挂到结构上后,用 BFGS 把两个结构分别弛豫到最大力小于 0.05 eV/Å,再代入公式。E_ref_O取 OC20 标准参考——由 H2O 和 H2 线性组合得到的 O 能量,不是 DFT 元素原始能量,两者混用会引入系统偏差。
from ase.optimize import BFGS slab.set_calculator(calc) adslab.set_calculator(calc) for s in (slab, adslab): BFGS(s).run(fmax=0.05, steps=100) E_ref_O = -7.204 E_ads = (adslab.get_potential_energy() - slab.get_potential_energy() - E_ref_O) print("E_ads =", round(E_ads, 3), "eV")⚡️ 一块 2×2 的 Pt 板层,两块结构加起来优化通常在一分钟内结束。
拿到结果后怎么看
吸附能公式就一行:
E_ads = E(adslab) - E(slab) - E(ref)数值越负,吸附越强。判断结果可不可信,快速检查三件事:
- ✅收敛了没有:优化自然停止、最大力在 0.05 eV/Å 以下才算数。提前停掉意味着你在读一个非平衡结构的能量。
- 参考态对不对:
E(ref)必须用与 OC20 一致的参考方案(H2O/H2/CO/N2 线性组合),换一套方案数字会整体平移。 - 轨迹异常:用
DetectTrajAnomaly检查吸附体有没有解离或飘到真空层,中了任何一条该构型的结果直接作废。
还有一个易踩的点:部分模型+任务组合直接输出吸附能,部分输出总能量,开跑前先确认你这套组合的返回约定,见 docs/core/common_tasks/ase_calculator.md。
让结果更准 / 更快
- 提速:
get_predict_unit传入inference_settings="turbo",启用合并+编译的快速路径,适合组成、任务、电荷固定不变的重复计算;异构混合批改用"batch"模式。 - 提精度:换更大的
uma-m-1p1checkpoint 精度更高一档;色散作用强的体系(弱范德华吸附)用DFTD3Calculator包一层加 D3 修正。 - 提覆盖率:吸附位枚举时多生成几个初始构型再取最低能,单点位采样容易停在局部极小。
踩坑速查
⚠️ 按"现象 → 原因 → 修复"查,基本覆盖 90% 的新手问题:
| 现象 | 原因 | 一行修复 |
|---|---|---|
| 加载模型报 401 / 下载失败 | UMA 是 Hugging Face 受限仓库,未登录或未申请权限 | 申请 UMA 仓库访问后huggingface-cli login |
| 优化不收敛、力一直偏大 | 步数不够或初值太偏 | opt.run(fmax=0.1, steps=300) |
| kernel 直接崩溃 | 内存超限(板层太大或模型太大) | slab 缩小到size=(2, 2, 4),或换小一号模型 |
| 能量突然偏正很多 | 参考态方案不匹配 | 换回 OC20 的 H2O/H2 线性组合参考 |
| 打印 fallback 警告 | 快速模式要求组成/任务/电荷全程不变 | 保持组成一致,或改用inference_settings="batch" |
下一步可以做什么
官方文档里的 NRR 实例(adsorption_energies 教程)演示了用Bulk/Slab/AdsorbateSlabConfig自动枚举多个吸附位并批量弛豫,是单点手搭之后的自然延伸。想要批量推理、分子动力学或 LAMMPS 耦合,同一份 ase_calculator 文档往下翻即可。新模型版本和功能变更记录在 docs/core/uma_changelog.md,跑通本文流程后值得定期看一眼。
【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考