Skip to main content

具有三体相互作用的材料图

项目描述

GitHub 许可证 掉毛 测试 下载

M3G网络

M3GNet 是一种新的材料图神经网络架构,它结合了三体交互。与之前的材料图实现(例如MEGNet )的一个关键区别是添加了原子的坐标和晶体中的 3×3 晶格矩阵,这是通过自微分获得诸如力和应力等张量所必需的。

作为一个框架,M3GNet 有多种应用,包括:

  • 原子间潜能开发。使用相同的训练数据,M3GNet 的性能类似于最先进的机器学习原子间势 (ML-IAP)。然而,图形表示的一个关键特征是它可以灵活地扩展到不同的化学空间。M3GNet 的一项关键成就是开发了一种 通用 IAP ,该 IAP 可以通过在材料项目中执行的松弛训练来在整个元素周期表中工作。
  • 属性预测的替代模型。与之前的 MEGNet 架构一样,M3GNet 可用于开发用于属性预测的代理模型,在许多情况下实现比其他最先进的 ML 模型更好或相似的精度。

有关详细的性能基准,请参阅参考部分中的出版物。API 文档可通过Github Page获得。

目录

系统要求

使用预训练模型的推理可以在任何标准计算机上运行。对于模型训练,使用水晶训练数据的批量大小为 32 的 GPU 内存需要 > 18 Gb。在我们的工作中,我们使用单个 RTX 3090 GPU 进行模型训练。

安装

M3GNet 可以通过 pip 安装:

pip install m3gnet

也可以直接从 Github 下载源码,从源码安装。

苹果硅安装

Apple Silicon(M1、M1 Pro、M1 Max、M1 Ultra)拥有极其强大的ML能力,但安装tensorflow等依赖需要特殊步骤。以下是推荐的安装步骤。

  1. 确保您已经安装了 XCode 和 CLI。

  2. 安装 Miniconda 或 Anaconda。

  3. 创建 Python 3.9 环境。

    conda create --name m3gnet python=3.9
    conda activate m3gnet
    
  4. 首先为 Apple Silicon 安装 tensorflow 及其依赖项。

    conda install -c apple tensorflow-deps
    pip install tensorflow-macos
    
  5. 如果您愿意,可以安装tensorflow-metal,这有助于加快培训速度。如果您遇到奇怪的 tensorflow 错误,您应该tensorflow-metal先卸载并查看它是否修复了错误。

    pip install tensorflow-metal
    
  6. 安装 m3gnet 但忽略依赖项(否则,pip 将寻找 tensorflow)。

    pip install --no-deps m3gnet
    
  7. 手动安装 pymatgen 等其他依赖项。

    pip install protobuf==3.20.0 pymatgen ase cython
    
  8. 完成后,您可以尝试运行pytest m3gnet以查看所有测试是否通过。

更改日志

查看更改日志

用法

结构松弛

自 2012 年以来,已使用来自 Materials Project 弛豫的数据开发了用于元素周期表的 M3Gnet 通用势。该通用势可用于执行任意晶体的结构弛豫,如下所示。

import warnings

from m3gnet.models import Relaxer
from pymatgen.core import Lattice, Structure

for category in (UserWarning, DeprecationWarning):
    warnings.filterwarnings("ignore", category=category, module="tensorflow")

# Init a Mo structure with stretched lattice (DFT lattice constant ~ 3.168)
mo = Structure(Lattice.cubic(3.3), ["Mo", "Mo"], [[0., 0., 0.], [0.5, 0.5, 0.5]])

relaxer = Relaxer()  # This loads the default pre-trained model

relax_results = relaxer.relax(mo, verbose=True)

final_structure = relax_results['final_structure']
final_energy_per_atom = float(relax_results['trajectory'].energies[-1] / len(mo))

print(f"Relaxed lattice parameter is {final_structure.lattice.abc[0]:.3f} Å")
print(f"Final energy is {final_energy_per_atom:.3f} eV/atom")

输出如下:

Relaxed lattice parameter is  3.169 Å
Final energy is -10.859 eV/atom

初始晶格参数 3.3 Å 成功放松至 3.169 Å,接近 3.168 Å 的 DFT 值。最终能量 -10.859 eV/atom 也接近 Materials Project DFT 值 -10.8456 eV/atom

在一台笔记本电脑上放松只需不到 20 秒。

下表根据 维基百科上的 exp 数据和 MP DFT 数据提供了更全面的立方晶体基准。Jupyter 笔记本位于示例文件夹中。为了便于比较,该基准仅限于立方晶体,因为只有一个晶格参数。当然,M3GNet 不限于立方系统(参见LiFePO4 示例)。

