从0.01 TFlops HPL到ASC'18应用创新

哈Ha! 我们将继续就圣彼得堡国立大学的一个团队(我们称为EnterTildeDot)参加世界上最大的学生超级计算机竞赛的系列文章。



在本文中,我们将以一个团队成员为例,探讨通向ASC'18的道路,尤其要注意比赛和现代超级计算机的访问卡-Linpack。 好吧,让我们看一下实现计算系统的记录和反记录性能的秘诀。


超级计算机竞赛简介


关于这些比赛的一般信息,可以在我们以前的文章中找到,包括有关今年比赛的长篇文章 。 尽管如此,为了完整起见,我们仍然在此处提供一些有关整个比赛的信息。


亚洲超级计算机挑战赛是每年三项主要的高性能计算团队活动之一,吸引了来自世界各地的越来越多的学生团队。 与其他类似的比赛一样,ASC假设存在符合以下条件的资格赛和决赛:


  • 主要活动:解决HPC问题;
  • 团队:5名学生+教练;
  • 排位赛阶段:对提案的缺席描述,以及对所提出问题的解决方案的描述,并在此基础上确定20名决赛入围者。
  • 最后阶段:20个团队的全日制比赛,持续5个比赛天,包括计算集群的完整组装和配置,问题解决,演示。 群集根据对3 kW功率的限制进行组装,该限制是由组织者提供的铁或由其自己提供的。 群集无法访问互联网。 这些任务与排位赛阶段的任务部分重合,但是还有一个未知的任务-神秘应用。

好吧,现在为了撤退到教育计划。 与其他已经进入ASC'17决赛的团队成员不同,我仅在今年才加入竞争运动。 我于9月加入团队,排位赛分配任务仅在1月发送,因此我有足够的时间研究比赛的基本概念以及研究唯一已知的任务-HPL和HPCG。 一种形式或另一种形式的任务几乎每年都会发生,但是,并不总是预先知道需要执行哪种设备(有时组织者可以远程访问他们自己的资源)。


高密度脂蛋白


HPL(高性能计算Linpack基准测试)是对计算系统性能的测试,基于此结果,形成了世界上最好的超级计算机的现代清单 。 该测试的实质是解决线性代数方程的稠密系统。 该基准测试的出现引入了一项指标,该指标使您可以对超级计算机进行排名,同时为HPC社区提供一些“轴承服务”。 如果您查看最好的超级计算机列表,则可以了解Lynpak的秘诀很快得到解决-尽可能多地使用图形加速器,并且将排在最前面。 当然,也有例外,但是带有图形加速器的超级计算机占据了头把交椅。 什么是“轴承服务”? 事实是,除了衡量性能外,Lynpak并未在其他任何地方使用,与实际的计算任务无关。 结果,超级计算机的竞争侧重于获得最大的Linpak效率,而不是真正的工作负荷,例如解决典型的USE任务而不是掌握学校课程。


HPL开发人员还创建了另一个程序包-HPCG,在此程序包的基础上还形成超级计算机的等级 。 通常认为,该基准测试比HPL更接近实际任务,并且在某种程度上,这两个列表中超级计算机的位置之间的显着差异反映了实际情况。 但是,最新评级(2018年6月)是一个令人愉悦的例外,最后,列表的第一位置重合。


现在关于真正的HPL


我们回到故事和比赛的更多实际时刻。 Linkpak是开放源代码,可以在官方网站上下载,但是,世界上几乎没有超级计算机可以通过此特定基准测试版本来衡量其性能。 加速器制造商发布了自己的HPL版本,该版本针对特定设备进行了优化,从而使您获得显着的性能提升。 当然,自定义版本的HPL必须满足某些条件,并且必须成功通过特殊测试。


每个供应商对每个加速器都有自己的HPL版本,但是,与原始基准测试不同,这里没有任何开源的问题。 Nvidia发行了针对每个卡进行了优化的HPL版本,而代码不再以源代码形式提供,而是以二进制形式提供。 另外,只有两种方法可以访问它们:


  • 您有一台带有Nvidia卡且可以进入顶部的超级计算机-Nvidia会自行找到您。 las,您很可能不会收到二进制文件,就像没有机会参与HPL参数的优化一样。 一种或另一种方式,您将获得在优化基准测试中获得的足够的性能值。
  • 您是三个学生超级计算机竞赛之一的参与者。 但是我们将回到这一部分。

