编辑
2023-05-17
高性能计算
00
请注意,本文编写于 129 天前,最后修改于 129 天前,其中某些信息可能已经过时。

目录

赛前准备
第一天
第二天
第三天
第四天
第五天
兰又输
芜湖起飞

赛前准备

ASC 初赛只要求了 HPL、HPCG 和 DeepMD、Yuan LLM 几个题目,不要求功耗,比的是优化的程度等,HPL、HPCG 爆一下以前学长进行的测试文档即可(虽然这次因为上一届队员基本都跑光了,没留下什么),程序用 singularity 套容器就行。

基本上只要应用都能跑出来,并能做出一定的优化,进决赛还是很有希望的(因为本来玩得动的学校就不多)。

这次 ASC 初赛完了之后又新增了 WRF-Hydro 应用,这边强烈建议遇到这种气象模型低下头向相应专业的同学要数据(浪潮可不给数据,而事实上你要不做这方面研究,能正确做出个小尺度数据都谢天谢地了),尤其是这个 WRF-Hydro 效率相当高(没有贬义),官方给的测试数据只要核数开够,1分钟不到就能跑完,这对这个能直接一次性跑全美数据的气象模型完全是小 case。但是比赛肯定是不会这么好心的,这个放到后面再说。

到今年4月份多,ASC 比赛再一次(已经宣布过4、5次了)宣布正式开启,比赛地点不变。由于兰大特有的相距甚远的两个校区以及疫情的影响,前一年队伍都没有非常正式摸过、组装过机器的经验(羡慕别的学校的垃圾佬)。我们只在5.1假期进行了几次模拟装机、应用测试。

