计算化学公社

标题: 求助:成功编译CP2K,扩胞后做振动分析出错 [打印本页]

作者
Author:
stishovite    时间: 2024-5-13 20:17
标题: 求助:成功编译CP2K,扩胞后做振动分析出错
本帖最后由 stishovite 于 2024-5-20 08:31 编辑

单机,Win11 + WSL2 + Ubuntu24.04
CPU:AMD Ryzen9 7950X  16核32线程
内存:32GB*2

用sob老师介绍的toolchain方法,和官方的SPACK方法都编译成功了,cp2k.ssmp -v, cp2k.popt -v 和 cp2k.psmp -v 均正常显示。
做结构优化、能量计算、单胞的振动分析都很顺利,但扩胞再做振动分析时,出现“MPI_ABORT was invoked on rank 10 in communicator MPI_COMM_WORLD”之类的错误。重启Windows和WSL2也无法解决。

提交命令为 mpirun -np 16 cp2k.psmp cp25-freq-supercell.inp |tee cp25-freq-supercell.out

  1. REPLICA| layout of the replica grid, number of groups                        16
  2. REPLICA| layout of the replica grid, size of each group                       1
  3. REPLICA| MPI process to grid (group,rank) correspondence:
  4.   (   0 :    0,   0)  (   1 :    1,   0)  (   2 :    2,   0)  (   3 :    3,   0)
  5.   (   4 :    4,   0)  (   5 :    5,   0)  (   6 :    6,   0)  (   7 :    7,   0)
  6.   (   8 :    8,   0)  (   9 :    9,   0)  (  10 :   10,   0)  (  11 :   11,   0)
  7.   (  12 :   12,   0)  (  13 :   13,   0)  (  14 :   14,   0)  (  15 :   15,   0)
  8. --------------------------------------------------------------------------
  9. MPI_ABORT was invoked on rank 10 in communicator MPI_COMM_WORLD
  10.   Proc: [[33611,1],10]
  11.   Errorcode: 1

  12. NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
  13. You may or may not see output from other processes, depending on
  14. exactly when Open MPI kills them.
  15. --------------------------------------------------------------------------
  16. --------------------------------------------------------------------------
  17. prterun has exited due to process rank 10 with PID 0 on node HPC calling
  18. "abort". This may have caused other processes in the application to be
  19. terminated by signals sent by prterun (as reported here).
复制代码

并且,当提交命令为mpirun -np 32 cp2k.psmp cp25-freq-supercell.inp |tee cp25-freq-supercell.out,更会出现下面的问题。

  1. --------------------------------------------------------------------------
  2. There are not enough slots available in the system to satisfy the 32
  3. slots that were requested by the application:

  4.   cp2k.psmp

  5. Either request fewer procs for your application, or make more slots
  6. available for use.

  7. A "slot" is the PRRTE term for an allocatable unit where we can
  8. launch a process.  The number of slots available are defined by the
  9. environment in which PRRTE processes are run:

  10.   1. Hostfile, via "slots=N" clauses (N defaults to number of
  11.      processor cores if not provided)
  12.   2. The --host command line parameter, via a ":N" suffix on the
  13.      hostname (N defaults to 1 if not provided)
  14.   3. Resource manager (e.g., SLURM, PBS/Torque, LSF, etc.)
  15.   4. If none of a hostfile, the --host command line parameter, or an
  16.      RM is present, PRRTE defaults to the number of processor cores

  17. In all the above cases, if you want PRRTE to default to the number
  18. of hardware threads instead of the number of processor cores, use the
  19. --use-hwthread-cpus option.

  20. Alternatively, you can use the --map-by :OVERSUBSCRIBE option to ignore the
  21. number of available slots when deciding the number of processes to
  22. launch.
复制代码





作者
Author:
糖炒DFT    时间: 2024-5-13 22:04
1.先确定toolchain安装的环境已经source
2.用psmp的话,可以试试export NUM_OMP_THREADS=1,或者直接用popt试试
作者
Author:
sobereva    时间: 2024-5-14 07:21
用popt版。若用psmp版必须自己设NUM_OMP_THREADS,否则每个MPI进程都会试图用所有逻辑核心数当做下属的OpenMP线程数,那么多MPI进程一起跑直接卡死了
并行核数不要超过物理核心数,-np 32显然不合适

作者
Author:
stishovite    时间: 2024-5-14 08:25
本帖最后由 stishovite 于 2024-5-16 17:04 编辑
sobereva 发表于 2024-5-14 07:21
用popt版。若用psmp版必须自己设NUM_OMP_THREADS,否则每个MPI进程都会试图用所有逻辑核心数当做下属的Open ...

谢谢老师的回复。
我用SPACK编译的psmp版无法直接运行popt版,所以贴子里用了最后一个psmp运行的例子。之前用toolchain编译cp2k,psmp和popt版都可以运行的,但是popt版仍然有同样的问题。
会不会是我的输入文件有问题。我发现单胞可以跑成功,扩胞后才会出现上述问题。



