lammps运行一定步数后停止(感觉是MPI的问题) Signal: Segmentation fault
lammps安装好之后试着跑过例子,并行串行都没问题。
现在实际开始跑体系了,用reaxff,遇到的问题就是 比如设置并行跑一定步数,中间会报错停止:
out文件里面的错:
---------------- Step 5020000 ----- CPU = 1251.1345 (sec) ----------------
TotEng = -380902.9196 KinEng = 13016.8627 Temp = 992.7001
PotEng = -393919.7822 E_bond = 0.0000 E_angle = 0.0000
E_dihed = 0.0000 E_impro = 0.0000 E_vdwl = -388558.1753
E_coul = -5361.6069 E_long = 0.0000 Press = 627.1629
--------------------------------------------------------------------------
mpirun noticed that process rank 30 with PID 81743 on node node04 exited on signal 11 (Segmentation fault).
然后另一个文件里写的是:
[node04:81743] *** Process received signal ***
[node04:81743] Signal: Segmentation fault (11)
[node04:81743] Signal code: Address not mapped (1)
[node04:81743] Failing at address: 0x166f458b8
[node04:81743] [ 0] /lib64/libpthread.so.0[0x39bf00f710]
[node04:81743] [ 1] /home/lmp/lammps-17Nov16/src/lmp_mpi[0xd54c63]
[node04:81743] [ 2] /home/lmp/lammps-17Nov16/src/lmp_mpi[0xc351ac]
[node04:81743] [ 3] /home/lmp/lammps-17Nov16/src/lmp_mpi[0xdd5c57]
[node04:81743] [ 4] /home/lmp/lammps-17Nov16/src/lmp_mpi[0xd88643]
[node04:81743] [ 5] /home/lmp/lammps-17Nov16/src/lmp_mpi[0x894269]
[node04:81743] [ 6] /home/lmp/lammps-17Nov16/src/lmp_mpi[0x88de1d]
[node04:81743] [ 7] /home/lmp/lammps-17Nov16/src/lmp_mpi[0x889b5b]
[node04:81743] [ 8] /home/lmp/lammps-17Nov16/src/lmp_mpi[0x8a9384]
[node04:81743] [ 9] /lib64/libc.so.6(__libc_start_main+0xfd)[0x39bec1ed5d]
[node04:81743] [10] /home/lmp/lammps-17Nov16/src/lmp_mpi[0x40ad59]
[node04:81743] *** End of error message ***
这个问题困扰已久,也搜过资料,有的说法是结构不好之类的。但是我试过同样的输入文件,在我们这里设置np=1的时候跑就可以跑完,也在别的地方跑完了。(一般设置np=40,然后就会报错),所以怀疑是MPI的问题。
在lammps user里面看到有人回复说这不是lammps的错,是cluster的问题,不过我们的机子上跑其他软件并行没问题,gromacs,高斯都可以。
目前还在in文件的pair_style reax/c lmp_control 加了 safezone 1.6 mincap 100 (手册说可以防止Segmentation fault,但续跑之后中间又停了)
当时编译时修改的部分:
# mpi = MPI with its default compiler
SHELL = /bin/sh
# ---------------------------------------------------------------------
# compiler/linker settings
# specify flags and libraries needed for your compiler
CC = mpicxx
CCFLAGS = -g -O3 -restrict
SHFLAGS = -fPIC
DEPFLAGS = -M
LINK = mpicxx
LINKFLAGS = -g -O
LIB =
SIZE = size
ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared
LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64
# MPI library
# see discussion in Section 2.2 (step 5) of manual
# MPI wrapper compiler/linker can provide this info
# can point to dummy MPI library in src/STUBS as in Makefile.serial
# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts
# INC = path for mpi.h, MPI compiler settings
# PATH = path for MPI library
# LIB = name of MPI library
MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 -I/opt/openmpi/include
MPI_PATH = -L/opt/openmpi/lib
MPI_LIB = -Ipthread -Impi
# FFT library
# see discussion in Section 2.2 (step 6) of manual
# can be left blank to use provided KISS FFT library
# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings
# PATH = path for FFT library
# LIB = name of FFT library
FFT_INC = -DFFT_FFTW -I/home/lmp/fftw2/include
FFT_PATH = -L/home/lmp/fftw2/lib
FFT_LIB = /home/lmp/fftw2/lib/libfftw.a
不知道是哪里有问题吗?或者有谁经历过这个问题吗,如果能给我一些指导的话感激不尽~ 返回小木虫查看更多
应该不是MPI本身的问题。可能是你结构的问题。举个极端点的例子。比如你的体系一共只有20个原子,你却分配了40个cpu。那么肯定有一部分进程上是没有原子的,这是程序可能就会出错。也可能初始时各个cpu都有原子,但计算过程结构扭曲太厉害,原子都挤到一起去了,造成某些个CPU负责的区域变成空的了,没有原子了,计算也可能会出错。而串行过程是不会存在类似的问题的
觉得好像也有可能。我现在的体系是用packmol建立的,一共4400个原子,一开始设置的边长是45埃的立方盒子。但是用virtual nanolab转换成lammps的data文件后,边长会自动设置成65埃的样子。一开始的构型就是氧气分子和碳氢化合物都聚在中间(应该是45埃大小的盒子里),后来跑起来了,氧气分子会跑到盒子边缘的地方来,但是大部分分子还是聚集在中间。可能这个会导致报错吧。
上传了两个轨迹的截图,一张是初始构型,另一张是跑开了的构型。大概是初始构型太不合理的缘故?
谢谢你的回复,能再麻烦你看下图片吗?你这样一说我确实觉得初始构型有点问题。
感谢~
1.jpg
2.jpg
,
看别人的帖子好像是说openmpi版本问题,换1.8以后可以并行
错了,是1.4或1.6版本
以前遇到过这个问题,后来解决了。除了data文件的问题外,还有可能是内存太小以及lammps的版本问题
亲测:openmpi-2.1.1 lammps-9Jan17tar.gz 可用,没有再出现segmentation fault
我也出现过同样的问题,后来发现是模型结构有问题,不过有时候算着算着确实自己停了,但是结构还好好的。