聚变模拟历来需要使用领先规模的高性能计算(HPC)资源,才能在物理学领域取得进展。现在,多 GPU 计算节点在计算和内存容量方面取得了令人瞩目的进步,使得一些曾经需要多节点设置的问题也可以在单节点上解决。在可能的情况下,互联带宽的增加可以带来数量级更高的科学吞吐量,尤其是对于通信量大的应用。在本文中,我们分析了核聚变模拟工具 CGYRO 的性能,这是一种欧拉陀螺动力学湍流求解器,专为碰撞、电磁、多尺度模拟而设计和优化,在核聚变研究领域得到广泛应用。由于问题的性质,该应用必须在一个大型多维计算网格上整体工作,需要在计算进程之间频繁交换大量数据。我们特别展示了平均规模的nl03基准CGYRO模拟能以可接受的速度在单个谷歌云实例上以16个A100 GPU运行,性能优于8个NERSC Perlmutter Phase1节点、16个ORNL Summit节点和256个NERSC Cori节点。从多节点到单节点 GPU 设置,我们只用了不到一半的 GPU 数量就获得了相当的仿真时间。然而,由于 GPU 内存容量的需要,较大的基准问题仍然需要多节点 HPC 设置,因为在撰写本报告时,还没有供应商提供具有足够 GPU 内存设置的节点。不过,即将推出的外部 NVSWITCH 确实有望为多达 256 个英伟达™(NVIDIA®) GPU 提供几乎等效的解决方案。
1 引言
计算加速器(compute accelerators,即服务器级图形计算单元(GPU) server-class Graphics Compute Units)的出现大大提高了现代高性能计算(HPC)系统的计算密度。现在,系统中每个节点的计算吞吐量都比被取代的纯 CPU 节点高出一个数量级以上。现代 GPU 还实现了快速互连,可有效利用多个 GPU 实现紧密耦合的应用。
遗憾的是,节点外的互连能力(即网络适配器)并没有以同样的速度提高,从而大大降低了多节点设置在通信量大的科学应用中的有效性。
为了展示这种差异,我们提供了核聚变仿真工具 的单节点和多节点基准结果,CGYRO 是一种欧拉陀螺动力学湍流求解器,专为碰撞、电磁和多尺度仿真而设计和优化,在核聚变研究领域得到广泛应用。由于问题的性质,该应用必须在一个大型多维计算网格上整体工作,需要在计算进程之间频繁交换大量数据。因此,计算资源之间的高互连吞吐量与这些资源的计算速度同等重要。现在,平均规模的 nl03 基准 CGYRO 仿真可以在配备 16 个英伟达 A100 40GB GPU 的单节点上以合理的时间进行计算,该节点可作为谷歌云(GCP)上的虚拟实例使用。然后,我们介绍了由橡树岭国家实验室(ORNL)和美国国家能源研究科学计算中心(NERSC)运营的领先级高性能计算系统的多节点设置,这些设置可提供与之相当的解决时间,强调了从单节点到多节点设置时计算资源效率的大幅降低。需要指出的是,这些高性能计算系统没有提供能在单节点上以合理时间计算 nl03 基准案例的计算节点。
虽然大部分 CGYRO 仿真可以在测试过的 GCP 实例中进行,但最前沿的仿真无法进行,并将继续需要多节点、领先级的 HPC 系统。也就是说,目前还没有任何内部资源能在单个节点上提供 GCP 实例所能提供的计算量和 GPU 内存量。本文旨在鼓励为核聚变社区服务的资源提供商开始提供此类计算资源,甚至更多,因为对于不可忽视的问题子集来说,资源效率的大幅提高对各方都有好处。
2 核聚变模拟工具 CGYRO
核聚变能源研究多年来取得了重大进展,但对其物理学的许多基本方面仍不甚了解。实验方法对于收集新的运行模式至关重要,而模拟则用于验证基础理论、规划实验、解释现有装置的结果,并最终设计未来的装置。
CGYRO 模拟工具在 6 维网格(3D 空间 + 2 D 速度 + 1 D 物种)上运行。数值离散化在径向和双法线维度(kx , ky)上是谱式的,在两个速度维度上是伪谱式的,并在θ(场线坐标)上使用了独特的五阶保守上风方案。为了同时利用多个计算资源,利用消息传递接口(MPI)范式将问题分割成许多较小的子问题,使用两个正交的 MPI 通信器分割网格。第一个 MPI 通信器的大小由问题大小决定;它始终是 N_TOROIDAL 的值(即 ky /2)。然后,所有其他维度都集中在一起,并可沿另一个 MPI 通信器分布。在每个时间步长内,两个 MPI 通信器上需要进行多个交错的 MPI_AllToAll 和 MPI_AllReduce 集体操作。第一个通讯器上的 MPI_AllToAll 通常是数据密集度最高的操作,不过 MPI_AllReduce 的数据量会随着 MPI 进程数量的增加而增加,并最终成为主要操作。
将问题分割成非常小的子问题的能力为 CGYRO 提供了非常大的动态范围,使其能够利用 10 到 1000 个独立计算单元(如 CPU 或 GPU)的 HPC 系统。但请注意,用户并不需要为每个计算单元分配一个 MPI 进程;所有多核 CPU 和更大的 GPU 都能并行处理多个计算进程。这种较后的问题分割模式具有多种优势,但在本文中,我们将强调由此带来的片外互连通信流量的减少。由于两个正交 MPI 通信器中交换的数据量差别很大,而且片上 MPI 通信比外部互连上的通信便宜得多,因此在大多数情况下,将属于第一个 MPI 通信器的多个 MPI 进程分组到同一计算资源上可有效减少较慢互连上的总流量。但即使进行了这样的优化,交换的数据量也是相当可观的,我们将在本文稍后部分进行说明。
核聚变科学家使用 CGYRO 模拟各种等离子体现象,提供所有等离子体现象的基准结果是不切实际的。因此,我们将重点放在 nl03 基准输入上,它既能代表本文撰写时的主流 CGYRO 模拟,又能紧密贴合所测试的单节点 GCP 实例。请注意,CGYRO 仿真的主要限制因素是可用内存量,尤其是基于 GPU 系统的 GPU 内存。
基于 GPU 的系统,因为(分解的)碰撞矩阵必须适合它,所以这是一个硬性要求。
3 单节点性能
为了获得合理的运行时间,本节只考虑了基于 GPU 的系统。此外,nl03 基准案例需要至少 600 GB 的 GPU 内存,而与这些要求最匹配的是 GCP a2-megagpu-16g 实例。它由 16 个英伟达 A100-SMX4-40GB GPU 组成,每个 GPU 都有一个 2.4 Tbps 的 NVLINK 互连,通过 NVSWITCH 设置连接。该节点还采用了两个英特尔至强 Skylake CPU,通过一组 125 Gbps PCIe Gen3 链接与 GPU 相连。该节点还配备了一个 100Gbps 的网络接口,但我们在基准测试中没有使用它。
我们使用英伟达™(NVIDIA®)SKD 工具包在本地编译 CGYRO,并使用其中包含的 OpenMPI v3 库进行进程间通信。由于这是一个单节点设置,因此不需要额外的资源管理器。
在这种设置下,每一步的模拟时间约为 520 毫秒,其中约 300 毫秒(57%)用于实际计算,其余时间用于进程间通信。可以看出,即使在单节点设置下,用于通信的时间也是不可忽略的,这并不完全令人惊讶,因为在每一步中,每个 GPU 与其他 GPU 交换约 6.8GB 的数据,其中大部分使用 MPI_AllToAll 集体操作。
4 多节点高性能计算性能
我们还可以访问几个领先的高性能计算系统,在这些系统中我们可以运行 nl03 基准 CGYRO 仿真。
我们选择了三个最新系统作为基准,即基于A100 GPU的NERSC Perlmutter、基于V100 GPU的ORNL Summit[7]和基于Xeon Phi CPU的NERSC Cori[8]。我们包括一个基于 CPU 的系统,以强调保持互联和计算相对性能平衡的重要性。
NERSC Perlmutter 第一阶段节点各包含 4 个英伟达™(NVIDIA®)A100-SXM4-40GB GPU,每个 GPU 有三个全网状配置的 800 Gbps NVLINK 互连。每个节点还有一个 AMD EPYC Milan CPU,通过一组 250 Gbps PCIe Gen4 链接与 GPU 相连。每个节点的网络互连由两个 100 Gbps HPE Cray Slingshot 接口提供。该系统包含 1,000 多个节点,但我们只提供其中最多 16 个节点的基准数据。
ORNL Summit 节点各包含 6 个英伟达 V100-SMX2-16GB GPU 和 2 个 IBM POWER9 CPU。每个 CPU 通过一组全网状配置的 400 Gbps NVLINK 相互连接与 3 个 GPU 相连。然后,两个 NVLINK 域通过节点内部的 512 Gbps 互连连接起来。每个节点的网络互连由两个 100 Gbps EDR InfiniBand 接口提供。该系统包含 4000 多个节点,但我们只提供其中最多 32 个节点的基准数据。
NERSC Cori 是一个基于 CPU 的英特尔 Xeon Phi(也称为 Knight Landing (KNL))系统,每个节点有 96 GB 内存。每个节点都有一个 CPU 和一条 40 Gbps 的 Aries 互联链路。整个系统由 9000 多个节点组成,但我们只提供了其中最多 256 个节点的基准数据。
我们使用系统提供的工具在每个系统上编译 CGYRO。在两个基于 GPU 的系统上使用了英伟达 HPC 工具包编译器,在基于 CPU 的系统上使用了英特尔编译器。默认的、推荐的预安装 MPI 库和默认的批处理系统。
由于GPU内存容量不足,这些测试的基于GPU的高性能计算系统中没有一个节点足以单独运行nl03基准CGYRO仿真,因此我们不得不在多节点设置下运行。而且由于量级的差异,我们甚至没有考虑仅使用 CPU 的单节点。
另一方面,由于模拟规模较小,我们只使用了所有高性能计算系统中的极少部分节点,因此不必担心网络拓扑结构的影响。
我们为每个高性能计算系统挑选了两种节点数,它们提供的每一步CGYRO模拟时间与上述测试的单节点设置相当。具体而言,我们在 Perlmutter 上使用了 8 和 16 个节点,在 Summit 上使用了 16 和 32 个节点,在 Cori 上使用了 128 和 256 个节点。我们还添加了一个额外的 Perlmutter 数据点,在该数据点中我们只使用了四个 GPU 中的两个,以展示不同部署选项的影响。三种 HPC 系统以及 GCP 实例的实测运行时间见表 1。该表还包含每个 GPU 和每个节点在每个仿真步骤中交换的数据量,因此可以将其与进程间通信所花费的测量时间联系起来。如第 2 节所述,每一步的数据交换量会随着 MPI 并行性水平的变化而变化。
表 1:在四个系统上测出的 nl03 CGYRO 模拟步骤平均运行时间,以及每个 GPU 和每个节点在每个模拟步骤中交换的数据量。
所选的多节点数据点的平均步骤时间都与单节点数据点相当。
下图也提供了相同数据的图形表示,从图中可以明显看出,从单节点到多节点 GPU 设置会产生显著的进程间通信损耗,即计算所花费的时间与每一步所花费的总时间之间的比率(标记为 “计算所占比例”)在多节点设置中明显较低。
节点设置明显降低。当每个节点上都有许多 GPU 时,这一点尤为明显,因为 GPU 的计算吞吐量与网络带宽之间的比率明显较低,从而导致计算时间与总仿真时间之间的比率大大降低。因此,CGYRO 的模拟进度完全受网络带宽限制。
值得注意的是,在单 GCP 节点设置上运行的仿真在计算上花费的时间与基于多节点 CPU 的 Cori 系统花费的时间大致相同。单个 GPU 和单个 CPU 的计算吞吐量相差 10 倍,这导致进程间数据量增加,甚至使节点本地 NVLINK 互连达到饱和。
以下略
如需英文完整原版,V或钉 pythontesting.
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/423914.html