性能优化挑战重重,鲲鹏 HPC 如何突破算力桎梏?

时间:2024-03-08 19:05:56

比起高性能计算(High Performance Computing,缩写 HPC),很多人对“超级计算机”感觉更熟悉一些。但事实上,超级计算机就是 HPC 系统的最尖端水平。在全球超级计算机 TOP500 中,位列榜首的美国橡树岭国家实验室的“顶点”系统,其浮点运算速度为每秒 14.86 亿亿次。而这份榜单的入围门槛也是达到了每秒 1.14 千万亿次的运算速度。

如此强大的计算能力,究竟能为技术的应用落地带来什么?

看似阳春白雪的 HPC 已走向平民化

不同于侧重数据密集型、I/O 密集型应用的云计算,HPC 强大的算力可用于解决大规模科学问题计算和海量数据的处理。早期 HPC 架构和相关设备均为封闭机型和专属架构,应用也仅限于科学研究、航天航空、油田勘探等高精尖领域,因此,HPC 曾被喻为是 IT 行业“金字塔上的明珠”。随着计算机技术的发展以及数据量和数据价值的不断增加,HPC 的应用领域在不断扩大,未来也将愈加“平民化”。

从目前来看,其应用场景大致可分为以下三类:

  • 计算密集型应用(Computing-intensive):大型科学工程计算、数值模拟等。其应用领域为石油、气象、CAE、核能、制药、环境监测分析、系统仿真等。

  • 数据密集型应用(Data-intensive):数字图书馆、数据仓库、数据挖掘及计算可视化等。其应用领域为图书馆、银行、证券、税务、决策支持系统等。

  • 通信密集型应用(Network-intensive):协同工作、网格计算、遥控和远程诊断等。其应用领域:网站、信息中心、搜索引擎、电信、流媒体等。

总体来看,中国企业正处于数字化转型的高速期,上云速度加快、数据量迅速增长,对大数据的利用能力已成为企业的核心竞争力,企业对 HPC 的需求程度前所未有的提升。那么,作为一项技术门槛高、落地复杂的系统工程技术,HPC 在中国企业中的应用真的进入普及期了吗?

HPC 应用对计算速度有着极高的要求,这意味着这类机群在系统的处理器、内存带宽、运算方式、I/O、存储等方面也都要追寻性能方面的极致。目前,也只有大规模的机构才有能力建立独有的 HPC 平台的能力。

然而在互联网时代,大企业追求轻资产化,努力实现数字化转型,传统 HPC 平台由于存在运维成本高、扩容难、资源利用率低、数据不流动等问题,难以适应企业的业务发展,甚至成为了瓶颈。那么,企业如何使这些老旧的 HPC 系统变得更高效灵活?中小企业是否也能以较低的云成本将 HPC 引入业务?

HPC 应用如何实现高性能?

“在高性能计算领域,由于计算量非常大,仅是提高很少量的百分点都能为企业带来巨大的经济效益,这其中包括时间的缩短、成本的降低以及能耗的降低。所以在该领域下,业界普遍都在追求非常极致的性能、性价比与能耗比。这样就迫使服务提供商要从应用需求出发,根据应用的特点来设计硬件和软件,然后再把这三者做无缝的整合,从而达到更高的性能。”

华为 IT 产品线 HPC Lab 主任、HPC 首席技术专家丁肇辉在接受 InfoQ 采访时表示。

提及 HPC 应用的性能问题,不同领域下的差异很大,通常企业用户需要基于自身的应用需求特征来进行定制化匹配,通过一系列测试工具对 HPC 系统进行精细化的研究分析后,找到可以调整和优化的部分,然后通过硬件升级、软件性能调优、应用扩展等不同方法来提高系统的整体性能,以期达到硬件系统与应用之间的平衡。

