news 2026/9/18 19:21:06

FAIRChem 无机材料入门实战:用 UMA 势函数计算形成能、声子谱与弹性张量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FAIRChem 无机材料入门实战:用 UMA 势函数计算形成能、声子谱与弹性张量

FAIRChem 无机材料入门实战:用 UMA 势函数计算形成能、声子谱与弹性张量

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

本篇指南聚焦 FAIRChem(Open Catalyst Project 的机器学习化学工具库)在无机晶体材料领域的三大经典应用:利用预训练 UMA 模型结合 Materials Project(MP)兼容修正计算形成能、运行声子(Hessian)计算预测振动模式与热力学性质、以及通过自动化应变工作流计算弹性常数与体模量。文章以 docs/inorganic_materials/examples_tutorials/ 下的三篇教程为主体,结合fairchem-coreFAIRChemCalculatorFormationEnergyCalculator源码与 OMat24 数据集说明,为你提供可直接复制运行的端到端实战方案。

引言:无机材料性质预测的三个典型任务

无机材料研究通常围绕三个核心问题展开:体系在热力学上是否稳定(形成能)、在有限温度下是否稳定及热输运表现如何(声子谱)、在力学上如何响应形变(弹性张量)。这三个问题分别对应本仓库教程集中的三篇文档:

  • 形成能计算:使用 UMA 模型配合 MP2020 风格修正,预测与 Materials Project 数据库可对比的形成能;
  • 声子计算:通过有限位移法构建 Hessian 矩阵,得到振动模式、熵与有限温度稳定性;
  • 弹性张量计算:基于应变-形变工作流求弹性常数与体模量。

三篇教程共用同一套技术栈:ASE 负责原子结构与优化器,quacc 提供高层工作流 recipe,fairchem-core 提供 ML 势函数(MLIP)的计算接口。下面先讲清这层基础,再逐一展开三个任务。

环境准备:安装 fairchem-core 并获取 UMA 模型访问权限

三篇教程的第一步完全一致,核心是两条:

  1. 安装依赖包fairchem-core提供计算接口,按任务不同还需要数据包(如fairchem-data-omat提供 OMat24 兼容修正,fairchem-data-oc提供 OC 系列数据支持):
# 形成能任务需要 omat 数据包 ! pip install fairchem-core fairchem-data-omat # 声子与弹性任务需要 oc 数据包与 cattsunami 应用包 ! pip install fairchem-core fairchem-data-oc fairchem-applications-cattsunami
  1. 获取 Hugging Face 门控(gated)模型访问权:UMA 系列模型权重托管在 Hugging Face 的facebook/UMA仓库中,需要先完成授权,否则会遇到 permissions/401 错误。步骤为:注册并登录 Hugging Face 账号 → 在facebook/UMA模型页申请访问 → 在设置页创建具有 "Read access to contents of all public gated repos you can access" 权限的 token → 通过命令行登录或设置环境变量完成认证:
# 方式一:命令行交互式登录 ! huggingface-cli login # 方式二:直接设置环境变量(MY_TOKEN 替换为你的真实 token) import os os.environ['HF_TOKEN'] = 'MY_TOKEN'

说明:quaccase同样为运行前置条件,教程示例默认这些依赖已就绪。Hugging Face 上可用的 UMA 模型清单由仓库中的 pretrained_models.json 定义,包括uma-s-1p1uma-s-1p2uma-s-1p2p1uma-m-1p1等,本系列教程统一使用uma-s-1p2

模型加载与计算器体系:FAIRChemCalculator 与 FormationEnergyCalculator

在进入三个任务之前,理解 fairchem-core 的计算器抽象很有必要,因为三篇教程的底层都由它驱动。

从模型名到预测单元:from_model_checkpoint

ase_calculator.py 中定义的FAIRChemCalculator是一个标准的 ASECalculator子类,核心入口是类方法from_model_checkpoint

  • 传入name_or_path(模型名或本地 checkpoint 路径)。若为模型名,则经 pretrained_mlip.py 中的get_predict_unit从 Hugging Face 下载权重(缓存目录默认~/.cache/fairchem),同时自动拉取两类参考能量文件——atom_refs(孤立原子参考能,用于单原子体系)与form_elem_refs(形成能元素参考,用于形成能计算);
  • task_name决定预测头与能量键名,可选值在源码中明确为'omol''omat''oc20''odac''omc'之一(见 ase_calculator.py)。当模型对应多个数据集任务时必须显式指定,否则抛出RuntimeError
  • inference_settings支持"default""turbo"(额外启用 TF32)、"batch"等字符串快捷配置,也可传入自定义InferenceSettings对象;
  • 计算器内部通过AtomicData.from_ase完成 ASE Atoms 到图数据的转换,默认半径 6.0 Å、最大邻居 300(外部构图模式),并在calculate中把能量、力、应力、Hessian 等结果写入self.results