作者
Author:
sobereva    时间: 2024-5-14 08:34
stishovite 发表于 2024-5-14 08:25
谢谢老师的回复。
我用SPACK编译的psmp版无法直接运行popt版,所以贴子里用了最后一个psmp运行的例子。 ...

我不用WSL,不伦不类
建议先在vmware虚拟机里的linux客户机(推荐RockyLinux)里跑成功了再说,那算是个正经的linux环境
作者
Author:
喝杯热水    时间: 2024-5-14 09:11
第二个问题可以用在mpirun后面加一个--oversubscribe解决
作者
Author:
stishovite    时间: 2024-5-14 09:54
sobereva 发表于 2024-5-14 08:34
我不用WSL,不伦不类
建议先在vmware虚拟机里的linux客户机(推荐RockyLinux)里跑成功了再说,那算是个 ...

谢谢,我试试
作者
Author:
stishovite    时间: 2024-5-14 09:54
喝杯热水 发表于 2024-5-14 09:11
第二个问题可以用在mpirun后面加一个--oversubscribe解决

谢谢,我试试
作者
Author:
Daniel_Arndt    时间: 2024-5-14 11:04
WSL里面搞MPI并行的话,需要一些额外的设置,或者说正常的Linux里用不着的设置。比如这里 https://zhuanlan.zhihu.com/p/336548967 就提到了一些问题。不建议用WSL搞CP2K。
作者
Author:
stishovite    时间: 2024-5-14 17:01
本帖最后由 stishovite 于 2024-5-20 08:12 编辑
sobereva 发表于 2024-5-14 08:34
我不用WSL,不伦不类
建议先在vmware虚拟机里的linux客户机(推荐RockyLinux)里跑成功了再说,那算是个 ...

谢谢sob老师的建议,我早上重装了新的Ubuntu24.04系统(非虚拟机),也顺利编译cp2k成功了,但是问题仍时有发生。我觉得有可能是输入文件的问题,因为结构优化和能量计算的任务可以很快跑完,而振动分析的任务则不行,都会遇到问题。

麻烦老师指导一下如何生成振动分析的输入文件,我需要对2*2*2的超胞进行分析。


补充:单胞的振动分析可以顺利跑完,但是扩胞以后就出问题了,所以我怀疑是我在生成超胞的输入文件过程中出现失误了。

作者
Author:
stishovite    时间: 2024-5-14 17:11
本帖最后由 stishovite 于 2024-5-16 17:03 编辑
Daniel_Arndt 发表于 2024-5-14 11:04
WSL里面搞MPI并行的话,需要一些额外的设置,或者说正常的Linux里用不着的设置。比如这里 https://zhuanlan ...

非常感谢,我重装了系统Ubuntu24.04,也顺利编译成功了,但是问题依旧存在。我觉得有可能是输入文件的问题,因为结构优化和能量计算的任务可以很快跑完,而振动分析的任务则不行,都会遇到问题。


作者
Author:
sobereva    时间: 2024-5-14 23:24
stishovite 发表于 2024-5-14 17:01
谢谢sob老师的建议,我早上重装了新的Ubuntu24.04系统(非虚拟机),也顺利编译cp2k成功了,但是问题仍时 ...

如果仅仅是改了晶胞倍数的设置,没准是扩胞后对内存消耗太大导致内存不够崩了
作者
Author:
stishovite    时间: 2024-5-15 11:16
sobereva 发表于 2024-5-14 23:24
如果仅仅是改了晶胞倍数的设置,没准是扩胞后对内存消耗太大导致内存不够崩了

请问老师有没有节省内存的设置?
另外,扩胞时以下两个功能是什么关系,
19 Translate and duplicate cell (constructing supercell)
3 Set number of repetitions of the cell in X, Y, Z, current:  1  1  1?
作者
Author:
sobereva    时间: 2024-5-16 00:29
stishovite 发表于 2024-5-15 11:16
请问老师有没有节省内存的设置?
另外,扩胞时以下两个功能是什么关系,
19 Translate and duplicate c ...

对于纯泛函的计算,原子数越多、晶胞越大、基组越大、CUTOFF越大,都会导致越耗时、越耗内存
前者直接把&COORD、&CELL里的晶胞直接变成超胞,后者只是改晶胞倍数信息,&COORD和&CELL里记录的还是原胞部分

作者
Author:
周志博    时间: 2024-5-23 22:14
stishovite 发表于 2024-5-14 17:01
谢谢sob老师的建议,我早上重装了新的Ubuntu24.04系统(非虚拟机),也顺利编译cp2k成功了,但是问题仍时 ...

按理说是内存的问题,但是你都能有三十二个核心,内存应该是足够的,你可以试试减小为2 2 1 或者2 1 1 看看可否跑成功。如果可以成功那应该是内存问题。




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