facebookresearch/fairchem

GitHub: facebookresearch/fairchem

Meta FAIR Chemistry 团队的机器学习化学计算库,提供覆盖催化、材料和分子领域的通用机器学习势函数模型与模拟能力。

Stars: 2195 | Forks: 485

![tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/6b/6b52945adbf8d9e421fe243515ae54cfbd3da263f16b1eabda37cdc0b797b8eb.svg) ![PyPI - Version](https://img.shields.io/pypi/v/fairchem-core) ![Static Badge](https://img.shields.io/badge/python-3.10%2B-blue) [![codecov](https://codecov.io/gh/facebookresearch/fairchem/graph/badge.svg)](https://codecov.io/gh/facebookresearch/fairchem) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15587498.svg)](https://doi.org/10.5281/zenodo.15587498) [![Open in GitHub Codespaces](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/420ddeb50c67e8a211b122a8a95dc6641446c7cd01f2984d6ef2c368c1c55c86.svg)](https://github.com/codespaces/new/facebookresearch/fairchem?quickstart=1)

# 由 FAIR Chemistry 团队开发的 `fairchem` `fairchem` 是 [FAIR](https://ai.meta.com/research/) Chemistry 针对材料科学和量子化学的数据、模型、演示及应用成果的集中式代码库。 ## 最新动态 2026 年 3 月 - UMA-1.2 发布!速度提升约 50%,在 Open Molecules 测试集上的准确率提高约 40%,并扩展了催化剂(氧化物和界面)、分子和聚合物的数据覆盖范围! 2025 年 10 月 - [查看我们无缝的多节点、多 GPU 和 LAMMPs 接口,以运行大规模动力学模拟!](#multi-gpu-inference-and-lammps) ## 阅读我们的最新发布文章! 阅读关于 [UMA 模型和 OMol25 数据集](https://ai.meta.com/blog/meta-fair-science-new-open-source-releases/)的发布资讯。 [![Meta FAIR Science Release](https://static.pigsec.cn/wp-content/uploads/repos/cas/96/962585ec5c8bf68a8671d579a8e276885483ec8291c1dd4257eb57aec52d4049.png)](https://ai.meta.com/blog/meta-fair-science-new-open-source-releases/?ref=shareable) ## 试用演示! 如果您想探索模型能力,请查看我们的 [教学演示](https://facebook-fairchem-uma-demo.hf.space/) [![Educational Demo](https://github.com/user-attachments/assets/7005d1bb-4459-403d-b299-d41fdd8c48ec)](https://facebook-fairchem-uma-demo.hf.space/) ## 安装 虽然不是强制要求,但我们强烈建议使用包管理器和虚拟环境(例如 [uv](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer))进行安装,它比独立的 pip 快得多,并且在解析依赖项方面表现更好。 使用 pip 安装 fairchem-core ``` pip install fairchem-core ``` 如果您想贡献代码或进行修改,请克隆此代码库并以可编辑模式(edit mode)安装 ``` git clone git@github.com:facebookresearch/fairchem.git pip install -e fairchem/packages/fairchem-core[dev] ``` ## 快速开始 使用预训练模型最简单的方法是通过 [ASE](https://wiki.fysik.dtu.dk/ase/) 的 `FAIRChemCalculator`。 通过为特定领域的预测选择合适的任务名称,单个 uma 模型即可广泛应用于化学和材料科学领域的各种应用。 ### 从预训练模型实例化计算器 请确保您拥有 Hugging Face 账号,已经申请了 [UMA 模型库](https://huggingface.co/facebook/UMA)的访问权限,并且已经使用访问令牌登录了 Hugging Face。 您可以使用以下命令来保存身份验证令牌(auth token), ``` huggingface-cli login ``` 模型通过其名称进行引用,以下是当前支持的模型: | 模型名称 | 描述 | |---|---| | uma-s-1p2 | UMA 小模型的最新版本,是 UMA 模型中速度最快的,同时在大多数基准测试中仍然保持 SOTA(6.6M 活跃参数 / 290M 总参数) | | uma-s-1p1 | UMA 小模型的早期版本,在大多数基准测试中仍然保持 SOTA(6.6M 活跃参数 / 150M 总参数) | | uma-m-1p1 | 各项指标中表现最优的 UMA 模型,但比 uma-s 更慢且占用更多内存(50M 活跃参数 / 1.4B 总参数) | ### 为您的应用设置任务并进行计算 - **oc20:** 用于催化 - **oc22:** 用于氧化物催化(仅限 1p2) - **oc25:** 用于(电)催化(仅限 1p2) - **omat:** 用于无机材料 - **omol:** 用于分子+聚合物 - **odac:** 用于 MOFs - **omc:** 用于分子晶体 #### 在催化表面上弛豫吸附物, ``` 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-1p2", device="cuda") calc = FAIRChemCalculator(predictor, task_name="oc20") # 将你的系统设置为 ASE atoms object slab = fcc100("Cu", (3, 3, 3), vacuum=8, periodic=True) adsorbate = molecule("CO") add_adsorbate(slab, adsorbate, 2.0, "bridge") slab.calc = calc # 设置 LBFGS dynamics object opt = LBFGS(slab) opt.run(0.05, 100) ``` #### 弛豫无机晶体, ``` from ase.build import bulk from ase.optimize import FIRE from ase.filters import FrechetCellFilter from fairchem.core import pretrained_mlip, FAIRChemCalculator predictor = pretrained_mlip.get_predict_unit("uma-s-1p2", device="cuda") calc = FAIRChemCalculator(predictor, task_name="omat") atoms = bulk("Fe") atoms.calc = calc opt = FIRE(FrechetCellFilter(atoms)) opt.run(0.05, 100) ``` #### 运行分子动力学 (MD) 注意:`pretrained_mlip.get_predict_unit()` 目前使用种子来设置 numpy RNG 的全局状态。为了使以下代码的不同运行产生不同的轨迹,我们必须设置一个随机种子,如下所示: ``` from ase import units from ase.io import Trajectory from ase.md.langevin import Langevin from ase.build import molecule from fairchem.core import pretrained_mlip, FAIRChemCalculator seed = np.random.randint(0, np.iinfo(np.int32).max, dtype=int) predictor = pretrained_mlip.get_predict_unit("uma-s-1p2", device="cuda", seed=seed) calc = FAIRChemCalculator(predictor, task_name="omol") atoms = molecule("H2O") atoms.calc = calc dyn = Langevin( atoms, timestep=0.1 * units.fs, temperature_K=400, friction=0.001 / units.fs, ) trajectory = Trajectory("my_md.traj", "w", atoms) dyn.attach(trajectory.write, interval=1) dyn.run(steps=1000) ``` #### 计算自旋能隙, ``` from ase.build import molecule from fairchem.core import pretrained_mlip, FAIRChemCalculator predictor = pretrained_mlip.get_predict_unit("uma-s-1p2", device="cuda") # singlet CH2 singlet = molecule("CH2_s1A1d") singlet.info.update({"spin": 1, "charge": 0}) singlet.calc = FAIRChemCalculator(predictor, task_name="omol") # triplet CH2 triplet = molecule("CH2_s3B1d") triplet.info.update({"spin": 3, "charge": 0}) triplet.calc = FAIRChemCalculator(predictor, task_name="omol") triplet.get_potential_energy() - singlet.get_potential_energy() ``` #### 多 GPU 推理与 LAMMPs 如果您有多个 GPU(或多个节点),我们通过一个单一的标志(workers=N)在后台为您处理所有的并行计算。例如,您可以运行以下 8000 个原子的 MD 模拟,达到约 10 qps(8x H100 GPU),比单 GPU 推理快约 10 倍!目前的基准测试表明,在真实的 MD 场景中,我们可以使用 10 万+ 原子系统以约 1 ns/天的速度运行 uma-s(更多相关信息即将推出!)。这也兼容 LAMMPs 来执行大规模的 MD。有关更多详细信息,请参阅我们的[文档](https://fair-chem.github.io/core/common_tasks/summary.html)。这需要安装 Ray 包,并随 extras 捆绑包一起提供。 ``` pip install fairchem-core[extras] ``` ``` from ase import units from ase.md.langevin import Langevin from fairchem.core import pretrained_mlip, FAIRChemCalculator import time from fairchem.core.datasets.common_structures import get_fcc_crystal_by_num_atoms seed = np.random.randint(0, np.iinfo(np.int32).max, dtype=int) predictor = pretrained_mlip.get_predict_unit( "uma-s-1p2", inference_settings="turbo", device="cuda", workers=8, seed=seed, ) calc = FAIRChemCalculator(predictor, task_name="omat") atoms = get_fcc_crystal_by_num_atoms(8000) atoms.calc = calc dyn = Langevin( atoms, timestep=0.1 * units.fs, temperature_K=400, friction=0.001 / units.fs, ) # warmup 10 步 dyn.run(steps=10) start_time = time.time() dyn.attach( lambda: print( f"Step: {dyn.get_number_of_steps()}, E: {atoms.get_potential_energy():.3f} eV, " f"QPS: {dyn.get_number_of_steps()/(time.time()-start_time):.2f}" ), interval=1, ) dyn.run(steps=1000) ``` ### 许可证 `fairchem` 采用 [MIT 许可证](LICENSE.md)。模型/checkpoint 的许可证因应用领域而异。
标签:Apex, Vectored Exception Handling, 人工智能, 凭据扫描, 化学信息学, 机器学习, 材料科学, 深度学习, 用户模式Hook绕过, 逆向工具, 量子化学