ASC25记事
今日大雨,雨声打在玻璃窗上,氛围甚好,遂成此文
什么,“小白”也能入队?
结识超算,既不是源于兴趣,也不是出于使命,大都是缘分和误打误撞。当时大二往哪个方向走,想起要搞差异化竞争(看到大多数人去搞AI,自己去搞点不一样的),又想着充分利用资源(觉得国家超算中心这个title很牛逼),故往HPC的方向走了。
其实,我早在大一下就想报名参加,奈何一直找不到入口(也是吃了信息差的大亏),直到大二下,从原本的“电磁波”专业转入了计算机专业,才了解到了入队渠道。(要不然可以多打打几届ASC和ISC,遗憾)
中大超算的入队分为俩个部分,一个是完成分发的入队任务,一个是线下的面试。
任务不多,大致两个部分,系统运维+应用优化,也分别对应了传统超算比赛的需求。
系统运维是我最为艰难的部分,因为需要使用linux系统。像我这样的计算机小白,以往只听说过linux的大名,什么各种性能好扩展性强的好处,实际上一直用的都是大众化的windows(一点没黑windows)。这次系统运维是我第一次接触Linux,从五彩斑斓的UI界面变成了黑框框bash终端。还记得当时用的是虚拟机,VMware playtion,不得不提,一定要使用pro版本,支持虚拟机拷贝,入队的时候用的普通版,环境无法备份,搞炸后又得重装,人直接麻了一半,着实消耗了大部分时间。
系统运维部分影响最深刻的是“环境变量”和”软件编译“。
讲真,当时一点都玩不懂环境变量。特别是一些编译的环境变量,什么共享库,CXX_FLAGS之类的,之前对编译链接那一套系统理解太少了。又有什么cmake、makefile之类的,也是一窍不通。(为啥我windows点一点就好了,你Linux这么多事呢?)好在后面一点点不知识,越用越活了,虽然现在还是个小白。
应用优化都是做一些常见小组件的优化,比如说seidel迭代之类的。幸亏有大模型代打,openmp、pthread、mpi轮番伺候,这些小代码的优化并不算问题。招新到后期,群里突然冒出来一个比我优化高很多的家伙,慌了,寻思着怎么干碎他们。想了一想,机子上不是有GPU么,遂走上cuda不归路,后面发现我是唯一一个把这些小组件上卡的,不过上卡的缺点是初始化和数据传输太慢了,计算真不是问题。
还记得招新从12月一直到4月,而我是二月底开始干活的,比别人少了两个月,但好在有惊无险(虽然最后一俩周基本都在赶这个事情)。
备战,可曾见过凌晨五点的中大
初赛我分配到的是生物信息赛题。唉,这个背景知识可要了我的老命,从刚开始一点不懂RNA、比对、位点修饰那一套,到能说的头头是道,中间的艰辛难与外人说。
RNA这个赛题,说难不难,说易不易,这是一个热点非常明显,优化收益非常高的流水线系统。其热点集中于hisat-3n、umi-collapse,只要把这俩个部分优化了,整个流水线的速度就上去了。
在初赛,我主要优化了hisat-3n,umi-collapse当时比起hisat-3n是一点都不够看。这个玩意儿主要是有大量的锁和同步操作,所以线程的可扩展性非常差。
当然,这也是我第一次优化真实的应用,上来先是编译,调一下编译参数。调的差不多了,开始profiling看源码,一看,我嘞个豆,全卡在同步操作和锁上,线程数一大,大家都排着队等锁。此外,在hisat-3n-table中,工作状态切换过快,导致调度开销和切换开销过大,我索性大刀阔斧的改了某参数,要求处理完一整个大批次(一条chr)才切换,速度框框上来。随后,又替换了无锁队列…..
总之,在一番折腾后,这一块取得了显著的加速比,但是umi-collapse那一块一直是心头石,还好后面决赛优化了。
提交proposal的前两天,是近乎通宵的。虽然优化做的还不错,但你得让别人知道你做了什么,科研项目中PPT永远是最远价值的。秉持着写好proposal的初心,与latex的第一次相遇开始了。
为了写proposal,我写了一版中文的初稿,后面有人提议直接写英文,但我仍然觉得中文的初稿至关重要,中文稿转正式稿速度慢的原因是不懂用latex。
latex这个东西与world/markdown比较,有点类似于“声明式编程”同“指令式编程”的区别,markdown和world是近乎所见即所得,但是一切细节都需要自己操作,latex是给你模板好了,自己写字声明即可。但当时不懂语法呀,什么插图,item之类的搞了好久。
已经忘记了当时为啥搞那么久,只记得花了很多很多的图标,这些图都是我通过excel和visio产出的,堪称亲生儿子。最后一天,一切的一切搞完后,已经到了早上七点,人已经疲惫不堪,草草的和H君吃了个早餐,便直奔这酒店躺了两天。
出发,去青海
依稀记得是三月还是四月?收到了决赛入围的消息。当时甚是高兴,起码一等奖稳了,更进一步也不是不可能。离决赛还有一个月的时间,中间把umi-collpase那一部分优化了,又做了很多跟DNA相关的事情,后面才发现,一点跟DNA的影子都没找到,因为官方在决赛前一天发了通知,大概意思就是没有DNA,白瞎了俺数十个小时的投入。
交流与共同,先找准方向,再去努力,才能避免迷茫与错付。
day0
第零天,也就是5月9号,出发去青海,落地,这个城市着实荒凉,感觉比起我的老家(某湖南十八线小县城)还要荒凉,路上没有啥人,旁边的W君一直说这是个鬼城。索性睡得地方不算太糟,晚餐也不算太糟,算是一个良好的开局吧,心里略感激动,又想起还有好多作业没写,难受,大学学分什么时候能砍一半!
day 1
第一天,是装机日,由于没带显卡,装机到下午就完成了。我不太懂硬件和系统相关的知识,所以第一天负责“拧螺丝”,拧玩螺丝,看看大佬们大声讨论着bios的各种设置,默默的在cpn的集群上跑起自己的应用测试一下效果。到了晚上,由于进度喜人,大家情绪都比较高涨,已经忘记吃的是啥,稀里糊涂就到了第二天。
day 2
第二天,依然是装机日。但是上午出了点小问题,一直到下午才能在机器上跑起来。中途(又好像是day 1)去拍了些照,摆了一些抽象的姿势,但是没有返图…
day 3
今天主要有alfoad和团队应用,af3队友非常强大非常给力,几分钟跑完所有测例,剩下时间都在优化。团队应用已经有人在做负责,我就打打下手,把一些边角料的工作搞定,就继续写我的RNA流水线去了(后面发现没个锤锤用)
day 4
第四天,也是红温的一天。因为有三个应用要在今天跑,所以压力大。我负责的应用也在今天,刚拿到赛题,心里一喜,因为数据集都是见过的,只是测时方式不同,于是乎开始改脚本。事实证明一些重要但工作量少的工作一定要在赛前搞定,不要拖到赛中,就好比改那个脚本,我已经预料到可能会出现这种形式,但是选择相信比赛时的自己,最后翻了车。翻车现场是:bash脚本中ssh到某个节点后,执行另一个脚本,再执行copy操作没有效果,后面才发现ssh久了没有操作会直接断开,于是采用了两次ssh操作解决了这个问题。但是修复好BUG的时候已经到了下午,所以只有6个小时来跑所有的应用了,时间非常赶,草草跑完了RNA。随后关注队友的情况,deepseek最后一个测例只能单节点,一跑要俩个小时,神秘应用那边情况不明朗。总之由于剩余时间非常少,我们五台机器被均分给了三个应用,大多数时候,是RNA三个节点,deepseek一个节点,神秘应用一个节点。
最后,提交结果的时候,发现理解错题目意思,彻底红温,题目要的是14个数据集(6个测例)一起跑的时间,我每个测例测一次,导致并行效率低。后面了解到某些队伍跑完只用二十多分钟,而我的一百分钟,相形见绌,即使把对题目的理解补上,时间大概也就到三十多分钟,还是差了许多,不得不说,人家确实牛逼。
晚上,草草的赶完PPT,就睡到了明天。
day 5
第五天是答辩,由于没有参加答辩,这天几乎在摸鱼,在思考。
day 6
- 在酒店摸鱼
- 西宁一家烤肉店真好吃
day 7
- 出去玩
- 看黄河,看五彩的山,看黑白的咩咩叫的羊
溜达与幕后
- 青海溜达
- 回来事情嘎嘎多
- 。。。。。。未完待续
一些经验之谈
- 与人交流,RNA那道题没有得到生信师兄的支持,单机游戏,浪费了很多时间
- 事情多,那就逐个击破,不要害怕。