计算化学公社

标题: 较新版本的CP2K多节点并行速度极慢 [打印本页]

作者
Author:
djjj148    时间: 2022-7-21 16:57
标题: 较新版本的CP2K多节点并行速度极慢
本帖最后由 djjj148 于 2022-7-21 16:57 编辑

集群有56G IB网络,测试了一天,发现完全一样的输入文件、提交脚本8.29.12022.1这三个版本在两节点并行时,速度反而比单节点慢一倍多,而7.1的两节点运行速度却可以是单节点的1.8倍左右,提交脚本如下,inp文件请见附件,所有测试用的cp2k程序都是由官方提供的dockerfile制作的镜像文件,按理说不会出现安装失误。
  1. #!/bin/bash
  2. #SBATCH -J cp2k_test
  3. #SBATCH -p P1
  4. #SBATCH --nodes=1
  5. #SBATCH --ntasks-per-node=36

  6. export EXE="singularity exec /public/opt/cp2k71_avx2.sif"
  7. source /public/opt/intel/oneapi/setvars.sh #--config=/public/opt/intel/oneapi/config-2021.4
  8. ulimit -s unlimited

  9. mpirun -np $SLURM_NPROCS ${EXE} cp2k.popt cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码
对于7.1版本,只需要将#SBATCH --nodes=1改为2就可以实现进2倍的提速,其他三个版本反而变慢一倍多。


除此之外,还尝试了其他手段:
export OMP_NUM_THREADS=2/4/8/../36
使用cp2k.psmp
改slurm的脚本,如#SBATCH -N 2    #SBATCH -n 72    #SBATCH -c 1
使用安装包文件中提及的运行方式:
  1. mpirun -npernode 2 -host
  2. slave1:36,slave2:36 \
  3.   --map-by slot:PE=6 --report-bindings \
  4.   -x OMP_PLACES=threads -x OMP_PROC_BIND=SPREAD -x OMP_NUM_THREADS=18 \
  5.   ${EXE} cp2k.psmp cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码
然而,对于8.2,9.1和2022.1,这些手段并没有用,现在是只要用多节点,速度就更慢。google无果,希望大家交流指导一下

另外,7.1版本虽然能通过多节点并行较好提速,但是本身运行速度太慢,单节点的速度比其他三个版本慢了25%-30%。

作者
Author:
cokoy    时间: 2022-7-21 17:17
你看看cpu的利用率,我之前跨节点跑singularity容器的cp2k2022.1,发现cpu利用率特别低,单节点就一切正常。不确定是不是容器的原因。
作者
Author:
djjj148    时间: 2022-7-21 17:24
本帖最后由 djjj148 于 2022-7-21 17:25 编辑
cokoy 发表于 2022-7-21 17:17
你看看cpu的利用率,我之前跨节点跑singularity容器的cp2k2022.1,发现cpu利用率特别低,单节点就一切正常 ...

只要不设置OMP_NUM_THREADS为1之外的数,跨节点的CPU利用率都是x个100%(x为物理核心)。

但如果设置为1之外的数,比如6,每个进程的利用率就很难到600%。
7.1版本无论是自己在本地编译还是用的官方镜像,跨节点的提速都正常,应该不是镜像的问题。

作者
Author:
abin    时间: 2022-7-21 17:34
监测一下 network I/O
作者
Author:
cokoy    时间: 2022-7-21 17:36
本帖最后由 cokoy 于 2022-7-21 19:19 编辑

(, 下载次数 Times of downloads: 28)
我之前遇到的情况是cpu利用率100%,但是大部分都系统占用,比如图中的82.3%,cp2k只用了17.3%,导致多节点并行速度很低,单节点运行就没有这个问题。
作者
Author:
djjj148    时间: 2022-7-21 19:34
cokoy 发表于 2022-7-21 17:36
我之前遇到的情况是cpu利用率100%,但是大部分都系统占用,比如图中的82.3%,cp2k只用了17.3%,导致多节 ...

我的和你差不多,又有点区别,用7.1单/双节点,或用2022.1的单节点:%Cpu(s): 97.3 us,  0.3 sy


但是用2022.1的双节点:
%Cpu(s): 28.6 us, 26.8 sy



作者
Author:
abin    时间: 2022-7-21 20:02
本帖最后由 abin 于 2022-7-22 10:08 编辑

https://docs.sylabs.io/guides/main/user-guide/mpi.html

Check the MPI version first.
Next, check the IB driver.

By default, cp2k uses MPICH in their official Dockerfile.

High %system, means kernel mode occupies more CPU.