材料 晶体结构 一个(埃) 兆帕 (Å) M3GNet a (Å) % 错误与 Expt % 误差与 MP
交流电 联邦通信委员会 5.31 5.66226 5.6646 6.68% 0.04%
联邦通信委员会 4.079 4.16055 4.16702 2.16% 0.16%
联邦通信委员会 4.046 4.03893 4.04108 -0.12% 0.05%
锌混合物 (FCC) 5.6605 5.73376 5.73027 1.23% -0.06%
铝磷 锌混合物 (FCC) 5.451 5.50711 5.50346 0.96% -0.07%
锑化铝 锌混合物 (FCC) 6.1355 6.23376 6.22817 1.51% -0.09%
联邦通信委员会 5.26 5.64077 5.62745 6.99% -0.24%
联邦通信委员会 4.065 4.17129 4.17431 2.69% 0.07%
国阵 锌混合物 (FCC) 3.615 3.626 3.62485 0.27% -0.03%
英国石油公司 锌混合物 (FCC) 4.538 4.54682 4.54711 0.20% 0.01%
密件抄送 5.02 5.0303 5.03454 0.29% 0.08%
C(钻石) 钻石 (FCC) 3.567 3.57371 3.5718 0.13% -0.05%
联邦通信委员会 5.58 5.50737 5.52597 -0.97% 0.34%
CaVO3 立方钙钛矿 3.767 3.83041 3.83451 1.79% 0.11%
硫化镉 锌混合物 (FCC) 5.832 5.94083 5.9419 1.88% 0.02%
镉硒 锌混合物 (FCC) 6.05 6.21283 6.20987 2.64% -0.05%
碲化镉 锌混合物 (FCC) 6.482 6.62905 6.62619 2.22% -0.04%
联邦通信委员会 5.16 4.72044 4.71921 -8.54% -0.03%
密件抄送 2.88 2.87403 2.84993 -1.04% -0.84%
铬氮 石盐 4.149 - 4.16068 0.28% -
CS 密件抄送 6.05 6.11004 5.27123 -12.87% -13.73%
氯化铯 氯化铯 4.123 4.20906 4.20308 1.94% -0.14%
脑脊液 石盐 6.02 6.11801 6.1265 1.77% 0.14%
氯化硅 氯化铯 4.567 4.66521 4.90767 7.46% 5.20%
联邦通信委员会 3.597 3.62126 3.61199 0.42% -0.26%
欧盟 密件抄送 4.61 4.63903 4.34783 -5.69% -6.28%
EuTiO3 立方钙钛矿 7.81 3.96119 3.92943 -49.69% -0.80%
密件抄送 2.856 2.84005 2.85237 -0.13% 0.43%
砷化镓 锌混合物 (FCC) 5.653 5.75018 5.75055 1.73% 0.01%
差距 锌混合物 (FCC) 5.4505 5.5063 5.5054 1.01% -0.02%
砷化镓 锌混合物 (FCC) 6.0959 6.21906 6.21939 2.03% 0.01%
钻石 (FCC) 5.658 5.76286 5.7698 1.98% 0.12%
HfC0.99 石盐 4.64 4.65131 4.65023 0.22% -0.02%
氢氟酸 石盐 4.392 4.53774 4.53838 3.33% 0.01%
铟砷 锌混合物 (FCC) 6.0583 6.18148 6.25374 3.23% 1.17%
锌混合物 (FCC) 5.869 5.95673 5.9679 1.69% 0.19%
锑化铟 锌混合物 (FCC) 6.479 6.63322 6.63863 2.46% 0.08%
红外 联邦通信委员会 3.84 3.87573 3.87716 0.97% 0.04%
ķ 密件抄送 5.23 5.26212 5.4993 5.15% 4.51%
溴化钾 石盐 6.6 6.70308 6.70797 1.64% 0.07%
氯化钾 石盐 6.29 6.38359 6.39634 1.69% 0.20%
肯德基 石盐 5.34 5.42398 5.41971 1.49% -0.08%
KI 石盐 7.07 7.18534 7.18309 1.60% -0.03%
KTaO3 立方钙钛矿 3.9885 4.03084 4.03265 1.11% 0.05%
联邦通信委员会 5.72 6.49646 6.25924 9.43% -3.65%
密件抄送 3.49 3.42682 3.41891 -2.04% -0.23%
溴化锂 石盐 5.5 5.51343 5.51076 0.20% -0.05%
氯化锂 石盐 5.14 5.15275 5.14745 0.15% -0.10%
氟化锂 石盐 4.03 4.08343 4.08531 1.37% 0.05%
锂离子 石盐 6.01 6.0257 6.02709 0.28% 0.02%
氧化镁 岩盐 (FCC) 4.212 4.25648 4.2567 1.06% 0.01%
密件抄送 3.142 3.16762 3.16937 0.87% 0.06%
密件抄送 4.23 4.17262 4.19684 -0.78% 0.58%
溴化钠 石盐 5.97 6.0276 6.01922 0.82% -0.14%
氯化钠 石盐 5.64 5.69169 5.69497 0.97% 0.06%
氟化钠 石盐 4.63 4.69625 4.69553 1.42% -0.02%
钠离子 石盐 6.47 6.532 6.52739 0.89% -0.07%
密件抄送 3.3008 3.32052 3.32221 0.65% 0.05%
石盐 4.392 4.45247 4.45474 1.43% 0.05%
联邦通信委员会 4.43 4.30383 6.95744 57.05% 61.66%
联邦通信委员会 3.499 3.5058 3.5086 0.27% 0.08%
联邦通信委员会 4.92 5.05053 5.02849 2.21% -0.44%
硫化铅 岩盐 (FCC) 5.9362 6.00645 6.01752 1.37% 0.18%
碲化铅 岩盐 (FCC) 6.462 6.56567 6.56111 1.53% -0.07%
联邦通信委员会 3.859 3.95707 3.95466 2.48% -0.06%
联邦通信委员会 3.912 3.97677 3.97714 1.67% 0.01%
密件抄送 5.59 5.64416 5.63235 0.76% -0.21%
溴化铷 石盐 6.89 7.02793 6.98219 1.34% -0.65%
氯化铷 石盐 6.59 6.69873 6.67994 1.36% -0.28%
RbF 石盐 5.65 5.73892 5.76843 2.10% 0.51%
石盐 7.35 7.48785 7.61756 3.64% 1.73%
联邦通信委员会 3.8 3.8439 3.84935 1.30% 0.14%
单核网络 石盐 4.52 4.51831 4.51797 -0.04% -0.01%
钻石 (FCC) 5.43102 5.46873 5.45002 0.35% -0.34%
联邦通信委员会 6.08 6.02253 6.04449 -0.58% 0.36%
SrTiO3 立方钙钛矿 3.98805 3.94513 3.94481 -1.08% -0.01%
锶VO3 立方钙钛矿 3.838 3.90089 3.90604 1.77% 0.13%
密件抄送 3.3058 3.32229 3.31741 0.35% -0.15%
TaC0.99 石盐 4.456 4.48208 4.48225 0.59% 0.00%
联邦通信委员会 5.08 5.04122 5.04483 -0.69% 0.07%
碳化钛 石盐 4.328 4.33565 4.33493 0.16% -0.02%
石盐 4.249 4.25353 4.25254 0.08% -0.02%
密件抄送 3.0399 2.99254 2.99346 -1.53​​% 0.03%
VC0.97 石盐 4.166 4.16195 4.16476 -0.03% 0.07%
越南 石盐 4.136 4.12493 4.1281 -0.19% 0.08%
W 密件抄送 3.155 3.18741 3.18826 1.05% 0.03%
联邦通信委员会 6.2 6.66148 7.06991 14.03% 6.13%
联邦通信委员会 5.49 5.44925 5.45807 -0.58% 0.16%
氧化锌 岩盐 (FCC) 4.58 4.33888 4.33424 -5.37% -0.11%
硫化锌 锌混合物 (FCC) 5.42 5.45027 5.45297 0.61% 0.05%
ZrC0.97 石盐 4.698 4.72434 4.72451 0.56% 0.00%
氮化锆 石盐 4.577 4.61762 4.61602 0.85% -0.03%