在《通过鲲鹏全栈 HPC 软件套件提升应用性能》的演讲中,丁肇辉将 HPC 应用性能优化分为四个层次:应用、计算、I/O、通信,对应的优化手段如下:

  • 应用:由各个领域的科学家、软件开发专家基于各自领域的算法,对求解方法进行创新,并采用不同的编程模型。

  • 计算:影响计算的主要是软件技术,如编译器、Runtime 和数学库,可以从三个入手进行优化,也可通过异构加速来提升计算效率。

  • I/O:通常 HPC 并行任务的并发 I/O 操作不应采用简单的 POSIX I/O,而应选择 MPI-IO。此外,对存储硬件进行优化也可以提高 I/O 的效率 。

  • 通信:MPI 是最常用的 HPC 通信接口,MPI 集合通信、RDMA 等技术都适用于大规模并行计算机集群,可有效构建高性能、低延迟的存储网络。当然,对网络设备的优化也不能忽视。

不容忽视的软件调优

虽然很多性能问题都可以通过硬件配置的升级或优化得到解决,但软件调优部分也决不能忽视。

丁肇辉解释道:“HPC 其实服务的是科学计算,由于科学计算的领域差异很大,导致其应用特征差异也较大。因此如果要设计出能够覆盖各种场景下应用计算需求的硬件,其实难度还是非常大的。所以在硬件尽可能突破极致性能的同时,也需要软件接入来确保一定层面上的灵活性。”

从开始设计到最终完成,软件优化在整个软件开发周期中都将起到连续迭代的作用。

“在假定硬件不变的前提下,计算角度的优化目标就是将 CPU 的算力发挥出来,消除内存墙等常见问题。

通信层面的优化则以减少网络拥塞为目的,尽量能够让计算和通信的过程能够叠加,一边计算一边做通信。

I/O 的瓶颈与访存类似,就是尽可能利用更快速、更低时延的存储来达到一定的目的。但是由于其容量较低,需要考虑如何在多级的存储之间做切换。另一方面是要尽可能发挥 I/O 并行度的优势。通常 HPC 的存储节点是分布式的,能够把分布式的多个存储节点都发挥出来,来实现并行 I/O。”

而需要解决这三个层面的问题,华为主要从架构和算法两个方面进行创新:

1、MPI底层架构优化

高性能计算之所以能达到极高的计算速度,是因为在该集群上运行的应用程序一般使用并行算法,把一个大的普通问题根据一定的规则分为许多小的子问题,在集群内的不同节点上进行计算,而这些小问题的处理结果,经过处理可合并为原问题的最终结果。由于这些小问题的计算一般是可以并行完成的,从而可以缩短问题的处理时间。

目前,国内外在高性能计算机系统中,最广泛使用的并行编程环境是 MPI(Message Passing Interface),它也已成为国际上的一种并行程序的标准。OpenMPI(open Message Passing Interface)是流行的开源 MPI 之一,具有模块化涉及、易于扩展等特点。

在 Open MPI 底层架构中,UCX 实现了针对多种协议的优化的点对点通信。不过由于 UCX 将集合操作转化为点对点通信的组合,很多对于点对点操作的初始化逻辑是多余的。对此,在华为 MPI 中,引入 UCG(Unified Communication)的概念,对 UCX 框架进行了重构。根据丁肇辉在演讲中的介绍,UCG 把集合操作定义在 UCX 层,使 UCX 通信的初始化逻辑从 Per message operation 变为 Per collective operation,可以让软件在更底层感知到集合通信,从而节省很多软件上的开销,包括程序的初始化、数据结构的创建等操作。据了解,目前 UCG 已开源,且已经被社区接受。

总体而言,华为 MPI 具有以下几个特点:

  • 基于开源 Open MPI 实现;

  • 通信算法基于 Open UCX 进行重构和优化;

  • 支持鲲鹏系列处理器与 x86 CPU;

  • 针对华为硬件的算法优化、硬件卸载;

  • 与华为自研软件与业界流行软件无缝集成。

2、基于UCG算法的创新

基于并行计算的高性能系统需要保持计算和通信性能的平衡性,其中,集合通信是通信系统的重要组成部分,负责进程之间的数据操作和同步操作。当并行应用的规模越来越大时,所使用的处理器的规模也越来越大,集合通信组内部进程之间的通信量相应增大,且需要相互协作完成通信语义,因此集合通信往往成为系统的性能瓶颈,需要优化集合通信以提高整体系统性能。

