一、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