CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    集群上并行测试OpenFOAM,并行效率并没有比单节点提升

    OpenFOAM
    7
    37
    2632
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • S
      sjlouie91 最后由 编辑

      请教大家,我在课题组刚配置的集群上测试OpenFOAM并行效率,一共有320核心,单节点64核心。

      我测试1500万网格的算例,单节点运行单步大约19秒,当采用两个节点时,单步11.5秒,并未提升明显。进一步增至3个节点时,计算反而减慢。

      第二个LES算例,2000万左右网格,在其他超算平台上测试过采用336核心大约只需要5-6秒,但是在我们自己的集群上我采用4-5个节点,最快都得20秒,明显跨节点通讯有问题。

      我采用的编译器是Intel-2018和IntelMPI。因为我们还测试过FLUENT的并行效率,没有出现问题,所以猜测不是硬件的问题,请问有可能是openfoam哪里配置出现问题?

      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

        1. 交换机带宽多大的?

        2. 集群多少钱买的?

        3. 并行计算相关设置都是你自己搭建的?

        CFD高性能服务器 http://dyfluid.com/servers.html

        S 1 条回复 最后回复 回复 引用
        • bestucan
          bestucan 版主 副教授 最后由 编辑

          比表现性能也没有比只核数的呀:chigua2:

          比核数,安桌手机超过苹果。

          要看处理器型号、主频,硬盘读写速度,有木有阵列,还有BIOS设置什么的。

          测算力用 linkpack benckmark 什么的。自己搞得,简单的测不出来,复杂的容易设置错。

          滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

          异步沟通方式(《posting style》from wiki)(下载后打开):
          https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
          提问的智慧(github在gitee的镜像):
          https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

          S 1 条回复 最后回复 回复 引用
          • 李东岳
            李东岳 管理员 最后由 编辑

            @bestucan 估计他就是双倍来了

            单节点运行单步大约19秒,当采用两个节点时,单步11.5秒,

            可能就是单节点10,双节点20核,这样

            CFD高性能服务器 http://dyfluid.com/servers.html

            1 条回复 最后回复 回复 引用
            • S
              sjlouie91 @李东岳 最后由 编辑

              @李东岳
              李老师您好,我们的并行计算相关设置都是购买集群的时候帮我们配置的。具体的配置如下:
              infiniband交换机带宽:56Gbps
              CPU型号:英特尔至强铂金8375C (每节点双路共64核)主频3.5GHz
              硬盘:东芝企业级14T*6,组raid6阵列,系统安装在固态硬盘内
              总共花了31万多一点

              Openfoam-7 bashrcfile:
              config.png

              1 条回复 最后回复 回复 引用
              • S
                sjlouie91 @bestucan 最后由 编辑

                @bestucan 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:

                比表现性能也没有比只核数的呀:chigua2:

                比核数,安桌手机超过苹果。

                要看处理器型号、主频,硬盘读写速度,有木有阵列,还有BIOS设置什么的。

                测算力用 linkpack benckmark 什么的。自己搞得,简单的测不出来,复杂的容易设置错。

                感谢您的回复,我们具体的配置是:
                infiniband交换机带宽:56Gbps
                CPU型号:英特尔至强铂金8375C (每节点双路共64核)主频3.5GHz
                硬盘:东芝企业级14T*6,组raid6阵列,系统安装在固态硬盘内
                BIOS设置过,但是跑FLUENT速度正常,所以猜测BIOS应该没有大问题

                有关于测试算例,我采用的1500万网格就是最简单的空腔算例,因为之前我们用过国内的超算平台,我也测试过这个算例。请问,你说的benchmark应该是哪些?是李老师在网站上提到的qDNS吗?还是别的什么?我不是很清楚,请教您一下。

                谢谢!

                1 条回复 最后回复 回复 引用
                • 李东岳
                  李东岳 管理员 最后由 编辑

                  单节点运行单步大约19秒,当采用两个节点时,单步11.5秒,并未提升明显。进一步增至3个节点时,计算反而减慢。

                  1. 出一下具体的数据。单节点跑64核么,双节点128?3节点192?

                  2. 每个算例要跑1000s左右,不能跑第一步看结果。

                  第二个LES算例,2000万左右网格,在其他超算平台上测试过采用336核心大约只需要5-6秒,但是在我们自己的集群上我采用4-5个节点,最快都得20秒,明显跨节点通讯有问题。

                  这个没法横向对比。可能别的集群本身就快。你只能自己测试自己集群的scale性能,类似这个:http://dyfluid.com/html/DMCmodel.html 目前你的scale确实不达标

                  CFD高性能服务器 http://dyfluid.com/servers.html

                  S 1 条回复 最后回复 回复 引用
                  • L
                    lzf 最后由 编辑

                    命令怎么写的

                    S 1 条回复 最后回复 回复 引用
                    • S
                      sjlouie91 @李东岳 最后由 编辑

                      @李东岳
                      李老师,我是按照单节点64核,双节点128核,以此类推来测试的。目前主要测试的是空腔算例和我自己的LES算例。

                      1. 空腔算例:1500万,icoFoam,我是一共运行了100步,平均计算每步运行时间。
                        一个节点64核心:平均单步19.18s
                        五个节点320核心:平均单步7.1s
                        可以看到并行加速比明显未达到预期。我在超算平台上测试过128核心,采用完全相同的计算设置,平均单步6.65s
                      2. LES算例,2000万,pisoFoam,同样运行了100个时间步。
                        这个算例我仅仅测试了256核心和320核心,因为我之前计算的时候采用的就是300核心左右。
                        我同时测试了每步跑满1000迭代步和最大迭代步设置为100迭代步的情况,以下是具体的数据:
                        五个节点320核心,最慢平均每步26s,最快平均每步9.2s
                        四个节点256核心,最慢平均每步29s,最快平均10.5s
                        作为参考,在超算平台上,同样的算例,336核心,平均每步5s左右。

                      所以很明显并行测试不达标,主要是因为我们在fluent里测试没有问题,主要问题就在于openFoam,所以目前不知道该怎么解决这个问题。

                      1 条回复 最后回复 回复 引用
                      • S
                        sjlouie91 @lzf 最后由 编辑

                        @lzf
                        你好,请问指的是什么命令?是提交任务的命令吗?
                        command.png

                        L X 2 条回复 最后回复 回复 引用
                        • L
                          lzf @sjlouie91 最后由 编辑

                          @sjlouie91 ofi换成dapl

                          S 1 条回复 最后回复 回复 引用
                          • 李东岳
                            李东岳 管理员 最后由 编辑

                            一个节点64核心:平均单步19.18s

                            五个节点320核心:平均单步7.1s

                            所以你期望的是有5倍的scale吧?5节点达到4s左右。

                            我在超算平台上测试过128核心,采用完全相同的计算设置,平均单步6.65s

                            这个比不了。硬件不一样。我们这样同样64核的计算速度都不一样。可能他们的CPU更暴力。不能这么比。你只能看你们自己这个机架式,能否达到你的scale预期。

                            我建议你这么跑,对比总时间,而不是平均每步的时间,比如你把这个表格填一下:

                            1500万,icoFoam
                            1节点64核100步,总共 ___ 秒
                            2节点128核100步,总共 ___ 秒
                            3节点192核100步,总共 ___ 秒
                            4节点256核100步,总共 ___ 秒
                            5节点320核100步,总共 ___ 秒
                            

                            然后你看一下能否做到scale的线性。同样你还可以测试下:

                            1500万,icoFoam
                            1节点32核100步,总共 ___ 秒
                            2节点64核100步,总共 ___ 秒
                            3节点96核100步,总共 ___ 秒
                            4节点128核100步,总共 ___ 秒
                            5节点160核100步,总共 ___ 秒
                            

                            看一下能否做到scale的线性。

                            另外你说的Fluent没问题。是什么没问题,能达到线性的scale,还事什么

                            CFD高性能服务器 http://dyfluid.com/servers.html

                            S 3 条回复 最后回复 回复 引用
                            • S
                              sjlouie91 @李东岳 最后由 编辑

                              @李东岳
                              好的,谢谢李老师,我先测试一下。

                              1 条回复 最后回复 回复 引用
                              • S
                                sjlouie91 @lzf 最后由 编辑

                                @lzf
                                好的,我试试。请问这个命令是会影响到并行效率吗?抱歉,我不太懂MPI相关命令

                                L 2 条回复 最后回复 回复 引用
                                • L
                                  lzf @sjlouie91 最后由 编辑

                                  @sjlouie91 会的,这方面李老师这边测过,dapl参数是最快的,另外你可以试一下hpcx的并行库。

                                  S 2 条回复 最后回复 回复 引用
                                  • S
                                    sjlouie91 @lzf 最后由 编辑

                                    @lzf
                                    好的,感谢!

                                    1 条回复 最后回复 回复 引用
                                    • X
                                      xpqiu 教授 @sjlouie91 最后由 编辑

                                      @sjlouie91

                                      -genv FI_PROVIDER tcp

                                      这一条表示你指定使用 tcp 网络通信,所以很可能你的节点间通信就没用到 infiniband。

                                      建议先去掉 -genv FI_PROVIDER tcp ,这样mpi应该会默认选择一个可用且最快的选项。如果不行,那么参考
                                      https://www.intel.com/content/www/us/en/develop/documentation/mpi-developer-guide-linux/top/running-applications/fabrics-control/ofi-providers-support.html
                                      这里的说明选择一个跟你硬件匹配的 FI_PROVIDER。

                                      李东岳 1 条回复 最后回复 回复 引用
                                      • 李东岳
                                        李东岳 管理员 @xpqiu 最后由 编辑

                                        我在想他这面网卡设置这面,如果已经设定好了走infiniband,同样他还加这个参数-genv FI_PROVIDER tcp,这两个不是抵触了么?

                                        CFD高性能服务器 http://dyfluid.com/servers.html

                                        S X 2 条回复 最后回复 回复 引用
                                        • S
                                          sjlouie91 @李东岳 最后由 编辑

                                          @李东岳
                                          请问这种有问题吗?
                                          -genv FI_PROVIDER mlx

                                          李东岳 1 条回复 最后回复 回复 引用
                                          • X
                                            xpqiu 教授 @李东岳 最后由 编辑

                                            @李东岳
                                            也不是抵触,infiniband 网络和 tcp 网络是共存的,他这样设置,应该是显式指定使用 tcp 网络,而没有使用 infiniband,所以速度就慢了。

                                            这个设置有的时候也是有用的,比如假设我有个工作站,没有 infiniband 也不需要,我只想单节点内的核之间通信。但是有的 mpi 它的 FI_PROVIDER 的默认值是 PSM2,这样的话如果不加参数,单节点并行也无法跑,加上 -genv FI_PROVIDER tcp 或者 -genv FI_PROVIDER shm 就可以正常跑了。

                                            S 1 条回复 最后回复 回复 引用
                                            • 李东岳
                                              李东岳 管理员 @sjlouie91 最后由 编辑

                                              @sjlouie91 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:

                                              -genv FI_PROVIDER mlx

                                              这个参数我没用过。像 @lzf 说的,你可以试下dapl,像 @xpqiu 说的,你可以试下把-genv FI_PROVIDER tcp去掉。

                                              但是有的 mpi 它的 FI_PROVIDER 的默认值是 PSM2,这样的话如果不加参数,单节点并行也无法跑,加上 -genv FI_PROVIDER tcp 或者 -genv FI_PROVIDER shm 就可以正常跑了

                                              还有这样的mpi

                                              CFD高性能服务器 http://dyfluid.com/servers.html

                                              1 条回复 最后回复 回复 引用
                                              • L
                                                lzf @sjlouie91 最后由 编辑

                                                @sjlouie91 如果可以的话希望可以提供一个五节点跑满320核的benchmark结果

                                                1 条回复 最后回复 回复 引用
                                                • bestucan
                                                  bestucan 版主 副教授 最后由 编辑

                                                  @李东岳 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:

                                                  估计他就是双倍来了

                                                  那就是相对速度了,自己跟自己比:jingya:

                                                  @sjlouie91 这个:https://www.top500.org/project/linpack/ 专门测超算性能的。但是流体计算的效率,影响因素太多。用李老师网站上大家都用的算例比对更容易找着对比点。

                                                  还有一个方法,开始计算后观察系统各项指标,看看哪个满负荷,哪个就是瓶颈。https://github.com/cjbassi/gotop 这个是终端界面的系统监视器。看看运行算例的时候是 CPU ,还是硬盘读写,还是网络通信,还是内存是爆满的。可以对比 fluent 运行的时候的不同。找到瓶颈后再排查比较有目标。

                                                  滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

                                                  异步沟通方式(《posting style》from wiki)(下载后打开):
                                                  https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
                                                  提问的智慧(github在gitee的镜像):
                                                  https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

                                                  1 条回复 最后回复 回复 引用
                                                  • S
                                                    sjlouie91 @李东岳 最后由 编辑

                                                    @李东岳 李老师,您好。我按照您的建议进行了测试,但是每个节点跑满所有核时,在3个节点时还可以实现线性,但是5个节点反而变慢。test.png
                                                    加速比.png
                                                    请问这种情况还有可能是并行哪里有问题呢?

                                                    1 条回复 最后回复 回复 引用
                                                    • S
                                                      sjlouie91 最后由 编辑

                                                      @lzf 你好,抱歉回复的晚。请问你指的结果是说最后计算时长吗?还是指的流场结果?
                                                      这个是我测试的加速比曲线和计算时长。如果有需要,我可以提供算例cavity文件
                                                      加速比.png
                                                      test.png
                                                      cavity算例的计算设置文件blockMeshDict, controlDict,fvSolution如下,fvSchemes采用tutorials中的设置:
                                                      blockMeshDict
                                                      blockMesh.png
                                                      controlDict
                                                      controlDict.png
                                                      fvSolution
                                                      fvSolution.png

                                                      1 条回复 最后回复 回复 引用
                                                      • S
                                                        sjlouie91 @lzf 最后由 编辑

                                                        @lzf 还有一个问题想请教一下,你们使用集群计算模块加载的除了intel和intel-mpi,是否还需要其他什么模块吗?
                                                        如果可能的话,能否私信告诉我一下你的联系方式方便沟通并行相关问题?

                                                        1 条回复 最后回复 回复 引用
                                                        • S
                                                          sjlouie91 @xpqiu 最后由 编辑

                                                          @xpqiu 您好,感谢您的回复。
                                                          关于-genv FI_PROVIDER tcp,我测试过,必须得加上这个参数,否则没办法计算。至于shm:ofi,我发现好像是否添加这个参数对结果影响不大。

                                                          1 条回复 最后回复 回复 引用
                                                          • S
                                                            sjlouie91 @李东岳 最后由 编辑

                                                            @李东岳 李老师您好,除了刚才发的OpenFOAM的测试性能以外,关于Fluent测试的效果是5个节点的加速比符合线性scale。

                                                            1 条回复 最后回复 回复 引用
                                                            • 李东岳
                                                              李东岳 管理员 最后由 李东岳 编辑

                                                              -genv FI_PROVIDER tcp你这个去掉不能跑的话。你如何确定走的是infiniband,而不是以太网模式。我们这面跑openfoam不需要这个参数。我们之前测试也出现过你这种情况。后来我们换交换机硬件了。但目前我还不确定现在我们这5节点能到什么样,得下周能出个测试结果。另外,openfoam离散设置差异(比如GAMG那个),我个人感觉不会引起特别大的差异。不过你可以实测看看,我也不100%确定

                                                              @xpqiu 这位大佬之前好像测试过2048个核心 :mianmo:

                                                              CFD高性能服务器 http://dyfluid.com/servers.html

                                                              S C 2 条回复 最后回复 回复 引用
                                                              • S
                                                                sjlouie91 @李东岳 最后由 sjlouie91 编辑

                                                                @李东岳
                                                                应该走的是infiniband,我还试过更改-genv I_MPI_FABRICS shm:ofi为shm:dapl,但是提示只有shm:ofi和ofi两种。
                                                                此外,除了一个节点使用32核心,我还测试过1个节点使用48和56核心,我发现不知道有没有可能是计算瓶颈的问题,我只要是用到240核上,每步计算的时长就没法再减小了。

                                                                1节点64核100步,总共1851s
                                                                2节点128核100步,总共928s
                                                                3节点196核100步,总共553s
                                                                4节点256核100步,总共505s
                                                                5节点320核100步,总共557s
                                                                
                                                                1节点32核100步,总共5946s
                                                                2节点64核100步,总共1863s
                                                                3节点96核100步,总共1163s
                                                                4节点128核100步,总共836s
                                                                5节点160核100步,总共616s
                                                                
                                                                5节点240核100步,总共526s
                                                                5节点280核100步,总共567s
                                                                

                                                                请问李老师你们测试采用的算例是什么?

                                                                李东岳 Number44 2 条回复 最后回复 回复 引用
                                                                • 李东岳
                                                                  李东岳 管理员 @sjlouie91 最后由 编辑

                                                                  下面是你的数据:

                                                                  5节点160核100步,总共616s
                                                                  5节点240核100步,总共526s
                                                                  5节点280核100步,总共567s
                                                                  5节点320核100步,总共557s
                                                                  

                                                                  怎么有个波动在里面。

                                                                  @sjlouie91 就是我那个200万网格那个。后来加密到3000多万。我们团队那个老师最近组织博士生考试,没时间测。下一步测试要4月初了...

                                                                  我猜测也有可能跟算例相关,你可以跑一下摩托车那个算例。simpleFoam里面motorbike那个,你把网格相关量调成4000万网格的算例。直接测试

                                                                  5节点160核
                                                                  5节点240核
                                                                  5节点280核
                                                                  5节点320核
                                                                  

                                                                  我们下一步也要换成motorbike这个算例。我们他们外国人用这个比较多。

                                                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                                                  S 1 条回复 最后回复 回复 引用
                                                                  • Number44
                                                                    Number44 @sjlouie91 最后由 编辑

                                                                    @sjlouie91
                                                                    从你这个结果看,scaling看上去还算线性,线性区间应该在256核前一点,峰值点在5万+网格/核,不算好,也不算特别差,峰值点和集群本身的性能有关,CPU,内存之类的,但至强系列的CPU应该没那么差。
                                                                    另外,不同的矩阵迭代算法的scaling不一样,CG类的scaling看上去很好,但绝对速度就那样,AMG类的scaling一般,但是真的快。

                                                                    算不准,发个散,报error,没问题!

                                                                    S 1 条回复 最后回复 回复 引用
                                                                    • S
                                                                      sjlouie91 @Number44 最后由 编辑

                                                                      @number44
                                                                      感谢你的建议。如果不是CPU的问题的话,有没有可能瓶颈在硬盘读取上?
                                                                      我还有个疑问,我之前在LES算例上测试过GAMG求解器,一般来说GAMG计算更快,但是我不清楚是我设置有问题还是其他别的什么原因,我在使用GAMG的时候计算异常缓慢。
                                                                      这个是我之前的计算设置,请问是否有针对这个算法的较优的设置参数?
                                                                      GAMG.png

                                                                      Number44 1 条回复 最后回复 回复 引用
                                                                      • S
                                                                        sjlouie91 @李东岳 最后由 编辑

                                                                        @李东岳
                                                                        您好李老师,针对这个波动,我之前也发现了,但是我后续又计算过一次,最终320核计算用时577s。总之,就是在240核以上基本上就不太有效果了。
                                                                        针对您提到的这两个算例,我测试一下。

                                                                        1 条回复 最后回复 回复 引用
                                                                        • Number44
                                                                          Number44 @sjlouie91 最后由 编辑

                                                                          @sjlouie91
                                                                          硬盘的读写只有刚开始和写结果的时候进行,迭代过程是不做硬盘读写的,除非频繁大量进行结果的存储,不然一般硬盘不太影响计算性能,更多受CPU的cache和内存影响。
                                                                          至于GAMG的参数,我选择抄
                                                                          PETSc4FOAM: a library to plug-in PETSc into the OpenFOAM framework
                                                                          里面提到的。

                                                                          算不准,发个散,报error,没问题!

                                                                          1 条回复 最后回复 回复 引用
                                                                          • 李东岳
                                                                            李东岳 管理员 最后由 编辑

                                                                            不知道后来楼主怎么样了

                                                                            CFD高性能服务器 http://dyfluid.com/servers.html

                                                                            1 条回复 最后回复 回复 引用
                                                                            • C
                                                                              Caijinjin @李东岳 最后由 编辑

                                                                              @李东岳 在 集群上并行测试OpenFOAM,并行效率并没有比单节点提升 中说:

                                                                              -genv FI_PROVIDER tcp你这个去掉不能跑的话。你如何确定走的是infiniband,而不是以太网模式。我们这面跑openfoam不需要这个参数。我们之前测试也出现过你这种情况。后来我们换交换机硬件了。但目前我还不确定现在我们这5节点能到什么样,得下周能出个测试结果。另外,openfoam离散设置差异(比如GAMG那个),我个人感觉不会引起特别大的差异。不过你可以实测看看,我也不100%确定

                                                                              @xpqiu 这位大佬之前好像测试过2048个核心 :mianmo:

                                                                              老师,想问一下,用openmpi在自己组里面的集群上用pbs跨节点并行(10g以太网交换机)命令用的mpirun --mca btl_tcp_if_include <ip地址> -np reactingTwoPhaseEulerFoam -parallel,运行的时候发现计算的节点上cpu的用户进程占比us只有50-60%,系统进程占比sy有40-50%,这个问题有没有什么好的解决办法?

                                                                              1 条回复 最后回复 回复 引用
                                                                              • First post
                                                                                Last post