从表中可以看出,几乎所有 M3GNet 松弛立方晶格常数都在 DFT 值的 1% 以内。唯一的主要错误是 EuTiO3、碘化物(RbI 和 CsI)和惰性气体。EuTiO3 的 Wikipedia 值很可能是错误的 2 倍,碘化物和惰性气体的准确度低于预期可能是由于这些化学系统中数据的缺乏。需要注意的是,M3GNet 预计会重现 MP DFT 值而不是实验值,这些值仅作为附加参考点提供。

在 M1 Max Mac 上,所有放松都需要不到 1 秒的时间。

命令行工具

已经编写了一个简单的 CLI 工具。目前,它仅支持使用 M3GNet 进行结构松弛,这对于快速测试 M3GNet 本身的功能非常有用。如果有用户的兴趣,将来会开发更多的功能。下面的例子。

m3g relax --infile Li2O.cif  # Outputs to stdout the relaxed structure.
m3g relax --infile Li2O.cif --outfile Li2O_relaxed.cif  # Outputs to a file the relaxed structure.

分子动力学

同样,通用 IAP 也可用于执行分子动力学 (MD) 模拟。

from pymatgen.core import Structure, Lattice
from m3gnet.models import MolecularDynamics

# Init a Mo structure with stretched lattice (DFT lattice constant ~ 3.168)
mo = Structure(Lattice.cubic(3.3),
               ["Mo", "Mo"], [[0., 0., 0.], [0.5, 0.5, 0.5]])

