使用 Docker 安装 CP2K
使用 Docker 安装 CP2K

使用 Docker 安装 CP2K

@tkaray

参考文章:

  1. docker-singularity方法安装可随意移植的cp2k

  2. Install Docker Engine on CentOS

注: 本文只针对 Linux 和 macOS, 注意把文件夹/内核数或其它需要特化的内容根据实际情况进行修改. Windows 可以稍微参考. 不过真的工作机还是弄个正经的 Linux 系统吧.

看到了以上的第一篇文章, 我动心了. CP2K 的安装虐我千百遍, 总计算起来至少折腾了 3 周以上 (2021 年), 虽然计算速度还是对得起折腾的时间的, 但是没想到还可以快的多得多! 然而可能是因为 RHEL 8.4 的问题 (有些人也遇到了这个问题), 使用这种方法安装 Singularity 无法读取文件. 只有解压后才能正常读取, 因此我选择了用 Docker 从头装到尾的办法, 成功在 macOS Big Sur 和 RHEL 8.4 上安装 Docker 版本的 CP2K. 然而因为是 Docker, 只能在自己电脑上使用了. 以下是方法:

1. 安装 Docker

macOS 和 Windows 上直接下载即可. 注意 Windows 需要开启 HyperV.

Linux 下的安装参照 Install Docker Engine on CentOS. 需要使用 root 权限.

1.1 卸载已有版本:

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

1.2 添加 Docker 仓库:

我们一般使用的是 Stable 版本.

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

1.3 安装 Docker

sudo yum install docker-ce docker-ce-cli containerd.io

GPG key 值为 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35.

1.4 启动 Docker 服务

Linux 需要这一步, macOS 直接启动 Docker App 就行.

# 启动 Docker 服务
systemctl enable docker
# 设置开机自启动
systemctl start docker

2. Docker 在 Linux 的简要使用方法

由于我们只是使用 Docker, 因此一些不重要的概念就忽略掉.

镜像 (Image): 一个或多个只读镜像层叠加获得的文件系统. 在网上拉取下来的都是镜像.

容器 (Container): 一个读写层 + 镜像, 我们所做的更改都会保存到读写层中.

运行态容器 (Running Container): 带有隔离的进程空间与其中的进程 + 容器. 可以发现, 想要在 Docker 中运行一个进程, 需要先做/下载镜像 (build / pull), 初始化容器 (run), 然后运行它 (start), 最后连进去 (exec).

Docker 在 Windows 和 macOS 下均有 GUI, 可以直接使用图形化设置进行操作. Linux 中稍微麻烦一点, 需要使用命令, 而命令的内容就是 docker 加上一段讲的几个指令. 当第一次安装时, 我们需要走完全部流程, 但之后的启动都只需要运行/连进去了. 不过如果想要和主机共享文件夹, 第一次如果没有输入共享命令, 那就需要再初始化一次了.

3. 安装 CP2K

此处主要参考 docker-singularity方法安装可随意移植的cp2k. 所有在 Singularity 中的操作均挪到了 Docker 中进行.

3.1 下载 CP2K Release

链接: CP2K Releases

请注意, 由于 CP2K 文件中还含有一些支持包, 所以在 GitHub 主页中不要点 Download zip 或者 下载 source code (zip / tar.gz) 的打包文件, 而要下载 cp2k-${VERSION}.tar.bz2 文件, 否则在安装本体时会报错. 不过不需要从头重来, 再下一次完整打包就好了.

3.2 配置镜像, 装支持软件

想办法解压了包, 然后开装 (可以用永远都记不住参数的 tar 命令 orzzz). 注意! 一定要写最后的点.. 这步在 macOS 中也要进行, 先启动 Docker App, 然后执行后续命令. Linux 下则是紧接以上步骤直接开始.

tar jxf cp2k-9.1.tar.bz2
docker build -t cp2k/toolchain .

