计算化学公社

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

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

[复制链接 Copy URL]

251

帖子

4

威望

4410

eV
积分
4741

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

135

帖子

0

威望

1551

eV
积分
1686

Level 5 (御坂)

2#
发表于 Post on 2023-1-13 22:51:05 | 只看该作者 Only view this author
还在用9.1,不知道2023速度咋样

251

帖子

4

威望

4410

eV
积分
4741

Level 6 (一方通行)

3#
 楼主 Author| 发表于 Post on 2023-1-14 10:41:45 | 只看该作者 Only view this author
renzhogn424 发表于 2023-1-13 22:51
还在用9.1,不知道2023速度咋样

速度差不多,没有提升

82

帖子

0

威望

596

eV
积分
678

Level 4 (黑子)

4#
发表于 Post on 2023-1-14 10:55:33 来自手机 | 只看该作者 Only view this author
我在用singularity打包时出现了签名错误,不知道楼主有没有遇到,我是用conda安装的singularity

251

帖子

4

威望

4410

eV
积分
4741

Level 6 (一方通行)

5#
 楼主 Author| 发表于 Post on 2023-1-14 11:32:17 | 只看该作者 Only view this author
leeru 发表于 2023-1-14 10:55
我在用singularity打包时出现了签名错误,不知道楼主有没有遇到,我是用conda安装的singularity

我用yum安装的,没有遇到。singularity应该需要root授权

135

帖子

0

威望

1551

eV
积分
1686

Level 5 (御坂)

6#
发表于 Post on 2023-1-16 10:04:53 | 只看该作者 Only view this author
昨天从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 ***

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

251

帖子

4

威望

4410

eV
积分
4741

Level 6 (一方通行)

7#
 楼主 Author| 发表于 Post on 2023-1-16 12:38:21 | 只看该作者 Only view this author
renzhogn424 发表于 2023-1-16 10:04
昨天从docker hub上下载了2023的镜像,做成sif运行了试试。倒是能正常计算,不过出现提示:
*** HINT in  ...

仔细看帖子,提到过的

135

帖子

0

威望

1551

eV
积分
1686

Level 5 (御坂)

8#
发表于 Post on 2023-1-18 15:33:03 | 只看该作者 Only view this author
djjj148 发表于 2023-1-16 12:38
仔细看帖子,提到过的

是的,我偷懒了,直接pull了官方的docker镜像

104

帖子

0

威望

3055

eV
积分
3159

Level 5 (御坂)

被催的人

9#
发表于 Post on 2023-2-17 11:22:35 | 只看该作者 Only view this author
每步SCF警告“WARNING in fm/cp_fm_elpa.F:524 :: Setting real_kernel for ELPA failed”的问题如果不在意较小的速度差异的话,使用楼主分享的镜像时在&GLOBAL中设置PREFERRED_DIAG_LIBRARY SL即可解决。

175

帖子

0

威望

3271

eV
积分
3446

Level 5 (御坂)

10#
发表于 Post on 2023-2-17 11:49:04 | 只看该作者 Only view this author
请问AVX-512指令在CP2K上有明显提速吗?我之前用VASP发现512比2指令集慢不少,可能是遇到热墙的问题。

63

帖子

7

威望

728

eV
积分
931

Level 4 (黑子)

11#
发表于 Post on 2023-2-17 12:36:31 | 只看该作者 Only view this author
本帖最后由 MolAICal 于 2023-2-17 12:37 编辑

singularity现在换名成APPTainer了,不太好装。。。docker好一点,但是非个人用户商用要收费。

251

帖子

4

威望

4410

eV
积分
4741

Level 6 (一方通行)

12#
 楼主 Author| 发表于 Post on 2023-2-19 09:51:55 | 只看该作者 Only view this author
MolAICal 发表于 2023-2-17 12:36
singularity现在换名成APPTainer了,不太好装。。。docker好一点,但是非个人用户商用要收费。

测试了一下,apptainer可以直接yum安装,使用和singularity一致,或许你说的是非root用户的编译不太好装?

903

帖子

37

威望

5324

eV
积分
6967

Level 6 (一方通行)

13#
发表于 Post on 2023-2-25 02:37:20 | 只看该作者 Only view this author
本帖最后由 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




评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
qinsc + 5 谢谢分享

查看全部评分 View all ratings

145

帖子

0

威望

3117

eV
积分
3262

Level 5 (御坂)

14#
发表于 Post on 2023-3-8 12:35:55 | 只看该作者 Only view this author
本帖最后由 neocc 于 2023-3-8 13:05 编辑

楼主能分享一下不带和带avx512的2023.1的sif镜像嚒

176

帖子

0

威望

2017

eV
积分
2193

Level 5 (御坂)

15#
发表于 Post on 2023-3-24 15:04:51 | 只看该作者 Only view this author
哥哥,你这个教程比之前那个好多了,简洁明了

本版积分规则 Credits rule

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

GMT+8, 2024-11-27 00:02 , Processed in 0.319501 second(s), 34 queries , Gzip On.

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