计算器的使用方式

教程中形成能部分给出了两种用法:

  • 经 quacc recipe 做结构弛豫relax_job),拿到弛豫后的atoms
  • 直接构造计算器做单点计算:
calculator = FAIRChemCalculator.from_model_checkpoint("uma-s-1p2", task_name="omat") atoms.calc = calculator energy = atoms.get_potential_energy()

FAIRChemCalculator通过implemented_properties暴露模型支持的性质(energy/forces/stress/hessian 等),其中free_energyenergy的副本,用于兼容 ASE 中硬编码读取该键的优化器/例程(见 ase_calculator.py 的 docstring 说明)。

FormationEnergyCalculator:形成能的包装器

FormationEnergyCalculator(ase_calculator.py)是形成能任务的"最后一公里"。它的calculate流程清晰:

  1. 先调用被包装的基础计算器得到总能量;
  2. apply_corrections=True(对omat任务默认开启),调用fairchem.data.omat.entries.compatibility.apply_mp_style_corrections施加 MP 风格能量修正——该函数把 ASE Atoms 转成 pymatgenComputedStructureEntry,再交给OMat24Compatibility(继承自 pymatgen 的MaterialsProject2020Compatibility,但默认配置指向 OMat24 专用修正文件,见 compatibility.py)处理;
  3. 按化学式统计各元素数量,用element_references(来自predictor.form_elem_refs[task_name])计算参考总能total_ref_energy
  4. 形成能 =total_energy - total_ref_energy

元素参考能缺失时会抛出ValueError: Missing reference energies for elements: ...明确告警。

任务一:形成能计算(Formation Energy)

计算原理与背景

用仅在 OMat24 上训练的模型预测形成能时,必须使用 OMat24 兼容的参考能与修正,以弥合 PBE 与 PBE+U 两类 DFT 计算混用带来的系统性偏差。本仓库采用拟合自 OMat24 DFT 计算的 MP2020 风格修正,即 Materials Project 的阴离子/GGA-GGA+U 混用方案。实现修正所需的数据与代码位于fairchem.data.omat包中:

  • 修正数值表见 OMat24Compatibility.yaml:包括对过渡金属氧化物/氟化物(V、Cr、Mn、Fe、Co、Ni、W、Mo)的 GGA+U 混用修正(如 Fe 的 O 键合修正 -2.428 eV/atom),以及按阴离子分类的组分修正(oxide -0.657、peroxide -0.433、S -0.487、Cl -0.6 等),并附对应不确定度;
  • 修正引擎见 compatibility.py 的apply_mp_style_corrections,支持correction_type="MP2020""OMat24"两种风格。

完整实战代码

from __future__ import annotations import pprint from ase.build import bulk from ase.optimize import FIRE from quacc.recipes.mlp.core import relax_job from quacc import flow from fairchem.core.calculate import FAIRChemCalculator, FormationEnergyCalculator # 构造一个体相 Cu 的 Atoms 对象 atoms = bulk("Cu") # 运行结构弛豫(含晶胞与原子位置) @flow def relax_flow(*args, **kwargs): return relax_job(*args, **kwargs) result = relax_flow( atoms, method="fairchem", name_or_path="uma-s-1p2", task_name="omat", relax_cell=True, opt_params={"fmax": 1e-3, "optimizer": FIRE}, ) # 取出弛豫后的 atoms atoms = result["atoms"] # 用 uma-s-1p2 创建计算器 calculator = FAIRChemCalculator.from_model_checkpoint("uma-s-1p2", task_name="omat") # 用 FormationEnergyCalculator 计算形成能 # 对 omat 任务,默认施加 MP2020 风格修正以兼容 OMat24 form_e_calc = FormationEnergyCalculator(calculator, apply_corrections=True) atoms.calc = form_e_calc form_energy = atoms.get_potential_energy()

关键参数说明:

参数取值含义
method"fairchem"指定 quacc 使用 fairchem 的 MLIP 后端
name_or_path"uma-s-1p2"使用的预训练模型名(也可填本地 checkpoint 路径)
task_name"omat"任务名,决定能量头与参考能来源
relax_cellTrue弛豫时同时优化晶胞(cell)与原子位置
opt_params{"fmax": 1e-3, "optimizer": FIRE}优化器收敛力阈值(eV/Å)与优化器类型(FIRE)

