计算化学公社

 找回密码 Forget password
 注册 Register
Views: 8806|回复 Reply: 32
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] cp2k-2023.1的docker-singularity安装方法

[复制链接 Copy URL]

251

帖子

4

威望

4406

eV
积分
4737

Level 6 (一方通行)

本帖最后由 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镜像也是这样的情况)。

如果生成镜像的机器的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镜像

将其保存到当前目录并命名为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
复制代码



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
复制代码

可以看到官方镜像使用的是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,在花时间学习此方法前建议先调研清楚。



评分 Rate

参与人数
Participants 11
威望 +1 eV +48 收起 理由
Reason
qinsc + 5 谢谢分享
Graphite + 5 牛!
天然呆 + 5 赞!
neocc + 5 好物!
ggdh + 5 谢谢
zorow + 5 GJ!
devilove + 3 牛!
sobereva + 1
renzhogn424 + 5 赞!
wolfli369 + 5 牛!
丁越 + 5 赞!

查看全部评分 View all ratings

55

帖子

0

威望

1953

eV
积分
2008

Level 5 (御坂)

33#
发表于 Post on 2024-6-8 11:48:34 | 只看该作者 Only view this author
老师您好,我先问一下运行 build_dockerhub_images.sh之后显示ERROR: invalid tag "cp2k/cp2k:dev%cs": invalid reference format是什么原因呢?

5

帖子

0

威望

219

eV
积分
224

Level 3 能力者

32#
发表于 Post on 2024-6-1 22:55:29 | 只看该作者 Only view this author
为啥不能直接安装centos的sandbox,然后再在里面编译cp2k

232

帖子

1

威望

3331

eV
积分
3583

Level 5 (御坂)

31#
发表于 Post on 2024-3-28 13:16:25 | 只看该作者 Only view this author
ggdh 发表于 2023-2-25 02:37
分享一下apptainer的使用,基本和singularity一样
1.安装
sudo dnf install apptainer

给你点赞

251

帖子

4

威望

4406

eV
积分
4737

Level 6 (一方通行)

30#
 楼主 Author| 发表于 Post on 2024-3-28 11:16:46 | 只看该作者 Only view this author
Weldingspock 发表于 2024-3-27 22:04
请问一下楼主,我的运行脚本如下:

应该是singlarity的挂载问题,把镜像换个位置试试

197

帖子

1

威望

1104

eV
积分
1321

Level 4 (黑子)

29#
发表于 Post on 2024-3-27 22:04:26 | 只看该作者 Only view this author
请问一下楼主,我的运行脚本如下:
  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. *******************************************************************************
复制代码


这个错如何解决呢

197

帖子

1

威望

1104

eV
积分
1321

Level 4 (黑子)

28#
发表于 Post on 2024-3-27 20:56:15 | 只看该作者 Only view this author
请问楼主,我在进入sandbox之后输入mpirun --version显示mpirun command not found。这是因为什么呢

99

帖子

0

威望

3299

eV
积分
3398

Level 5 (御坂)

27#
发表于 Post on 2023-8-1 11:49:13 | 只看该作者 Only view this author
本帖最后由 LittlePupil 于 2023-8-5 12:05 编辑

不知道楼主有没有留意过官方github仓库里的tools/apptainer部分?里面有提供generic和skylake-avx512两个版本的singularity镜像的下载及使用说明,可惜目前只有2023.1版本的(2023.8.5注:已经有2023.2版本的了,还多了针对haswell架构CPU制作的镜像)。
「狩りってのは先に焦せった方の負けだ、ハンターも獲物もな」

1

帖子

0

威望

19

eV
积分
20

Level 1 能力者

26#
发表于 Post on 2023-6-6 17:01:23 | 只看该作者 Only view this author
您好,请问如何要编译带GPU的,如何整?

174

帖子

0

威望

2863

eV
积分
3037

Level 5 (御坂)

25#
发表于 Post on 2023-5-30 09:44:09 | 只看该作者 Only view this author
感谢大佬,终于能在服务器上跑了。就是租云服务器还是稍微有一点贵,不过快是真的快,相比于折腾浪费的时间,确实还是挺划算的。

1

帖子

0

威望

11

eV
积分
12

Level 1 能力者

24#
发表于 Post on 2023-5-21 11:27:46 | 只看该作者 Only view this author
本帖最后由 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



82

帖子

0

威望

596

eV
积分
678

Level 4 (黑子)

23#
发表于 Post on 2023-5-16 12:09:27 来自手机 | 只看该作者 Only view this author
话说我还是用不了IB网络

82

帖子

0

威望

596

eV
积分
678

Level 4 (黑子)

22#
发表于 Post on 2023-5-16 10:40:03 | 只看该作者 Only view this author
'with-device=ch3' 最好要换成‘with-device=ch4:ucx’这样就可以使用IB网络了

117

帖子

0

威望

1953

eV
积分
2070

Level 5 (御坂)

21#
发表于 Post on 2023-4-13 18:21:30 | 只看该作者 Only view this author
谢谢楼主分享经验,把“Dockerfile.prod_generic_psmp”这个坑给填上了。这次官方脚本把组件安装、本体安装,甚至编译后的test都集中到一起了,确实很顺利。
有个问题请教楼主,编译完成后,在容器里的/opt/cp2k/exe/local目录下产生了三个可执行文件:cp2k、cp2k.popt、cp2k.psmp,是不是第一个cp2k是cp2k.ssmp啊?
再谢楼主。

135

帖子

0

威望

1549

eV
积分
1684

Level 5 (御坂)

20#
发表于 Post on 2023-4-11 13:55:32 | 只看该作者 Only view this author
Janson_Shi 发表于 2023-4-11 13:20
请问下这个HINT 能解决吗?

当然可以,按照教程,运行build_dockerhub_images.sh自己来生成这个镜像就可以啦。后面运算速度还快

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-24 16:59 , Processed in 0.222699 second(s), 32 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list