每年在世界各地举行学生超级计算机竞赛,目的是吸引年轻的人才进入工业和科学领域的高性能计算领域。 今年,我们的团队参加了亚洲比赛,本文将讨论在这次比赛中获得的经验和印象。

排位赛的任务和进度
今年,这是第一次,不需要使用组织者提供的设备来解决任务:所有任务都必须在自己的硬件上运行。 多亏教授们的毅力和毅力,在排位赛开始前不久,我们的团队使用NVIDIA P100和P6000视频卡可以访问多个节点,这为我们做了很多准备。 任务与去年相差无几。 如下所述。
- 组装集群配置并描述为什么选择某些组件。
- 使用Lynpak和HPCG评估群集性能。 与去年的不同之处仅在于,去年Linpak必须针对组织者使用Intel Xeon Phi处理器提供的集群进行优化,并且在此情况下-针对任何可用的集群。
- 优化视频卡的Relion (用于识别来自低温电子显微镜的图像的软件)。
- 使用CNTK框架和MS MARCO数据集构建神经网络来响应用户搜索。
Lynpack和HPCG。 由于出现了带有视频卡的新节点以及仅从事性能测试的Vadim,我们在第一和第二任务方面有了显着进步。 Vadim能够根据需要进行任意数量的测试运行,以使参数完全适合特定系统。 同样,可以调节新节点上的功耗,从而可以考虑处理器和图形芯片频率的变化来选择群集配置。 新节点的出现对团队来说是最大的事件。
Relion。 化学化学家编写的代码没有经过深思熟虑的体系结构,并且包含数千行难以阅读的文件。 通过sleep()
系统调用提供了同步。 有数十GB的输入,甚至更多的输出,一次迭代平均需要40分钟,而且不可能立即了解如何优化所有这些。 经过两周的搜索,我为视频卡编写了自己的内存分配器; 傅里叶变换和其他一些例程已移植到视频卡上。 由于代码的复杂性和时间的限制,在初步阶段之后进行了其他优化。
CNTK。 像往常一样,在机器学习问题中,给出了神经网络的基本配置,值得从中开始。 框架和网络本身并不是开箱即用的。 CNTK要求使用特殊版本的OpenMP,在该实用程序中用于检查结果,该函数具有不兼容的参数类型,并且其编号不匹配。 当一切最终开始时,他们开始处理网络体系结构。 neural,神经网络仍然是我们团队的弱点,因此我们没有进行任何非常复杂的更改。 我们更改了废弃神经元的百分比,学习速度,初始值,并在重复部分中使用GRU代替LSTM进行了实验。
很高兴,我们进入了决赛!
这次,我们立即写信给去年的赞助商,并开始做准备。 很快发生了两件事:去年的赞助商拒绝了我们,大学分配了资金来支付部分航班费用。 接下来是产生想法,在哪里可以找到剩余的资金。 结果,开发用于交易所,经纪人和投资公司的财务软件的Devexperts公司自愿提供帮助。 在排位赛中,团队将解决可用设备上的问题。 有时,部分任务是由组织者提供的设备解决的。 在总决赛中,除了一个之外,其他一切都完全相同,但是……该团队尚未组装好这一组!

去年,团队成员都没有建立集群的经验,这就是为什么我们很少有时间开展竞争性任务的原因,因此,今年我们针对该训练集群进行了一系列培训课程。 在每个培训课程中,我们创建节点的备份副本,完全配置一个节点,然后通过网络将其映像复制到其他节点。 如实践所示,这是从头开始配置集群的最快,最轻松的方法,不需要对底层技术有深入的了解。 进行一些锻炼就可以完全调试和自动化该过程。

