动笔写下这么一篇文章,既有长久以来的思考,也有一时的苦闷情绪的催动。
不知道读者有多少人看过一部国产漫画《一人之下》的,里面的三一门篇章给了我很大的触动,也是此文标题的来源——术与道之辩。
先从我理解的术与道的关系开始聊吧,在漫画里,三一门传承的“逆生三重”术法有着返老还童,断肢重续等神奇功效,据传将术法练到极致便可得道成仙。但三一门门长左若童经历一生修行,终于在诸多机缘巧合之下,摸到了术之尽头,却发现仍然术是术,道是道,逆生之路终究无法通天。
突破到三重之后,四肢百骸都可随意重塑,人可踏空而行,怎么看都是陆地神仙。左若童在术上的造诣可谓是当世极致,但他从修行开始便寻求的是道,而术之尽头,道仍然无影,于是道心破碎,散功自裁。
这段故事令人疑惑的点是,道究竟是什么,为何说术到了尽头仍然不是道。求道之路固然苦,但术上的精进也是实打实的,为何求不得道如此重要,以至于能让人道心破碎?
抛开漫画故事,结合我的自身经历来聊聊吧。
五年之前,到保研的关口,我当时面临着诸多的选择,非常迷茫。机缘之下,看到了“存算一体”的概念,极为神往,最终以此为题开始了漫漫的读博生涯。这趟路也并不好走,从大量阅读论文和文献,建立对学科的认知,到学习技术基础,建立自己的研究方法,再到如今小有成果,发表过一些国际会议和期刊上的个人代表作,算是有了一定的小领域内的声誉。但临到了毕业之际,我又似乎回到了五年之前,再次面对选择的迷茫。
所谓的迷茫,一言以蔽之:术之尽头到底是不是真正的道?
先来论道: 关于存算一体的动机,有着堪称标准的话术:硬件算力发展速度与访存的发展速度存在剪刀差,导致限制整体系统的瓶颈从计算转移到了访存,构成了所谓的“存储墙”。存算一体技术的目标是将冯诺依曼体系下的存储与计算进行融合,从而打破“存储墙”。
但这个表述,以今日视角来看已有相当的局限性。
第一,以AI数据中心为典型的现代大型计算系统,研究的对象早已是以多卡机柜为粒度构成的计算集群,其中包含了计算、访存、互联三大要素。互联对当下大型计算系统的影响丝毫不亚于计算与访存,如何scale-up和scale-out已经成为一个专门的学科。因此,存算一体的表述,实际上忽略了系统层级上互联的影响。

(AI and Memory Wall, https://arxiv.org/abs/2403.14123)
第二,以Transformer模型为基础的大语言模型技术,有着非常显著的业务阶段划分。目前Prefill与Decode阶段的划分的PD分离手段已成为事实上的业界标准。更进一步的Attention与FFN分离的AF分离也在逐步探索之中。而在不同的业务阶段,由于roofline model中计算强度的不同,可以明确的划分为compute bound的阶段和memory bound的阶段。而存算一体的表述,实际上忽略了不同的业务阶段的显著差异。
再来论术, 存算一体技术与逆生功法有着极高的相似性,逆生是以后天修行,将炁梳理回先天一炁,而存算想的是将多年计算机体系结构发展出的memory hierachy重新拍扁乃至消除。
但是memory的容量大了,速度会降低。速度和容量二者无法兼得,是memory hierachy产生的自然之理。直接在某级存储上进行原位计算,不论是从电路也好,从体系结构也好,还是从算法也好,都可谓是天方夜谭。

当前存算一体的技术,以存储介质为分野,可分为SRAM存算,DRAM存算,NVM存算。
SRAM存算从最开始的就和存算一体的目标有背道而驰之嫌,所谓存算分离造成的访存瓶颈一直在DRAM一层,片上SRAM压根不是制约的瓶颈所在;至于NVM存算,且不论RRAM、MRAM、FeRAM等新型器件作为大型存储器的鲁棒性有待验证,即使以最成熟的Flash来说,等容量下其带宽超过DRAM都是天方夜谭,更遑论跟上计算的带宽,解决存储墙问题了。
DRAM存算是和目前的访存瓶颈最相关的技术,但也存在龃龉之处。DRAM工艺与先进逻辑工艺的冲突始终是一个问题,若单纯为了解决访存瓶颈,牺牲计算的性能,是否会导致问题又转移到了“计算墙”?当然,学界业界普遍都在探索和推进DRAM和逻辑die进行3D堆叠的近存计算方案,或许是目前最靠谱的路子,但这和存算一体的概念就走远了。
道乃伪道,则术乃伪术。 若这个道本身就不是正道,则为了这道所修习的一切术都失去其最终的意义,即使有着莫大的世俗好处,但对于所求非此的真正的求道者来说,都意味着某种精神信仰上的幻灭。
不过生活不是戏剧,人总是要在不断的试错和反思之中成长前进,兜兜转转,直到找出一条道来,而不是发现行错了道就万事皆休。
以SRAM存算为例,尽管其与存储墙再无瓜葛,但作为一种将小容量存储器(regfile)与计算(mac)进行耦合设计与定制化的技术,在片上的吞吐率,功耗和面积优化方面仍然有着用武之地,对于compute bound或者边缘计算的场景来说,有着很明确的技术意义。
将多个小的SRAM存算macro进行有效的组织,使得对用户来说,仍然可以等效为熟悉的存储/计算分离的编程模型,也是架构和底层软件值得一做的事情。
我想,存算一体的道未来还是会走下去,只是不再依托于万金油的存储墙表述,而是更严格的从真实的问题/需求出发。而清晰的认知自己所处的道,并依道修术,才是人生的正途。