在演讲中,丁肇辉老师介绍了对集合通信算法的优化,分为节点内和节点间两部分。在节点内,结合共享内存技术和 CPU 内部的拓扑感知,华为对 MPI_bcast 进行了优化,见下图:

在 NUMA 架构下,对于同一块内存,节点内多个处理器的访问效率通常是不均衡的,此时可以通过多个共享内存块和 Flag 提高效率。

在节点间,华为对 B-nominal 算法进行了升级,提出“K-nominal 算法”,如下图:

K-nominal 算法具有更好的普适性,Bcast 算法可通过 LogkN 阶段通信完成,配合节点内共享内存算法可以达到最优通信效果。尤其是在 OpenMPI 下通过算法来自动调整通信包大小、规模以及正确的 k 值,K-nominal 的表现要比 B-nomial 这样一个典型的分级分步骤的集合通信算法来说,效果更好。

根据丁肇辉的介绍,经过小包测试后,华为 MPI 在 x86 上相较于 OpenMPI 提高了 2 倍以上,在鲲鹏上也提高了 2 倍。

鲲鹏 HPC 软件套件还将进行怎样的完善和迭代?

鲲鹏 HPC 在 2020 年将会发布一套完整的软件栈体系;目前来看,比较受业内关注的 MPI 和调度器这两个组件将是近期更新的重点。而编译器的版本则会相对稳定一些。以调度器为例,由于存在很多和用户之间产生直接交互的复杂功能,所以需要时刻关注用户的反馈,根据用户所提出的不同需求来进行版本迭代,因此为了适应用户的新需求会加速该版本的迭代。

突破性能极限,未来更值得期待

软件优化固然重要,但来自底层的革新才能突破性能极限。

早年间,支撑 HPC 高速运转的 CPU 均基于 x86 架构,而过多考虑功耗层面的 ARM 因在效能表现上无法满足应用场景的极致计算需求,在市场上总是叫好不叫座。随着摩尔定律作为行业标杆的铁律越来越难以为继,x86 体系遭遇瓶颈。加之 ARM 在功耗和效能之间又在不断取得更高的平衡,数据中心高效节能的市场诉求也愈加强烈,此前不被看好的架构开始在服务器市场发挥影响力,特别是 HPC 服务器市场。

2019 年 1 月,华为重磅推出自主研发且基于 ARM 架构的鲲鹏 920 芯片,该芯片具备业界顶尖的制程工艺、集成 8 通道 DDR4。由于采用“众核”架构,鲲鹏 920 可以做到最高 64 个物理 CPU 核,尤其适合大规模并行的计算场景。

基于此,华为以高性能服务器、大容量存储为基础,推出了端到端的高性能计算解决方案,包括基础设施、硬件资源、系统环境、集群管理、服务平台、行业应用等方面,让整个 HPC 的应用系统达到最佳的性能。而无论是服务器,还是编译器、MPI、调试器、函数库等基础软件,均可与企业原有的配置兼容,并实现性能上的优化和提升。

鲲鹏 HPC 全栈

IT 应用开发部署直接决定着企业数字化创新的能力,这将会有效地触发 HPC 应用量的急剧增加,同时,应用的多线程和高并发技术走向,也将催生出更多的 HPC 需求。而随着高性能计算应用的日益广泛和深入,高性能计算系统技术创新、计算环境创新与应用创新等各个层面还将遇到新的挑战与机遇。为了让鲲鹏 HPC 更好地服务于各行各业,华为将在 HPC 领域进行长期的技术投入,包括:

  • 平台层:计算系统(x86、TaiShan)、下一代 NAS 存储系统、网络互联(低时延技术);

  • 中间件:华为 MPI、工具链、集群管理、作业调度;

  • 上层应用:气象 & 海洋、制造、计算化学、生命科学、油 & 气、AI 等领域。

我们有理由相信,这颗 IT 行业“金字塔上的明珠”在底层的革新中,将发挥更大的价值。

作者 | 王晓青