文章
当前位置: 主页 > 资讯 > 文章
自研芯片何去何从
发布日期:2023-05-22 阅读次数:

  2009年,NVIDIA黄教主发表了影响深远的论断:“NVIDIA是一家软件公司”。这个时期的NVIDIA,已经开始把资源聚焦在GPGPU(GPU是图像加速卡;GPGPU是并行计算平台,既可以做图形加速,还可以做其他并行计算加速),以及支撑GPGPU发展的CUDA之上。随着AI等性能敏感场景的大规模爆发,NVIDIA市值超过了Intel等一众竞争对手,迎来了辉煌的NVIDIA时代。

  之后,更多的芯片公司,为了让自己的芯片被客户更好更方便地使用,逐渐把更多的资源聚焦在框架等软件能力方面。芯片公司,逐渐地变成了软件公司。

  如今,芯片行业面临新的挑战:众多互联网客户开始自研芯片。其本质原因是传统芯片公司的创新不足,没有合适的产品满足互联网客户的业务发展需要。

  未来,芯片公司仅仅把自己变成软件公司还不够,需要进一步的自我革新,从软件公司变成互联网公司,比客户更懂客户:能够深层次理解用户的需求和痛点,能够提供显著竞争优势的性能价格比,能够满足客户功能差异化和快速业务迭代,能够支撑用户业务和价值的快速创新。

  传统芯片公司的传统思路是这样的:设计性能、成本、功耗都非常均衡的芯片,再配套相关的驱动和开发工具包,更好的则有开发库和框架,甚至提供达到Turnkey级别的参考设计方案。

  一般来说,能做到这样的芯片公司已经足够优秀。但世易时移,只达到这些要求,还远远不够。因为这样的方案是静态的、局部的、短期的;缺乏动态的、宏观的、长期的解决方案。

  CPU是最通用的处理器:CPU指令是最基础的加减乘除,我们可以用这些指令最基本的指令组合出任何我们想要的程序和软件。但随着性能需求的不断上升,我们不得不通过硬件加速的方式不断地提升性能。

  硬件加速的单位计算可以当做是一条非常复杂的宏指令。硬件加速的劣势在于,由于单位计算的复杂度,导致硬件所能支持的系统灵活性急剧下降。

  比如,AI处理器,为了更好地支持张量计算,提供了很强大的张量计算能力。但一方面受限于算法模型的多种多样,另一方面受限于不同AI处理器架构的多种多样(甚至出现同一家公司三代芯片架构均不相同的情况,这里的架构指的是加速器呈现给Host CPU的接口架构,不是具体实现的微架构),很难快速把AI模型高效的映射到特定架构的AI处理器,从而导致性能效率不高,开发效率低等易用性问题。

  这些问题导致AI处理器面对的场景规模受限,场景的生命周期受限,从而导致芯片难以大规模落地,芯片的价值难以发挥。

  CPU是通用的解决方案,适合于几乎所有场景;GPGPU是并行计算,适合于若干个常见的领域加速场景;DSA,只适合于某个特定领域;ASIC,只适合于某个特定场景。从CPU到ASIC,覆盖的场景越来越小,覆盖场景的生命周期越来越短。

  我们提供芯片A帮助客户解决问题a,提供芯片B帮助客户解决问题b,依此类推。但这样会产生有很多问题:

  只考虑一个问题会顾此失彼,不同的芯片间没有协同。而且即使有协同,从架构上也决定了很难高效协同。

  多个个体解决方案无法组织成用户需要的“有机”整体。如同“瞎子摸象”一般,当不同供应商给客户提供扇子、绳子、柱子、墙壁的时候,客户是无法组织成“大象”的。

  服务器物理空间和功耗有限。无法容纳这么多张单领域或场景解决方案的加速卡,客户需要综合性解决方案。

  在手机等终端上,软件依附于硬件而存在。在提供硬件的基础上,提供相关的驱动及其他相关的开发和参考设计即可。不需要关注不同架构芯片的跨平台问题。而在云计算、边缘计算甚至一些超级智慧终端(如自动驾驶芯片NVIDIA Thor等)上,软件实体和硬件实体是完全独立的,软件实体可以运行在不同的硬件平台;反过来,硬件实体也可以支持不同的软件实体运行。因此,软件跨平台成为非常重要的能力需求。

  在软件虚拟化时代,可以通过虚拟化技术屏蔽硬件接口/架构差异性,可以实现软件从一个硬件迁移到另一个硬件。而在硬件虚拟化时代,软硬件的接口直接暴露给VM/容器等虚拟化实体,以及越来越多的异构计算引擎的加入,为了继续支持软件可迁移,越来越需要考虑硬件架构的问题。硬件架构一致性问题,更加凸显!

  芯片设计不再是一家公司考虑一个型号一个架构的问题,而是更多的要思考“和主流生态兼容,和别人的芯片架构兼容,并且高效、标准、开放,甚至还能持续演进”的问题。

  目前,几乎所有有实力的互联网公司都在自研芯片,有很多文章对这些信息进行梳理,这里就不再赘述。

  超大的规模。例如,AWS拥有超过500万台服务器,分布在全球27个地理区域和87个可用区。

  大量的数据。据IDC预测,到2025年,全球数据量超过175ZB,复合增长率27%,云端数据存储占比超过50%。

  复杂的网络。关键是带宽和延迟,还要关注域间隔离和跨域访问,以及访问控制、快速网络变更等。

  虚拟化、池化和多租户。主机/容器等虚拟化,用于资源隔离;虚拟化+池化,资源自由组合;多租户共享资源。核心价值在于提高资源利用率,降低成本。

  安全问题。包括网络安全、存储安全、数据安全、可信根及“零信任”、可信计算等。

  弹性和可扩展性。横向扩展,资源数量的增减;纵向扩展,资源容量或性能的升降。

  复杂系统解构。微服务/云原生,更多东西向流量。复杂系统不断解构,与多租户、多系统共存。

  可迁移性和硬件接口一致性。运行实体和硬件环境分离:虚拟化屏蔽硬件差异,VM/容器等在不同服务器迁移。硬件接口直通VM,需要不同厂家硬件接口一致性。

  特定场景服务。资源池化后,通过CPU、内存、存储、网络等资源的不同比例再组合,扩展出特定场景优化的实例类型。

  总之,云计算等宏观复杂场景,具有很多超出个体硬件的很多高级的特征,这需要硬件平台能够支持足够的系统灵活性,来满足系统的当前和未来各种需要。

  云计算等复杂计算场景,对灵活性的要求大于对性能的要求。在性能满足要求的情况下,CPU是最合适的云计算平台。如今,CPU的性能逐渐瓶颈,不得不硬件加速来提升性能。

  这也就是目前的矛盾之所在:一方面,芯片需要跟具体客户的具体业务深度结合来实现业务的硬件加速;另一方面,芯片却要适配不同客户的业务功能差异性,以及业务逻辑的长期快速迭代。行业里目前主要有如下一些形式来应对这些挑战。

  一定程度上需要客户修改自己的业务逻辑(客户作为云计算供应商,其云上支撑了数以千亿甚至万亿价值计的云客户的业务,更改底层服务业务逻辑的风险非常高),客户迁移的成本和风险都很高;

  供应商跟客户深度合作,做满足客户需求的产品。大客户自研芯片,也可以算到跟客户深度合作这一类(内部客户也是客户)。

  客户需求不是最本质的需求,需要深度洞察。比如,用户告诉我们,需要更快、更舒适的马车,而我们提供的可能会是更快、更舒适的汽车,甚至飞机。

  需求有横向和纵向的差异。横向差异指的是不同客户的个性化需求,也包括同一大客户内部不同团队的差异化需求;纵向差异指的是单个客户的快速迭代。满足一个客户/团队需求,可否满足其他更多客户/团队的需求?因为芯片研发周期和生命周期的缘故(两者总计为8年左右),满足单个客户/团队当前的需求,可否满足单个客户/团队长达8年的业务演进需求?可否满足所有客户/团队长达8年的业务演进需求?

  平台的可编程能力,是可以非常轻松做到的。但如何确保ASIC级别极致性能的同时,依然由用户掌控一切,由用户编程决定业务逻辑,则是一个有挑战性的话题。

  如果能够做到:足够性能价格比(数量级提升的极致性能,更便宜的价格)、足够通用(覆盖更多客户的更多场景)、足够灵活(能够覆盖客户长期的、快速的业务逻辑演进)、足够易用(兼容已有开发环境和业务逻辑,客户平滑迁移,没有太多学习成本,没有平台依赖),实现“用户软件定义一切,平台硬件加速一切”的目标,则是未来大家都需要面临和解决的挑战。

  从短期来看,当一个行业出现变革的时候,客户比供应商更早感受到“痛苦”,也更需要更多的底层创新来驱动自身业务的竞争力提升。但从更长期的视角来看,情况却并不一定如此。

  互联网行业,目前有很多客户开始自研芯片,这是一个重要的趋势。很多人认为,互联网公司为了构建自己的护城河,开始构建一套“封闭”体系。而我们更多的是认为:随着互联网云和边缘计算的发展,上层的软件业务对底层硬件要求越来越高。而传统的芯片公司,虽然有一些先进的技术,但局限于闭门造车,这些技术并没有为客户带来新的更大的价值,反而在一些方面,约束了客户的价值发挥。这些矛盾,逼迫着一些有实力自研的用户,不得不“自己动手,丰衣足食”,开始了自研之路。

  那么,“想喝牛奶,真的一定要自己养牛吗?”用户的本质诉求到底是什么?这里我们深入分析一下:

  更高性能/成本比。性价比是永恒的话题,都希望最低廉的成本下提供最高的性能价值。

  差异化。toB市场,互联网云计算公司需要有足够理想的硬件平台,能够支撑自身业务的差异化,也能够支撑云计算提供差异化的价值给到云的用户(也即用户的用户)。

  可迭代。软件的迭代很快,而为了延长设备的生命周期(也是一种降成本的手段),则需要硬件能够尽可能支持软件服务的更长期迭代。

  快速业务创新。用户的业务是核心竞争力,而研发芯片不是。用户需要的是能够自己掌控一切的开发平台,来实现业务创新,来增强自身的核心竞争力。

  无平台依赖。平台依赖某种程度上就是一种“垄断”,客户肯定不希望自己被绑定在某个特定的平台上,这样会降低自己的“话语权”,并且还存在巨大的技术风险。

  如果存在通用的芯片方案,能够满足上述这些需求,用户不会产生平台依赖,不对用户自身业务的核心竞争力构成威胁,并且功能更加强大,性能更加强劲,价格更具有显著优势,客户还需要自研吗?

  回想互联网巨头自研芯片这件事情,更多的感受是,行业和技术都在巨变:云计算、边缘计算出现后,系统的规模数量级膨胀。能深刻理解这些系统需求的莫过于互联网公司,而芯片公司对系统的把握,就有点捉襟见肘。

  但从更宏观、更长期以及发展的视角看,整个全球产业是国际化大分工的,每个地区每个公司,都做自己最擅长的事情。最经典的例子,莫过于台积电。台积电之前,设计和制造是一体的,典型的企业是Intel、AMD和TI。台积电创造性地只做foundry,不做设计,从此后才有了Fabless。记得在十多年前的时候,Intel仍如日中天,很多人羡慕Intel这种能从设计到工艺的全流程优化,所以做的产品性能成本是别人无法达到的。而如今,在台积电、三星等的竞争下,Intel自己的设计和制造成了相互拖累。而台积电所构筑的核心竞争优势,使得众多TOP级的Fabless根本就不会去想着自建制造工厂,或者说不是不想而是不能。

  人类发展的过程,就是从“男耕女织”到“手工作坊”,再到流水线的“工业化大生产”,再到现在的“全球化大分工”。从更宏大更长期的视角看,随着时间推移,很多技术会沉淀,云计算这样的互联网底层技术也不例外。

  当然,底层的芯片公司,需要不断地自我革新,才能真正帮助客户,成就客户,也成就自己。

  小系统。不需要跑智慧型操作系统,用于IoT等嵌入式场景的MCU芯片。这个时候,整个系统只有一个地址空间,所有的程序本质上是一个程序的不同片段。

  大系统。如手机、平板和台式电脑。需要跑Linux、安卓、iOS、Macos、windows等智慧型操作系统,需要通过MMU支持多个不同的地址空间,需要VA-PA的一级地址映射,才能实现不同的程序运行在自己独立的地址空间里。

  复杂宏系统。需要更多的地址空间,需要MMU支持GVA-GPA(HVA)-HPA的两级地址转换。

  复杂系统场景如云计算、边缘计算和超级终端场景:需要支持操作系统和虚拟化,包括虚机、容器等不同层次虚拟化;需要支持资源切分;需要支持系统、资源和性能隔离;需要支持软件跨硬件平台,包括硬件接口抽象和热迁移等。

  在小系统和大系统时代,设备即系统。每个设备就是一个系统边界,即便是通过一定的通信接口和外部联系,但设备作为一个独立系统,其特征足够明显。

  但在复杂宏系统时代,每个设备只是庞大系统的一份子。软件需要非常方便的跨不同的处理器架构、不同的芯片、不同的服务器运行,甚至需要跨云网边端不同的设备运行。这个时候,以设备为系统边界变得越来越模糊,系统变成了数以百万级的设备组成的超级大系统。

  只懂软件,难以驾驭复杂的芯片架构设计,做出来的产品通常是面向特定领域的加速卡,无法深入,难以整合;

  系统规模越来越多,系统的技术体系发生巨变,系统的架构在不断重构,芯片公司/团队也需要自我升级:

  过去,小系统芯片公司。芯片公司就是纯粹的芯片公司。硬件软件的人员比例大概在1:1 - 1:2,公司的核心都在围绕着芯片展开。

  现在,大系统芯片公司。芯片公司本质上是软件公司。NVIDIA的老黄很早前就提过,NVIDIA是一家软件公司。做大系统芯片的公司基本上的人员比例都在1:5+,芯片人员很核心,但人数相对少,软件人员数量显著超过硬件人员数量。

  未来,宏系统芯片公司。芯片公司本质上是互联网公司。这个时候,芯片公司有着对万物互联和云网边端融合的超级大系统的深层次理解,能够驾驭超级大系统,能够实现硬件和软件的深度融合,能够提供创新的超越用户需求的更高价值的产品、解决方案和服务。这一时期,硬件软件人员的比例,一般来说,通常在1:10+。