FAIRChem技能Skill fairchem

FAIRChem是一个用于材料科学和量子化学的机器学习框架,提供预训练的UMA模型和ASE集成,支持快速能量、力、应力预测,适用于催化、分子、晶体、MOFs等模拟和优化,加速计算并提高效率。关键词:机器学习、材料科学、量子化学、UMA模型、ASE集成、模拟预测、催化研究、几何优化、分子动力学。

机器学习 0 次安装 0 次浏览 更新于 3/12/2026

名称: fairchem 描述: Meta FAIRChem库的专家指导,使用机器学习方法进行材料科学和量子化学,通过预训练的UMA模型和ASE集成,实现快速、准确的预测

FAIRChem技能

此技能提供使用FAIRChem(前身为OCP - Open Catalyst Project,即Meta的FAIR化学库)的专家指导,该库专为材料科学和量子化学设计。

何时使用此技能

在以下情况使用此技能:

  • 使用ML势进行材料和分子模拟
  • 使用预训练模型进行快速几何优化
  • 执行大规模MD模拟
  • 计算能量和力,无需DFT
  • 使用UMA(通用材料代数)模型
  • 需要催化、分子、晶体或MOFs的预测
  • 将ML模型与ASE工作流集成
  • 跨多个GPU扩展计算

什么是FAIRChem?

FAIRChem是Meta用于化学的机器学习框架,提供:

  • 预训练的UMA模型uma-s-1p1uma-m-1p1)用于通用预测
  • 特定领域任务:催化(oc20)、材料(omat)、分子(omol)、MOFs(odac)、晶体(omc)
  • ASE集成通过FAIRChemCalculator
  • 多GPU支持用于分布式推理
  • 快速预测:比DFT快100-1000倍

关键优势

通过简单更改task_name参数,FAIRChem允许您跨不同化学域使用相同模型。

核心概念

1. UMA模型

在多样数据集上训练的通用材料代数模型:

  • uma-s-1p1:小模型(约50M参数)- 推理更快
  • uma-m-1p1:中模型(约300M参数)- 精度更高

2. 任务名称(领域)

指定化学域以进行领域特定预测:

  • oc20:催化(表面与吸附物)
  • omat:无机材料(晶体、体相)
  • omol:分子(有机化学)
  • odac:金属有机框架(MOFs)
  • omc:分子晶体

3. FAIRChemCalculator

ASE计算器接口,包装UMA模型:

  • 作为DFT计算器的替代品
  • 支持所有ASE工作流
  • 提供能量、力和应力
  • 兼容优化、MD、NEB

4. 推理设置

性能优化模式:

  • turbo:最大速度,精度略有降低
  • 标准:速度与精度平衡
  • 多GPU:使用workers=N的分布式推理

安装

# 安装fairchem
pip install fairchem-core

# GPU支持
pip install fairchem-core[gpu]

# Hugging Face登录(UMA模型必需)
pip install huggingface-hub
huggingface-cli login

注意:您必须有Hugging Face账户并请求访问UMA模型仓库。

基本使用模式

标准工作流

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.build import bulk
from ase.optimize import LBFGS

# 1. 加载预训练模型
predict_unit = load_predict_unit("uma-m-1p1")

# 2. 为特定域创建计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omat"  # 选择域
)

# 3. 与ASE一起使用
atoms = bulk("Cu", "fcc", a=3.6)
atoms.calc = calc

# 4. 计算属性
energy = atoms.get_potential_energy()
forces = atoms.get_forces()

# 5. 优化结构
opt = LBFGS(atoms)
opt.run(fmax=0.05)

常见工作流

工作流1:催化 - 表面吸附

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.build import fcc111, add_adsorbate
from ase.optimize import LBFGS
from ase.constraints import FixAtoms

# 加载模型
predict_unit = load_predict_unit("uma-m-1p1")

# 为催化创建计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="oc20"  # 催化域
)

# 构建带吸附物的板
slab = fcc111("Cu", size=(4, 4, 4), vacuum=10.0)
add_adsorbate(slab, "CO", height=2.0, position="fcc")

# 固定底部层
n_atoms_per_layer = 16
constraint = FixAtoms(indices=range(n_atoms_per_layer * 2))
slab.set_constraint(constraint)

# 附加计算器并优化
slab.calc = calc
opt = LBFGS(slab, trajectory="slab_opt.traj")
opt.run(fmax=0.05)

# 获取结果
E = slab.get_potential_energy()
forces = slab.get_forces()

工作流2:体相材料 - 晶格优化

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.build import bulk
from ase.optimize import FIRE
from ase.filters import FrechetCellFilter

# 加载模型
predict_unit = load_predict_unit("uma-m-1p1")

