计算化学公社

标题: cp2k-2023.1的docker-singularity安装方法 [打印本页]

作者
Author:
djjj148    时间: 2023-1-13 19:02
标题: cp2k-2023.1的docker-singularity安装方法
本帖最后由 djjj148 于 2023-1-16 12:43 编辑

一、前言
之前写过相关的帖子:
docker-singularity方法安装可随意移植的cp2k
http://bbs.keinsci.com/forum.php?mod=viewthread&tid=25773&fromuid=15641


CP2K-singularity镜像分享
http://bbs.keinsci.com/forum.php?mod=viewthread&tid=30907&fromuid=15641
(出处: 计算化学公社)


温馨提示:阅读此贴前请务必先阅读前两个帖子,帖子里提到过docker-singularity安装方法的普适性、重要性、可移植性、相关概念、操作注释等关键内容。

以下是一些FAQ。
Q:之前的帖子已经比较详细的记录了安装方法,还有必要重新开一个帖子吗?
A:有,因为官方在最新的2023.1版本中更新了一些安装方法,且有一些没有提到的细节和新的坑值得记录和分享。

Q:官方会上传docker镜像,我们直接pull就好了,为什么还要学习安装?
A:理由如下,
1. 因为要追求稳健,官方给的镜像在某些方面上有优化的空间(下文会详细讲)。
2. docker镜像无法在主流的超算平台中使用,比如slurm队列。需要将其转换为singularity镜像,这其中有一些细节和坑值得分享。
3. docker-singularity方法普适性极强,学会了这个对于其他软件的安装有很大帮助。此方法可能看似复杂,实则是很套路化的方法。理解每一个安装步骤后,安装其他软件会非常简单和省心。
同时,此方法编译出来的软件是开发者亲自优化过的,速度最快,bug最少。如果直接pull镜像的话,可能会遇到坑。
4. 官方发布新版本的源代码后,要隔好一段时间才上传镜像,有些版本甚至都不会上传。学会此方法可以更快的尝鲜。


二、安装过程
1. 解压CP2K安装包,进入其中的tools/docker目录

2. 对于2023.1版本,运行build_dockerhub_images.sh即可生成docker image(需要安装docker)
但是要小心,2023.1版本中,build_dockerhub_images.sh脚本里使用的是Dockerfile.prod_generic_psmp,它会在运行install_cp2k_toolchain.sh脚本时添加--target-cpu=generic参数,这个是一个追求稳健的做法,但是会导致程序在编译时不会根据当前CPU的最高指令集对编译过程进行优化,最终引起编译出来的CP2K较慢。而且在跑CP2K的时候,每一步电子步都会有警告,看着很难受(官方的docker镜像也是这样的情况)。
(, 下载次数 Times of downloads: 29)
如果生成镜像的机器的CPU和要运行镜像的CPU拥有同样的最高指令集,用Dockerfile.prod_psmp即可解决速度慢和反复警告的问题。
具体做法是把build_dockerhub_images.sh中的Dockerfile.prod_generic_psmp改成Dockerfile.prod_psmp
但是要注意,如果两个机器的CPU的最高指令集不一样,比如前者最高支持avx2,后者支持到avx512,也可能会被反复警告。
此时建议找一个支持512指令集的机器生成镜像,可以考虑租用云服务器。实在不行用Dockerfile.prod_generic_psmp凑合也可以。


3. 根据自己的情况修改好build_dockerhub_images.sh后运行之。脚本会在当前系统上安装一个ubuntu的容器系统,并在里面完成相关软件包的下载和编译、CP2K的编译和测试。
PS:有些安装包需要到github上下载,这需要使用一些科学手段。


4. 脚本运行完成后,会生成一个CP2K的docker image镜像
(, 下载次数 Times of downloads: 30)

将其保存到当前目录并命名为cp2k-2023.1.tar:
  1. docker save 8cb745f97725 -o cp2k-2023.1.tar
复制代码


5. 将cp2k-2023.1.tar转为singularity的sandbox:
  1. singularity build --sandbox cp2k-2023.1 docker-archive://cp2k-2023.1.tar
复制代码