模拟测试是发现问题的最好的方法,能避免你比赛的时候出更多的坑。我们队伍这次走的 PXE 方案,想着只要主节点配置完全起来了,从节点就不用配啥了。但事实上还不如直接把系统盘带过去方便,反正能兼容(总不能 CPU 换成 ARM 吧)。原计划下一次比赛整点花活,全走 PXE(用个人电脑做 PXE 服务器),需要选取一个节点作为主节点额外进行配置,然后几个节点间加入心跳机制。后面比赛前一天和其他大学的酒桌上交流后发现这个方案确实过于抽象,整个系统盘代代传、不断迭代优化才是最优解(。

模拟测试的好处还有一点是,能帮你确定好驱动的版本,避免比赛中因为驱动这些问题导致异常事件的发生。特别是 NVIDIA 的相关驱动。


一定是 NVIDIA 干的!乆乆乆乆乆乆乆乆

不过很多问题事实上还是因为运维(我)太喜欢 root 一键梭哈导致的(。所以以后打比赛的运维狗一定要注意将责任记在心头,不然你队员怎么打死你的都不知道。你要做的包括:

  1. 配好整个系统,包括驱动(常用的 NVIDIA 显卡驱动、Mellanox OFED 驱动,CUDA。。。,当然以前学长学姐帮你弄好了代代传的镜像就可以轻松很多了),一些常见的用户设置(比如接触资源限制),NFS 配置等等。这些东西在你不能确定能完全适配各种环境(毕竟比赛机器可能会发生变化)、能够从头到尾运行正常的情况下,不要觉得带一个脚本和文件过去就行了,至少需要一个备份方案(手动配置)以及在各种情况下知道如何去修复的文档。
  2. 确定好你的硬件环境,机器架构,网络拓扑。这次 ASC23 某大学因为混用 A100 和 A800 导致驱动反复出问题,最终成绩也受到很大影响,NVIDIA 你坏事做尽(恼。
  3. 能看懂 Bash 脚本,知道 Linux 基本知识,掌握资料搜索能力(官方文档 > Google > ChatGPT)。
  4. 学会使用 BMC,远离服务器风扇。
  5. 多带一些存储介质,方便上传下载资料。
  6. 帮你的队员准备好环境,比如一些常用软件包的 modulefiles,spack 镜像等。
  7. 对机器进行改装,配网时一定要做好标记,包括但不局限于:整理网线,为网线贴好标签,负责记录拆装时各个机器组件的去向(弄丢了奖金就白拿了,特别是价值 1w 元的 Infiniband 线缆)
  8. 弄个像样的监控和功耗控制,能自动化最好,不然到时候可能人手不够。
  9. 随时准备跑路。该记的东西记好,整理成文档。

总而言之,SysAdmin Every Day(and Night)🤣。

比赛前一天各个队伍陆续到达现场,路上也忙,我们还带着几十万的美国金卡,回到酒店清点了物品,确保显卡万无一失后就去中科大逛了一圈。回去酒店简单和其他队 social 了后就没啥事了。


兰大见不到的水和鸟

第一天

第一天还是很重要的,因为你后面所有题目的基础就是你的小集群能搭建好,尽管之前五一假期演练了几次,这一天还是早早过去了,事实上后续比赛也证明无论你之前做过多少的准备,现场总会带给你不一样的惊喜。

按照赛程,比赛前两天用来做集群的搭建和应用测试,不限制功率(但超了 3KW 还是会警报)。

这次 Inspur 有点穷了(一定是阿美利卡干的!乆),RAID 卡不提供(临时 Google 了一下用 mdadm 组软 RAID),给的机器也不支持 NVME,只提供一个交换机。装机的时候我们发现带了太多杂七杂八的工具都没怎么用上(有一个电动螺丝刀,事实上不对机器进行大范围魔改的话整几个头齐全点的螺丝刀即可),下次一定要整些像样的工具箱方便整理。

头节点安装还算正常,就是识别到的网卡名称不同得重新改写下 pxe 和从节点配置脚本,比较抽象的是由于只在比赛前几天配置好了驱动并且来不及移植进 PXE 镜像,导致每次从节点起来都要重装一遍 OFED 驱动,并且我的 PXE 走的还是垃圾千兆网,从节点获取镜像和安装包都要半天,整个算下来集群搭建花了整个上午以及我的午饭(做 Yuan LLM 的队友一直在催,运维狗只能屈服于大模型的淫威之下),不算上之后又新出的一大堆问题的解决时间

这次在机柜上看到了之前没见过的 PDU(我见识少),这玩意能实时显示功耗、电压、电流等,我看介绍还能远程进行控制,可惜这次浪潮学聪明了没有开放 PDU 的 IP 地址,不然说不定可以像之前比赛队伍一样获取其他全部队伍的功耗信息然后推送到 Grafana(但是 Grafana 配置相当麻烦,之前配过一次就不想再碰了,这次比赛比较后悔的就是没找到一个比较好的监控+控制一站式的平台,不然还能空出一个电脑做团队和神秘应用)。下一次看看能不能读取其中的值然后整花活(连个警报器每次超 3KW 响起防空警报

由于没有配 SLURM(实际上可能也不需要),现场都是通过大声喊叫进行人工智能(只有人)调度,并且这一次我们没有配置什么团队协作工具,文档都是各管各,程序也是各管各,有啥事都是微信、QQ交流,加之比赛现场声音相当嘈杂(建议带耳机以免听力受损),会给消息接收、交流带来一定的影响。下次一定整个好的工具协作。

功耗控制祭出了我们写的控制 CPU 频率的工具以及 py 了浪潮工作人员拿到的风扇控制命令,手动控制难免效果差一些,并且由于 PXE 这坑爹玩意的启动速度,我们也来不及在 BIOS 里整花活。NVIDIA GPU 的功耗控制倒是可以完全通过自带的控制工具解决,难得地令人满意(nvidia-smi,这玩意实际基于NVIDIA Management Library)。但由于监控和控制分离,我们是通过 tmux 开一堆窗口混用 htop、nvtop、sensors 等进行监控,然后通过 pdsh 手动执行控制脚本(,自动控制再等等吧。


羡慕南科大监控,而我们还在使用传统 htop 和 nvtop(ASC 比赛官方拍摄,也感谢南科大在此次 ASC 比赛团队应用上的帮助)

这一次我们搞的三机六卡,因此功耗其实还算好调,但很多题目(特别是这次还有 Yuan LLM 这种东西)也因为只有六卡跑出来的效果相比其他四机八卡的队伍要差一些。这次比赛因为众所周知的原因显卡相当难搞,以往比赛看钱这次比赛看运气(有没有之前买过显卡),希望下一次浪潮能多注意点很多学校缺卡的现状吧(。

这一天下来我们主要是将各自跑的应用的环境搭建好并进行了一定的测试,包括团队应用我们和几个队伍进行了点交流,回去酒店继续上学校集群卷。

第二天

不得不说中科大给报的酒店相当好,智能化程度高(有界面相当丑陋的百度音箱),还有远超兰大的美味早餐,已经不想回到学校宿舍里了。

第二天和第一天一样,第一天基本把系统配置完成后就可以愉快地测试应用了。昨天还想着机器 IP 地址这些会不会因为到了续约期变化,今早开机后发现倒不必有这些担忧。

不过在应用测试过程中还是除了很多问题,然后发现最大的问题来自于 NFS,考虑到比赛给的数据可能特别大,我们给专门存储数据的目录挂了 NFS over RDMA,其他共享目录(/home/opt)则还是用 NFSv3 协议走的千兆网。但 DeepMD 应用对于三个机子好像非常水土不服,运行效率极慢,并且弄崩了 NFS 服务器;Yuan LLM 倒是能跑,但也时不时遇上 NFS 崩溃的情况。后续通过系统日志排查发现主节点没开 rpc-statd 服务,导致 NFS 在遇上大量文件读写时就晕了(。

有关 rpc-statd 服务(来自 ChatGPT)

rpc.statd(Remote Procedure Call statd)是一个服务,它在 UNIX 和类 UNIX 系统上运行,用于提供远程文件锁定和状态监控功能。它是在网络文件系统(NFS)环境中使用的,用于跟踪 NFS 服务器和客户端之间的文件锁定状态。

后面听了老师建议还是将其他两个目录都走 NFS over RDMA,本来还关心 IB 交换机的负载太大,现在发现该考虑的是我们带过去的垃圾交换机。不过由于 opt 目录的挂载和 OFED 驱动安装相冲突,最后只走了 home 目录的 RDMA。

中午的时候听说浙大搞了很大的动静,过去参观了下,好家伙他们带了个显卡拓展坞过去:


当时一堆老师同学都在围观,有钱真的好(

上面这大家伙里面放了8张美国金卡,通过传输线缆连接至下面的一台机器,等于他们集群就用了一个8卡的胖节点,估计就是抓准了这次比赛用显卡的题目多+冲 HPL 冠军搞的。GPU 节点真是泰裤拉!。

他们技术用的 GPU chassis,如果要能把存储也分离出来那就是绝杀(NVME 组 RAID,再配上 NVME over RDMA,比赛就不用玩啦)。不过要钱的,我们这种末流学校也就看个乐呵💦。

今天除了 NFS 配置出了点问题,其他应用基本上也进行了一定的调试,整体还算顺利,团队应用我们简单做了点 profile 分析,MPI 并行还没搞完,看着今年 A 组豪华配置(清北浙),想着做一点不至于没分就算了(不过没料到今年爆了大冷门)。

晚上针对功耗控制大概做了点修缮工作,能够更流畅地调节风扇了。

第三天

由于我们 PXE 启动极慢,早上起来就得争分夺秒,机器开起来跑了两次 HPL 就完事了,结果中规中矩,毕竟机器摆在那,追求稳定就行。HPL、HPCG 应用比赛前英伟达出了新版本,去除了 Intel MKL 库的使用换成了 cublas 库,听说跑出来的性能会比老版本好很多,可惜我们机器 CUDA 版本不适合,等下次再尝试了。


电脑上的灰是在兰州待过的痕迹

其实真要仔细控制功耗的也就 HPL,HPCG 的计算量并不多,主要在内存带宽上。

这次 HPL、HPCG 跑完我们就全冲 Yuan LLM 了,但尽管人工智能组在赛前和前两天准备期间占用了大量机时,拿到的数据还是挤爆了我们的显存(其中一名队员前几天还在为自己的搞的课程学习和根据这个题目发的 EI 而自豪),但做了这么久总不能留下遗憾,于是这一天就全搭进这一题了

下午趁人工智能组还在调参,我们让其他人抓紧测了遍自己的应用,DeepMD 跑正常了,团队应用我们写好了 MPI 并行程序让正好跑完题目机器空闲的南科大和哈工深跑了,不得不说 social 还是很重要的,毕竟团队应用不仅需要有人去优化还得有机器去跑,比赛就那么点时间+这么多题目独狼根本不可能搞得来。

比赛还剩1个小时多人工智能组终于调教好了模型,而我们的团队应用也准备开始跑了,但是由于我们发 EI 的队员相当认真,硬是要再占机时去卷一些收益很小的优化(“Give me five more minutes”),导致我们优化到能在一小时跑完的团队应用留下了还剩5分钟的遗憾(。

听说比赛现场会在6点直接断电,我们赶忙将数据转移至给的 SSD 盘中,趁最后几分钟 umount 掉。但是发现根本没有断电这一说,而且只要数据有,提交时间也不会卡的太死,看来是多虑了😇。

第四天

第四天是 DeepMD、WRF-Hydro 还有神秘应用,神秘应用给的 FVCOM,但是是十多年前的3.x老版本,老到 FVCOM 的 GITHUB 上都不提供源码包了(恼。

尝试了一下最新的 Intel oneapi 能编译过,但是跑的时候失败了,看了下发现是 mod_input.F 程序在对 FVCOM 输入数据进行读取的时候漏了些数据,找了浪潮工作人员说他们用老版本的 Intel oneapi 测试过完全没有问题,可是按照 Intel 的尿性,老版本的 Intel oneapi 早就不提供下载链接了(恼。想着改动源代码说不定能行,但听了指导老师的建议后还是从一些网站上下载了版本相当老的 Intel Parallel Studio,编译完成后居然能运行正常。。

由于神秘应用数据量也很大,加上为了 DeepMD、WRF 能跑成功,最后也就不了了之。看来还是编译器带少了,以及我太过轻信编译原理和具体实现的差距,这道题还是很有遗憾,本来还想着 Spack 帮我一键梭哈呢。之后再多练点吧🤡。

DeepMD 情况正常,WRF 这需要两个模式,一个 Standalone,一个 Coupled,但坑爹的是我们的 WRF Coupled 模式编译的时候貌似少了些选项,导致 WRF Coupled 跑完了一个案例之后没能生成出需要的一个文件,加上了参数之后又不能跑多机了,等全部弄好也没时间了,WRF 你不干好事啊😇👊。

今天比较意外的是我们团队应用拿了第一名,看了下全场就4个队跑了出来,感觉很有可能是因为这次清北浙一队导致很多学校直接摆烂不做了(。浙大不负众望拿了 HPL 单项最佳 - 100 多TFlops - 非常成功地超了上一次最佳 20 TFlops,也很令人担忧下一次他们还会弄出什么花活超过这次(太卷拉)。

第五天

第五天早上进行答辩,一切顺利,毕竟前面比得咋样答辩就咋样了(,答辩准备前正好在开 HPC Connection Workshop,几个学术垃圾去会议现场骗吃骗喝(茶歇还是丰盛的)。下午颁奖典礼没能线下见到 Jack Dongarra 并合影让我们一名人工智能队队员非常失望,但好歹证书上有他的签字,分量相当高了。

兰又输

由于我们当初没有计算好时间(故意的还是不小心的?),请假请到了 14 号(实际上10号就可以润了),队伍里几个老东西去了心心念念的黄山玩,年轻的(大三)跟着指导老师安排,下午去了中科大高新区逛了一会,深感世界的差异(兰大输,科大赢)。


高新区的图书馆,可惜给的科大纪念校园卡刷不进去

这种集装箱风格的建筑我还是相当喜欢的

实验楼,实验室环境远超兰大

芜湖起飞

后面两天指导老师带我们去了芜湖的科学计算研讨会学习骗吃骗喝,还免费白嫖五星级酒店。


就是智能程度还比不上科大给报的酒店

讲座上还是见识到了很多新东西,特别是几位老师讲述的超算集群的搭建过程和方案,远远不是 ASC 搭的那些小玩意能比的。


上交的这个超算互联网印象还是挺深刻的,能把几个校区间架构相当不一样的超算集群互联在一起并能同时利用起来跑应用,不得不说只有想不到,没有做不到。

听完后最大的感受和总结还是 “以赛促学,以服务推进科研”

本文作者:RoyenHeart

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC-BY-SA-4.0 许可协议。转载请注明出处!