决赛:第一天和第二天
在比赛的前两天,团队将组装并建立一个集群,随后将在该集群上启动所有应用程序。 通常,系统中的视频卡越多,大多数任务就可以获得越多的性能,并且由于功率限制(功率不应超过3 kW,因此任务结果不能计算),可以在机架中安装的节点越少。 但是,在有些应用中根本不使用视频卡,存在大量节点可能是有益的。
今年,竞赛赞助商为每个团队提供了四台NVIDIA V100。 我们首先着手寻找合适的人并收到宝贵的加速器,然后着手安装。 团队中的任何人(包括教练)以前都没有在服务器中安装视频卡的经验。 在研究了组织者的友好指示之后,我们完成了任务,甚至没有像大多数团队一样完全拔出并拆卸服务器(参见视频)。
接下来,必须安装和配置操作系统。 通常,学生对此领域的信心最低,因为它使用的是其他领域没有用的利基技术,因此我们之前进行了几次培训,以使用Clonzilla从头开始在培训群集上完全配置五节点系统。
使用Wagrant在虚拟集群上调试了配置脚本,因为只有在其中才能轻松引发多个相同的虚拟机。 由于我们使用的软件级别较低,因此基于Linux名称空间的Docker和其他技术不适合我们。 配置脚本根本无法在它们上运行。
凭借在培训中获得的经验,我们部署操作系统和其他软件包的速度甚至比在培训中更快-服务器性能无法与我们的培训集群相提并论。 竞赛的特点之一是服务器无法访问Internet,因此我们预先下载了带有软件包的存储库,并记录在随身携带的两个USB驱动器上。
设置好集群之后,每个团队成员都开始设置和测试其对新系统的应用程序,这给我们带来了不愉快的惊喜。 从比赛的最后一年开始一直使用的Linpak版本拒绝在新系统上正常工作。 安装各种版本的CUDA,对各种选项和内核设置进行排序并没有达到预期的效果。 因此,我们决定启动常规的非优化版本,以免在执行任务时失去分数。 (这是由于今年采用了新的评分系统:即使您的成绩在速度或性能上是最好的,但是输出不正确,您也只会获得最大可能分数的一半。对下半部分的分数进行评分是正确的。)
要了解问题的实质,值得一说Lynpack是什么。 Lynpack用于测量超级计算机的性能,并编制世界上最强大的TOP500超级计算机的列表。 在此列表中占据最重要位置的最简单方法是购买具有大量视频卡的集群(处理器的数量不是很重要,因为99%的任务分配给了视频卡)。 对于每个加速器,都有Lynpak的优化版本,通常会关闭其代码。 仅当您拥有可以在TOP500列表中占据一席之位的超级计算机或参加超级计算机竞赛时,才能获取二进制文件。 尽管如此,比赛的组织者没有提供二进制文件,NVIDIA俄罗斯分公司也拒绝这样做。 在俄罗斯,TOP500列表中没有包含V100的群集,因此,熟悉的同事进行的搜索也不成功。 由于除了性能测试外,Linpak不在任何地方使用:科学和技术上都没有使用这种情况,这种情况也令人无法理解。 如果您想帮助团队并知道如何获得这一珍贵的计划,欢迎参加PM。 好吧,我们以自发的自发性,在最后的演讲中用幻灯片标记了这个故事,请陪审团成员满意。

决赛:第三天
比赛的第三天,Linpak,HPCG,Relion和这个秘密应用正在等待我们,这对团队来说是最艰难的一天。 快速处理了Lynpak(请参阅上一节)和HPCG之后,我们得到了一个秘密应用程序的工作任务(输入数据)。 事实证明,这是一个用于计算Siesta分子动力学的程序。 第一个令人失望的地方是,Siesta在部分任务上在地址中给出了一个错误(尽管事实是它是用Fortran编写的,在其中很难得到这样的错误),并且不可能对其进行调试。 尽管如此,剩下的任务仍然可以解决,最终我们成功地通过了这些任务。
在Siesta的同时,我们必须启动之前准备好的Relion。 所有不带视频卡的节点都分配给Siesta,带视频卡的节点都分配给Relion,因此程序不会互相干扰。
在初始阶段,我们强烈更改了Relion代码,使其可以在视频卡上有效地工作。 除其他外,我们并行化了许多功能,重写了视频卡上的内存分配器,将最耗资源的例程转移到了视频卡上,并增加了同时使用带和不带视频卡的节点的功能。 这极大地加速了该计划,并且在大学技术方面表现出色。 但是,在比赛中我们获得了内存更少的视频卡,这就是为什么Relion崩溃并出错。 对错误的更深入分析表明,只有为新系统重写代码后,代码才有效。 我们没有时间这样做,这是第三天的第二次失望。
决赛:第四天
比赛的第四天,CFL3D和MSMARCO留下了,这一天更加平静。 从分配给他们的应用程序中解放出来之后,团队成员开始互相帮助。 对于具有非常复杂的输入文件格式的CFL3D,Ruslan编写了一个脚本来生成它。 与拥有大量视频卡的团队相比,由于我们有许多节点,因此我们并行启动了多个任务,并且在每个任务启动几次后,我们便能够选择最佳参数。
预先准备好的MSMARCO的推出也没有引起严重的问题。 数据预处理花费了几个小时,因此没有时间进行长时间培训,但是由于功能更强大的视频卡,尽管时代变短了,但它仍可以完成。 从资格赛阶段开始,我们仍然拥有经过更多时代训练的模型(最终,输入数据已更改,但是没有新的文件可进行验证),但是根据规则,我们需要在决赛中训练过的模型,因此我们决定通过诚实训练的模型。 尽管工作协调得当且没有意外,我们还是利用了所有分配的时间并在深夜完成了任务。
决赛:第五天
第二天,一个演讲正在等我们。 在第四天晚上,我们将获得的结果插入准备好的模板中并发表演讲。 演示很容易,我们没有被问到任何有趣的问题,但是由于某些原因,只允许演讲者和幻灯片拍摄。
几个小时后,颁奖典礼开始了。 感觉好坏参半:一方面,我们的表现比去年好得多,另一方面-如果不是因为应用程序的烦人错误,我们本来可以做得更好。 结果,尽管我们的集群在大量视频卡上并没有什么不同,但由于节点数量和毅力增加,我们在CFL3D中击败了其他团队,为此我们在比赛中获得了单独的奖项。 在总体排名中,我们在进入决赛的二十支队伍中(在参加初赛的三百支队伍中)排名第十一位。 像去年一样,总体排名的冠军是新华大学。 对于我们的团队来说,这是对自己的胜利:我们比上次表现更好,获得了宝贵的经验,我们将在明年使用这些经验,并在一项任务中击败其他人。