6. 进入该sandbox进行一些必要的设置:
  1. singularity shell -w cp2k-2023.1
复制代码

7. 首先查看gcc版本,对于2023.1,用的是gcc-11.3.0:
  1. gcc -v
复制代码

(, 下载次数 Times of downloads: 26)


8. 给容器的系统安装vim:
  1. apt-get update && apt-get install -y vim
复制代码


9. 设置环境变量:
  1. vi /.singularity.d/env/91-environment.sh
复制代码

添加以下内容:
  1. source /opt/cp2k-toolchain/install/setup
  2. export PATH=$PATH:/opt/cp2k/exe/local
  3. export CP2K_DATA_DIR=/opt/cp2k/data
复制代码


退出:
  1. exit
复制代码



10. 将cp2k-2023.1压缩成singularity镜像:
  1. singularity build cp2k-2023.1.sif cp2k-2023.1
复制代码


11. 【可选的操作】
如果使用类似slurm的队列系统来运行CP2K,尤其是多节点并行,需要在主机上安装mpi,且保证该mpi和镜像中的一致,具体要求:
(1)mpi种类和版本一致
(2)编译mpi的参数一致
(3)编译mpi的gcc一致
gcc版本我们刚才已经看过了,是11.3.0。进入容器,查看mpi的种类、版本和编译参数:
  1. mpirun --version
复制代码
(, 下载次数 Times of downloads: 26)

可以看到官方镜像使用的是mpich-4.0.3,编译参数也一目了然。
按照这些信息在主机上先编译gcc-11.3.0,再用该gcc编译mpich即可。

编译gcc参考:
解压gcc-11.3.0源代码包
  1. cd gcc-11.3.0

  2. ./contrib/download_prerequisites
  3. mkdir build && cd build
  4. ../configure --prefix=/public/opt/gcc-11.3.0/ --enable-checking=release--enable-languages=c,c++,fortran --disable-multilib && make -j 24 && make install
复制代码

#加载gcc-11.3.0的环境变量
  1. export PATH=/public/opt/gcc-11.3.0/bin:$PATH
  2. export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
  3. export LD_LIBRARY_PATH=/public/opt/gcc-11.3.0/lib64:$LD_LIBRARY_PATH
复制代码


编译mpich参考:
解压源代码包并进入解压出的目录
  1. ./configure '--disable-option-checking' '--prefix=/public/home/tom/opt/mpich-4.0.3'         '--libdir=/public/home/tom/opt/mpich-4.0.3/lib'         'MPICC=' 'FFLAGS=-O2 -fPIC -fno-omit-frame-pointer-fopenmp -g -mtune=generic -fbacktrace -fallow-argument-mismatch ' 'FCFLAGS=-O2-fPIC -fno-omit-frame-pointer -fopenmp -g -mtune=generic -fbacktrace-fallow-argument-mismatch ' '--without-x' '--enable-gl=no' '--with-device=ch3''CC=/public/opt/gcc/11.3.0/bin/gcc' 'CFLAGS=-O2-fPIC -fno-omit-frame-pointer -fopenmp -g -mtune=generic ' 'LDFLAGS=' 'CXX=/public/opt/gcc/11.3.0/bin/g++' 'CXXFLAGS=-O2 -fPIC-fno-omit-frame-pointer -fopenmp -g -mtune=generic ' 'FC=/public/opt/gcc/11.3.0/bin/gfortran' 'F77=/public/opt/gcc/11.3.0/bin/gfortran''--cache-file=/dev/null' '--srcdir=.' 'LIBS=' 'CPPFLAGS= '
  2. make -j24
  3. make install
复制代码