那么任务的本质是什么,特别是如果大公司的聪明叔叔已经为您的设备优化了基准测试时?
在比赛的预选赛阶段,请描述提高系统性能的可能措施。 在这种情况下,不必追求绝对的性能数字,因为有些团队可以使用现代加速器访问由226个节点组成的大型且优雅的集群,而其他团队只能访问226类的大学计算机类,我们称之为集群。



在最后阶段,比较性能的绝对值已经很有意义。 并不是说每个人都处于平等地位,但是至少在系统的最大允许功率上存在限制。


基准测试执行的结果主要取决于两个组件:集群配置和直接设置基准测试的参数。 值得注意的是,矩阵和矢量计算的编译器和库的选择也会产生影响,但是这里的一切都很无聊,每个人都使用Intel + MKL的编译器。 对于二进制文件,您完全不必选择,因为它们已经组装好了。 HPL的结果是一个数值,该数值显示此计算系统每秒执行多少个浮点运算。 度量的主要单位是FLOPS(每秒浮点操作)和相应的前缀。 在竞赛的最后阶段,几乎我们总是在谈论Tera规模的系统。


结果优化


设置基准参数包括有意义选择Lynpak计算的任务的输入数据(HPL.dat文件)。 在这种情况下,此问题的规模具有最大的影响-矩阵的大小,矩阵被划分为的块的大小,以何种关系分布块等...总共有数十个参数,数千个可能的值。 Bruteforce并非最佳选择,尤其是在相对较小的系统上进行测试的时间从几分钟到几小时不等时,具体取决于配置(对于GPU,测试速度要快得多)。


我有足够的时间研究其他来源中已经描述的模式如何有助于优化基准测试结果,并确定新的模式。 我开始大量运行测试,启动了许多Google标记,并尝试访问以前未尝试配置的系统,以便也对它们运行基准测试。 结果,甚至在资格赛开始之前,就已经测试了许多系统,包括CPU和GPU,甚至包括完全不合适的Nvidia Quadro P5000。 排位赛阶段开始时,我们可以使用P100和P6000进入多个节点,这极大地帮助了我们进行准备工作。 该系统的配置在许多方面与我们计划在比赛最后阶段进行组装的方式相似,而且,我们终于可以使用低级设置,包括更改频率。


对于配置,加速器的存在和数量影响最大。 在使用GPU测试系统的情况下,最佳选择是将任务的主要计算部分委托给GPU组件。 CPU组件也将加载辅助任务,但是,它不会对系统性能做出任何贡献。 但是同时,必须在整个系统的峰值性能中考虑CPU的峰值性能,这在最大性能与峰值的比率(理论上)方面看起来极为不利。 在GPU上运行HPL时,具有2个GPU加速器和2个处理器的系统至少不会逊于具有2个GPU和20个CPU的系统。


描述了可能优化HPL结果的建议后,我完成了排位赛阶段的建议,然后进入比赛的决赛,比赛进入了一个新的阶段-寻找赞助商。 一方面,我们需要一名赞助商来承担团队飞往中国的费用,另一方面,我们需要一名赞助商来同意为团队提供图形加速器。 首先,我们最终很幸运,一所大学分配了一些钱,而Devexperts帮助完全支付了门票。 有了我们计划与之合作的赞助商,我们就没有那么幸运了,现在我们凭借集群的基本配置再次进入决赛,而没有任何HPL竞争的机会。 好吧,我们认为,什么也没压缩。


决赛ASC'18


最后,我们来到了中国,在中国的小城镇-南昌。 我们将群集组装两天,然后再组装任务。



今年,所有团队都获得了4块Nvidia V100卡,这并没有给我们带来其他团队的优势,但是这使得在CPU上启动HPL成为可能。 节点最初给每个人10个节点,但必须在主要竞争任务阶段开始之前返回额外的节点(记住约3 kW的限制)。 这里有一些技巧-降低CPU和GPU的频率,降低它们的性能,但是,您可以为该频率选择这样的值,以使我们每单位能耗所获得的性能更高。 通过降低频率,我们有机会添加更多的加速器,这最终将使性能更好。 las,如果我们和其他参赛者一样,带着一箱加速器来比赛,这个窍门对我们将更加有用。 但是,我们有能力保留最大数量的CPU。 由于并非比赛的所有任务都需要GPU,因此有人怀疑这可能会在我们手中发挥作用。
因此,决赛中最常见的群集配置是最少的节点,最多的卡。



最终链接包和一些有关记录的信息


