
UMA 模型秒级预测吸附能19 个催化剂表面筛选全流程实战【免费下载链接】ocpFAIR Chemistrys library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp高通量筛催化剂最磨人的环节是什么DFT 弛豫一个吸附构型要挂几小时而机器学习力场 UMA 算同一个构型只要 10 秒上下。但快的模型会骗你——一个虚假的低能量结构就能把筛选结论带偏。下面用一个官方教程里的真实场景19 个合金表面 × 2 种吸附质 × 若干候选构型走一遍完整流程从环境配置到吸附能落地最后看结果怎么校验、批量跑怎么提速。环境怎么配一个 token 权限就够git clone https://gitcode.com/GitHub_Trending/oc/ocp cd GitHub_Trending/oc/ocp pip install fairchem-core fairchem-data-oc fairchem-applications-cattsunamiUMA 的权重托管在 HuggingFace 的门控仓库里所以装完包后必须登录并申请 facebook/UMA 仓库的读取权限token 需要勾选 Read access to contents of all public gated repos you can accesshuggingface-cli login模型名不用自己挑官方文档建议大多数场景直接用uma-s-1p2p1小模型 1.2 的最新补丁版速度、精度、显存最均衡追求更高精度可换uma-m-1p1。模型名注册在 src/fairchem/core/calculate/pretrained_models.json想换哪个直接查这份清单。构型怎么枚举别手摆初始结构吸附能算得对不对一半取决于初始构型找得好不好。OCP 自带的表面工具链能把手摆结构这步彻底自动化从体相数据库读合金 → 切出 (111) 表面 → 启发式 随机两种模式采样吸附位点from fairchem.data.oc.core import Adsorbate, AdsorbateSlabConfig, Bulk, Slab bulk Bulk(bulk_src_id_from_dboqmd-343039, bulk_db_pathNRR_example_bulks.pkl) slab Slab.from_bulk_get_specific_millers(bulkbulk, specific_millers(1, 1, 1)) ads_H Adsorbate(adsorbate_smiles_from_db*H, adsorbate_db_pathadsorbates.pkl) heuristic AdsorbateSlabConfig(slab[0], ads_H, modeheuristic) # 顶位/桥位/凹位 randoms AdsorbateSlabConfig(slab[0], ads_H, moderandom_site_heuristic_placement, # 随机位 启发式摆法 num_sites8) adslabs [*heuristic.atoms_list, *randoms.atoms_list]这套逻辑的源码在 src/fairchem/data/oc/AdsorbateSlabConfig的三种采样模式random/heuristic/random_site_heuristic_placement决定了位点怎么找、吸附质怎么摆。num_sites就是随机采样的位点数——采样点越多漏掉真实最稳位点的概率越低。弛豫怎么跑一个构型 10 秒结构准备好后把 UMA 包进 ASE 的FAIRChemCalculator交给QuasiNewton优化器弛豫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_nameoc20) adslab adslabs[0] adslab.calc calc adslab.pbc True # 表面体系必须开启周期性 opt QuasiNewton(adslab, trajectoryrelax.traj) opt.run(fmax0.05, steps100)task_nameoc20告诉模型我要的是催化表面-吸附质这套 DFT 理论层级——UMA 同时覆盖oc20、omol分子、omat无机材料、odac、omc五套任务嵌入任务选错能量就全错。GPU 上单构型弛豫通常 10 秒左右就能收敛CPU 上会慢一个量级。预测值怎么校验先排异常再算吸附能快的模型确实会骗你弛豫轨迹里可能藏着吸附质解离、脱附、插层甚至表面重构。这类构型的能量根本不是单纯吸附能直接取最低值必然翻车。OCP 提供DetectTrajAnomaly把四类异常一次性查掉import ase.io from fairchem.data.oc.utils import DetectTrajAnomaly traj ase.io.read(relax.traj, :) detector DetectTrajAnomaly(traj[0], traj[-1], traj[0].get_tags()) bad (detector.is_adsorbate_dissociated() or detector.is_adsorbate_desorbed() or detector.has_surface_changed() or detector.is_adsorbate_intercalated()) E_ads (traj[-1].get_potential_energy() - slab_relaxed.get_potential_energy() # 先弛豫过的 slab - sum(elem_ref[n] for n in traj[0][traj[0].get_tags() 2].get_chemical_symbols()))吸附能就是这一行E_ads E(adslab) - E(slab) - ΣE(气相参考)。注意参考能量必须与 DFT 泛函体系一致——教程里{H: -3.477, N: -8.083, O: -7.204, C: -7.282}这组数值是从 H2O/N2/CO/H2 线性组合折算出来的。官方教程里对全部构型循环过滤后只取有效构型中的最低值这一步比换更大的模型更能保证结论靠谱。校验也很直接把每个表面的最低吸附能和文献值画 parity 图斜率、偏差一目了然。官方教程复现的就是 ACS Catalysis 2023 的 NRR/HER 选择性图H* 与 NNH* 吸附能的关系数据文件就在教程目录 docs/catalysts/examples_tutorials/adsorption_energies/ 里。批量跑怎么提速单点能批量推理全量筛选时大头是大量弛豫好的结构算最终单点能。逐结构调用calc.get_potential_energy()会浪费 GPU 利用率官方推荐批量推理路径AtomicData打包 → 一次predictfrom fairchem.core.datasets.atomic_data import AtomicData, atomicdata_list_to_batch data_list [AtomicData.from_ase(a, task_nameoc20) for a in relaxed_adslabs] batch atomicdata_list_to_batch(data_list) preds predictor.predict(batch)完整用法见 docs/core/common_tasks/batch_inference.md显存不够就分批 pack或者按体相拆成多进程并行这些弛豫任务彼此独立天然适合并行只需盯住内存。适用边界与常见问题先说边界UMA 是 DFT 代理模型不是 DFT。它给出的能量带着与底层泛函同源的系统误差适合做高通量排序和初筛要写进论文的吸附能推荐用 ML 弛豫好的结构做 DFT 单点校正而不是直接报模型值。几个高频坑 401 / 权限错误HF token 没给门控仓库读权限重新走一遍 login。优化不收敛放宽fmax0.1、步数提到 300或回头检查初始构型是否撞原子。吸附能跟文献差很多优先查参考能量是否与泛函一致、异常过滤是否漏网而不是怀疑模型。显存不够批量推理分批 pack或换回单结构逐批调用。想继续深入UMA 的架构细节MoLE 混合线性专家和五个任务嵌入的说明在 docs/core/uma.md完整教程在 docs/catalysts/examples_tutorials/。【免费下载链接】ocpFAIR Chemistrys library of machine learning methods for chemistry项目地址: https://gitcode.com/GitHub_Trending/oc/ocp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考