计算化学公社

标题: 求助-CP2K7.1编译完成且test全部通过却无法正常运行 [打印本页]

作者
Author:
djjj148    时间: 2021-3-13 23:54
标题: 求助-CP2K7.1编译完成且test全部通过却无法正常运行
根据刘博的帖子"超详细CP2K编译过程,GNU9.3+intel MKL+openmpi【含视频】"编译了CP2K-7.1 popt版本(psmp编译报错,就在make那一步去掉了),且test后全部通过:--------------------------------- Summary --------------------------------
Number of FAILED  tests 0
Number of WRONG   tests 0
Number of CORRECT tests 3273
Number of NEW     tests 8
Total number of   tests 3281
GREPME 0 0 3273 8 3281 X

Summary: correct: 3273 / 3281; new: 8; 7min
Status: OK

--------------------------------------------------------------------------
Regtest took 396.00 seconds.
--------------------------------------------------------------------------
Sat Mar 13 20:54:28 CST 2021

然后,用一个270原子的体系进行进一步测试。该inp文件先用官方发布的7.1 ssmp版本测试运行,并无异常,跑一步电子步8.7 s,占用内存10G。然而,用自己编译好的popt运行时却发现187g内存被撑爆了,跑一步电子步需要120 s。同时,从out文件的输出来看,服务器的全部核心(56核)都被分别用来执行一个任务了,即56核同时跑56次,具体对比如下:
类似这种信息“Step     Update method      Time    Convergence         Total energy    Change”,popt运行时同时输出了56次(正常情况下就输出一次)。
我多次更改提交任务的方式(PBS调度或者直接运行)、命令,甚至还重新编译了3次,全都是一样的反常结果,以下是我的提交命令(在source 的那几个intel的命令中已经尝试过各种排列组合,都不行),还请大家帮看下,谢谢!
#!/bin/sh
#PBS -N test
#PBS -l nodes=1:ppn=56
##PBS -q workq
cd $PBS_O_WORKDIR
source ~/opt/cp2k71/3/cp2k-7.1/tools/toolchain/install/setup
#source /opt/intel2018/compilers_and_libraries_2018/linux/mkl/bin/mklvars.sh intel64 ilp64
#source /opt/intel2018/parallel_studio_xe_2018.4.057/bin/psxevars.sh
source /opt/intel2018/mkl/bin/mklvars.sh intel64
export PATH=$PATH:~/opt/cp2k71/3/cp2k-7.1/exe/local
source /opt/intel2018/bin/compilervars.sh intel64
source /opt/intel2018/impi/2018.4.274/bin64/mpivars.sh intel64
mpirun -n 56 cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err


