具有三体相互作用的材料图
项目描述
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 和其他依赖项时需要特殊步骤。以下是一些推荐的安装步骤。
-
请确保您已经安装了 XCode 和 CLI。
-
安装 Miniconda 或 Anaconda。
-
创建一个 Python 3.9 环境。
conda create --name m3gnet python=3.9 conda activate m3gnet
-
首先为 Apple Silicon 安装 tensorflow 和其依赖项。
conda install -c apple tensorflow-deps pip install tensorflow-macos
-
如果您愿意,可以安装
tensorflow-metal
,这有助于加快训练速度。如果您遇到奇怪的 tensorflow 错误,您应该先卸载tensorflow-metal
,然后看看是否可以解决错误。pip install tensorflow-metal
-
安装 m3gnet 但忽略依赖项(否则 pip 将寻找 tensorflow)。
pip install --no-deps m3gnet
-
手动安装其他依赖项,如 pymatgen 等。
pip install protobuf==3.20.0 pymatgen ase cython
-
完成后,您可以尝试运行
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7f82b06f48d8fb81f91fb88484177005066cdf708902bf749afaa7f8d117ce8 |
|
MD5 | 8e403cebf3f40d68a62c6170f8596c51 |
|
BLAKE2b-256 | b6db36821ddb9a5ecb5d3a2cb9fc5acd3dc43b83b4eca340aaf388f46fc5ac20 |
m3gnet-0.2.4-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e68a5b808325b56e1a5e9ddedb266a83db0c4c4f4c101cd6479b8a59491de54a |
|
MD5 | 4899e8f35e51c88e0fd409797e788fe3 |
|
BLAKE2b-256 | b0994fd58fcd278113191e43c57e208fd31c047920610df59d980cc863028da9 |