news 2026/10/21 1:56:30

OCP库3步拿到催化剂吸附能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OCP库3步拿到催化剂吸附能

OCP库3步拿到催化剂吸附能

【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp

你在筛非均相催化剂,需要 CO 在 Cu(100) 表面的吸附能。DFT 跑完一组候选位点是小时级工作量,而一个表面还有 ontop、bridge、hollow 等几十个候选位点要枚举。OCP库(fairchem)是 FAIR Chemistry 的机器学习化学工具包,用 UMA 机器学习势直接输出能量和力,"位点枚举 → 逐点弛豫 → 吸附能"整条流程在 GPU 上分钟级完成。

fairchem 三层能力:数据、模型、应用

fairchem 是 FAIR Chemistry 的中心仓库,把材料科学与量子化学的数据、模型、应用代码收在一个仓库里,可以拆成三层看:

  • 数据层:OC20/OC22/OC25(催化)、OMol25(分子与聚合物)、OMat24(无机材料)、ODAC(MOF)等数据集的配置与生成代码;src/fairchem/data/oc/ 提供 Bulk/Slab/Adsorbate 对象,从一个体相 id 就能构建候选吸附-表面构型。
  • 模型层:UMA 是等变 GNN,在 5 亿条 DFT 样本上训练,用 MoLE(Mixture of Linear Experts)路由架构;uma-s-1p2p1(6.6M 激活/290M 总参数)与uma-m-1p1(50M 激活/1.4B 总参数)两个模型覆盖 oc20、oc22、oc25、omat、omol、odac、omc 共 7 个任务,定义在 src/fairchem/core/models/uma/。
  • 应用层:AdsorbML(最低吸附能)、Cattsunami(催化反应路径)、FastCSP(晶体结构预测)等 pip 子包,按需安装。

精度与速度看官方基准:UMA-S 1.2.1 在 OMol25 验证集上力 MAE 约 7.5 meV/Å,1296 原子水体系的 NVE 动力学约 45 ms/step(NVIDIA H200)。

从结构到吸附能:三步拆解

task_name 怎么选:1 个模型对应 7 套 DFT 理论水平

输入是 ASEAtoms结构加task_name。UMA 以任务、元素组成、总电荷、总自旋作为 MoLE 路由输入,选中对应专家分支,输出能量与力(omat 任务还输出应力)。任务不是"领域开关",而是不同的 DFT 泛函:oc20 用 RPBE(无色散,训练数据不含氧化物与溶剂),oc25 用 RPBE+D3,omat 用 PBE/PBE+U,omol 用 ORCA6 的 wB97M-V 且要求atoms.info里给出总电荷与自旋多重度(默认 0/1);oc22、oc25 仅在 UMA 1.2 提供。跨任务比较能量没有意义,它们来自不同参考计算。

候选位点枚举:Bulk 到 AdsorbateSlabConfig 的 4 个对象

输入是一个 bulk id。处理分四步:Bulk生成体相参考结构,Slab.from_bulk_get_specific_millers按密勒指数切出表面,Adsorbate从 SMILES 数据库取吸附质,AdsorbateSlabConfig用启发式加随机放置枚举 ontop/bridge/hollow 位点。输出是Atoms列表,每个构型可单独挂 calculator 弛豫:

slab = Slab.from_bulk_get_specific_millers(bulk, specific_millers=(1, 1, 1)) ads = Adsorbate(adsorbate_smiles_from_db="*H", adsorbate_db_path=db) configs = AdsorbateSlabConfig(slab[0], ads, mode="random_site_heuristic_placement", num_sites=20)

轨迹异常检测:滤掉 4 类无效吸附能

弛豫过程中如果吸附质脱附、解离、插层,或表面重构了,末帧能量差就不再是吸附能。DetectTrajAnomaly(见 src/fairchem/data/oc/utils/flag_anomaly.py)用轨迹首末帧加原子 tag(0=体相,1=表面,2=吸附质)输出 4 个布尔值,统计前先过滤;算吸附能时还要减去弛豫后的 slab 能量与气相原子参考能:

flag = DetectTrajAnomaly(traj[0], traj[-1], traj[0].get_tags()) ok = not (flag.is_adsorbate_desorbed() or flag.is_adsorbate_dissociated() or flag.has_surface_changed())

最小可运行示例:弛豫 Cu(100) 上的 CO

