跳转到主要内容

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

项目描述

GitHub license Linting Testing Downloads

M3GNet

M3GNet是一种新的材料图神经网络架构,它结合了三体相互作用。与先前的材料图实现(如MEGNet)相比,一个关键的区别是增加了原子坐标和晶体中的3x3晶格矩阵,这对于通过自动微分获得张量量(如力、应力等)是必要的。

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

  • 原子间势开发。 使用相同的学习数据,M3GNet 的表现与最先进的机器学习原子间势(ML-IAPs)相当。然而,图表示的关键特性是其灵活性,可以扩展到不同的化学空间。M3GNet 的一个关键成就是通过在 材料项目 中进行的弛豫训练,开发了一个能够在整个元素周期表中工作的 通用 IAP
  • 属性预测的代理模型。 与之前的 MEGNet 架构一样,M3GNet 可以用来开发属性预测的代理模型,在许多情况下,其准确率优于或与其他最先进的 ML 模型相当。

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

目录

系统要求

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

安装

M3GNet 可以通过 pip 安装

pip install m3gnet

您还可以直接从 Github 下载源代码并从源代码进行安装。

Apple Silicon 安装

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 年以来,我们已经使用来自材料项目弛豫的数据开发了一个 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 Å,接近 DFT 值 3.168 Å。最终的能量为 -10.859 eV/atom,也接近材料项目 DFT 值 -10.8456 eV/atom

在单个笔记本电脑上,弛豫时间少于 20 秒。

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

材料 晶体结构 a (Å) MP a (Å) M3GNet a (Å) 与实验相比的百分比误差 与 MP 相比百分比误差
Ac FCC 5.31 5.66226 5.6646 6.68% 0.04%
Ag FCC 4.079 4.16055 4.16702 2.16% 0.16%
Al FCC 4.046 4.03893 4.04108 -0.12% 0.05%
AlAs 闪锌矿(FCC) 5.6605 5.73376 5.73027 1.23% -0.06%
AlP 闪锌矿(FCC) 5.451 5.50711 5.50346 0.96% -0.07%
AlSb 闪锌矿(FCC) 6.1355 6.23376 6.22817 1.51% -0.09%
Ar FCC 5.26 5.64077 5.62745 6.99% -0.24%
Au FCC 4.065 4.17129 4.17431 2.69% 0.07%
BN 闪锌矿(FCC) 3.615 3.626 3.62485 0.27% -0.03%
BP 闪锌矿(FCC) 4.538 4.54682 4.54711 0.20% 0.01%
Ba BCC 5.02 5.0303 5.03454 0.29% 0.08%
C (钻石) 钻石 (FCC) 3.567 3.57371 3.5718 0.13% -0.05%
Ca FCC 5.58 5.50737 5.52597 -0.97% 0.34%
CaVO3 立方钙钛矿 3.767 3.83041 3.83451 1.79% 0.11%
CdS 闪锌矿(FCC) 5.832 5.94083 5.9419 1.88% 0.02%
CdSe 闪锌矿(FCC) 6.05 6.21283 6.20987 2.64% -0.05%
CdTe 闪锌矿(FCC) 6.482 6.62905 6.62619 2.22% -0.04%
Ce FCC 5.16 4.72044 4.71921 -8.54% -0.03%
Cr BCC 2.88 2.87403 2.84993 -1.04% -0.84%
CrN 岩盐 4.149 - 4.16068 0.28% -
Cs BCC 6.05 6.11004 5.27123 -12.87% -13.73%
CsCl 氯化铯 4.123 4.20906 4.20308 1.94% -0.14%
CsF 岩盐 6.02 6.11801 6.1265 1.77% 0.14%
CsI 氯化铯 4.567 4.66521 4.90767 7.46% 5.20%
Cu FCC 3.597 3.62126 3.61199 0.42% -0.26%
Eu BCC 4.61 4.63903 4.34783 -5.69% -6.28%
EuTiO3 立方钙钛矿 7.81 3.96119 3.92943 -49.69% -0.80%
Fe BCC 2.856 2.84005 2.85237 -0.13% 0.43%
GaAs 闪锌矿(FCC) 5.653 5.75018 5.75055 1.73% 0.01%
GaP 闪锌矿(FCC) 5.4505 5.5063 5.5054 1.01% -0.02%
GaSb 闪锌矿(FCC) 6.0959 6.21906 6.21939 2.03% 0.01%
Ge 钻石 (FCC) 5.658 5.76286 5.7698 1.98% 0.12%
HfC0.99 岩盐 4.64 4.65131 4.65023 0.22% -0.02%
HfN 岩盐 4.392 4.53774 4.53838 3.33% 0.01%
InAs 闪锌矿(FCC) 6.0583 6.18148 6.25374 3.23% 1.17%
InP 闪锌矿(FCC) 5.869 5.95673 5.9679 1.69% 0.19%
InSb 闪锌矿(FCC) 6.479 6.63322 6.63863 2.46% 0.08%
Ir FCC 3.84 3.87573 3.87716 0.97% 0.04%
K BCC 5.23 5.26212 5.4993 5.15% 4.51%
KBr 岩盐 6.6 6.70308 6.70797 1.64% 0.07%
KCl 岩盐 6.29 6.38359 6.39634 1.69% 0.20%
KF 岩盐 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%
Kr FCC 5.72 6.49646 6.25924 9.43% -3.65%
Li BCC 3.49 3.42682 3.41891 -2.04% -0.23%
LiBr 岩盐 5.5 5.51343 5.51076 0.20% -0.05%
LiCl 岩盐 5.14 5.15275 5.14745 0.15% -0.10%
LiF 岩盐 4.03 4.08343 4.08531 1.37% 0.05%
LiI 岩盐 6.01 6.0257 6.02709 0.28% 0.02%
MgO 岩盐 (FCC) 4.212 4.25648 4.2567 1.06% 0.01%
Mo BCC 3.142 3.16762 3.16937 0.87% 0.06%
Na BCC 4.23 4.17262 4.19684 -0.78% 0.58%
NaBr 岩盐 5.97 6.0276 6.01922 0.82% -0.14%
NaCl 岩盐 5.64 5.69169 5.69497 0.97% 0.06%
NaF 岩盐 4.63 4.69625 4.69553 1.42% -0.02%
NaI 岩盐 6.47 6.532 6.52739 0.89% -0.07%
Nb BCC 3.3008 3.32052 3.32221 0.65% 0.05%
NbN 岩盐 4.392 4.45247 4.45474 1.43% 0.05%
Ne FCC 4.43 4.30383 6.95744 57.05% 61.66%
Ni FCC 3.499 3.5058 3.5086 0.27% 0.08%
Pb FCC 4.92 5.05053 5.02849 2.21% -0.44%
PbS 岩盐 (FCC) 5.9362 6.00645 6.01752 1.37% 0.18%
PbTe 岩盐 (FCC) 6.462 6.56567 6.56111 1.53% -0.07%
Pd FCC 3.859 3.95707 3.95466 2.48% -0.06%
Pt FCC 3.912 3.97677 3.97714 1.67% 0.01%
Rb BCC 5.59 5.64416 5.63235 0.76% -0.21%
RbBr 岩盐 6.89 7.02793 6.98219 1.34% -0.65%
RbCl 岩盐 6.59 6.69873 6.67994 1.36% -0.28%
RbF 岩盐 5.65 5.73892 5.76843 2.10% 0.51%
RbI 岩盐 7.35 7.48785 7.61756 3.64% 1.73%
Rh FCC 3.8 3.8439 3.84935 1.30% 0.14%
ScN 岩盐 4.52 4.51831 4.51797 -0.04% -0.01%
Si 钻石 (FCC) 5.43102 5.46873 5.45002 0.35% -0.34%
Sr FCC 6.08 6.02253 6.04449 -0.58% 0.36%
SrTiO3 立方钙钛矿 3.98805 3.94513 3.94481 -1.08% -0.01%
SrVO3 立方钙钛矿 3.838 3.90089 3.90604 1.77% 0.13%
Ta BCC 3.3058 3.32229 3.31741 0.35% -0.15%
TaC0.99 岩盐 4.456 4.48208 4.48225 0.59% 0.00%
Th FCC 5.08 5.04122 5.04483 -0.69% 0.07%
TiC 岩盐 4.328 4.33565 4.33493 0.16% -0.02%
TiN 岩盐 4.249 4.25353 4.25254 0.08% -0.02%
V BCC 3.0399 2.99254 2.99346 -1.53% 0.03%
VC0.97 岩盐 4.166 4.16195 4.16476 -0.03% 0.07%
VN 岩盐 4.136 4.12493 4.1281 -0.19% 0.08%
W BCC 3.155 3.18741 3.18826 1.05% 0.03%
Xe FCC 6.2 6.66148 7.06991 14.03% 6.13%
Yb FCC 5.49 5.44925 5.45807 -0.58% 0.16%
ZnO 岩盐 (FCC) 4.58 4.33888 4.33424 -5.37% -0.11%
ZnS 闪锌矿(FCC) 5.42 5.45027 5.45297 0.61% 0.05%
ZrC0.97 岩盐 4.698 4.72434 4.72451 0.56% 0.00%
ZrN 岩盐 4.577 4.61762 4.61602 0.85% -0.03%