运行CP2K的slurm脚本参考:
  1. #!/bin/bash
  2. #SBATCH -J cp2k_2023.1
  3. #SBATCH -p P1
  4. #SBATCH --nodes=1
  5. #SBATCH --ntasks-per-node=36

  6. export EXE="singularity exec /public/opt/cp2k/cp2k2023.1.sif"
  7. ulimit -s unlimited

  8. #gcc-11.3.0
  9. export PATH=/public/opt/gcc/11.3.0/bin:$PATH
  10. export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
  11. export LD_LIBRARY_PATH=/public/opt/gcc/11.3.0/lib64:$LD_LIBRARY_PATH

  12. #mpich-4.0.3
  13. export MPI_HOME=/public/home/tom/opt/mpich-4.0.3
  14. export PATH=$MPI_HOME/bin:$PATH
  15. export PATH=$PATH:$MPI_HOME/include
  16. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/lib
  17. export MANPATN=$MANPATH:$MPI_HOME/man

  18. mpirun -np $SLURM_NPROCS ${EXE} cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码



12. 如果不用slurm等类似的队列,想直接在本地机器运行CP2K,就不用额外装gcc和mpi,直接用容器内的mpi即可运行
  1. export EXE="singularity exec/public/opt/cp2k/cp2k2023.1.sif"
  2. ${EXE} mpirun -np 36 cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码

三、后记
如果租用超算,管理员可能不给装singularity,也就无法使用镜像运行CP2K,在花时间学习此方法前建议先调研清楚。




作者
Author:
renzhogn424    时间: 2023-1-13 22:51
还在用9.1,不知道2023速度咋样
作者
Author:
djjj148    时间: 2023-1-14 10:41
renzhogn424 发表于 2023-1-13 22:51
还在用9.1,不知道2023速度咋样

速度差不多,没有提升
作者
Author:
leeru    时间: 2023-1-14 10:55
我在用singularity打包时出现了签名错误,不知道楼主有没有遇到,我是用conda安装的singularity
作者
Author:
djjj148    时间: 2023-1-14 11:32
leeru 发表于 2023-1-14 10:55
我在用singularity打包时出现了签名错误,不知道楼主有没有遇到,我是用conda安装的singularity

我用yum安装的,没有遇到。singularity应该需要root授权
作者
Author:
renzhogn424    时间: 2023-1-16 10:04
昨天从docker hub上下载了2023的镜像,做成sif运行了试试。倒是能正常计算,不过出现提示:
*** HINT in environment.F:884 :: The compiler target flags (generic) used ***
*** to build this binary cannot exploit all extensions of this CPU model  ***
*** (x86_avx2). Consider compiler target flags as part of FCFLAGS and     **
然后每算一个电子步一个WARNING
*** WARNING in fm/cp_fm_elpa.F:524 :: Setting real_kernel for ELPA failed ***

似乎不影响结果,不知道这个怎么解决。

作者
Author:
djjj148    时间: 2023-1-16 12:38
renzhogn424 发表于 2023-1-16 10:04
昨天从docker hub上下载了2023的镜像,做成sif运行了试试。倒是能正常计算,不过出现提示:
*** HINT in  ...

仔细看帖子,提到过的
作者
Author:
renzhogn424    时间: 2023-1-18 15:33
djjj148 发表于 2023-1-16 12:38
仔细看帖子,提到过的

是的,我偷懒了,直接pull了官方的docker镜像
作者
Author:
wth1219    时间: 2023-2-17 11:22
每步SCF警告“WARNING in fm/cp_fm_elpa.F:524 :: Setting real_kernel for ELPA failed”的问题如果不在意较小的速度差异的话,使用楼主分享的镜像时在&GLOBAL中设置PREFERRED_DIAG_LIBRARY SL即可解决。
作者
Author:
ghifi37    时间: 2023-2-17 11:49
请问AVX-512指令在CP2K上有明显提速吗?我之前用VASP发现512比2指令集慢不少,可能是遇到热墙的问题。
作者
Author:
MolAICal    时间: 2023-2-17 12:36
本帖最后由 MolAICal 于 2023-2-17 12:37 编辑

singularity现在换名成APPTainer了,不太好装。。。docker好一点,但是非个人用户商用要收费。
作者
Author:
djjj148    时间: 2023-2-19 09:51
MolAICal 发表于 2023-2-17 12:36
singularity现在换名成APPTainer了,不太好装。。。docker好一点,但是非个人用户商用要收费。

