Skip to main content

金属表面反应路径探索的自动化工作流程

项目描述

构建状态 GitHub 标签(按日期最新) GitHub 上次提交 自标记版本以来的 GitHub 提交 GitHub GitHub 顶级语言 语言等级:Python 警报总数 GitHub 存储库大小 GitHub所有版本

平塔

pynta是一种用于金属表面反应路径探索的自动化工作流程。

pynta代码旨在自动表征与多相催化相关的化学反应。特别是,它产生并处理了大量从头算量子化学计算,以研究晶面上的气相反应。它设计用于在 petascale 和即将推出的 exascale 机器上运行。

该代码通过列举各种独特的晶体位点并考虑吸附物和表面的对称性,系统地将吸附物放置在晶面上。这些结构被系统地扰动,以尝试研究所有可能的吸附几何形状。在此之后,代码对这些结构进行修改,并在势能图上搜索鞍点,以表征这些吸附物可能发生的反应。经过一系列这样的计算后,代码得到了表征良好的反应途径,这些反应途径又可以用来计算速率系数,并且可以在微动力学机制/模型中实现。

pynta旨在与工作流代码一起使用 balsam,它可以在超级计算机上无缝运行令人尴尬的并行计算。pynta包括几个所谓的应用程序,这些应用程序运行 balsam,并在队列系统中显示为一个整体作业提交。从头算程序获得了另一个级别的并行性,它可能包括也可能不包括 GPU 加速。我们使用原子模拟环境 (ASE),它能够耦合到大量的从头算量子化学代码。

<中心> </中心>

1.安装

以下说明假设您的系统上安装了多个软件,例如:

  • 队列系统,例如SlurmPBSCobalt
  • 一个 MPI 例如OpenMPI
  • 一个数学库,例如OpenBlas/LAPACKIntel's MKL
  • 编译器套件,例如GCCIntel

1.1 安装所有先决条件

1.1.1 设置要用于pynta构建的位置。建议创建一个虚拟环境,例如“pynta”:

cd <path/whr/to/build/pynta>
python3 -m venv pynta

1.1.2 激活你的虚拟环境:

source pynta/bin/activate

1.1.3(可选)安装所需的python包(如果你跳过这个过程,pynta安装程序稍后会这样做。)

pip3 install matplotlib<3.2 spglib==1.14.1.post0 networkx<2.4 ase==3.19.0 scipy==1.3.1 numpy==1.18.1 PyYAML==5.3.1 sella==1.0.3

1.1.4 下载适合您系统的PostgreSQL预编译二进制文件并通过修改添加path_to_PostgreSQL/pgsql/bin到您的PATH~/.bashrc

echo 'export PATH=path_to_PostgreSQL/pgsql/bin:$PATH' >> ~/.bashrc

1.1.5 安装mpi4py

git clone https://github.com/mpi4py/mpi4py.git
cd mpi4py
python3 setup.py install
cd ../

通过运行确保它有效

>>> mpirun -n 2 python3 -c 'from mpi4py import MPI; print(MPI.COMM_WORLD.Get_rank())'
0
1

1.1.6使用serial-mode-perf分支安装balsam 。

git clone https://github.com/balsam-alcf/balsam.git -b serial-mode-perf
cd balsam
python3 setup.py install
cd ../

通过运行发布在balsam GitHub 页面上的测试来确保它正常工作。

1.1.7 按照那里提供的说明安装xTB-python。确保正确链接所有必需的库。例如:

  • 使用OpenBlasGNU基于编译器:
git clone https://github.com/grimme-lab/xtb-python.git
cd xtb-python
git submodule update --init
LDFLAGS="-L/opt/custom/OpenBLAS/0.3.7/lib" meson setup build --prefix=$PWD --libdir=xtb/xtb --buildtype release --optimization 2 -Dla_backend=openblas
ninja -C build install
pip install -e .
  • 使用MKL和英特尔编译器:
git clone https://github.com/grimme-lab/xtb-python.git
cd xtb-python
git submodule update --init
# (ALCF's Theta specific)
# conda instal cffi
# module swap PrgEnv-intel PrgEnv-cray; module swap PrgEnv-cray PrgEnv-intel
CC=icc CXX=icpc FC=ifort meson setup build --prefix=$PWD --libdir=xtb -Dla_backed=mkl -Dpy=3 --buildtype release --optimization 2
ninja -C build install
python3 setup.py install
ln -s ./xtb/xtb/_libxtb*.so ./xtb

