背景:
我需要使用大量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 天的气候。所有测试模拟都使用相同的参数和模型设置。
所有节点都从它们自己的 HDD 引导。
node0
在 Ubuntu 16.04 LTS 上运行。
其他节点运行 Ubuntu 14.04 LTS。
我是怎么开始的? 我按照这里的步骤进行操作。
- 连接
node1
并node2
使用 Cat 6 电缆,为它们分配静态 IP。(暂时离开node0
) -/etc/hosts
使用 IP-s 和相应的名称进行编辑 -node1
如上node2
表所示 - 在两者中都使用 ssh 设置无密码登录 - 成功
/home/user
在 in中创建了一个文件夹node1
(将在此测试中为主)并导出文件夹(/etc/exports
),将此文件夹安装NFS
到并在node2
其中编辑- 成功/etc/fstab
node2
- 使用两台机器的 14 个核心运行我
regcm
的集群 - 成功 - 我使用 :
iotop
,bmon
,htop
分别监控磁盘读/写、网络流量和 CPU 使用率。
$ mpirun -np 14 -hosts node0,node1 ./bin/regcmMPI test.in
此测试的结果
单节点处理上的更快计算
现在我尝试了同样的node0
方法(参见上面的计算机规格)
-> 我正在开发node0
.
-> 工作正常,但问题是在集群中连接时的时间因素。
以下是结果摘要:: - 首次使用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)
=最大磁盘写入速度 atnode0
/ atnode1
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.in
0,1(例如 16 核)意味着:
$ mpirun -np 16 -hosts node0,node1 ./bin/regcmMPI test.in
实际运行时间是使用 regcm 报告的开始和结束时间手动计算的。
我们可以在上面看到 LAN 使用和驱动器写入速度对于两个选项有显着差异 - 1.node1,node0
作为主机传递;node0,node1
2.作为主机传递----注意顺序。
此外,在单节点中运行的时间比在集群中运行的时间要快。为什么 ?
我还进行了另一组测试,这次使用的是 hostfile(名为 hostlist),其内容是:
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 个内核。为什么会这样?