他的第一反应是內存泄漏,跑这种规模的高维矩阵运算偶尔会有內存管理方面的问题,但是扫了一眼日誌之后发现不是。
通信带宽都快被吃光了,infiniband互联已经飆到百分之九十八了,而且还在往上冲,再这样下去整个分区都要触发过热保护。
他心里顿时咯噔了一下。
触发过热保护的后果就是强制降频,算力直接腰斩,整个计算周期都会被无限拉长的。
付霖站在后排,盯著那个卡住的进度条看了好一会儿。
他是钱卫华的关门弟子,也是整个研究院最年轻的一个。
他常年都在研究大规模图计算,对通信瓶颈比谁都敏感,看到这个曲线的时候脑子里已经开始过各种可能的原因了。
常规的scalapack二维块划分在最坏情况下的通信量確实是全对全的,但是理论上,这种规模的数据,哪怕全对全也不应该把带宽吃成这样。
除非,除非模型本身的数据结构有什么特殊的地方,导致了额外的冗余通信。
“会不会是模型本身就是走不通的……”
他顺著这个思路往下走,嘴里不自觉地嘀咕出了声。
话说出口的那一瞬间他还没意识到有什么问题。
这也是他的工作习惯,遇到瓶颈先排查可能性,模型层面的问题是可能性之一。
作为研究员,会发现问题是一种本事。
但前提是,別找错了方向。
当整个控制室的人都扭头看著他的时候,他才猛然意识到自己刚刚说了什么。
他面前站的是谁。
肖宿。
那可是用一个月就证明哥德巴赫猜想,征服了湍流,站在数学和物理学顶端,被称为肖神的人。
而他刚才当著所有人的面,质疑这个人的模型走不通。
“不是不是不是!”他双手在胸前疯狂摆动,脸涨得通红。
如果是別人,模型层面出问题的可能性確实存在。
但是眼前这个人造的框架,用是不是模型的问题来开局,简直就是赤裸裸的犯傻。
他恨不得把刚才那句话从空气里捞回来,急切的解释道:
“我不是那个意思!我是说会不会是我们超算的通信架构太老了,不是模型的问题!”
钱卫华在旁边揉了揉太阳穴,心里嘆了一口气。
这孩子技术底子不差,就是太年轻了,还没学会说话前先过脑子。
不过他也没太担心,以他对肖宿的了解,对方不会在意这种无心之失。
肖宿確实没有在意。
他从来不觉得谁说的话会是绝对准確的,当然也不会要求所有人都无条件相信自己。
只是,他並不觉得付霖说对了。
相比於一台他尚不了解性能底细的机器,他明显更信任自己的脑子。
肖宿在脑海里仔细回溯了一遍整个计算过程,最后,他的视线停在了屏幕上的那张通信拓扑图上。
或许,他已经找到问题的所在了。
他对周伟说:“把谱分解这一步的通信拓扑图调出来。”
周伟点头,低头敲了几个命令,一张节点间通信拓扑图被投到大屏上。
整张图像一团被猫挠过的毛线球,几乎每个节点都在和另外所有节点做数据交换,连线密密麻麻堆叠在一起。
“全对全通信,”肖宿看著那团毛线球,心里確认了自己的判断,“你们的並行分块是按什么分的?”
“按矩阵的行列做二维块划分,標准的scalapack分布策略。”
肖宿摇了摇头。
所以,问题不在於超算架构,而是数据分块方式出现了问题。
商空间降维里的等价类划分有一个被所有人忽略的特性,那就是等价关係本身就带有局部性。
两个样本点在大多数维度上都不需要做全局对比,只有落在同一个局部邻域內的点才需要精確比较。
但是標准的分块方式根本没利用这个特性,把每个节点都当成需要和所有其他节点交换数据来处理,等於白送了一大堆没用的通信开销。
只要按等价类的局部邻域结构做图划分,让通信只发生在图的割边上,数据交换量就能从一个数量级压到另一个数量级了。
肖宿没再多解释什么,他拉过键盘,开始敲起了代码。
先用局部敏感哈希做预分桶,哈希函数用隨机超平面投影,投影方向从数据的主成分方向里隨机採样,保证高概率下近邻点落在同一个桶里。
然后分块策略改用哈希桶的邻接图来做谱图划分,每个子图內的桶分配在同一个节点上,割边数量最小化。
这样需要跨节点通信的就只剩下割边上的边界样本。
周伟看著屏幕上飞速增长的代码,眼睛越瞪越大。
肖宿现在写的这个东西严格来说算不上什么深奥的理论突破,甚至可以说思路出奇的简洁。
可就是这样一个简洁的架构,却让周伟起了一身的鸡皮疙瘩。
局部敏感哈希预分桶、谱图划分、边界通信封装,这三层架构拆开来看,每一块都是现成的算法积木,他们这儿每个人都懂。
可要把它们拼在一起,变成一把专门解决全对全通信瓶颈的手术刀,这种事儿,不是谁都能想到的。
它需要你同时吃透哈希的数学性质、谱图划分的组合优化,还要对超算底层通信逻辑有近乎本能的手感。
大部分人连其中一块都啃不透,更別说三块融在一起,隨手就写出一个能直接上机跑的解决方案。
而肖宿连犹豫都没犹豫一下。
周伟立马就意识到了,这套架构不只能解决商空间降维的通信瓶颈,社交网络的社区发现、分子动力学的近邻列表更新、基因组组装的重叠图构建,任何需要大规模图计算的场景都能直接吃上这个红利。
他几乎可以確定,这套代码一旦跑通,整个中心的通信架构怕是要被重新刷一遍。