说明一下,我按照sob老师的方法(http://bbs.keinsci.com/thread-21608-1-1.html),也成功编译了8.1版本,运行一切正常,但是和超算上同等硬件的节点比较后发现8.1的速度比7.1慢一倍,甚至只有intel编译的7.1的0.4左右,而且组里准备自建服务器不租超算了,故才在服务器上自行编译7.1。




作者
Author:
wangtaochem    时间: 2021-3-14 00:04
本帖最后由 wangtaochem 于 2021-3-14 00:05 编辑

可以提供计算文件的话,我可以用Intel2018编译的cp2k-7.1帮忙测试一下。此外,可以把运行命令中的 -n 56 去掉试试:mpirun cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err

作者
Author:
djjj148    时间: 2021-3-14 00:27
wangtaochem 发表于 2021-3-14 00:04
可以提供计算文件的话,我可以用Intel2018编译的cp2k-7.1帮忙测试一下。此外,可以把运行命令中的 -n 56 去 ...

谢谢,我尝试了把-n 56去掉,还是一样内存爆满、多核平行而没有并行计算的情况。后来我还干脆把mpirun也去掉了,结果变成了1个核在单独计算了。
计算文件如下,如果方便还请帮忙测试一下。

作者
Author:
sobereva    时间: 2021-3-14 02:44
这种事一般就是MPI导致的,比如当前环境下激活的MPI和编译时用的MPI不同,导致没法正常MPI并行
作者
Author:
wangtaochem    时间: 2021-3-14 09:46
djjj148 发表于 2021-3-14 00:27
谢谢,我尝试了把-n 56去掉,还是一样内存爆满、多核平行而没有并行计算的情况。后来我还干脆把mpirun也 ...

我在自己的机器上运行一回儿就正常结束了,你看看.out文件有没有问题。
作者
Author:
djjj148    时间: 2021-3-14 10:37
sobereva 发表于 2021-3-14 02:44
这种事一般就是MPI导致的,比如当前环境下激活的MPI和编译时用的MPI不同,导致没法正常MPI并行

谢谢sob老师提醒,我编译7.1的mpi的确有点诡异。对于8.1,按照您的博文安装后,
  1. source /opt/intel2018/parallel_studio_xe_2018.4.057/bin/psxevars.sh
  2. source ~/opt/cp2k81/cp2k-8.1/tools/toolchain/install/setup
复制代码
就可以正常运行,此时which mpirun指向的是 ~/opt/cp2k81/cp2k-8.1/tools/toolchain/install/openmpi-4.0.5/bin/mpirun然而用同样的方式运行7.1:
  1. source /opt/intel2018/parallel_studio_xe_2018.4.057/bin/psxevars.sh
  2. source ~/opt/cp2k71/2/cp2k-7.1/tools/toolchain/install/setup
复制代码
却报错:
  1. #16  0xcbf2d3 in __f77_interface_MOD_init_cp2k
  2. #17  0x462241 in cp2k
  3.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:198
  4. #18  0x41c32c in main
  5.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:45
  6.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/f77_interface.F:232
  7. #17  0x462241 in cp2k
  8.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:198
  9. #18  0x41c32c in main
  10.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:45
  11. #18  0x41c32c in main
  12. #17  0x462241 in cp2k
  13.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:198
  14. #18  0x41c32c in main
  15.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:45
  16.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:45
  17. #16  0xcbf2d3 in __f77_interface_MOD_init_cp2k
  18.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/f77_interface.F:232
  19. #17  0x462241 in cp2k
  20.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:198
  21. #18  0x41c32c in main
  22.         at /home/lj/opt/cp2k71/3/cp2k-7.1/src/start/cp2k.F:45
  23. --------------------------------------------------------------------------
  24. Primary job  terminated normally, but 1 process returned
  25. a non-zero exit code. Per user-direction, the job has been aborted.
  26. --------------------------------------------------------------------------
  27. --------------------------------------------------------------------------
  28. mpirun noticed that process rank 11 with PID 0 on node localhost exited on signal 11 (Segmentation fault).
复制代码
我无奈只能先source ~/opt/cp2k71/2/cp2k-7.1/tools/toolchain/install/setup再激活intel,此时which mpirun指向的就是intel的mpi了,可以运行CP2K但是会出现上述的“无法正常并行计算”的情况。当然,这种做法应该是不对的,因为我在使用toolchain脚本时写的是--with-openmpi=install,就应该用toolchain编译的openmpi而不是intel的mpi,只是不知道为什么用toolchain编译的openmpi正式计算时会报上述错误(而且我用toolchain编译的openmpi做test时是全部通过的),麻烦老师指点一下。

作者
Author:
djjj148    时间: 2021-3-14 10:38
wangtaochem 发表于 2021-3-14 09:46
我在自己的机器上运行一回儿就正常结束了,你看看.out文件有没有问题。

是的我看着没问题,应该是我这里的软件问题
作者
Author:
wangtaochem    时间: 2021-3-14 10:52
djjj148 发表于 2021-3-14 10:38
是的我看着没问题,应该是我这里的软件问题

mpi的问题的话,把.bashrc文件打开,把INTEL编译器注释掉。
另外,如果需要编译Intel版本的cp2k-7.1的话我可以给你提供编译文件和编译方法。
作者
Author:
djjj148    时间: 2021-3-14 11:06
wangtaochem 发表于 2021-3-14 10:52
mpi的问题的话,把.bashrc文件打开,把INTEL编译器注释掉。
另外,如果需要编译Intel版本的cp2k-7.1的话 ...

我并没有在.bashrc激活intel的mpi呢,我装完intel的全家桶后都是在提交任务的脚本里激活intel的组件的。我刚才描述的意思是我也不想用intel的mpi跑CP2K,应该用toolchain编译的openmpi,只是用openmpi上来就报错很尴尬

能装intel版本的cp2k-7.1最好了,麻烦您提供一下方法和编译文件吧,我之前看一位B站up主的帖子试了下没有成功https://www.bilibili.com/read/cv7303152/
作者
Author:
abin    时间: 2021-3-14 11:40
看你后文提到, 似乎有采用openMPI?

建议,在执行的脚本中,添加一句,
export OMP_NUM_THREADS=1
Or
export OMP_NUM_THREADS=2

看介绍信息:
CP2K is written in Fortran 2008 and can be run efficiently in parallel using a combination of multi-threading, MPI, and CUDA.

明显, cp2k是典型的openMP+MPI混合并行的模式。
对于openMP的程序,
多数情形下,
不指定 OMP_NUM_THREADS=1Or2,内存会爆浆的,
而且奇慢无比。
机器负载会飙升。


或者读读这个:
Conventionally, there are six versions:

Acronym        Meaning
sdbg        OpenMP + debug settings
popt        OpenMP + OMP_NUM_THREADS=1
ssmp        OpenMP
pdbg        MPI + OpenMP + debug settings
popt        MPI + OpenMP + OMP_NUM_THREADS=1
psmp        MPI + OpenMP

可以自行测试,对于一台机器上的多核心并行,
是openMP快还是MPI快?
或者是混合模式快?

不是所有的并行计算,上来都是mpirun -np XXX来搞的。
作者
Author:
djjj148    时间: 2021-3-14 15:56
wangtaochem 发表于 2021-3-14 10:52
mpi的问题的话,把.bashrc文件打开,把INTEL编译器注释掉。
另外,如果需要编译Intel版本的cp2k-7.1的话 ...

用Intel版本的cp2k-7.1最好了,麻烦提供下编译文件和编译方法,不胜感激~!
作者
Author:
djjj148    时间: 2021-3-14 15:58
abin 发表于 2021-3-14 11:40
看你后文提到, 似乎有采用openMPI?

建议,在执行的脚本中,添加一句,

谢谢王老师,试了下还是不行
作者
Author:
abin    时间: 2021-3-14 18:01
djjj148 发表于 2021-3-14 15:58
谢谢王老师,试了下还是不行

intel2020u2,
无任何压力。
7.1 8.1均无问题。

老版本没有测试。


作者
Author:
wangtaochem    时间: 2021-3-14 21:44
djjj148 发表于 2021-3-14 15:56
用Intel版本的cp2k-7.1最好了,麻烦提供下编译文件和编译方法,不胜感激~!

http://bbs.keinsci.com/thread-17324-1-1.html,这个帖子里面的链接可以下载编译所需的文件。

作者
Author:
djjj148    时间: 2021-3-14 22:45
wangtaochem 发表于 2021-3-14 21:44
http://bbs.keinsci.com/thread-17324-1-1.html,这个帖子里面的链接可以下载编译所需的文件。

您的这个帖子我看过,是gcc编译的吧,和刘博的帖子中的方法一样吧。您可以说下intel编译CP2K的方法吗?
作者
Author:
wangtaochem    时间: 2021-3-14 23:23
djjj148 发表于 2021-3-14 22:45
您的这个帖子我看过,是gcc编译的吧,和刘博的帖子中的方法一样吧。您可以说下intel编译CP2K的方法吗?

具体编译过程邮件交流wangtaochem@163.com,几句话讲不清楚。
作者
Author:
喵星大佬    时间: 2021-3-15 01:31
都是gcc编译的8.1也比7.1慢不少,不知道是啥设置改了还是什么别的原因。
作者
Author:
abin    时间: 2021-4-4 09:58
大胆猜测,
一定是做了/etc/profile或者做个什么乱七八糟的全局设定。

很多朋友喜欢,
777,或者root乱搞。
自己做过啥设定,又不记得。
这怎么救?
抢救用的时间,比重装都久。

如果没啥数据,重装吧。

建议所有的软件均不要采用全局或者默认激活。
用哪一个激活哪一个。
每一个都写一个激活脚本。这不费事。

这也就是,绝大多数Linux平台下的软件,
装完了,
不做激活启用,
和没装是一个效果。

Linux是一个平台,
是多用户。
每个用户的需求可能不同。
就算是一个用户,每个软件的要求和依赖也不同,
搞一刀切式的全局设定,
肯定要倒霉。
作者
Author:
gog    时间: 2021-4-23 11:49
本帖最后由 gog 于 2021-4-23 13:25 编辑

cp2k.F文件报错,该是软件和硬件的兼容性bug。我试过好几个系统,出现同样的故障。已经有人反馈给cp2k官网google group。
现在cp2k开发组没有解决。
作者
Author:
elvisng    时间: 2022-11-10 02:23
請問最終是怎麼解決的? 謝謝




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