Way to the science

CATMAP编译及安装教程

一、CATMAP简介

CATMAP是一款求解催化微动力学的软件包,旨在标准化和自动化将“描述符空间”转换为多相催化反应速率的过程。它使用基于描述符的分析方法,通过关注少量关键描述符来减少理解催化反应的复杂性,从而简化与反应动力学相关的高维参数空间。这种方法不仅减少了计算工作量,还增强了对催化趋势的理解。

二、编译及安装

本安装是基于Singularity镜像完成,故整个安装包括准备编写Singularity文件、创建容器、运行容器等过程,使得在启动容器后直接使用 Jupyter Lab 进行数据分析和可视化工作。具体流程如下:

1、创建Singularity文件

# Use continuumio/miniconda3 as the base image
Bootstrap: docker
From: continuumio/miniconda3:latest
#使用 continuumio/miniconda3:latest 作为基础镜像,这是一个预装了 Miniconda 的 Docker 镜像,可以方便地管理和安装 Python 包。

%post
    # Update Conda in the base environment
    conda update -n base -c defaults conda -y
    #更新基础环境中的 Conda 版本,确保使用最新版本来提高稳定性和兼容性。

    # Initialize Conda in all shells
    . /opt/conda/etc/profile.d/conda.sh
    conda init
    #conda.sh 脚本用于设置 Conda 环境变量并初始化 Conda,使其在 shell 启动时自动加载。

    # Create a new Conda environment named 'catmap' with specific packages
    conda create -n catmap python=3.6 mamba -c conda-forge -y
    #创建一个名为 catmap 的新的 Conda 环境,指定 Python 版本为 3.6,并使用 mamba 来加速包管理过程。-c conda-forge 指定使用 conda-forge 频道来安装软件包。

    # Activate the environment
    conda activate catmap
    #激活刚创建的 catmap 环境,使后续的操作都在该环境下进行。

    # Increase pip timeout
    export PIP_DEFAULT_TIMEOUT=1000
    #安装过程中由于网络问题,故增加超时时间可以防止因默认超时时间过短导致的安装失败。

    # Install matplotlib with a version compatible with Python 3.6
    conda install -n catmap matplotlib=3.3.4 -c conda-forge -y
    #安装过程中出现无法找到兼容版本的matplotlib,故指定了使用 Conda 安装特定版本的 matplotlib(版本 3.3.4)

    # Install CatMAP from the GitHub master branch using pip
    pip install --upgrade https://github.com/SUNCAT-Center/catmap/zipball/master
    #从 CatMAP 的 GitHub 主分支安装最新版本的 CatMAP。--upgrade 确保安装的是最新版本。

    # Install additional packages using Conda
    conda install pyparsing -y
    conda install jupyterlab -y
    #安装 pyparsing 包(CatMAP 依赖的包之一)和 JupyterLab(用于数据分析和可视化)。

    # Clean Conda cache to reduce the container size
    conda clean -afy
    #清理 Conda 缓存,减少 Docker 镜像的大小,提高镜像的效率和性能。

%environment
    # Set up the environment variables
    export PATH=/opt/conda/envs/catmap/bin:$PATH
    export CONDA_DEFAULT_ENV=catmap
    export CONDA_PREFIX=/opt/conda/envs/catmap
    #设置环境变量,确保容器启动时 catmap 环境的路径和相关变量已经配置好。

%runscript
    exec /opt/conda/envs/catmap/bin/jupyter lab --allow-root --ip=0.0.0.0 --port="$1" --NotebookApp.token="" --NotebookApp.password=''
    # 容器的运行脚本,启动 Jupyter Lab 服务
    # --allow-root 允许以 root 权限运行
    # --ip=0.0.0.0 监听所有网络接口
    # --port="$1" 使用通过命令行参数传入的端口号
    # --NotebookApp.token="" 禁用 Jupyter Lab 的访问令牌,方便本地使用

2.构建Singularity容器

在拥有上述catmap.def文件后,利用以下命令构建Singularity容器

sudo apptainer build catmap.sif catmap.def

3.运行容器

使用以下命令再容器中启动Jupyter Lab,将/home/$USER/tmp替换为您希望在个人用户目录下中存储数据的实际路径,8868为要用于访问Jupyter Lab的端口号,根据个人情况替换。

mkdir -p /home/$USER/tmp && \
apptainer run --cleanenv  \
    -B /home/$USER/tmp:/home/$USER/.local \
    -B /home/$USER/tmp:/home/$USER/.conda \
    -B /home/$USER/tmp:/home/$USER/.config  \
    -B /home/$USER/tmp:/home/$USER/.ipython \
    -B /home/$USER/tmp:/home/$USER/.cache \
    -B /home/$USER/tmp:/home/$USER/.jupyter \
    /mnt/softs/singularity_sifs/catmap.sif 8868

