“做硬件,核心不在硬件”,这半年历程得出了这么似乎有违常理的结论。
做硬件是工程!工程!工程!
做芯片是工程科学,而非纯理论科学。它有很多人为历史因素,并不是绝对客观的,整个系统更偏向有状态的动态系统,这与做纯理论科学研究是不同的。做工程很多时候,你做出来的东西并不是发现了某种普适定律,而是投资某条技术路线,填坑式地在 design space。我们做研究很多时候并不是因为发现了新的机理,而是因为我们现在有工程能力了,有技术积累了,所以能做下一步。比如 VLIW 架构,它提出的思想非常前瞻,但打不过传统体系的原因是因为它整个系统软件栈的成本故事说不通,也就是无法打过过往传统体系软件栈累积的存量。所以做工程是一个存量+增量的竞争。比存量,要打过整个社会生态、整个技术路线。最终应用的标准是能够在满足收支平衡,满足成本的故事。这个成本不仅是对硬件而是对于整个上下游生态而言。
硬件是工程,软件也是工程。但硬件的工程固定成本更高,这本质是源自硬件系统复杂性。硬。“一道工序的良率是99%,一千道工序的良率就是0.004%;一道工序的良率是99.99%,一千道工序的良率就是13.5%”,半导体前端、后端、制造、封装、测试层层加码,单纯前端 RTL 编码的复杂性就以超过软件编程,整个系统的复杂度已然产生了质变。导致它对现有路线的依赖更加强烈,更加保守。这种情况下,一个新兴的研究如果不讲通这个成本故事,是无法长期发展的。或者说这是个必要条件,你必须要能够讲通这么一个成本故事,你这个研究材的利益住。这是做硬件研究的最大的一个特点,它的高成本导致它的研究必须要去更多的侧重于商业化的诉求。芯片高额的固定成本必须大规模量产才能压成本,新型设计的潜在价值上限无法衡量,但成本规定了应用下限。结合流片成本开销以及市场同类竞品的价格,在出发前大致就能计算出收支平衡下至少需要卖出多少片才能存活下去,之前计算的数据,数字芯片单纯要超过 FPGA,就得卖出数千片,实际预估应该再高出一点数量级[1]。
市场由两只大手控制,无形大手逻辑依据更低的成本实现更高价值实现资源配置。最高价值可以在这里用定性解释为就是实现更多、更强大的功能。一个系统有更强的功能,那么我有两种思路去做,我是在硬件上去做还是在软件上做,比如是让硬件管理存储(Cache)还是让程序员去管理(Scratchpad)。软件开发成本远远低于硬件,所以很多时候这个造成了为了实现更多功能,会把硬件做更加普适,硬件牺牲了一部分的效能去换取软件上编程的自由性,这样就可以实现相同价值的情况下减少系统整体成本。这也是为什么有说“硬件一软件九”这种说法,一个硬件工程师要配九个写软件栈的人。
我们怎么去控制这么一个边界呢?什么事情我们要去靠硬件去做,什么事情交给软件去做更加合适?我们进一步问两个问题:第一个问题是什么只有硬件能做,第二个问题是什么值得硬件去做。
第一个问题即在现有软硬件体系里面有什么东西软件是无法做到的。这一点非常容易成立,因为现有体系下都是幸存者,已经说通了商业故事,它一定是牺牲了它这么一个特殊性换取普适性。那么做专用硬件很容易在这个点上去立住,这个专用性的硬件一定会带来一些这种现有硬件达不到一个上限。这是一个幸存者偏差,这一点并不是那么重要。
第二个问题并不是说以性能为判断标准,而是以商业故事成立为判断标准。也就是这个时候我无论加多少软件都不会使这个蛋糕变得更大,就必须投资硬件了。好比说我们做一个专用化硬件,把它做专用化之后性能是提升了,在这个垂直领域它的一个收益更高了。但反过来说他做专用化之后他去损失了他们的通用性,那么在其他领域他这个边界变窄了导致他总体蛋糕变小了,这是不值当的。系统有两个自变量,硬件投资 \(H\) 和软件投资 \(S\) ,而收益是 \(F\),值得硬件来做的标准当前系统下 \(\frac{\partial F}{\partial H} >> \frac{\partial F}{\partial S}\)。
软硬件相互都有约束作用[2],值得硬件去做还有一种可能即使当前投资收益不成立,但能降低软件成本,在长期上使得投资效益更大。也就是说要对这个编程友善,硬件的设计能够去造福软件人员,把一部分 Dirty Work给 让硬件给做了。产业发展会经过一个周期,早期的时候可能是高成本的一个投入低利润扩大市场,市场打大之后转而想办法降低成本,现在 AI 硬件也有这么一个趋势,早期都是 scratchpad memory 最近而开始看到 cache 的工作了。
硬件研究的黑暗森林
再说个人研究上吧。本身硬件设计是有一个先后的。要更多从上下游去发现问题,发现哪些是真问题,对上下游的认知可能会比硬件本身更加重要。因为如果做的不是一个真问题的话,后面一切的努力都是没有用的。而确定研究的边界会又比测量手段更加重要,比如某种问题在单芯片中会出现,而在多芯片下又不是问题了,又比如很多专门对某种算子做优化工作,比如对 MVM、对 Attention,经过优化后原本占据大头的问题在端到端的表现里反而又不够重要了。Admal's Law 告诉我们要解决最重要的问题,但问题的重要性本身也是会随着问题的条件以及时间演变的。
发现问题下一步是分析问题。那么这个就难了,因为硬件本身是复杂的,一个性能它受很多这个具体的一个变量的影响,比如说一个单核 profiling 工具 Timeloop 的建模方式,它有几个 splitted buffer,每个 splitted buffer 的变量分配策略是什么样的,每个 buffer 有多少容量, buffer 这个带宽位宽有多少,那么我们的 PE 有多少,我们 PE 之间的互联是什么样的,那更别说工艺影响都是当一个变量去给它除掉的,这还是单个 kernel,如果做更大尺度的 fused operation 又要考虑多少因素?举这么一例就是说明我们硬件是非常复杂的, 它是在这么一个特殊的硬件下得到一个特殊的结果。
硬件又是封闭的,首先要去保证在现有硬件系统GPU 做测量,怎么去做一个公正结果。第一个去除掉非硬件以外开销,比如说和CPU同步的开销,其实可以通过一些这个 Profiling 工具比如 Nightsight去找出来,那么第二步就困难了,去除通用性的开销。一般文章以 GPU 比较时当作黑盒,列举 buffer 容量、PE 数量、DRAM 带宽这些基础硬件资源,稍微深入点可能会比较每个 SM 的资源比例,但更深入的机制性能开销是无法知道的。如果直接拿定制结果和通用结果比较占据优势,并不能够证明研究本身这个创新点它多么强大,因为在出发之前把这个领域就缩小了,不能排除结果是因为创新点本身有效,还是单纯去除通用性就可以提升这么多的效能。这个是一个非常难的地方,最好的一个比较是两个架构能支持相同的一个通用的软件栈下去做改进,这个时候改进是很标准的。GPU 自 13 年最后一版 GPGPU-Sim 后一直保持着神秘的面纱[3], GPU 是黑盒你无法去打开它,如果做新兴定制硬件创新点,就必须要面对通用性的问题。
硬件的复杂性和封闭性导致很难建模,建模需要相当的人力,甚至超过硬件设计实现本身。所以现有很多文章的结果大概率不是客观公平的。学术界也是受看不见的大手调控,是朝着更小成本更多价值去做的。发文章首要目的并不是为了让研究有意义,而是为了发文章本身。因此,总体上会牺牲公平比较的建模成本,去实现更多成果。只要这个底层逻辑和游戏规则存在,就会形成这种现象。先前我常常会吐槽,这个工作哪里没有做好,这个代码赶工痕迹明显复现添加了很多成本,不应该去抱怨别人工作做得不好,而是把它当作一个客观普遍现象去认识,你自己去做也会有这种问题。学术圈的游戏规则导致了工程本身就不是为了可维护发展的。同样这种现象对硬件人员的软件功底提出了更高要求,很多时候做实验的工程量在修改甚至重写底层软件上。
由半导体行业性质、由商业竞争所树立黑暗森林是永远存在的,只能以这个为前提开展研究。现在想到法子只能一边多从软件侧了解现有体系运作机理,另一边在开题前多思考各种创新点起效果的最底层机理。之前我去港科和朋友唠嗑,聊到 Chiplet 和多卡系统集成,朋友反问到:“它们本质有什么不同呢?”
特别是判断问题不是新问题的时候,更要谨慎,为什么之前没有人做过?因为你所占的视角你是会比公司更窄的,研究生都是一些20多岁出头本科毕业的学生,公司里面都是在这个行业干了十多年的职业工程师,其次研究都是小团队,而业界人数几千人几万人这么一个大规模公司,且业界天然和学界有信息差。这个时候怎么能保证这个创新点别人没有想过呢,大概率都是想过的。所以你想到一个东西大概率别人都想过,但是为什么没人做呢。
拔剑四顾心茫然
说完研究,接下来就说一说个人吧。这半年心态上很挣扎迷茫,用申论来总结是“对所从事工作产生价值的期望与客观见识狭窄力量不足之间的矛盾”。
一方面是受大环境影响的迷茫,年轻人丧失了一种叙事的价值。中国学生大都受优绩主义熏陶培养,带有竞争意识的,不是要“成”,而是要“赢”,是基于比较的。现在高速经济增长的惯性已经退去了,逆全球化趋势愈加明显,指望技术进步做大蛋糕并不现实,很多时候面临的问题是明天不一定更好,到个体上就会变成被迫卷等等。而高度分工化的社会又导致绑定了自己的价值在工作之上。另一方面是在研究上的迷茫,没能在重资本的业界缝隙下找到适合研究的价值,就如最有效的 AI 技巧可能仅仅是提高规模这个可悲的事实。业界一边高歌 AI 的影响画大饼,一边又通过供需就业把研究人员绑上了这辆快速向前的大车。最后一方面则是研究生活本身带来的,比如孤独的工作环境以及进入社会后社交的高成本焦虑。
诚然我现状就是一个刚本科毕业的学生,很多问题也许交给时间处理。但愈发感觉,很大部分情绪将长期与之抗争,因此迫切地寻求一个较优解。相关的迷茫不宜说太多,这篇 blog [4]非常有共鸣。
“斗志” 这半年愈发感觉这个词的分量。直观体现便是领导团队,因为领导者在团队中管理面是最广的,看到的问题是比任何一个手下的人看得更全面的。而且你做非常前沿的东西,你会知道他有很多困难在里面,这个时候你会比任何人都更加担忧这个项目进展,但是你不能把这种心态去反映到你的表现上,从而正反馈导致这个事情办不成。要一边扛着这个项目潜在风险的压力,一边以积极心态鼓舞下带领整个团队去攻克这个问题。不仅是领导团队,本身这是一场持久战,很多方方面面,最终又归结到了斗志上,或者说信仰、希望、期望。这些是几进纯主观而非来自客观的动力信心,这一点会比任何技能技术更加强大和重要。
惯例总结一下
情商、智商,“商”这一字怎么解释?先前看到一种说法将“商”解释为适应力,对智力问题的适应能力,对情感问题的适应能力。希望 25 年,对社会适应的 “商” 高一点,心理迷茫的“熵”小一点吧!
https://www.cnblogs.com/wujianming-110117/p/15881735.html ↩︎
https://arxiv.org/abs/2009.06489 ↩︎
从外部猜测 Hopper 内部机制工作 https://arxiv.org/html/2402.13499v1 ↩︎
https://medium.com/@aianon/200bn-weights-of-responsibility-e67f98b7a081 ↩︎