We recommend using the SingularityCE Google Group or Slack Channel to ask for MPI advice from the SingularityCE community. HPC cluster configurations vary greatly and most MPI problems are related to MPI / interconnect configuration, and not caused by issues in SingularityCE itself.


Or, try to rebuild your singularity image with newer version.


补充一下,
按照singularity开发者的说法, 从原理上看, 该技术方案不会造成%system过高,
多数情况, 都是MPI问题.

如果采用cp2k官方默认Dockerfile, 应该是采用MPICH.
Intel MPI和MPICH是同一个东西, 所以, 检查一下版本适配先.
或许是新版本的MPICH, 默认编译时候, 并未支持IB网络.
这个需要你自己测试验证.

另外如楼下提到的, IB使用不恰当的时候, 也许会回落到以太网模式, 慢得离谱是显而易见的.

设备在你手里, 只能你花时间, 慢慢调试了.

作者
Author:
cokoy    时间: 2022-7-21 20:03
djjj148 发表于 2022-7-21 19:34
我的和你差不多,又有点区别,用7.1单/双节点,或用2022.1的单节点:%Cpu(s): 97.3 us,  0.3 sy

你试没试过不用docker的cp2k2022.1,跨节点是正常的吗?
作者
Author:
ball2006    时间: 2022-7-22 09:51
如何确定cp2k数据交换走得网络是IB网络?在您的脚本里面看不出来。
作者
Author:
djjj148    时间: 2022-7-22 13:33
abin 发表于 2022-7-21 20:02
https://docs.sylabs.io/guides/main/user-guide/mpi.html

Check the MPI version first.

感谢,确实是mpi的问题,重新编译一个mpich就行了
作者
Author:
djjj148    时间: 2022-7-22 13:49
cokoy 发表于 2022-7-21 20:03
你试没试过不用docker的cp2k2022.1,跨节点是正常的吗?

是mpi的问题,楼上说的很对
作者
Author:
cokoy    时间: 2022-7-22 13:58
djjj148 发表于 2022-7-22 13:49
是mpi的问题,楼上说的很对

你是编译了个和docker一样版本的mpich是吗?我也去编译下。
作者
Author:
wolfli369    时间: 2022-7-22 15:31
djjj148 发表于 2022-7-22 13:49
是mpi的问题,楼上说的很对

本人使用56G IB直连两台8375C,使用intelmpi在两个节点计算,也遇到同样的问题,麻烦楼主能详细解释一下你是怎么解决这个难题的吗?
作者
Author:
djjj148    时间: 2022-7-22 16:37
统一回复:docker里用什么mpi,就在主机上编译一个同样的即可
作者
Author:
cokoy    时间: 2022-7-23 01:21
djjj148 发表于 2022-7-22 16:37
统一回复:docker里用什么mpi,就在主机上编译一个同样的即可

楼主你好,我在主机里用mpich3.4.3(版本与cp2k2022.1的dockfile中一致)运行,仍然是相同的问题...可以看一下你的slurm脚本吗?
作者
Author:
djjj148    时间: 2022-7-23 09:06
本帖最后由 djjj148 于 2022-7-23 09:08 编辑
cokoy 发表于 2022-7-23 01:21
楼主你好,我在主机里用mpich3.4.3(版本与cp2k2022.1的dockfile中一致)运行,仍然是相同的问题...可以 ...
  1. #!/bin/bash
  2. #SBATCH -J cp2k_2022.1
  3. #SBATCH -p P1
  4. #SBATCH --nodes=2
  5. #SBATCH --ntasks-per-node=36

  6. ulimit -s unlimited
复制代码
  1. #gcc-11.2.0
  2. export PATH=$HOME/opt/cp2k/mpi_for_2022.1_gcc11.2/gcc-11.2.0/bin:$PATH
  3. export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
  4. export LD_LIBRARY_PATH=$HOME/opt/cp2k/mpi_for_2022.1_gcc11.2/gcc-11.2.0/lib64:$LD_LIBRARY_PATH

  5. #mpich-3.4.3
  6. export MPI_HOME=$HOME/opt/cp2k/mpi_for_2022.1_install_by_gcc11.2.0/mpich-343
  7. export PATH=$MPI_HOME/bin:$PATH
  8. export PATH=$PATH:$MPI_HOME/include
  9. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/lib
  10. export MANPATN=$MANPATH:$MPI_HOME/man

  11. export OMP_NUM_THREADS=2
  12. mpirun -np 72 singularity exec /public/opt/cp2k/cp2k-2022.1.sif cp2k.psmp cp2k.inp 1>cp2k.out 2>cp2k.err
复制代码







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