网络不好可以想想办法让它好点. 或者换个清晨操作. 中途中断了可以重新运行 build 命令, 镜像会接着之前的进度继续. 可以发现目前镜像中使用的系统是 Ubuntu 20.04 LTS.

装完后会给一段振奋人心的输出, 以前每次手动装到这里都很开心 (虽然只完成了一半):

# 因为没有记录当时的输出, 图省事直接复制了上面帖子的输出
========================== usage =========================
Done!
Now copy:
  cp /opt/cp2k-toolchain/install/arch/* to the cp2k/arch/ directory
To use the installed tools and libraries and cp2k version
compiled with it you will first need to execute at the prompt:
  source /opt/cp2k-toolchain/install/setup
To build CP2K you should change directory:
  cd cp2k/
  make -j 48 ARCH=local VERSION="ssmp sdbg psmp pdbg"

arch files for GPU enabled CUDA versions are named "local_cuda.*"
arch files for coverage versions are named "local_coverage.*"

Note that these pre-built arch files are for the GNU compiler, users have to adapt them for other compilers.
It is possible to use the provided CP2K arch files as guidance.
Removing intermediate container 68b68474d16a
 ---> 68e78acf2465
Successfully built 68e78acf2465
Successfully tagged cp2k/toolchain:latest

3.3 运行镜像, 装 CP2K 本体

现在已经做好了镜像, 我们需要运行它. 在 macOS 第一次设置时建议使用和 Linux 同样的办法以共享文件夹, 之后均可以通过 Docker App 快速运行. 使用以下命令看看现在的镜像名字:

docker image ls

程序会输出目前已经安装的镜像 ID:

REPOSITORY             TAG       IMAGE ID       CREATED        SIZE
cp2k/toolchain         latest    26c3581ed7f6   3 weeks ago    6.5GB

现在运行这个叫 26c3581ed7f6 的镜像, 等等! 还需要共享一个文件夹. 我们在宿主系统中创建一个共享文件夹, 然后在运行时把它提交进来 (这里不指定容器的名字好像也不会出问题):

docker run -t -i -v 主机文件夹路径:容器文件夹路径 --name anyname bash

第一次创建并运行后, 我们之后每次需要运行时, 就可以使用以下命令查看容器名称, 和运行容器了 (macOS 可以直接使用 Docker App 的 Dashboard – Containers / Apps 运行, 然后打开 CLI, 当然以下命令也生效):

docker ps -a
docker start anyname
docker exec -it anyname /bin/bash

当看到 Linux 的命令提示符发生变化时, 我们就进入了容器~

现在把 CP2K 的压缩包通过共享文件夹塞进容器中, 然后在内部解压复制到 /opt 文件夹,和 toolchain 文件夹做个伴. 现在终于可以执行上面那一段话中写的指令了:

cp /opt/cp2k-toolchain/install/arch/* to the /opt/cp2k-9.1/arch/
source /opt/cp2k-toolchain/install/setup
cd cp2k-9.1/
make -j 8 ARCH=local VERSION="psmp"

静候佳音~然后大功告成! 可能这时候才会发现居然没有 vim 用….给系统升级并安装一下吧

apt-get update
apt-get upgrade
apt-get install -y vim

现在要在 ~/.bashrc 中添加 CP2K 所需的以下环境变量:

source /opt/cp2k-toolchain/install/setup
export PATH=$PATH:/opt/cp2k-9.1/exe/local

4. 关于运行

退出后重新运行容器参照以上方法:

docker ps -a
docker start anyname
docker exec -it anyname /bin/bash

如果在运行时不需要 OpenMP 并行, 请使用

mpirun -np 8 cp2k.popt -i xxx.inp -o xxx.out

如果需要使用 OpenMP 并行, 请在使用前指定 OMP_NUM_THREADS

export $OMP_NUM_THREADS=n
mpirun -np 8 cp2k.psmp -i xxx.inp -o xxx.out

发表回复

您的电子邮箱地址不会被公开。