集群上OF不能跨节点并行
-
各位大佬,最近我尝试在课题组的集群上运行OF,由于之前一直在工作站上跑,因此遇到一些问题,可能比较初级,求各位指点。
课题组集群买后一直没什么人用,更别提Openfoam了。管理员给我开了一个普通账户,和我说在自己的账户下编译需要的程序即可。所以我参考咱们论坛上的一些方法,在我的普通账户下先编译了OpenMPI,然后又编译了OFv2006。
目前,在我的账户下,可以向工作站那样运行算例,提交到单节点上也可以并行。但是,一旦我想采用多节点并行,就会出现如下问题:
-------------------------------------------------------------------------- By default, for Open MPI 4.0 and later, infiniband ports on a device are not used by default. The intent is to use UCX for these devices. You can override this policy by setting the btl_openib_allow_ib MCA parameter to true. Local host: cu07 Local adapter: mlx5_0 Local port: 1 -------------------------------------------------------------------------- -------------------------------------------------------------------------- WARNING: There was an error initializing an OpenFabrics device. Local host: cu07 Local device: mlx5_0 -------------------------------------------------------------------------- [cu07][[41116,1],0][btl_tcp_endpoint.c:626:mca_btl_tcp_endpoint_recv_connect_ack] received unexpected process identifier [[41116,1],11] [cu07:16231] 29 more processes have sent help message help-mpi-btl-openib.txt / ib port not selected [cu07:16231] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages [cu07:16231] 29 more processes have sent help message help-mpi-btl-openib.txt / error in device init
错误提示为“ received unexpected process identifier”,我查了下,意味着节点之间通信阻塞了。我以前没接触过MPI相关的内容,不知道这个是什么原因导致?我看课题组的其他人在跑fluent的时候可以多节点并行,所以是否我的设置有问题?
我使用的脚本如下。当nodes=2且ntasks-per-node=15时,会有上述问题,但当nodes=1且ntasks-per-node=30时,就没有问题了。
#!/bin/sh #SBATCH --job-name=dambreak #SBATCH --nodes=2 #SBATCH --ntasks-per-node=15 #SBATCH --time=999:00:00 #SBATCH --error="error.txt" mpirun -np 30 interIsoFoam -parallel 2>&1 > log.interIsoFoam
刚开始学,请各位大佬给点建议,非常感谢
-
课题组集群买后一直没什么人用
豪啊。另外多少钱买的,多少核?
我看你说有管理员,他给你开了个普通账户。软件设置应该是管理员的工作。管理员平时干什么。。
https://cfd-china.com/topic/5502 你先看一下这个,这就是跨节点跑openfoam的基本流程。
当nodes=2且ntasks-per-node=15时,会有上述问题,但当nodes=1且ntasks-per-node=30时,就没有问题了。
另外,你的意思跑2个节点,每个节点15核,一共30核没问题。1个节点30核就有问题了?你这个每个节点多少核。是不是30超过了物理核心数。
-
@李东岳 感谢李老师回复,我之前还真没搜到你的这个帖子,我去学习一下,感谢!
另外多少钱买的,多少核?
我刚来这边,不太知道价格,一个计算节点信息如下:
cu01 state = free np = 56 ntype = cluster status = rectime=1657244447,state=free,slurmstate=idle,size=0kb:0kb,ncpus=56,boards=1,sockets=2,cores=28,threads=1,availmem=380000mb,opsys=linux 3.10.0-862.el7.x86_64 #1 smp fri apr 20 16:44:24 utc 2018,arch=x86_64
一个CPU节点56个核(还是28核56线程我也不太清楚。。。),共18个CPU节点,另外还有2个GPU节点,每个节点48核。
我看你说有管理员,他给你开了个普通账户。软件设置应该是管理员的工作。管理员平时干什么。。
这个事情一言难尽。买了节点后,实际上是我们这边的一个普通老师负责分配账户与资源,但是安装软件什么的他完全不懂。管理员就在买节点的时候拉了个群,后面我在群里提问,他很少回复,加好友也加不上。比如这个问题,我问了他就不理我,再解决不了我只找他电话打过去了。这个故事告诉我们买节点不要一下把钱都付了,否则人家都不理你。
另外,你的意思跑2个节点,每个节点15核,一共30核没问题。1个节点30核就有问题了?你这个每个节点多少核。是不是30超过了物理核心数。
是单节点30核并行没问题;两个节点,每个15核就不行了,测试算例为dambreak。
-
@xpqiu 感谢邱老师回复。
这个贴子我也搜到过,但我不确定前面的warning是否是问题所在,因为当我在一个节点上并行时,会出现如下提示(此时并行没问题,可以计算):
By default, for Open MPI 4.0 and later, infiniband ports on a device are not used by default. The intent is to use UCX for these devices. You can override this policy by setting the btl_openib_allow_ib MCA parameter to true. Local host: cu01 Local adapter: mlx5_0 Local port: 1 -------------------------------------------------------------------------- -------------------------------------------------------------------------- WARNING: There was an error initializing an OpenFabrics device. Local host: cu01 Local device: mlx5_0 -------------------------------------------------------------------------- [cu01:51824] 29 more processes have sent help message help-mpi-btl-openib.txt / ib port not selected [cu01:51824] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages [cu01:51824] 29 more processes have sent help message help-mpi-btl-openib.txt / error in device init
这里大部分信息与上面的一样,就是少了刚才的“ received unexpected process identifier”,所以我猜想,可能“ received unexpected process identifier”才是主要的,其他的或许没那么重要?也不知道按照您帖子里的方法能不能解决“ received unexpected process identifier”的问题,我一会试一下。
-
@cfdngu 在 集群上OF不能跨节点并行 中说:
这个事情一言难尽。买了节点后,实际上是我们这边的一个普通老师负责分配账户与资源,但是安装软件什么的他完全不懂。管理员就在买节点的时候拉了个群,后面我在群里提问,他很少回复,加好友也加不上。比如这个问题,我问了他就不理我,再解决不了我只找他电话打过去了。这个故事告诉我们买节点不要一下把钱都付了,否则人家都不理你。
插一句非技术类的。我这面出机架式主动跟客户说可以压15%尾款。不过要是付全款那就更好了,哈哈!!并且软件都设置好,也都教好客户如何使用。基本就是傻瓜式,客户上来直接用就行了。
你说那个问题我没遇到过。你可以试试节点之间ib通讯是否有问题,如果没问题,可能是openmpi的问题。这两个节点fluent可以跑?openfoam跑不了?那可能是openmpi的事。
-
各位老师,最近比较忙,这几天终于抽出时间把这个问题解决了,但是也出现了新的问题。现在来和大家讨论一下,希望能帮到有需要的人,也希望各位能再给我一些建议。
首先,我参考这篇文章,解决了不能夸节点并行的问题:
链接文本其方法就是在运行时通过添如下参数指定通信的地址:
--mca btl_tcp_if_include "通信地址“
其中“通信地址”是通过ip addr命令获得的。
其次,参考邱老师提供的链接,通过添加如下参数解决“There was an error initializing an OpenFabrics device.”的问题
--mca btl '^openib'
通过添加上述两个参数,现在运行时不会出现任何warning,跨节点并行也成功了。
然而,也出现了新的问题,就是跨节点并行的速度太慢了!我运行的算例是dambreak,所有设置保持默认不变,计算所需时间如下。
-
4核并行时:
双节点 (通信地址1) -- 686.79s
双节点 (通信地址2) -- 381.22s
单节点 -- 47.34s -
30核并行时:
双节点 (通信地址1) -- 3030.08s
双节点 (通信地址2) -- 2183.42s
单节点 -- 90.28s
单节点并行时,由于网格总数较少(9000左右),4核并行的时间较短,这个我认为是合理的。但相较于单节点并行,跨节点并行非常消耗时间,且指定不同通信地址时计算时间也不一样,说明节点之间的通信占据了大部分时间,这个现象是不正常的吧?
-