通过运行确保它工作:

>>> from xtb.ase.calculator import XTB
>>> from ase.build import molecule
>>> from math import isclose
>>> atoms = molecule('H2O')
>>> atoms.calc = XTB(method="GFN2-xTB")
>>> total_ener = atoms.get_potential_energy()
>>> is_close = isclose(total_ener,-137.9677758730299)
>>> print (total_ener)  # True -> that's good; False -> something is wrong

警告 - 您可能会收到 SEGFAULT 错误 -

Segmentation Fault (Core dumped)

在执行任何 xTB-python 工作时,尤其是对于相对较大的分子。最简单的解决方案是不限制系统堆栈以避免堆栈溢出。在 bash 尝试:

ulimit -s unlimited

如果xTB-python仍然失败,请尝试安装xtb并测试xTB自身是否有任何错误。

git clone https://github.com/grimme-lab/xtb.git
cd xtb
mkdir build
pushd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DCMAKE_FC_COMPILER=ifort ..
make
ctest
popd
echo 'export LD_LIBRARY_PATH=path/to_xtb/xtb/build:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=$HOME/.local/bin:\$PATH' >> ~/.bashrc

然后,在您的系统上重建xTB-python,忽略git submodule update --init并链接您当前的xTB安装。

1.2 安装pynta

1.2.1 将项目克隆到您喜欢的位置。

git clone https://github.com/zadorlab/pynta.git

通常,master分支应该没问题。如果不知何故它不起作用,请确保通过检查标签切换到最新的稳定版本。

1.2.2 进入pynta目录

cd pynta

1.2.3a 安装pynta

python setup.py install

1.2.3b(可选)如果您没有管理员权限(例如,您将pynta在超级计算机上使用),请执行以下操作而不是 1.2.3a:

python setup.py install --user

你应该很好相处pynta

使用工作流程完成后,键入:

cd pynta
deactivate

2.如何运行

在运行任何pynta计算之前,请确保您的balsam数据库已初始化并激活,例如

balsam init ~/myWorkflow
source balsamactivate ~/myWorkflow

您的提示应更改为:

~[BalsamDB: myWorkflow] <username>@<host>:

您将需要4 个文件来运行工作流程:

  • run_me.py执行工作流或 restart_me.py重新启动未完成计算的 python 脚本
  • run_me.sh将作业提交到balsam数据库的 bash 脚本
  • input.json一个包含所有用户可修改参数的 json 文件pynta
  • reactions.yaml包含要研究的所有反应的 yaml 文件

一个示例run_me.py文件:

#!/usr/bin/env python3
from pynta.main import WorkFlow


def run():
    # instantiate a WorkFlow() class
    workflow = WorkFlow()
    # create all input files
    workflow.gen_job_files()
    # execute the workflow
    workflow.execute_all()


if __name__ == '__main__':
    run()

一个示例run_me.py文件:

#!/usr/bin/env python3
from pynta.main import WorkFlow


def restart():
    return WorkFlow().restart()


if __name__ == '__main__':
    restart()

一个示例run_me.sh文件:

#!/bin/bash
#SBATCH -J job_name        # name of the job e.g job_name = pynta_workflow
#SBATCH --partition=queue  # queue name e.g. queue = day-long-cpu
#SBATCH --nodes=x          # number of nodes e.g. x = 2
#SBATCH --ntasks=y         # number of CPUs e.g. 2 x 48 = y = 96
#SBATCH -e %x.err          # error file name
#SBATCH -o %x.out          # out file name

# load your quantum chemistry calculation package or provide a path to the
# executable in 'inputR2S.py'
module load espresso

# activate balsam environment, e.g.
source balsamactivate ~/myWorkflow

# run python executable script
python3 $PWD/run_me.py

# required environment variable if using balsam branch serial-mode-perf and SLURM
export SLURM_HOSTS=$(scontrol show hostname)

# launch serial jobs
balsam launcher --job-mode=serial --wf-filter _ --limit-nodes=1 --num-transition-threads=1 &

# wait a bit to prevent timeing out you jobs before the sockets are ready
sleep 45

# launch mpi jobs
balsam launcher --job-mode=mpi --wf-filter QE_Sock --offset-nodes=x-1 --num-transition-threads=1 &

# wait until finished
wait

# deactivate balsam environment
source balsamdeactivate

