【发布时间】:2018-05-15 18:13:57
【问题描述】:
背景:
我需要使用超过 800 [GB] 的数据(过去 50 年和未来 80 年)运行大量的气候模拟计算。
为此,我使用基于 Linux 的 RegCM4。我正在使用 Ubuntu。我们拥有的最强大的系统有一些具有 20 个内核的 Intel XEON 处理器。此外,我们还有近 20 个较小但功能较弱的 Intel i7 八核处理器。
要运行模拟,单个系统需要一个多月的时间。
所以,我一直在尝试建立具有可用资源的计算机集群。
(仅供参考:RegCM 允许使用 mpi 进行并行处理。)
规格::
Computer socket cores_per_socket threads_per_core CPUs RAM Hard_drives
node0 1 10 2 20 32 GB 256 GB + 2 TB-HDD
node1 1 4 2 8 8 GB 1 TB-HDD
node2 1 4 2 8 8 GB 1 TB-HDD
-> 我使用mpich v3(我不记得确切的版本号。)
以此类推...(除node0以外的所有节点都与node1相同。)
所有节点都有1 Gbps支持的以太网卡。
出于测试目的,我建立了一个小型模拟工作来分析 6 天的气候。所有测试模拟都使用相同的参数和模型设置。
所有节点都从自己的硬盘启动。node0 在 Ubuntu 16.04 LTS 上运行。
其他节点运行 Ubuntu 14.04 LTS。
我是如何开始的? 我按照here中的步骤操作。
- 使用 Cat 6 电缆连接
node1和node2,为它们分配静态 IP。 (暂时离开node0)- 编辑/etc/hosts并使用IP-s 和相应的名称-node1和node2如上表所示 - 在两者中都使用 ssh 设置无密码登录 - 成功
- 在
node1中的/home/user中创建了一个文件夹(这将是本次测试中的主控)并导出该文件夹(/etc/exports),将该文件夹挂载到NFS到@987654340 @ 并在node2中编辑/etc/fstab- 成功 - 使用两台机器的 14 个核心在集群上运行我的
regcm- 成功 - 我使用过:
iotop、bmon、htop分别监控磁盘读写、网络流量和CPU使用率。
$ mpirun -np 14 -hosts node0,node1 ./bin/regcmMPI test.in
本次测试结果
单节点处理速度更快
现在我对node0进行了同样的尝试(有关计算机规格,请参见上文)
-> 我正在node0 开发 SSD。
-> 工作正常,但问题是在集群中连接时的时间因素。
结果摘要如下:
- 首先只使用node0 - 不使用集群
$ mpirun -np 20 ./bin/regcmMPI test.in
nodes no.of_cores_used run_time_reported_by_regcm_in_sec actual time taken in sec (approx)
node0 20 59.58 60
node0 16 65.35 66
node0 14 73.33 74
没关系
现在,使用集群
(使用以下参考来理解下表):
rt= regcm 报告的 CPU 运行时间(秒)
a-rt= 以秒为单位的实际时间(大约)
LAN= 以 MBps 为单位达到的最大 LAN 速度(接收/发送)
disk(0 / 1)= 最大磁盘写入速度node0/node1(MBps)
nodes* cores rt a-rt LAN disk( 0 / 1 )
1,0 16 148 176 100/30 90 / 50
0,1 16 145 146 30/30 6 / 0
1,0 14 116 143 100/25 85 / 75
0,1 14 121 121 20/20 7 / 0
*注:
1,0(例如 16 核)表示:
$ mpirun -np 16 -hosts node1,node0 ./bin/regcmMPI test.in0,1(例如 16 核)表示:
$ mpirun -np 16 -hosts node0,node1 ./bin/regcmMPI test.in
实际运行时间是使用 regcm 报告的开始和结束时间手动计算的。
我们可以在上面看到 LAN 使用率和驱动器写入速度对于两个选项有显着差异 - 1. 将 node1,node0 作为主机传递;和 2. 传递 node0,node1 作为主机----注意顺序。
在单节点上运行的时间也比在集群中运行的时间要快。 为什么?
我还进行了另一组测试,这次使用的是主机文件(命名为主机列表),其内容是:
node0:16
node1:6
现在我运行了以下脚本
$ mpirun -np 22 -f hostlist ./bin/regcmMPI test.in
报告CPU运行时间101 [s],实际运行时间为1 min 42 sec(102 [s]),实现的LAN速度约为10-15 [MB/s] ,磁盘写入速度在7 [MB/s]左右。
当我使用相同的主机文件设置并使用 20 个处理器运行代码从而订阅不足时,获得了最佳结果
$ mpirun -np 20 -f hostlist ./bin/regcmMPI test.in
CPU runtime : 90 [s]
Actual run time : 91 [s]
LAN : 10 [MB/s]
当我将内核从 20 更改为 18 时,运行时间增加到 102 [s]。
我还未将node2 连接到系统。
问题:
- 有没有办法实现更快的计算速度?我做错了吗?
- 14核单机计算时间比22核或20核集群快。为什么会这样?
- 可用于实现时间效率的最佳内核数量是多少?
- 如何利用可用资源实现最佳性能?
- 有没有最好的 mpich 使用手册可以回答我的问题? (我找不到任何此类信息)
- 有时使用更少的内核比使用更高的内核提供更快的完成时间,即使我没有使用所有可用的内核,在单个节点中为操作系统和其他操作留下 1 或 2 个内核。为什么会这样?
【问题讨论】:
-
一个复杂的话题有很多问题,只有深入了解RegCM才能具体回答这些问题。听起来您可能在学术界 - 我建议您联系您所在地区的 HPC 中心。他们拥有更合适的硬件资源,并且知道如何有效地使用它们。
-
一般来说:我强烈建议避免使用异构系统(例如具有不同操作系统版本、CPU 的节点)。在您的设置中:ditch node0.
-
感谢您的回复,@Zulan 当然,对 RegCM 的深入了解更适合回答问题。我正在为我的论文运行这些模拟。而且,我认为我无法进入 HPC 中心,我不知道尼泊尔有任何此类中心。我使用 node0 是因为它是最好的可用系统,而且我当然想利用可用的资源。此外,我相信再添加 TB 的 SSD 可以更快地写入磁盘,从而减少时间消耗。
-
此外,我还尝试通过从等式中消除 RegCM 来简化对我的问题的回答。我相信我正在寻找我面临的问题的解决方案与集群的物理布局更相关,特别是 mpi。感谢您抽出宝贵时间。
标签: parallel-processing mpi modeling mpich parallelism-amdahl