从表中可以看出,几乎所有M3GNet松弛的立方晶格常数都与DFT值相差在1%以内。唯一的主要误差在于EuTiO3、碘化物(RbI和CsI)以及稀有气体。很可能是维基百科中EuTiO3的值错误了2倍,碘化物和稀有气体低于预期的精度可能是因为这些化学系统数据不足。应注意的是,M3GNet预计会再现MP DFT值,而不是实验值,实验值仅作为额外的参考点。

所有松弛在M1 Max Mac上都在1秒以内完成。

CLI工具

已经编写了一个简单的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分钟。

模型训练

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

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

对于应力,我们使用以下惯例:压缩应力给出负值。从VASP计算得到的应力(默认单位为kBar)应乘以-0.1才能直接与模型一起使用。

我们使用验证数据集来选择停止的epoch编号。该数据集的格式与训练数据集类似。

以下是一个模型训练的最小示例。

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,
)

Matterverse

作为M3GNet在材料发现方面强大功能的示例,我们创建了一个名为matterverse.ai的尚未合成的材料数据库。在撰写本文时,matterverse.ai拥有3100万个结构,其中超过100万个结构预测可能具有潜在稳定性。初始候选列表是基于2019年版ICSD数据库中5283个二进制、三进制和四进制结构原型上非稀有气体元素的常见氧化态,通过组合等价离子替换生成。

API 文档

API文档可在此处获取:here

数据集

开发通用M3GNet IAP所使用的训练数据为MPF.2021.2.8,并托管在figshare上,DOI为10.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.2.4.tar.gz (1.1 MB 查看哈希)

上传时间: 源代码

构建分发

m3gnet-0.2.4-py3-none-any.whl (285.1 kB 查看哈希)

上传时间: Python 3

由以下机构支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页面