竞赛中的任务与某些竞赛日相关,HPL是第一个任务,当然是在组装好集群之后。 HPL成绩提交截止日期是竞赛第三天的午餐,此外,在Linpak完成后,将立即打开对竞赛本剩余任务的访问。 但是,Lynpak在早期就开始开车。 首先,要确保群集正确组装,其次,设置Linpak的速度并不快,并且由于不需要其他输入,所以为什么不这样做。


我们很快组装了集群,并开始加入Lynpak。 对于我们的配置,我们收到了足够的值-20 TFlops的数量级,一切都会好起来的,但是在输出之后,出现一行错误。 早些时候,仅当我故意指出任务矩阵被划分为不正确的块大小时,我才收到此类错误。 一个非常不愉快的惊喜在这里等待着我们。 之前,我告诉过您,我们得到了4张V100卡,所以...我们没有收到它们的HPL二进制文件,没有人可以帮助我们。 已经好几个月了,但对我来说,这仍然是一个谜,那是我们Linpak决赛的结果。 为了消除错误,我们更改了编译器和其他库的版本,反复检查我们是否正确安装了加速器(因为这是第一次安装),但仍然无法修复该错误。



在Linpak投降前一天的晚上,我们再次仔细检查了评估任务的标准,因此,对于Linpak而言,该公式由两个组成部分组成-取决于赢得Linpak的团队的结果和成功完成任务的系数而确定的值。 事实证明,该系数非常大,以至于传递适当的Lynpak值完全不利,但是与传递任何值但没有错误相比,它具有难以理解的错误。 在仔细考虑了所有内容之后,考虑到花费大量时间来寻找错误的解决方案,并且从以下任务中获取数据集完全取决于Linpak完成时间,因此我们决定从战术上合并此任务。 因此,在超级计算机竞赛的历史中,正确的值被确定为绝对的“记录”。 我们的Lynpak爆发时的值为0.01 TFlops。 当然,优化现有CPU的基准,我们会获得稍高的性能值,但是,这不会对积分产生太大影响,并且会花费更多时间。 请记住,Lynpak在CPU上的工作时间更长。 国立清华大学获得了最好的成绩-43 TFlops。 一两天后,比赛组委会成员Jack Dongarra(Lynpac的创建者)随便问我们,Lynpak的方式如何? 显然,那时他还没有看到结果板:我们在HPL上花费的每一小时,他的WHAAAT反应都是值得的。



神秘应用


在交付了基准之后,根据预先准备的计划,我加入了本应处理神秘应用程序的团队部分。 没有人知道这项任务会提前完成,所以他们正在为最坏的情况做准备-他们以前已经安装了群集中闪存驱动器中可以方便使用的所有内容。 通常,本节中任务的主要困难是收集它们。 这次事实一切都有些不同。 该应用程序几乎是第一次收集的,没有任何问题。 当我们在地址处出现的大多数数据集出现错误时,问题就开始了,尽管它实际上是一个fortran应用程序。 从结果委员会的判断来看,不仅这项任务给我们带来了问题。


秘密武器:CPU


好吧,我参加的最后一项任务计划在下一个比赛日进行。 与神秘应用程序不同,我们已经看到一个必须使用的程序包-它是cfl3d。 当我们发现这是NASA产品时,出于某种原因,每个人都感到高兴,认为无论组装还是优化,一切都很好。 当我们在家测试套件时,组装没有问题,但是用例非常有趣。 大多数示例都依赖于安装其他工具,并且碰巧在尝试搜索此类工具之一-工具XX时,我们发现了1995年的一篇文章,据说现在工具XX已过时并使用YY。 产品的网站来自同一时间-文档经常将用户引导到该网站的页面,但是只有框架内和主页之外的网站无法使用。 这些示例的相关性还有很多不足之处。


如果很简单,那么任务的实质就是在保持给定精度的情况下,对多级网格进行棘手的拆分。 当然,这里的主要指标是时间。 不知何故,在这一天,我们尽可能地放松了,做了我们必须做的事情。 任务是给CPU的,这正是我们的工作量。 任务的输入文件具有非常特定的形式,通常大小很大-多达数百行。 我们团队的成员编写了一个脚本,该脚本使生成输入文件的过程自动化,从而使该过程加速了数百次。 最终,所有数据集均已成功完成和优化,甚至还有时间尝试使用一些有趣的选项来重建软件包,但是我们并没有获得太多的加速。 我们获得了应用创新特别奖,并在团队活动中排名第11位(决赛中20名,所有参赛者300+名),我们比其他人更好地完成了这项任务。



包含计算机系统配置的表格以及主要照片,来自http://www.hpcwire.com/

Source: https://habr.com/ru/post/zh-CN419847/


All Articles