md = MolecularDynamics(
    atoms=mo,
    temperature=1000,  # 1000 K
    ensemble='nvt',  # NVT ensemble
    timestep=1, # 1fs,
    trajectory="mo.traj",  # save trajectory to mo.traj
    logfile="mo.log",  # log file for MD
    loginterval=100,  # interval for record the log
)

md.run(steps=1000)

运行后,mo.log包含类似于以下的热力学信息:

Time[ps]      Etot[eV]     Epot[eV]     Ekin[eV]    T[K]
0.0000         -21.3307     -21.3307       0.0000     0.0
0.1000         -21.3307     -21.3307       0.0000     0.0
0.2000         -21.2441     -21.3087       0.0645   249.7
0.3000         -21.0466     -21.2358       0.1891   731.6
0.4000         -20.9702     -21.1149       0.1447   559.6
0.5000         -20.9380     -21.1093       0.1713   662.6
0.6000         -20.9176     -21.1376       0.2200   850.9
0.7000         -20.9016     -21.1789       0.2773  1072.8
0.8000         -20.8804     -21.1638       0.2835  1096.4
0.9000         -20.8770     -21.0695       0.1925   744.5
1.0000         -20.8908     -21.0772       0.1864   721.2

MD 运行时间不到 1 分钟。

模型训练

您还可以使用PotentialTrainerin训练您自己的 IAP m3gnet.trainers。训练数据集可以包括:

  • 结构,pymatgen 结构的列表
  • 能量,以 eV 为单位的能量列表。
  • 力,nx3 力矩阵列表,单位为 eV/Å,其中 n 是每个结构中的原子数。n 不需要对所有结构都相同。
  • 应力,具有单位 GPa 的 3x3 应力矩阵列表(可选)

对于应力,我们使用压缩应力给出负值的约定。从 VASP 计算中获得的应力(默认单位为 kBar)应乘以 -0.1 以直接使用模型。

我们使用验证数据集来选择停止时期数。该数据集与训练数据集具有相似的格式。

模型训练的最小示例如下所示。

from m3gnet.models import M3GNet, Potential
from m3gnet.trainers import PotentialTrainer

import tensorflow as tf

m3gnet = M3GNet(is_intensive=False)
potential = Potential(model=m3gnet)

trainer = PotentialTrainer(
    potential=potential, optimizer=tf.keras.optimizers.Adam(1e-3)
)

trainer.train(
    structures,
    energies,
    forces,
    stresses,
    validation_graphs_or_structures=val_structures,
    val_energies=val_energies,
    val_forces=val_forces,
    val_stresses=val_stresses,
    epochs=100,
    fit_per_element_offset=True,
    save_checkpoint=False,
)

物质宇宙

作为 M3GNet 在材料发现方面的强大功能的一个示例,我们创建了一个尚未合成的材料数据库,名为matteverse.ai。在撰写本文时,matterverse.ai 拥有 3100 万个结构,其中超过 100 万个预计可能是稳定的。最初的候选名单是根据 2019 年版 ICSD 数据库中 5,283 个二元、三元和四元结构原型上的非惰性气体元素的常见氧化态,通过组合等价离子取代生成的。

API 文档

API 文档可在此处获得。

数据集

用于开发通用 M3GNet IAP 的训练数据现在MPF.2021.2.8和托管在 带有 DOI的figshare10.6084/m9.figshare.19470599上。

参考

请引用以下作品:

Chi Chen, and Shyue Ping Ong. "A Universal Graph Deep Learning Interatomic Potential for the Periodic Table."
arXiv preprint [arXiv:2202.02450](https://arxiv.org/abs/2202.02450) (2022).

致谢

这项工作主要得到了材料项目的支持,该项目由美国能源部、科学办公室、基础能源科学办公室、材料科学和工程部资助,合同号为。DE-AC02-05-CH11231:材料项目计划 KC23MP。这项工作使用了极限科学与工程发现环境 (XSEDE) 中的 Expanse 超级计算集群,该集群得到了美国国家科学基金会资助号 ACI-1548562 的支持。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

m3gnet-0.0.8.tar.gz (1.2 MB 查看哈希

已上传 source

内置分布

m3gnet-0.0.8-cp39-cp39-macosx_11_0_arm64.whl (474.5 kB 查看哈希