安装两行(Python 3.10+)。UMA 检查点在 HuggingFace 上是 gated 仓库,需先用 token 登录;如需阅读或修改源码,先git clone https://gitcode.com/GitHub_Trending/oc/ocp:

pip install fairchem-core huggingface-cli login # 先在 HF 申请 UMA 仓库访问权限
from ase.build import fcc100, add_adsorbate, molecule from ase.optimize import LBFGS from fairchem.core import pretrained_mlip, FAIRChemCalculator predictor = pretrained_mlip.get_predict_unit("uma-s-1p2p1", device="cuda") calc = FAIRChemCalculator(predictor, task_name="oc20") slab = fcc100("Cu", (3, 3, 3), vacuum=8) # 8 Å 真空层 add_adsorbate(slab, molecule("CO"), 2.0, "bridge") # CO 放在距表面 2 Å 的桥位 slab.calc = calc LBFGS(slab).run(0.05, 100) # 弛豫到最大力 < 0.05 eV/Å print(slab.get_potential_energy())

常见坑与解法

首次运行报 401 或权限错误。原因:UMA 检查点在 gated 仓库,匿名下载被拒。解法:在 HuggingFace 申请 UMA 仓库访问权限,然后huggingface-cli login或设置HF_TOKEN环境变量。

前几次推理很快,之后突然变慢并打印警告。原因:default 与 turbo 快速路径(merge_mole + compile)要求组成、任务、电荷、自旋在多次求值间保持不变,一旦变化会永久回退到未编译路径。解法:同质体系放同一批;异构批量用inference_settings="batch"。

吸附能数值明显偏大。原因:参考减错了——漏减弛豫后的 slab 能量或气相原子参考能,或跨任务直接比较能量。解法:E_ads = E_adslab − E_slab(弛豫后) − Σ气相原子参考能(OC20 论文参考值或自行 DFT 计算);只在同一任务内比较。

MOF 体系(odac 任务)另注意:训练数据只有 CO2/H2O 吸附,新框架需谨慎:

资源索引

  • docs/core/quickstart.md:UMA 快速上手与任务选择表
  • docs/core/uma.md:7 个任务与 DFT 理论水平对照
  • docs/catalysts/examples_tutorials/adsorption_energies/adsorption_energies.md:完整吸附能教程,从位点枚举到文献对比
  • docs/core/common_tasks/ase_calculator.md:default/batch/turbo 推理模式细节
  • src/fairchem/data/oc/:位点枚举代码与吸附质数据库

从 quickstart 拿到第一个能量与力,再到吸附能教程跑通一次完整筛选流程。

【免费下载链接】ocpFAIR Chemistry's library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 1:51:54

Delphi 中使用 XLSReadWrite 读写 Excel 的安装与实战

简介&#xff1a;针对 Delphi Tokyo 10.2 推出的 XLSReadWriteII 6.00.16 组件包&#xff0c;面向需在 Delphi 中读写 Excel 文件的开发者&#xff0c;可在不安装 Microsoft Office 的前提下直接处理 xls 与 xlsx 格式&#xff0c;兼顾历史版本与新版工作簿。压缩包共 816 个文…

作者头像 李华
网站建设 2026/10/21 1:51:31

RoboMaster步兵机器人硬件选型与系统联调实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 1:51:02

【WebSocket】如何在 WebSocket 中实现用户认证和鉴权?

WebSocket 认证鉴权实战:从握手阶段到消息级别的安全控制 用户问题原文:如何在 WebSocket 中实现用户认证和鉴权? 在构建直播互动弹幕系统时,我们曾因认证机制缺陷导致恶意用户刷屏攻击,单日产生 200 万条垃圾弹幕。根本原因在于团队仅在 HTTP 握手阶段验证了 Cookie,却忽…

作者头像 李华
网站建设 2026/10/21 1:50:58

256×64图形点阵LCD模组驱动实战:SPI接口、初始化与显存映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 1:50:11

端侧AI芯片选型实战:AX8850性价比与部署全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 1:49:14

MapLibre Native 动态样式切换:3 行代码给地图换主题

MapLibre Native 动态样式切换&#xff1a;3 行代码给地图换主题 【免费下载链接】maplibre-native MapLibre Native - Interactive vector tile maps for iOS, Android and other platforms. 项目地址: https://gitcode.com/GitHub_Trending/ma/maplibre-native 地图应…

作者头像 李华