计算化学公社
标题: 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:
- docker save 8cb745f97725 -o cp2k-2023.1.tar
复制代码
5. 将cp2k-2023.1.tar转为singularity的sandbox:
- singularity build --sandbox cp2k-2023.1 docker-archive://cp2k-2023.1.tar
复制代码
6. 进入该sandbox进行一些必要的设置:
- singularity shell -w cp2k-2023.1
复制代码
7. 首先查看gcc版本,对于2023.1,用的是gcc-11.3.0:
(, 下载次数 Times of downloads: 26)
8. 给容器的系统安装vim:
- apt-get update && apt-get install -y vim
复制代码
9. 设置环境变量:
- vi /.singularity.d/env/91-environment.sh
复制代码
添加以下内容:
- source /opt/cp2k-toolchain/install/setup
- export PATH=$PATH:/opt/cp2k/exe/local
- export CP2K_DATA_DIR=/opt/cp2k/data
复制代码
退出:
10. 将cp2k-2023.1压缩成singularity镜像:
- 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的种类、版本和编译参数:
(, 下载次数 Times of downloads: 26)
可以看到官方镜像使用的是mpich-4.0.3,编译参数也一目了然。
按照这些信息在主机上先编译gcc-11.3.0,再用该gcc编译mpich即可。
编译gcc参考:
解压gcc-11.3.0源代码包
- cd gcc-11.3.0
- ./contrib/download_prerequisites
- mkdir build && cd build
- ../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的环境变量
- export PATH=/public/opt/gcc-11.3.0/bin:$PATH
- export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
- export LD_LIBRARY_PATH=/public/opt/gcc-11.3.0/lib64:$LD_LIBRARY_PATH
复制代码
编译mpich参考:
解压源代码包并进入解压出的目录
- ./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= '
- make -j24
- make install
复制代码
运行CP2K的slurm脚本参考:
- #!/bin/bash
- #SBATCH -J cp2k_2023.1
- #SBATCH -p P1
- #SBATCH --nodes=1
- #SBATCH --ntasks-per-node=36
- export EXE="singularity exec /public/opt/cp2k/cp2k2023.1.sif"
- ulimit -s unlimited
- #gcc-11.3.0
- export PATH=/public/opt/gcc/11.3.0/bin:$PATH
- export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
- export LD_LIBRARY_PATH=/public/opt/gcc/11.3.0/lib64:$LD_LIBRARY_PATH
- #mpich-4.0.3
- export MPI_HOME=/public/home/tom/opt/mpich-4.0.3
- export PATH=$MPI_HOME/bin:$PATH
- export PATH=$PATH:$MPI_HOME/include
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/lib
- export MANPATN=$MANPATH:$MPI_HOME/man
- mpirun -np $SLURM_NPROCS ${EXE} cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码
12. 如果不用slurm等类似的队列,想直接在本地机器运行CP2K,就不用额外装gcc和mpi,直接用容器内的mpi即可运行:
- export EXE="singularity exec/public/opt/cp2k/cp2k2023.1.sif"
- ${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
速度差不多,没有提升
作者Author: leeru 时间: 2023-1-14 10:55
我在用singularity打包时出现了签名错误,不知道楼主有没有遇到,我是用conda安装的singularity
作者Author: djjj148 时间: 2023-1-14 11:32
我用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
仔细看帖子,提到过的
作者Author: renzhogn424 时间: 2023-1-18 15:33
是的,我偷懒了,直接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
测试了一下,apptainer可以直接yum安装,使用和singularity一致,或许你说的是非root用户的编译不太好装?
作者Author: ggdh 时间: 2023-2-25 02:37
本帖最后由 ggdh 于 2023-2-25 09:09 编辑
分享一下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
应该是这个报错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
请问下 你的这个HINT 能解决吗?
作者Author: Janson_Shi 时间: 2023-4-11 13:20
请问下这个HINT 能解决吗?
作者Author: renzhogn424 时间: 2023-4-11 13:55
当然可以,按照教程,运行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
请问一下楼主,我的运行脚本如下:
- export EXE="singularity exec /run/media/polyucmp/hdd1/BIAN_Tieyuan/software/docker-cp2k/cp2k-2023.2.sif"
- ${EXE} mpirun -np 128 cp2k.popt ./cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码
运行之后报错
- *******************************************************************************
- * ___ *
- * / \ *
- * [ABORT] *
- * \___/ The specified OLD file <./cp2k.inp> cannot be opened. It does not *
- * | exist. Data directory path: /opt/cp2k/data *
- * O/| *
- * /| | *
- * / \ common/cp_files.F:396 *
- *******************************************************************************
复制代码
这个错如何解决呢
作者Author: djjj148 时间: 2024-3-28 11:16
应该是singlarity的挂载问题,把镜像换个位置试试
作者Author: wolfli369 时间: 2024-3-28 13:16
给你点赞
作者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 |