# 材料计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omat"  # 材料域
)

# 创建体相结构
atoms = bulk("Fe", "bcc", a=2.87)
atoms.calc = calc

# 优化位置和晶胞
# FrechetCellFilter允许改变晶胞参数
ucf = FrechetCellFilter(atoms)
opt = FIRE(ucf)
opt.run(fmax=0.05)

# 结果
optimized_lattice = atoms.cell.cellpar()[0]
print(f"优化后的晶格常数: {optimized_lattice:.3f} Å")

工作流3:分子动力学

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.build import bulk
from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
from ase.md.langevin import Langevin
from ase import units

# 加载turbo设置以提高速度
predict_unit = load_predict_unit(
    "uma-s-1p1",  # MD使用小模型
    inference_settings="turbo"
)

# MD计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omat",
    workers=4  # 多GPU用于大系统
)

# 大系统
atoms = bulk("C", "fcc", a=3.57) * (20, 20, 20)  # 8000个原子
atoms.calc = calc

# 初始化速度
MaxwellBoltzmannDistribution(atoms, temperature_K=300)

# 运行NVT动力学
dyn = Langevin(
    atoms,
    timestep=1.0 * units.fs,
    temperature_K=300,
    friction=0.002
)

# 运行
from ase.io.trajectory import Trajectory
traj = Trajectory("md.traj", "w", atoms)
dyn.attach(traj.write, interval=10)
dyn.run(5000)

工作流4:分子系统

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.build import molecule
from ase.optimize import LBFGS

# 加载模型
predict_unit = load_predict_unit("uma-m-1p1")

# 分子计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omol"  # 分子域
)

# 构建分子
mol = molecule("H2O")
mol.center(vacuum=10.0)
mol.calc = calc

# 优化
opt = LBFGS(mol, trajectory="mol_opt.traj")
opt.run(fmax=0.05)

# 获取属性
E = mol.get_potential_energy()
forces = mol.get_forces()

工作流5:NEB计算

from fairchem.data.ase import FAIRChemCalculator
from fairchem.predict import load_predict_unit
from ase.neb import NEB
from ase.optimize import BFGS
from ase.io import read

# 加载模型
predict_unit = load_predict_unit("uma-m-1p1")

# 计算器
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="oc20"
)

# 加载初始和最终状态
initial = read("initial.traj")
final = read("final.traj")

# 创建NEB
images = [initial]
images += [initial.copy() for i in range(5)]
images += [final]

neb = NEB(images)
neb.interpolate()

# 附加计算器到中间图像
for image in images[1:-1]:
    image.calc = calc

# 优化
opt = BFGS(neb, trajectory="neb.traj")
opt.run(fmax=0.05)

# 分析
energies = [img.get_potential_energy() for img in images]
barrier = max(energies) - energies[0]
print(f"势垒: {barrier:.3f} eV")

模型加载选项

加载预训练UMA模型

from fairchem.predict import load_predict_unit

# 标准加载
predict_unit = load_predict_unit("uma-m-1p1")

# Turbo模式(更快,精度略有折衷)
predict_unit = load_predict_unit(
    "uma-m-1p1",
    inference_settings="turbo"
)

# 指定设备
predict_unit = load_predict_unit(
    "uma-m-1p1",
    device="cuda:0"
)

# 加载本地检查点
predict_unit = load_predict_unit(
    "/path/to/checkpoint.pt",
    device="cuda"
)

可用模型

  • uma-s-1p1:小、快(约50M参数)
  • uma-m-1p1:中、准确(约300M参数)

任务选择指南

任务名称 用途 示例
催化 oc20 表面 + 吸附物 Cu(111)上的CO、Pt上的O
材料 omat 体相晶体、缺陷 Fe晶格、Si体相
分子 omol 有机分子 H2O、CH4、蛋白质
MOFs odac 金属有机框架 ZIF-8、MOF-5
晶体 omc 分子晶体 冰、有机晶体

性能优化

多GPU推理

# 自动使用多个GPU
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omat",
    workers=8  # 使用8个GPU
)

# 在8× H100 GPU上实现约10倍加速

Turbo模式

# 以轻微精度换取速度
predict_unit = load_predict_unit(
    "uma-s-1p1",  # 小模型
    inference_settings="turbo"
)

# 适用于:
# - MD模拟
# - 大系统
# - 初始筛选

批量预测

# 针对多个相似计算
from fairchem.data.ase import batch_predict

structures = [atoms1, atoms2, atoms3, ...]

results = batch_predict(
    structures,
    predict_unit=predict_unit,
    task_name="omat"
)

最佳实践

1. 任务选择