测试了一下,apptainer可以直接yum安装,使用和singularity一致,或许你说的是非root用户的编译不太好装?
作者
Author:
ggdh    时间: 2023-2-25 02:37
本帖最后由 ggdh 于 2023-2-25 09:09 编辑
djjj148 发表于 2023-2-19 09:51
测试了一下,apptainer可以直接yum安装,使用和singularity一致,或许你说的是非root用户的编译不太好装 ...

分享一下apptainer的使用,基本和singularity一样
1.安装
sudo dnf install apptainer
2.镜像转化和编辑
sudo apptainer build --sandbox cp2k-2023.1 docker-daemon://cp2k/cp2k:dev
sudo apptainer shell -w cp2k-2023.1
echo 'source /opt/cp2k-toolchain/install/setup' > /.singularity.d/env/91-environment.sh
echo 'export PATH=$PATH:/opt/cp2k/exe/local' >> /.singularity.d/env/91-environment.sh
echo 'export CP2K_DATA_DIR=/opt/cp2k/data' >>/.singularity.d/env/91-environment.sh
exit
sudo apptainer build cp2k-2023.1.sif cp2k-2023.1/
3.试运行
apptainer exec ~/program/cp2k-2023.1.sif mpirun -np 64 cp2k.popt H2O-64.inp





作者
Author:
neocc    时间: 2023-3-8 12:35
本帖最后由 neocc 于 2023-3-8 13:05 编辑

楼主能分享一下不带和带avx512的2023.1的sif镜像嚒
作者
Author:
nianbin    时间: 2023-3-24 15:04
哥哥,你这个教程比之前那个好多了,简洁明了
作者
Author:
nianbin    时间: 2023-3-24 18:17
application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0 我出现这个报错应该如何解决呀

作者
Author:
nianbin    时间: 2023-3-24 21:23
nianbin 发表于 2023-3-24 18:17
application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0 我出现这个报错应该如何解决呀

应该是这个报错The specified OLD file <000.inp> cannot be opened. It does not exist. Data directory path: /opt/cp2k/data
作者
Author:
Janson_Shi    时间: 2023-4-11 13:19
djjj148 发表于 2023-1-16 12:38
仔细看帖子,提到过的

请问下 你的这个HINT 能解决吗?
作者
Author:
Janson_Shi    时间: 2023-4-11 13:20
renzhogn424 发表于 2023-1-16 10:04
昨天从docker hub上下载了2023的镜像,做成sif运行了试试。倒是能正常计算,不过出现提示:
*** HINT in  ...

请问下这个HINT 能解决吗?
作者
Author:
renzhogn424    时间: 2023-4-11 13:55
Janson_Shi 发表于 2023-4-11 13:20
请问下这个HINT 能解决吗?

当然可以,按照教程,运行build_dockerhub_images.sh自己来生成这个镜像就可以啦。后面运算速度还快
作者
Author:
wanlichuan    时间: 2023-4-13 18:21
谢谢楼主分享经验,把“Dockerfile.prod_generic_psmp”这个坑给填上了。这次官方脚本把组件安装、本体安装,甚至编译后的test都集中到一起了,确实很顺利。
有个问题请教楼主,编译完成后,在容器里的/opt/cp2k/exe/local目录下产生了三个可执行文件:cp2k、cp2k.popt、cp2k.psmp,是不是第一个cp2k是cp2k.ssmp啊?
再谢楼主。
作者
Author:
leeru    时间: 2023-5-16 10:40
'with-device=ch3' 最好要换成‘with-device=ch4:ucx’这样就可以使用IB网络了
作者
Author:
leeru    时间: 2023-5-16 12:09
话说我还是用不了IB网络
作者
Author:
jnbx    时间: 2023-5-21 11:27
本帖最后由 jnbx 于 2023-5-21 11:29 编辑