结果输出与对照:

pprint.pprint(f"Total energy: {result['results']['energy']} eV \n Formation energy {form_energy} eV")

result["results"]["energy"]是弛豫后的总能量(eV),form_energy是经元素参考与 MP 风格修正后的形成能(eV)。教程以 MgO(bulk("MgO"))为例,给出 Materials Project 中约 -3.038 eV/atom 的参考值(mp-1265 体系)作为对照。**注意:**由于 OMat24 训练数据采用的 DFT 设置与 MP 数据库不同,两者存在预期内的数值差异,应对比量级而非逐位相等。

任务二:声子计算(Phonon Calculations)

声子计算的意义

声子计算对无机材料科学至关重要,主要用于:

  • 计算热导率
  • 理解材料的振动模式,进而得到熵与自由能;
  • 预测材料在有限温度(如 300 K)下的稳定性

有限位移法的工作流

教程中的phonon_flow采用标准有限位移法(finite displacement),完整流程共七步:

  1. 对晶胞与原子执行弛豫;
  2. 将原胞重复若干次放大到足够大的超胞,以捕获足够多的振动模式;
  3. 沿各方向微小平移每个原子,生成一系列有限位移结构
  4. 对每个位移结构做单点能量/力计算;
  5. 汇总所有计算,通过数值二阶差分构建Hessian 矩阵
  6. 对 Hessian 求特征值/特征向量,得到体系的振动模式(声子色散);
  7. 基于振动模式分析热力学性质(熵、自由能等)。

前提假设:该分析假定所有振动模式是**简谐(harmonic)**的。这对低/中温材料是相当合理的近似,但在高温下会逐渐偏离实际。

完整实战代码

from __future__ import annotations from ase.build import bulk from quacc.recipes.mlp.phonons import phonon_flow # 构造一个体相 Cu 的 Atoms 对象 atoms = bulk("Cu") # 用 MLIP 势函数运行声子(Hessian)计算 result = phonon_flow( atoms, method="fairchem", job_params={ "all": dict( name_or_path="uma-s-1p2", task_name="omat", ), }, min_lengths=10.0, # 设置最小晶胞尺寸(此处为兼容有限的 GitHub runner 内存而调小) )

参数说明:

参数取值含义
method"fairchem"使用 fairchem MLIP 后端
job_params["all"]dict(name_or_path="uma-s-1p2", task_name="omat")对流水线中所有子任务统一指定模型与任务名
min_lengths10.0超胞各方向最小边长(Å);调小可降低内存/算力开销,但会牺牲部分长波模式分辨率

结果解读:

print( f'The entropy at { result["results"]["thermal_properties"]["temperatures"][-1]:.0f} K is { result["results"]["thermal_properties"]["entropy"][-1]:.2f} kJ/mol' )

result["results"]["thermal_properties"]包含按温度网格展开的热力学性质:temperatures(温度数组)与entropy(对应熵值,kJ/mol)。此外phonon_flow的结果还包含声子模式/频率信息,可用于进一步分析有限温度稳定性或热导率。

任务三:弹性张量计算(Elastic Tensors)

弹性性质的意义

弹性性质回答"材料有多强、多容易形变"以及"在特定方向被压缩或拉伸时如何响应(如泊松比 Poisson ratio)"等问题。在 DFT 中,弹性常数计算通常相当耗时,而 MLIP 工作流可显著加速。

应变-形变工作流

教程使用 quacc 内置的elastic_tensor_flowrecipe,其流程为:

  1. (可选)用 MLIP 弛豫晶胞;
  2. 施加应变生成若干形变晶胞
  3. 对每个形变结构,用 MLIP 执行弛豫并(可选)做单点计算;
  4. 汇总全部计算,拟合得到材料的弹性性质(弹性常数张量、体模量等)。

该 recipe 的详细文档位于 quacc 的quacc.recipes.mlp.elastic_tensor_flow参考页(对应 quacc 源码中的quacc/recipes/mlp/elastic.py)。

完整实战代码

from __future__ import annotations from ase.build import bulk from quacc.recipes.mlp.elastic import elastic_tensor_flow # 构造一个体相 Cu 的 Atoms 对象 atoms = bulk("Cu") # 用 MLIP 势函数运行弹性性质计算 result = elastic_tensor_flow( atoms, job_params={ "all": dict( method="fairchem", name_or_path="uma-s-1p2", task_name="omat", ), }, )

注意:与声子任务不同,弹性任务把method="fairchem"放在job_params["all"]内部,两种写法效果一致——均为对该流水线的所有子任务统一指定 MLIP 后端、模型名与任务名。