一个示例reactions.yaml文件:

  - index: 0
    reaction: OHX + X <=> OX + HX
    reaction_family: Surface_Abstraction
    reactant: |
        multiplicity -187
        1 *1 O u0 p0 c0 {2,S} {4,S}
        2 *2 H u0 p0 c0 {1,S}
        3 *3 X u0 p0 c0
        4    X u0 p0 c0 {1,S}
    product: |
        multiplicity -187
        1 *1 O u0 p0 c0 {4,S}
        2 *2 H u0 p0 c0 {3,S}
        3 *3 X u0 p0 c0 {2,S}
        4    X u0 p0 c0 {1,S}
    - index: 1
    reaction: H2OX + X <=> OHX + HX
    reaction_family: Surface_Abstraction
    reactant: |
        multiplicity -187
        1 *1 O u0 p0 c0 {2,S} {3,S} {4,S}
        2 *2 H u0 p0 c0 {1,S}
        3    H u0 p0 c0 {1,S}
        4    X u0 p0 c0 {1,S}
        5 *3 X u0 p0 c0
    product: |
        multiplicity -187
        1 *1 O u0 p0 c0 {2,S} {4,S}
        2 *2 H u0 p0 c0 {1,S}
        3    H u0 p0 c0 {5,S}
        4    X u0 p0 c0 {1,S}
        5 *3 X u0 p0 c0 {3,S}

一个示例inputR2S.py文件:

{
  "quantum_chemistry": "espresso",
  "optimize_slab": true,
  "surface_types_and_repeats": {
    "fcc111": [
      [3, 3, 1],
      [1, 1, 4]
    ]
  },
  "metal_atom": "Cu",
  "a": 3.6,
  "vacuum": 8.0,
  "pseudo_dir": "/home/mgierad/espresso/pseudo",
  "pseudopotentials": "dict(Cu='Cu.pbe-spn-kjpaw_psl.1.0.0.UPF',H='H.pbe-kjpaw_psl.1.0.0.UPF',O='O.pbe-n-kjpaw_psl.1.0.0.UPF',C='C.pbe-n-kjpaw_psl.1.0.0.UPF',N='N.pbe-n-kjpaw_psl.1.0.0.UPF')",
  "executable": "/home/mgierad/00_codes/build/q-e-qe-6.4.1/build/bin/pw.x",
  "node_packing_count": 48,
  "balsam_exe_settings": {
    "num_nodes": 1,
    "ranks_per_node": 48,
    "threads_per_rank": 1
  },
  "calc_keywords": {
    "kpts": [3, 3, 1],
    "occupations": "smearing",
    "smearing": "marzari-vanderbilt",
    "degauss": 0.01,
    "ecutwfc": 40,
    "nosym": true,
    "conv_thr": 1e-11,
    "mixing_mode": "local-TF"
  },
  "yamlfile": "reactions.yaml",
  "scfactor": 1.4,
  "scfactor_surface": 1.0,
  "scaled1": false,
  "scaled2": false
}

有关这些关键字的含义,请查看文档

示例输入文件也位于./pynta/example_run_files/

3. 文档

此处提供了完整的文档。

致谢

如果您正在使用pynta或希望使用它,请告诉我!

版权声明

自 2021 年 1 月 19 日起的五 (5) 年内,美国政府被授予其自身和代表其行事的其他人在此数据中复制、准备衍生作品和公开表演的已付清、非排他性、不可撤销的全球许可由政府或代表政府公开展示。有可能延长本许可期限的规定。在该期限或授予的任何延期之后,美国政府被授予其自身和代表其行事的其他人在此数据中复制、准备衍生作品、向公众分发副本、执行公开和公开展示,并允许他人这样做。具体许可期限可向桑迪亚国家技术与工程解决方案公司查询,

美国政府、美国能源部、SANDIA, LLC 的国家技术和工程解决方案公司及其任何员工均不对准确性、完整性作出任何明示或暗示的保证,或承担任何法律责任,或披露的任何信息、设备、产品或过程的用途,或表示其使用不会侵犯私有权利。

本软件的任何被许可人都有义务和责任遵守适用的出口管制法律、法规和与技术数据出口有关的一般禁令。未能从政府获得出口管制许可证或其他授权可能导致根据美国法律承担刑事责任。

许可通知

版权所有 2021 Sandia, LLC (NTESS) 的国家技术与工程解决方案。根据与 NTESS 签订的合同 DE-NA0003525 的条款,美国政府保留对该软件的某些权利。

项目详情


下载文件

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

源分布

pynta-flow-1.1.1.tar.gz (1.5 MB 查看哈希

已上传 source