算力已经成为数字经济发展的核心驱动力。支撑宏观算力的微观计算架构,以及围绕着计算架构所形成的软硬件技术堆栈,还有由软硬件堆栈衍生的相关产业链,可以统称为(围绕某个计算架构的)计算生态。
随着计算架构由单构(CPU同构)到多构(异构、多异构甚至异构融合),计算形态由单机到集群再到跨集群,计算生态变得越来越重要(其重要性超过计算芯片本身多个数量级)。行业巨头以自身芯片和计算框架为核心,构建了一整套的封闭生态体系,其他芯片公司的破局之道在哪里?
是针尖对麦芒,构建一整套完整的新生态体系,以封闭对封闭?
还是以柔克刚,融入开源开放生态,润物细无声,以开放对封闭?
本文详细剖析。
1 计算生态的极端重要性
1.1 计算架构越来越复杂
随着算力需求越来越高,同构CPU的业务场景越来越少,基于GPU或AI等DSA处理器的异构计算已经成为主流。从发展的角度看,随着AI大模型等超高算力场景的持续挑战,未来会进一步从异构计算走向异构融合计算。
如果按照处理器类型的数量进行分类,可以分为三个大阶段:
第一大阶段,一个处理器类型,即CPU单核和多核同构计算阶段。
第二大阶段,两个处理器类型,即CPU+GPU和CPU+DSA(专用加速处理器)的异构计算阶段。
第三大阶段,三个或三个以上处理器类型,即多异构和异构融合计算阶段。
在第一个大的阶段,虽然仅仅只有一个处理器类型,但其计算生态已经是地狱级难度。Intel x86架构的优势,是在众多处理器架构的厮杀中逐步确立的。随着x86的优势地位确立,基于x86架构的软件生态逐渐成熟,即便是Intel自己,设计了更加优秀的安腾处理器架构,也无法撼动这一局面。
第二个大阶段,可以分为两个发展阶段:
首先是GPU确立其核心地位阶段。2006年,NVIDIA推出GPGPU,随后发布CUDA,再随着深度学习和大模型的兴起,逐渐确立了NVIDIA架构GPU+CUDA的强大生态。
然后是依托处理器之间的协同效应,逐渐往其他处理器架构和生态拓展。NVIDIA依据其NV-GPU的强大生态,开始往其他处理器生态拓展,如NVIDIA发布了ARM架构的Grace CPU,以及其收购的Mellanox随后发布的Bluefield DPU(DPU可以理解为多个DSA集成的芯片)。
第三个大的阶段,有三个甚至更多的处理器类型,处理器之间的协同效应更加显著,在接下来的1.2节详细介绍。
1.2 计算生态,比我们想象的更重要
2009年,黄仁勋宣布“NVIDIA是一家软件公司”,如今,NVIDIA已经发展成数万亿市值的超级公司,市值远超其他TOP5芯片公司市值之和。基于NVIDIA发展的标杆作用,大家能够理解生态的价值、重要性和构建计算生态的难度,之前我的理解和大家也是一样。
但最近几年,随着认识的进一步加深,我个人的想法得到了进一步修正:随着云计算等新的计算形态的发展,计算生态的作用,进一步提升,其作用比我们想象的要更加重要。计算生态的重要性,主要体现在如下几个方面:
单处理器的生态价值。这就是我们通常所理解的处理器架构和生态的价值,最典型的就是Intel x86生态和NVIDIA GPU生态。但除此之外,还有接下来介绍的几个跟外部资源协同产生的生态价值。
多类型处理器的协同效应。随着异构计算成为主流,并且计算架构未来会进一步从异构走向多异构甚至异构融合,处理器协同的效应进一步放大,处理器架构生态逐步形成融合的超级生态。
计算节点的协同效应。从单机走向集群/跨集群,一方面是不同计算节点工作任务之间的协同,另一方面是计算任务在集群内部不同计算节点之间可迁移,生态的作用进一步放大。
产业链的协同效应。技术栈形成产业链,产业链上下游依赖,生态惯性大。计算平台支撑的业务价值数以千亿万亿计,且业务快速迭代,开发依赖已有生态渐进式升级,很难迁移到新的平台和生态。
单处理器的生态价值,以及上述三个“协同”的价值,进一步强化了计算生态的“马太效应”,“强者更强,弱者更弱”。
我们定性分析一下(下面所有分析为定性分析,非定量分析):
芯片的难度很高,但生态的难度更高。
假设,在十多年前,2007年(NVIDIA开始构建CPU+GPU异构计算生态的时候)芯片的重要性和难度是1(以此为基准),计算生态的重要性和难度为10(以此为基准)。
假设,随着系统规模的增大,也就是2027年前后(CPU出现在1971年,GPU出现在1999年,异构融合处理器HCU将出现在2027年?),单个处理器芯片的重要性和难度上升到10,与之对应的,计算生态的重要性和难度上升到100。
随着异构的处理器越来越多,不同处理器计算生态的协同效应凸显,计算生态的重要性和计算难度再增加一个数量级,其值达到1,000。
再考虑集群/跨集群以及云网边端融合成为主流计算方式的影响下,计算生态的重要性和难度再增加一个数量级,其值进一步上升到10,000。
受上下游业务迭代越来越快的影响,计算生态的重要性和难度需要再增加一个数量级,其值增加到100,000。
最终,芯片和计算生态的重要性和难度比例变成10:100,000,或者变成1:10,000。也就是说,计算生态的重要性和难度是计算芯片的一万倍!
2 计算生态的现状:封闭为主,但开放的力量在迅速壮大
2.1 CPU计算生态
CPU计算生态,目前主要有三个:
x86封闭生态。x86 CPU主要是Intel和AMD,x86架构占据了CPU的绝大部分市场份额。x86的架构知识产权基本都在Intel和AMD手里,也只有他们能够设计和生产x86架构的CPU。因此,基于x86 CPU的整个生态是完全封闭的体系。
以ARM为代表的半开放生态。ARM从嵌入式小CPU出发,并且在移动互联网时代,占据了几乎百分百的智能手机和平板电脑处理器市场,目前在积极的向PC和数据中心市场拓展。ARM公司拥有ARM架构的知识产权,但ARM公司本身不生产芯片,仅提供架构或IP授权,芯片由其他公司生产并销售。因此,形成了以ARM公司为核心的、庞大的、相对开放的ARM生态体系。
以RISC-v为代表的开放生态。RISC-v相对年轻,其最大的差异性优势就在于其完全开放性,整个架构任何人和团体均可免费使用。目前,围绕着RISC-v的计算生态发展迅猛。我个人观点是,RISC-v会非常快速的走过ARM当年走过的道路:
MCU级别的小处理器,RISC-v已经占据很大一部分市场份额;
更高级的AP级别的RSIC-v处理器,已经逐渐开始商用;
并且,目前也有不少公司在面向数据中心领域开发RSIC-v架构的处理器,预计会在未来2年左右时间商业化落地。
由于RISC-v架构绝对开放的属性,RSIC-v计算生态未来可期。
2.2 GPU计算生态
GPU计算生态,主流都是完全封闭的生态。GPU领域,主要有两个玩家:NVIDIA和AMD。GPU公司经常提及的架构,如NVIDIA的Ampere、Hopper等,通常指的是芯片具体实现的微架构。因此,NVIDIA的各类GPU架构,我们统称为NVIDIA架构GPU,AMD的各类GPU架构也类似,统称为AMD架构GPU。
类似ARM在CPU领域的角色,GPU领域的架构和IP提供商主要有Imagination和ARM,但这两者的GPU主要是用于图形加速,并且主要是面向低功耗的移动设备。在数据中心级的通用计算加速方面,还有很长的路要走。
此外,行业也兴起了一些开放GPU架构的声音。
佐治亚理工学院基于开源RISC-V开发的GPGPU Vortex是一个开源硬件和软件项目,在FPGA 上运行,支持 OpenCL。Vortex具有高度的可定制性和可扩展性,拥有完整的开源编译器、驱动程序和运行时软件栈,可用于 GPU 架构研究。
清华大学“乘影”GPGPU开源项目于2024年1月26日正式启动,“乘影”是清华大学集成电路学院何虎老师研发团队历经多年研发,采用RISC-V部分指令和自定义指令构建的通用GPU指令集架构。
用何虎老师的原话来说明开源GPGPU的价值:
一是推动形成GPGPU指令集架构标准。形成统一软硬件生态,让企业不再重复造轮子,各自构建自己的体系,最终形成行业统一的技术标准和软硬件生态。GPGPU行业企业可以各自发挥所长,找到自己的价值。
二是利用开源社区探索先进的GPGPU设计技术,避免专利陷阱和技术壁垒。让企业可以放心在开源GPGPU基础上开发商用GPGPU。
三是可以培养GPGPU产业所需的各类人才。目前乘影开源GPGPU已经被国内外高校老师应用于教学和科研。
2.3 DSA计算生态
通过上图,介绍一下DSA计算生态的整体情况:
DSA,依据其面向的计算领域,可以分为很多个DSA(1)、DSA(2)、……、DSA(m)。DSA主流的领域(Domain)包括AI(大模型)、网络、存储、安全、视频等,这些领域都有一个共同的特点:市场规模足够庞大。
不同的公司,其所提供的DSA架构不太一样DSA(x)-Vendor(1)、DSA(x)-Vendor(2)、……、DSA(x) -Vendor(n)。各个公司,依据公司的具体情况,其产品可能涉及DSA的一个或多个领域,也可能会全涉及。
一般来说,面向某个特定领域,某个具体公司的生产的芯片架构通常是一致的,并且是向前兼容的。但受限于具体行业的发展,也受限于具体企业内部的各种情况,在同一领域,有些公司的芯片架构会出现前后不兼容的情况。因此,会有DSA(x)-Vendor(y)-Arch(1,2,3,…)的情况出现。
DSA计算生态,目前是完全的封闭:不同领域的DSA之间没有协同,同一领域不同厂家的DSA之间也没有协同。
DSA目前最火热的领域是AI,AI领域有众多的DSA芯片存在,如谷歌的TPU、AWS Trainium和Inferentia、SambaNova RDU、Tenstorrent AI处理器等。于是出现了谷歌OpenXLA框架,OpenXLA是一种面向AI领域的中间件框架。其设计理念类似于LLVM和TVM,上面对接主流的应用框架,如TensorFlow和Pytorch,下面可以映射到不同架构的芯片上。
不管是哪个领域,DSA形态的处理器要想发展的好,势必需要如OpenXLA一样,有一个中间层的框架来统筹软件和硬件,需要构建领域加速计算的生态,上接各类业务应用(或应用框架),下接各类架构处理器。最终,DSA的架构和生态逐渐收敛,形成统一的、开放的架构和生态。
3 硬件定义软件和软件定义硬件
“软件定义”一个重要的领域是软件定义网络。我们的网络芯片都是ASIC,功能都是确定的,芯片提供什么功能,应用才能使用什么功能。但随着云计算等许多复杂网络场景的出现,网络协议的更新换代非常的快,客户亟需摆脱硬件的束缚,能够自由的根据自身业务场景的需求,快速的自主定义网络功能,因此才出现了软件定义网络。
硬件定义软件和软件定义硬件的区别在于“谁依赖于谁,谁约束谁”:
硬件定义软件模式,框架依赖于硬件而存在,而软件又依赖于框架而存在。软件在硬件所规划的一个功能界限内,可以自由变化,但无法跳脱出这个功能界限的约束。
CPU是一个特殊的硬件。CPU是一个“全能”的“无约束”的计算平台,客户可以通过软件编程的方式,实现“任何”想要的功能。
那么软件定义硬件的方式,则是硬件依赖于软件存在。既然存在CPU这样“特殊”的硬件平台,我们可以“随心所欲”的定义功能:
如果性能满足要求,CPU平台足够,那就不需要继续优化;
如果性能不足,则需要把应用逐步优化到GPU或DSA平台进行加速,这也就是大家常说的CPU卸载(CPU offload)。
4 破局之道之一:硬件定义软件,以封闭对封闭
4.1 硬件定义软件发展模式
对一个芯片公司来说,其发展阶段通常是这样的:
首先,研发出自己的算力芯片。
然后,开发出跟自己芯片紧密配合的计算框架。
再然后,针对不同的行业或业务场景,提供更加完成的行业或场景解决方案。
做好这三部分工作,才能比较好的支撑客户的具体软件应用和业务场景。
不管是CPU、GPU、AI-DSA,还是DPU等等,凡是算力芯片,基本上都是如此。Intel、NVIDIA等行业巨头,是按照这个发展模式走过来的;其他芯片公司,也是按照这个模式在发展。我们给这个发展模式起一个名字:(私有的、封闭的)硬件定义(受约束的、依赖于特定平台的)软件的模式。
在Intel和NVIDIA发展的时候,采用硬件定义软件的发展模式,是可行的。那时候,行业没有其他成熟的计算架构和生态,Intel、NVIDIA和其他竞争对手是“公平”竞争,最终Intel和NVIDIA脱颖而出,各自占据了CPU和GPU的生态首位。
在Intel和NVIDIA成功之后,其强大的生态惯性,会对其他芯片生态形成抑制作用,从而使得其他芯片架构和生态的发展举步维艰。其他芯片公司要想成功,势必付出相比Intel和NVIDIA超出很多的努力,事倍功半。
4.2 以封闭对封闭,可以成功吗?
系统越来越复杂,芯片工艺越来越先进。其他芯片公司(CPU领域Intel之外,GPU领域NVIDIA之外)按照硬件定义软件的模式,其发展的门槛非常高:
一代芯片的研发投入在数十亿;从开始到功能稳定,通常需要至少三代芯片。
开发框架的投入需要持之以恒,投入通常需要一百亿以上。
构建(并经营)一个新的计算生态,同时让行业接受,并且能够占据一定的市场规模,投入通常在五百亿以上。
计算生态,赢者通吃。即使获得了一定的市场规模,在更长期的发展中,会走向两个结局:
结局一,持续更多的投入(逆水行舟,事倍功半),持续赶超先进,并最终获得胜利。
结局二,投入跟不上,慢慢的生态萎缩,之前的巨量投入都烟消云散。
第一个结局:一方面,对一个企业来说,这么多的投入几乎不可能;另一方面,即使成功了,也是一个新的封闭生态,对行业、对客户来说,都和之前一样。
第二个结局:从几率上来说,第二个结局的可能性更大一些。因为马太效应:领先者有生态优势,顺水行舟,可以从市场获得非常多的资源,进行再投入;追赶者逆水行舟,市场上能获取的收入少,但需要的资源投入反而更多。
5 破局之道之二:软件定义硬件,以开放对封闭
“山重水复疑无路,柳暗花明又一村。”陆游的这句诗,蕴含着深刻的人生哲理,即绝境之中蕴含着希望与转机,计算生态也是一样。
业务应用脱胎于计算芯片、框架和生态;当业务应用逐渐成熟,并且发展壮大以后,业务应用会逐渐“摆脱”了硬件而存在,形成自己的“生态”:
初始的业务应用,构建于某个确定的计算芯片平台。
但业务应用成熟后,仍需要快速迭代。业务应用需要完全自主的定义自己想要的功能,也就是快速业务创新,而不应受硬件平台的约束。
与此同时,业务应用成熟后,需要扩大规模。规模化对成本更敏感,于是就有了寻找新的更低成本计算平台的诉求。
实际上,业务应用已经形成了一个(相比芯片生态)更加庞大的生态:开源软件生态。全球绝大部分互联网公司的业务应用,都是基于开源软件系统而构建的。典型的开源软件如Linux、OpenStack、Kubernetes、Pytorch、Tensorflow等。
业务应用形成自己的业务生态之后,接下来做的事情,就是逐渐重构底层的软硬件堆栈,我们把这种新的模式称为:(开源)软件定义(开放)硬件模式。新的模式可以分解为三个发展阶段:
第一阶段,重构开源开放的业务场景解决方案。此阶段,基于已有的成熟的芯片和计算框架,利用已有的成熟的行业和场景结局方案进行改造,因此门槛相对较低。
第二阶段,重构开放的计算框架。在已有开源开放的场景解决方案完成后,可以逐渐优化计算框架。类似谷歌OpenXLA,可以逐渐形成开放的计算框架。开放,意味着接口形成标准,并且任何企业均可使用;但开放并不等同于开源,开放是必选项,开源是可选项。
第三阶段,重构开放的芯片。解决方案开源开放,计算框架接口开放,基于标准的接口,来设计开放架构(架构,即软硬件接口)的芯片。芯片微架构(具体的芯片实现)各家公司可以不同,但芯片架构(接口)必须兼容计算框架。
软件定义硬件的方式,是一个渐进式的发展路径。全行业整体投入是巨量的,但单个企业的投入相对有限。每家企业可以根据自己的资源和技术优势,拥抱开源,融入开源,在开源生态里找准自己的定位,实现自身的成功。
下方表格是软件定义硬件模式和硬件定义软件模式的区别。