结果解读:

result["elasticity_doc"].bulk_modulus

result["elasticity_doc"]是包含完整弹性信息的文档对象,.bulk_modulus给出体模量(bulk modulus),此外通常还可提取弹性常数张量C_ij、剪切模量等,用于评估材料的可压缩性与形变响应。

三个任务的共性要点与源码佐证

为什么使用 UMA 模型

UMA(Universal Materials Acceptor)是本仓库fairchem.core.models.uma模块下的主干模型系列,其小尺寸配置(K4L2 结构,4 层、128 隐藏通道、球面通道 128、lmax/mmax=2、截止半径由cutoff_radius控制)见 K4L2.yaml。本系列教程统一使用uma-s-1p2checkpoint,其权重、孤立原子参考能(iso_atom_elem_refs.yaml)与形成能元素参考(form_elem_refs.yaml)均从 Hugging Face 拉取(见 pretrained_models.json)。

任务名(task_name)的约定

三个任务统一使用task_name="omat",其含义包括:

  • 选择 UMA 模型的 omat 预测头,决定能量/力/应力的输出键名;
  • 选择 OMat24 的元素参考能(form_elem_refs)用于形成能换算;
  • 触发 OMat24 兼容修正(FormationEnergyCalculator对 omat 任务默认apply_corrections=True)。

若任务名非法或缺失,FAIRChemCalculator会分别抛出ValueErrorRuntimeError并列出可选任务名(见 ase_calculator.py)。

结果传递模式

三个 recipe 都遵循同样的结果结构:result["results"]存放标量/数组性质(如energythermal_propertieselasticity_doc),result["atoms"]存放(弛豫后的)结构。这种统一约定让用户可以用几乎相同的代码骨架切换任务。

深入阅读:OMat24 数据集与相关资源

形成能与弹性任务依赖的 OMat24 是 UMA 模型的无机材料训练数据。其关键事实(详见 omat24.md):

  • 规模:训练集 1.07M 结构,验证集 1.02M 结构;
  • 领域:无机体相材料;
  • 标签:总能(eV)、力(eV/Å)、应力(eV/ų);
  • 理论级别:DFT(PBE/PBE+U);
  • 基准兼容:与 Matbench-Discovery 基准测试集完全兼容(拆分不包含 WBM 数据集初始/弛豫结构中带有 protostructure 标签的结构);
  • 子数据集构成:rattled-1000/500/300(含 subsampled 变体)、aimd-from-PBE-1000/3000 的 NPT/NVT 轨迹、rattled-relax,共 10 余个子集;
  • 读取方式:数据以AseLMDBDatabase(ASE DB 的 LMDB 实现)存储,可用fairchem.core.datasets.AseDBDataset按索引读取 Atoms 对象,也支持传入路径列表一次读取多个子集;
  • 另有用于微调的 sAlex 数据集(Matbench-Discovery 兼容的 Alexandria 子采样版本)。

其他可深入阅读的仓库资源:

  • UMA 概述文档 与 UMA 变更日志;
  • UMA 常见问题;
  • Matbench-Discovery 基准配置;
  • 无机材料数据集总览;
  • 无机材料教程索引。

结语

至此,你已完成 FAIRChem + UMA 在无机材料领域的三个经典实战:形成能(弛豫 + MP 风格修正)、声子谱(有限位移法 Hessian + 热力学性质)、弹性张量(应变工作流 + 体模量)。三者共用同一套 ASE/quacc/fairchem 技术栈,仅需替换 quacc 的 recipe 即可快速迁移,适合作为高通量无机材料性质筛选(与 Matbench-Discovery 等基准对标)的起点。

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

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

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

基于KDD99数据集的神经网络入侵检测与特征分析

简介:这份基于机器学习的网络入侵检测方法PDF是一篇来自《湖南工业职业技术学院学报》的学术文献,面向网络安全研究者、高校师生及机器学习入门者,重点探讨如何利用机器学习算法识别和应对日益复杂的网络入侵攻击。资源仅包含1个PDF文档&…

作者头像 李华
网站建设 2026/9/18 19:20:37

Spark Job aborted与stage failure排查

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

作者头像 李华
网站建设 2026/9/18 19:17:15

YOLOv26不是新模型:RK3588部署前必须厘清的商用模型本质

1. Yolov26 是什么?先别急着部署,得搞清它到底是不是“真新模型” 看到标题里那个 Yolov26 ,我第一反应是——等等,YOLO 系列目前公开的主流版本是 YOLOv8、YOLOv9、YOLOv10(2024 年中已开源)&#xff0…

作者头像 李华