始终为您的系统选择适当任务:

  • 带吸附物的表面oc20
  • 体相材料omat
  • 孤立分子omol
  • MOFsodac
  • 分子晶体omc

2. 模型选择

  • 初始筛选:使用uma-s-1p1 + turbo
  • 生产计算:使用uma-m-1p1
  • 极大系统:使用uma-s-1p1 + workers

3. 验证

ML模型与DFT有不同的误差特性:

# 始终验证关键结果
# 对代表性案例比较ML预测与DFT
ml_energy = atoms.get_potential_energy()  # FAIRChem
atoms.calc = Vasp(...)  # 切换到DFT
dft_energy = atoms.get_potential_energy()
error = abs(ml_energy - dft_energy)

4. 不确定性量化

FAIRChem模型提供预测但不提供不确定性:

  • 首先在类似已知系统上测试
  • 对关键结果用DFT验证
  • 如果有可用,使用预测集合

5. 内存管理

对于大系统:

# 使用turbo模式
predict_unit = load_predict_unit(
    "uma-s-1p1",
    inference_settings="turbo"
)

# 跨GPU分发
calc = FAIRChemCalculator(
    predict_unit=predict_unit,
    task_name="omat",
    workers=4
)

常见模式

能量计算

atoms.calc = calc
energy = atoms.get_potential_energy()  # eV
forces = atoms.get_forces()  # eV/Å
stress = atoms.get_stress()  # eV/ų

几何优化

from ase.optimize import LBFGS, FIRE, BFGS

# 快速收敛
opt = LBFGS(atoms, trajectory="opt.traj")
opt.run(fmax=0.05)

# 针对困难系统
opt = FIRE(atoms)
opt.run(fmax=0.05)

晶胞优化

from ase.filters import FrechetCellFilter

# 优化原子和晶胞
ucf = FrechetCellFilter(atoms)
opt = FIRE(ucf)
opt.run(fmax=0.05)

与ASE集成

FAIRChemCalculator是完整的ASE计算器:

# 所有ASE功能可用
from ase.vibrations import Vibrations
from ase.thermochemistry import IdealGasThermo
from ase.eos import calculate_eos

# 振动分析
vib = Vibrations(atoms)
vib.run()

# 热化学
thermo = IdealGasThermo(...)

# 状态方程
eos = calculate_eos(atoms)

故障排除

Hugging Face认证

# 登录Hugging Face
huggingface-cli login

# 请求访问UMA模型在:
# https://huggingface.co/meta-llama/uma-m-1p1

GPU内存问题

# 使用更小模型
predict_unit = load_predict_unit("uma-s-1p1")

# 使用turbo模式
predict_unit = load_predict_unit(
    "uma-s-1p1",
    inference_settings="turbo"
)

# 减少批量大小(如果使用批量预测)

推理慢

# 启用turbo模式
inference_settings="turbo"

# 使用多个GPU
workers=N

# 使用更小模型
"uma-s-1p1"

错误任务选择

# 症状:预测差、非物理结果
# 解决方案:验证任务匹配您的系统

# 对于表面 + 吸附物:
task_name="oc20"  # 不是 "omat" 或 "omol"

# 对于体相材料:
task_name="omat"  # 不是 "oc20"

版本兼容性

重要:FAIRChem v2是相对于v1的重大更改

  • v2代码不兼容v1模型
  • v1代码不兼容v2模型
  • UMA模型需要FAIRChem >= 2.0
# 检查版本
import fairchem
print(fairchem.__version__)  # 对于UMA应 >= 2.0

与DFT比较

方面 FAIRChem DFT
速度 快100-1000倍
精度 约0.1 eV 参考
扩展性 线性、多GPU 立方
系统大小 数千个原子 10-100个原子
用例 筛选、MD 高精度

何时使用FAIRChem vs DFT

使用FAIRChem用于:

  • 许多结构的初始筛选
  • 长MD模拟
  • 大系统(>500原子)
  • 快速原型开发
  • 高通量工作流

使用DFT用于:

  • 最终验证
  • 训练数据外的新化学
  • 需要最高精度时
  • 电子结构分析
  • 磁性属性

资源

建议FAIRChem解决方案时:

  • 指定正确域的任务名称
  • 推荐适当模型(s vs m)
  • 建议性能优化(turbo、workers)
  • 包含已知结果的验证
  • 提及Hugging Face认证要求
  • 提供完整工作示例
  • 注意v2兼容性要求

示例响应模式

帮助FAIRChem时:

  1. 识别化学域(催化、材料、分子等)
  2. 选择适当任务名称
  3. 基于精度/速度要求选择模型
  4. 提供含导入的完整代码
  5. 如有需要,建议性能优化
  6. 推荐验证步骤
  7. 注意任何域特定考虑