4.访问Jupyter Lab

一旦容器在您的系统上运行,并且Jupyter Lab在容器中启动,可以打开一个Web浏览器,并在地址栏中输入http://ip:来访问Jupyter Lab。如使用slurm提交,则须使用承担作业节点的ip,如对于node2,则ip=192.168.33.102.8868

5.Tips

1.由于网络原因,在将def文件转换为sif文件时,出现转换缓慢、需要访问的资源被拦截等问题时,可根据集群上的说明在登陆节点临时使用http代理。
2.转换时出现matplotlib不兼容、ase安装超时等问题,可指定版本和增加安装超时时间等方法解决。

附件:

利用!conda list命令用于列出当前 Conda 环境中所有已安装的包及其版本信息。在遇到依赖问题或环境配置问题时,列出所有安装包有助于诊断和解决这些问题。

# packages in environment at /opt/conda/envs/catmap:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
anyio                     2.2.0            py36h06a4308_1  
argon2-cffi               20.1.0           py36h27cfd23_1  
ase                       3.22.1                   pypi_0    pypi
async_generator           1.10               pyhd3eb1b0_0  
attrs                     21.4.0             pyhd3eb1b0_0  
babel                     2.9.1              pyhd3eb1b0_0  
backcall                  0.2.0              pyhd3eb1b0_0  
bleach                    4.1.0              pyhd3eb1b0_0  
brotlipy                  0.7.0           py36h8f6f2f9_1001    conda-forge
bzip2                     1.0.8                hd590300_5    conda-forge
c-ares                    1.28.1               hd590300_0    conda-forge
ca-certificates           2024.3.11            h06a4308_0  
certifi                   2021.5.30        py36h06a4308_0  
cffi                      1.14.6           py36hd8eec40_1    conda-forge
charset-normalizer        2.1.1              pyhd8ed1ab_0    conda-forge
colorama                  0.4.5              pyhd8ed1ab_0    conda-forge
conda                     4.10.3           py36h5fab9bb_2    conda-forge
conda-package-handling    1.7.3            py36h8f6f2f9_0    conda-forge
contextvars               2.4                        py_0  
cryptography              35.0.0           py36hb60f036_0    conda-forge
cycler                    0.11.0                   pypi_0    pypi
dataclasses               0.8                pyh4f3eec9_6  
decorator                 5.1.1              pyhd3eb1b0_0  
defusedxml                0.7.1              pyhd3eb1b0_0  
entrypoints               0.3                      py36_0  
icu                       73.2                 h59595ed_0    conda-forge
idna                      3.7                pyhd8ed1ab_0    conda-forge
immutables                0.16             py36h7f8727e_0  
importlib-metadata        4.8.1            py36h06a4308_0  
importlib_metadata        4.8.1                hd3eb1b0_0  
ipykernel                 5.3.4            py36h5ca1d4c_0  
ipython                   7.16.1           py36h5ca1d4c_0  
ipython_genutils          0.2.0              pyhd3eb1b0_1  
jedi                      0.17.2           py36h06a4308_1  
jinja2                    3.0.3              pyhd3eb1b0_0  
json5                     0.9.6              pyhd3eb1b0_0  
jsonschema                3.2.0              pyhd3eb1b0_2  
jupyter_client            7.1.2              pyhd3eb1b0_0  
jupyter_core              4.8.1            py36h06a4308_0  
jupyter_server            1.4.1            py36h06a4308_0  
jupyterlab                3.2.1              pyhd3eb1b0_1  
jupyterlab_pygments       0.1.2                      py_0  
jupyterlab_server         2.10.3             pyhd3eb1b0_1  
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.3.1                    pypi_0    pypi
krb5                      1.20.1               hf9c8cef_0    conda-forge
ld_impl_linux-64          2.40                 h55db66e_0    conda-forge
libarchive                3.5.2                hb890918_3    conda-forge
libcurl                   7.87.0               h6312ad2_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 hd590300_2    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libgcc-ng                 13.2.0               h77fa898_7    conda-forge
libgomp                   13.2.0               h77fa898_7    conda-forge
libiconv                  1.17                 hd590300_2    conda-forge
libnghttp2                1.51.0               hdcd2b5c_0    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libsodium                 1.0.18               h7b6447c_0  
libsolv                   0.7.29               ha6fb4c9_0    conda-forge
libsqlite                 3.45.3               h2797004_0    conda-forge
libssh2                   1.10.0               haa6b8db_3    conda-forge
libstdcxx-ng              13.2.0               hc0a3c3a_7    conda-forge
libxml2                   2.12.7               hc051c1a_0    conda-forge
libzlib                   1.2.13               hd590300_5    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
lzo                       2.10              hd590300_1001    conda-forge
mamba                     0.17.0           py36h05d92e0_0    conda-forge
markupsafe                2.0.1            py36h27cfd23_0  
matplotlib                3.3.4                    pypi_0    pypi
mistune                   0.8.4            py36h7b6447c_0  
mpmath                    1.3.0                    pypi_0    pypi
nbclassic                 0.2.6              pyhd3eb1b0_0  
nbclient                  0.5.3              pyhd3eb1b0_0  
nbconvert                 6.0.7                    py36_0  
nbformat                  5.1.3              pyhd3eb1b0_0  
ncurses                   6.5                  h59595ed_0    conda-forge
nest-asyncio              1.5.1              pyhd3eb1b0_0  
notebook                  6.4.3            py36h06a4308_0  
numpy                     1.19.5                   pypi_0    pypi
openssl                   1.1.1w               h7f8727e_0  
packaging                 21.3               pyhd3eb1b0_0  
pandoc                    2.12                 h06a4308_3  
pandocfilters             1.5.0              pyhd3eb1b0_0  
parso                     0.7.0                      py_0  
pexpect                   4.8.0              pyhd3eb1b0_3  
pickleshare               0.7.5           pyhd3eb1b0_1003  
pillow                    8.4.0                    pypi_0    pypi
pip                       21.3.1             pyhd8ed1ab_0    conda-forge
prometheus_client         0.13.1             pyhd3eb1b0_0  
prompt-toolkit            3.0.20             pyhd3eb1b0_0  
ptyprocess                0.7.0              pyhd3eb1b0_2  
pycosat                   0.6.3           py36h8f6f2f9_1006    conda-forge
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pygments                  2.11.2             pyhd3eb1b0_0  
pyopenssl                 22.0.0             pyhd8ed1ab_1    conda-forge
pyparsing                 3.1.2                    pypi_0    pypi
pyrsistent                0.17.3           py36h7b6447c_0  
pysocks                   1.7.1            py36h5fab9bb_3    conda-forge
python                    3.6.15          hb7a2778_0_cpython    conda-forge
python-catmap             0.3.1                    pypi_0    pypi
python-dateutil           2.9.0.post0              pypi_0    pypi
python-graphviz           0.19.1                   pypi_0    pypi
python_abi                3.6                     2_cp36m    conda-forge
pytz                      2021.3             pyhd3eb1b0_0  
pyzmq                     22.2.1           py36h295c915_1  
readline                  8.2                  h8228510_1    conda-forge
reproc                    14.2.4.post0         hd590300_1    conda-forge
reproc-cpp                14.2.4.post0         h59595ed_1    conda-forge
requests                  2.28.1             pyhd8ed1ab_0    conda-forge
ruamel_yaml               0.15.80         py36h8f6f2f9_1004    conda-forge
scipy                     1.5.4                    pypi_0    pypi
send2trash                1.8.0              pyhd3eb1b0_1  
setuptools                58.0.4           py36h5fab9bb_2    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
sniffio                   1.2.0            py36h06a4308_1  
sqlite                    3.45.3               h2c6b66d_0    conda-forge
terminado                 0.9.4            py36h06a4308_0  
testpath                  0.5.0              pyhd3eb1b0_0  
tk                        8.6.13          noxft_h4845f30_101    conda-forge
tornado                   6.1              py36h27cfd23_0  
tqdm                      4.65.0             pyhd8ed1ab_0    conda-forge
traitlets                 4.3.3            py36h06a4308_0  
typing-extensions         4.1.1                hd3eb1b0_0  
typing_extensions         4.1.1              pyh06a4308_0  
urllib3                   1.26.15            pyhd8ed1ab_0    conda-forge
wcwidth                   0.2.5              pyhd3eb1b0_0  
webencodings              0.5.1                    py36_1  
wheel                     0.37.1             pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
zeromq                    4.3.5                h6a678d5_0  
zipp                      3.6.0              pyhd3eb1b0_0  
zstd                      1.5.6                ha6fb4c9_0    conda-forge
CatMAP 动力学求解输入文件准备

CatMAP 动力学求解输入文件准备

# 写在前面 在进行动力学求解实操前,请仔细浏览官方网站的学习资料,避免不必要错误发生。源码十分重要,github上有全部源码,尽可能多读源码,有助于debug和自定义实现目标功能和模块。 官网:https://catmap.readthedocs.io/en/latest/installation.html github: https://github.com/SUNCAT-Center/catmap CatMAP主要需要两个输入文件,分别是**能量文件和机理文件** 能量文件 以下是CatMAP官网给的准备能量文件的相关代码 from ase.atoms import string2symbols abinitio_energies = { 'CO_gas': -626.611970497, 'H2_gas': -32.9625308725, 'CH4_gas': -231.60983421, […]

Leave a comment

Your email address will not be published. Required fields are marked *