结论和一般印象
在大多数情况下,视频卡比处理器多的群集配置是有利的,但不是通用的。 节点更少,从原则上讲,并不是每个应用程序都可以在视频卡上运行。 这样的应用程序包括Fortran程序,由于它们的年代久远,它们无法为视频卡重写,而且大多数情况下,它们甚至不使用所有处理器内核。 对于此类应用程序,大量节点的存在使您可以运行更多并行任务,这意味着可以优化应用程序。
团队可能不知道安装操作系统和投射图像的所有复杂性,但是可以通过培训轻松地弥补这一差距。 当然,参与者不会意识到所有的细微之处,但他们会自信地逐点执行安装。 安装脚本很容易在虚拟机上调试。
在比赛中,您可以遇到最精彩的开源程序。 由难以理解的书面脚本收集的程序,使用带有错误重写的库函数的程序,以C插入方式用Fortran编写的程序,具有硬编码依赖项的程序和编译标志。 我不记得有一个程序是第一次组装的,或者在组装过程中产生了可以理解的错误。 (一个新鲜的例子:新系统上的旧版本的OpenMPI试图连接一个具有空名称的库。只能通过自动替换生成的Make文件来可靠地解决该问题。)竞争使我们不能对任何事情感到惊讶和克服困难。 我想相信,使用过此类软件的人一生都不会创造出类似的东西。
在比赛中,您永远不会对中国的独创性感到惊讶。 今年,中国人重新设计了一个带有弯角的方形会议室,以适应比赛场地。 它将带服务器的机架和带液体出口的冷却系统带到了最近的浴室(我不是这个领域的专家,我不知道设备的确切名称)。 当他们意识到房间的温度没有降到摄氏30度以下时,他们将大量的冰块带入了盆中。 当然,这并没有改变情况,而是为团队提供了冰镇饮料。

致谢
没有我们的赞助商Devexperts( http://devexperts.com/ ),就不可能参加比赛。 该公司承担了飞往中国的机票费用。

来自中国的印象
团队的一些成员是第一次来中国,这引起了轻微的文化冲击。 告诉安东。
认识到初升的土地始于我们中的一些人因为没有电源标记而将电池取下来充电的事实。 除了这种阴谋,其他一切都融洽了。 两位志愿者带着我们大学的标志见了我们,之后我们乘公共汽车被带到了酒店。 值得注意的是,在彼得·彼得·积雪即将融化之后,在中国非常热(尽管伏尔加格勒的真正居民当然没有这种感觉)。 抵达后,我们被安置在房间里。 每天飞行后,我决定放下一个疲劳的巨大床垫。
床垫很硬。
沮丧的武士。
当时大约是十点,所以一个小时后,我们去了当地的一所大学。 说他是大人物就什么也没说。 如果将当地校园和圣彼得堡国立大学的领土进行比较,那么南昌大学的规模是后者的五倍。 我们看到了当地的饭厅,接下来的五天里我们在那儿吃了面条和米饭。 在大多数情况下,第一次与普通中国人的交流是从这里开始的,他们的英语知识不太好。
饭厅的布置方式是,每个窗户都是一个迷你零售店,您可以在这里购买东西。 您可以使用一张特殊的卡付款,就像NFC卡一样,您只需将其附在阅读器上即可。 一切都很快发生,无需长时间排队。 确切地了解您所采取的措施是有问题的。 您必须使用祖父的方法,然后将手指指向所需的菜肴。 第三天,他们在面条架上开始认出我们,大大简化了我们的生活。 有些人甚至学会数到十,以免手指指向他人并表示对居民的尊重。 如果我们谈论食物本身,那么饺子就是健康的。 在志愿者的帮助下,我设法得到了美味的汤,但是由于这需要与卖方进行口头交流,所以这只是一次。 由于调味料,所有肉都非常辛辣,具有特定的味道。
第二天,我们遇到了第三位志愿者,名字叫Ksenia。 (通常,中国人会用容易发音的名字来与外国人交流。)她已经学习俄语两年了,因此她被分配给我们,这是一种有用的经验。

比赛本身已经在其他章节中进行了详细介绍,但是我想指出,该团队只有两把椅子,所以我不得不坐在地板上,之后我的双腿只要求怜悯,因为我必须像这样在整个比赛的四天中坐十个小时。