我用bash build_dockerhub_images.sh构建docker镜像时,出现这个报错,换了两个节点,故障一样,有知道的么
=> CACHED [33/40] COPY ./tools/build_utils ./tools/build_utils                                           0.0s
=> ERROR [34/40] RUN /bin/bash -c "     if [ -n "" ] ; then echo "git:${GIT_COMMIT_SHA::7}" > REVISION;  2.9s
------
> [34/40] RUN /bin/bash -c "     if [ -n "" ] ; then echo "git:${GIT_COMMIT_SHA::7}" > REVISION; fi &&     mkdir -p arch &&     ln -vs /opt/cp2k-toolchain/install/arch/local.psmp ./arch/ &&     echo 'Compiling cp2k...' &&     source /opt/cp2k-toolchain/install/setup &&     make -j ARCH=local VERSION=psmp &&     ln -sf ./cp2k.psmp ./exe/local/cp2k &&     ln -sf ./cp2k_shell.psmp ./exe/local/cp2k_shell &&     rm -rf lib obj exe/local/libcp2k_unittest.psmp &&     ( [ ! -f ./exe/local/cp2k.psmp ] || ldd ./exe/local/cp2k.psmp | grep -q libmpi )":
#0 0.850 './arch/local.psmp' -> '/opt/cp2k-toolchain/install/arch/local.psmp'
#0 0.850 Compiling cp2k...
#0 2.255 Discovering programs ...
#0 2.759 /opt/cp2k/exts/Makefile.inc:2: *** "No DBCSR submodule available, please run 'git submodule update --init --recursive'".  Stop.
#0 2.759 make[1]: *** [/opt/cp2k/Makefile:128: psmp] Error 2
#0 2.759 make: *** [Makefile:123: all] Error 2




作者
Author:
GoldenBaby    时间: 2023-5-30 09:44
感谢大佬,终于能在服务器上跑了。就是租云服务器还是稍微有一点贵,不过快是真的快,相比于折腾浪费的时间,确实还是挺划算的。
作者
Author:
bent    时间: 2023-6-6 17:01
您好,请问如何要编译带GPU的,如何整?
作者
Author:
LittlePupil    时间: 2023-8-1 11:49
本帖最后由 LittlePupil 于 2023-8-5 12:05 编辑

不知道楼主有没有留意过官方github仓库里的tools/apptainer部分?里面有提供generic和skylake-avx512两个版本的singularity镜像的下载及使用说明,可惜目前只有2023.1版本的(2023.8.5注:已经有2023.2版本的了,还多了针对haswell架构CPU制作的镜像)。
作者
Author:
Weldingspock    时间: 2024-3-27 20:56
请问楼主,我在进入sandbox之后输入mpirun --version显示mpirun command not found。这是因为什么呢
作者
Author:
Weldingspock    时间: 2024-3-27 22:04
请问一下楼主,我的运行脚本如下:
  1. export EXE="singularity exec /run/media/polyucmp/hdd1/BIAN_Tieyuan/software/docker-cp2k/cp2k-2023.2.sif"
  2. ${EXE} mpirun -np 128 cp2k.popt ./cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码


运行之后报错

  1. *******************************************************************************
  2. *   ___                                                                       *
  3. *  /   \                                                                      *
  4. * [ABORT]                                                                     *
  5. *  \___/    The specified OLD file <./cp2k.inp> cannot be opened. It does not *
  6. *    |                 exist. Data directory path: /opt/cp2k/data             *
  7. *  O/|                                                                        *
  8. * /| |                                                                        *
  9. * / \                                                   common/cp_files.F:396 *
  10. *******************************************************************************
复制代码


这个错如何解决呢
作者
Author:
djjj148    时间: 2024-3-28 11:16
Weldingspock 发表于 2024-3-27 22:04
请问一下楼主,我的运行脚本如下:

应该是singlarity的挂载问题,把镜像换个位置试试
作者
Author:
wolfli369    时间: 2024-3-28 13:16
ggdh 发表于 2023-2-25 02:37
分享一下apptainer的使用,基本和singularity一样
1.安装
sudo dnf install apptainer

给你点赞
作者
Author:
jimpan    时间: 2024-6-1 22:55
为啥不能直接安装centos的sandbox,然后再在里面编译cp2k
作者
Author:
秋心    时间: 2024-6-8 11:48
老师您好,我先问一下运行 build_dockerhub_images.sh之后显示ERROR: invalid tag "cp2k/cp2k:dev%cs": invalid reference format是什么原因呢?




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3