
1. 从一份芯片架构资料说起AI芯片到底在解决什么问题这段时间因为工作关系我一直在啃一份AI芯片架构的外文资料顺便做了些翻译整理。说实话这类资料看多了以后最大的感受是AI芯片这个东西听起来高深核心思路其实不复杂复杂的是如何把每个细节做到极致。先回答一个最基础的问题AI芯片是什么往粗了说它就是专门为AI计算设计的一类处理器。往细了说它要解决的核心矛盾是“数据搬运比计算更贵”这件事。传统CPU擅长的是通用逻辑控制和复杂分支跳转GPU擅长的是大规模并行渲染而AI芯片要解决的则是一类更“专一”的计算模式海量的矩阵乘加运算、大规模张量操作、以及密集的数据搬移。把这三种计算特征吃透AI芯片架构的全貌就出来了一半。市面上的AI芯片形态很多做边缘端的、做数据中心的、做自动驾驶的五花八门但底层逃不出三大流派基于GPU的通用并行方案、基于FPGA的可重构方案、基于ASIC的定制化方案。还有一类是NPU本质上是把ASIC的经验固化成一个可编程的神经网络处理器这也是现在很多SoC芯片内置AI算力的常见做法。这篇文章我不会去逐字翻译原稿而是把里面关于AI芯片架构的核心内容拆开结合我在实际项目中遇到过的问题和查过的资料做一个更通俗、更容易上手的深度解读。适合两类人看一类是刚接触AI芯片、想搞明白里面门道的硬件工程师或学生另一类是做AI应用开发想搞清楚为什么自己的模型在某个平台上跑得快、换个平台就慢得要命的人。2. 架构的核心为什么AI芯片长得和CPU完全不一样2.1 计算模式决定架构形态要理解AI芯片的架构得先理解它的计算模式。AI尤其是深度学习这一块绝大部分计算都可以归结成矩阵运算。卷积是矩阵运算全连接是矩阵运算Transformer里的自注意力机制本质上也是矩阵运算。矩阵运算是高度规则化的输入是按固定形状排列的张量权重是预训练好的参数计算过程就是反复的乘法和加法几乎没有分支跳转也不需要复杂的乱序执行逻辑。这就和CPU的根本矛盾来了。CPU为了应付“什么程序都可能跑”的场景花大量晶体管在分支预测、乱序执行、缓存一致性上。一个典型的现代处理器核心真正用来做浮点运算的执行单元只占总面积的一小部分剩下的大头都在做控制和缓存。而AI计算不一样它不需要复杂的控制逻辑它需要的是把大量的乘法器和加法器堆在一起让它们尽量同时工作、尽量不闲着。所以AI芯片架构的第一个设计哲学是放弃通用性把晶体管预算从“控制”挪给“计算”。2.2 三个关键子系统计算阵列、存储层次、数据通路如果不看各家芯片的细节只看骨架AI芯片内部基本由三大部分组成。第一块是计算阵列。这是芯片最核心的处理引擎由一大堆乘加单元MACMultiply-Accumulate组成。每个MAC单元完成一次形如“a乘以b再加上c”的操作这是所有神经网络计算的基石。大部分AI芯片会把这些MAC单元组织成二维阵列常见的有脉动阵列Systolic Array和SIMD阵列两种组织形式。脉动阵列的特点是数据在阵列里有节奏地“流动”每个计算单元从相邻单元接收数据算完再传给下一个单元这样能最大化数据复用、减少寄存器读写SIMD阵列则是所有单元同时执行同一条指令更像一个高度并行的向量处理器灵活性比脉动阵列高一些但能耗会大一些。第二块是存储层次。AI芯片的存储体系通常分好几层最靠近计算单元的寄存器文件RF接着是片上SRAM通常叫缓冲区或共享内存再往外是片外的LPDDR或HBM。层级之间带宽差异很大片上SRAM的读取带宽可以做到每时钟周期上百字节而片外DRAM的带宽则瓶颈明显。芯片设计的关键之一就是算清楚每层存储要放多大、走多少位宽让数据在层与层之间流转尽量少地阻塞计算单元的流水线。第三块是数据通路。算得快之外还得搬得快。数据通路是计算阵列和存储之间的“高速公路”包括片内总线、片上网络NoC、以及去往片外存储的存储控制器。对于大模型推理场景权重参数动辄几十上百GB片上的SRAM根本放不下必须频繁从片外读入这时候数据通路的带宽就直接决定了整个芯片的实际算力能有几成发挥。2.3 冯·诺依曼瓶颈在这里被进一步放大冯·诺依曼架构的经典瓶颈是CPU和内存之间的数据搬运速度赶不上计算速度。这个问题在AI芯片上被放大到了极致。举个例子一次卷积运算可能只有几个乘加操作但对应的输入特征图和权重参数却要占用大量内存带宽。如果芯片设计得不好计算单元会处于“没数据可算”的空转状态即便算力标称再高也没有意义。业内有个经验值很多初代AI加速卡的真实利用率只有20%到30%剩下七八成的算力都因为数据供给跟不上而白白浪费。这也是为什么GPU厂商在迭代产品时花在显存带宽和缓存结构上的功夫远大于堆计算单元的原因。做AI芯片架构设计的人脑子里要始终绷着一条弦你设计的每一组数据的搬运路径、每一次缓存命中的取舍最终都会反映到效率上。3. AI芯片的主流路线与各自取舍3.1 GPU并行计算的老大哥兼做AI的“客串主力”GPU被用来跑AI是历史机缘但它在架构层面确实有先天的匹配度。GPU的基本设计思想是SIMT单指令多线程同一份程序逻辑对应大量线程硬件上分成一组组的计算核心比如英伟达的SMStreaming Multiprocessor结构每个SM内部包含几十个甚至上百个FP32/CUDA核心、Tensor Core、共享内存、寄存器堆和调度器。跑AI时GPU把矩阵运算切分成大量小块分发到不同核心并行计算。GPU的优势是生态和通用性。它不只是能跑AI还能跑图形渲染、科学计算、数据分析。英伟达的CUDA生态更是让AI框架几乎绕不开它。缺点是功耗高、能效比不够极致尤其到了推理场景GPU的很多通用能力其实用不上而这部分晶体管和功耗就成了浪费。所以大厂做大规模AI推理时往往会混用GPU和专用AI芯片而不是只押注一种。3.2 FPGA可重构的最大价值是“快速试错”FPGA的特点是逻辑可重构通过LUT和可编程互连实现任意数字逻辑。早期很多AI推理加速方案都用FPGA做原型验证也有公司直接拿FPGA做正式部署。从架构角度看FPGA做AI加速的优势在于可以针对特定模型“定制数据通路”。比如你的模型是二值化神经网络那FPGA里可以直接把乘法器替换成XNOR门和加法器资源占用骤降、吞吐率提升。这个灵活性是GPU和ASIC都给不了的。缺点是开发门槛特别高要用Verilog/VHDL这种硬件描述语言去手写RTL逻辑调试周期长时钟频率也上不去一般也就两三百兆赫兹全靠并行度去堆算力。如今FPGA在AI领域更多扮演“验证平台”的角色。很多AI芯片流片之前都要在FPGA上搭一个缩小版的原型系统把指令集、数据流调度逻辑先跑通。我接触过一些做AI芯片的公司他们的前端验证流程里FPGA原型验证是必不可少的一环芯片回来之前软件栈已经能在“模拟硬件”上跑起来了。3.3 ASIC与NPU定制化的极致也是效率的极致ASIC是专用集成电路的简称设计成什么样就是什么样出厂后不可更改。AI ASIC把计算阵列、存储、数据通路全部针对AI工作负载定制能效比远高于GPU和FPGA。谷歌的TPU就是这一类第一代TPU的核心就是一大片脉动阵列专门用来跑推理的矩阵乘法能效在当时远超同期的GPU。NPU则是ASIC思路的产品化形态。它本质上是一个可编程的AI加速处理器内部有专用的MAC阵列、向量计算单元、片上缓存和指令调度器但指令集和控制逻辑做成可编程的能适配不同模型结构。现在很多SoC里都集成了NPU像瑞芯微RK3588自带6TOPS算力的NPU地平线的征程系列芯片也是典型的AI SoC设计里面除了CPU和GPU专门有一块可编程的NPU来承担神经网络推理任务。选型建议很简单如果你做的是通用AI平台、要面对各种未知模型GPU是稳妥之选如果你做的是特定场景、模型结构相对固定或者受限于功耗预算那NPU和专用ASIC的价值就体现出来了。4. 驱动AI芯片性能的关键架构技术4.1 数据流调度听说读写的最佳路径设计数据流调度是AI芯片设计的核心艺术它解决的本质问题是在一个计算过程中每个数据元素什么时候从哪个存储层级取出来、经过哪些计算单元、结果送到哪里去。经典的数据流策略有三种权重固定Weight Stationary、输入固定Input Stationary、输出固定Output Stationary。不同策略适合不同规模的矩阵运算涉及对片上缓存复用程度的取舍。举个例子权重固定策略把权重参数固定在计算阵列的寄存器里反复读取输入特征图进行计算适合权重数据量较大、输入特征图被反复扫描的卷积层。输出固定策略则是每次计算都把部分和寄存器里的中间结果直接累加减少回写片外存储的次数适合全连接层这类需要大量累加操作的场景。现在的AI芯片调度器普遍允许软件层配置不同层次的调度策略甚至在运行时动态切换这个技术的演化让同一片硬件适应不同模型结构的能力大大增强。4.2 近存计算与存内计算打破“存储墙”的两个方向前面反复提到“数据搬运比计算更贵”那终极解法自然是把数据放在计算单元旁边甚至直接在存储单元里做计算。这就是近存计算和存内计算想干的事。近存计算Near-Memory Computing是相对务实的路线把计算单元放在距DRAM或HBM非常近的位置通过3D堆叠或2.5D封装将存储和逻辑集成在一个封装内。HBM本身就带着一个内存控制器和逻辑层计算单元可以直接通过硅中介层与HBM通信带宽比传统的内存通道高出几个数量级。这个技术在大厂的高端AI芯片里已经很常见了。存内计算In-Memory Computing则更进一步直接在存储阵列内部完成乘加运算理论和实践上都能把能效比再往上推一个数量级。但存内计算目前还面临精度、工艺和通用性的限制大多数产品还停留在实验或特定场景验证阶段。翻译原稿的时候作者花了不少篇幅在这两项技术上结论倒是很中肯近存计算是未来五年的主流工程选择存内计算是更长期的研究方向。4.3 混合精度与低精度推理精度换速度的账要算清楚AI芯片还有一个有意思的设计维度数值精度。早期深度学习基本用FP32随着模型越来越大大家发现FP16、BF16甚至INT8 INT4也能在多数场景下保住效果而低精度计算的速度和能效提升却是实打实的。以硬件架构来看一个FP16乘加单元的硅片面积大概只有FP32的几分之一吞吐率却能翻倍甚至更多。INT8更是如此同样的硬件预算下能塞进更多的计算单元。所以现在的AI芯片普遍支持多种精度模式内部通过不同的数据路径把低精度数据“塞”进更宽的乘法器里或者用专用的低精度单元单独跑。做这套设计的时候要考虑的内容其实很复杂低精度跑出来的中间结果误差会不会累积量化误差在深层网络里会不会放大好在现在模型量化技术非常成熟训练后量化、量化感知训练、混合精度训练已经被AI框架作为标准工具集支持硬件上只要把数据格式支持理顺剩下的交给软件栈去做。对于做应用的人来说它的工程价值是同一个模型可以用INT8跑推理用的内存带宽和耗时大约是FP32的一半左右。4.4 多芯粒与互联架构从单芯片到芯片系统的跨越单颗硅片的面积和良率是有物理上限的。算力需求无穷无尽芯片面积却不能无止境扩于是就有了芯粒化设计把一个大芯片拆成多个小芯片再通过高级封装技术把它们拼回一个“芯片系统”。每个小芯片可以是专门的计算单元、存储单元或者IO单元相互之间通过并行接口UCIe、BoW等通信。这种架构的好处有三点。第一是良率提升小芯片面积小、良率高、成本可控第二是灵活性增强AI计算单元和IO逻辑不必绑定在同一块工艺上可以用不同工艺分别制造再封装第三是扩展性算力不够时通过增加计算芯粒数量就能线性扩展。不过多芯粒架构引入了一个新问题片间通信瓶颈。芯粒之间的数据带宽远远比不上片内总线这对数据流调度软件提出了更高要求。好在目前工业界积累了不少经验比如用chiplet组织成2D或2.5D网格数据按局部性原则优先走邻居节点减少跨芯粒访问频率。这项技术做得好不好直接决定了一颗多芯粒AI芯片的真实效率。5. 从架构到落地AI芯片如何和软件栈协同工作5.1 指令集与编译器芯片的灵魂与翻译官硬件架构是躯壳指令集和编译器是灵魂。AI芯片的指令集设计通常分两个层次第一层是标量控制指令负责循环控制、地址计算、同步等操作第二层是向量/矩阵指令负责触发大面积计算阵列工作把数据和配置信息通过指令编码形式送到计算阵列和缓存。编译器要干的事更复杂。它把PyTorch/TensorFlow等框架描述出来的计算图一层一层“翻译”成芯片能执行的指令序列中间还要做算子融合、数据布局转换、内存规划、矩阵分块和任务调度等优化。每次新模型结构出来编译器的适配速度直接决定了这款AI芯片的实用价值。这也是为什么英伟达的GPU在AI领域占尽先机除了硬件强之外它的编译器生态和算子库积累了十几年新模型基本当天就能高效跑起来。5.2 SoC级集成从AI芯片到AI开发板单独一颗AI芯片没法用得配齐供电、存储、外设接口、散热设计才能成为可用的开发平台。这就是SoC的作用。现在的AI开发板上通常会集成CPU、GPU、NPU、VPU、ISP等模块各自负责不同计算任务。以瑞芯微RK3588和树莓派5上的博通芯片为例两者架构趋势类似区别在于RK3588把NPU的算力做得更加突出在做边缘AI推理时能效比更高。对开发者来说SoC级集成的意义是降低了AI应用的门槛。你不用再自己设计算法和硬件的对接层直接调用SDK里的API就能把模型部署到NPU上跑。但另一方面SoC的NPU架构各不相同模型格式转换、算子和精度支持也不完全一致。同一个模型在不同芯片上跑可能一个平台能跑出良好的性能另一个平台却出现算子不支持或者精度掉点这就是架构差异给开发者带来的真实痛点。5.3 实测一个案例同样一个模型在不同芯片上的差距有多大我在RK3588上用RKNN-Toolkit跑过一个YOLOv5目标检测模型测试不同输入分辨率下的推理延迟。实测数据大概是在平台默认开启NPU加速的情况下640x640的输入可以在40到50ms内跑完一帧能效表现相当不错。而同一个模型跑在某个没有NPU的低端SoC上纯CPU推理可能要2到3秒甚至更多。这就是专用计算阵列带来的数量级差距。不过也踩过一些坑。比如模型里有自定义算子时RKNN编译器可能不支持不得不手动做算子等价改写再比如NPU的输入数据格式是NHWC还是NCHW转换不对就会出现输出全错的现象。这类问题排查起来很费时间通常要用厂商提供的仿真工具先验证单算子输出再逐层定位。6. 芯片测试与调试架构设计之外的硬功夫6.1 从裸片到系统AI芯片的验证流程AI芯片回来之后验证和测试环节决定它能走到哪一步。一般流程是先做裸片测试用探针台测芯片基础功能再封装成可焊接到开发板上的芯片做完板级测试后进入系统级验证。系统级验证阶段会烧写第一版固件跑一段最小系统程序比如点亮LED、初始化DDR逐步把各个子系统点亮。这和嵌入式开发里常见的STM32芯片包安装、ESP32芯片调试其实是同一套思路只是AI芯片更复杂、涉及的模块更多。芯片测试里有一个特殊环节叫PATPart Average Testing主要是针对芯片参数的分布做统计分析剔除离群的坏片。做过硬件的朋友应该都知道芯片制造出来不是每颗都一样阈值电压、功耗、时序都有波动。AI芯片因为集成度高、运算密度大对时序收敛的要求更苛刻PAT测试几乎必不可少。芯片出来之前测试向量就得提前写好测试座和老化筛选方案也都要在流片之前全部设计好。6.2 固件启动与系统稳定嵌入式的放大版对AI芯片来说系统跑起来的第一步是引导程序启动。SoC芯片启动一般分多级BootROM先初始化最基础的时钟和内存控制器然后加载一级引导程序SPL再加载U-Boot最终启动内核和AI运行时。每一步都要检查日志输出、异常反馈是否正常任何一个环节出错都可能让系统卡死。在调试AI芯片系统稳定性的过程中我最大的体会是没有示波器和逻辑分析仪光靠软件调试是远远不够的。比如某个NPU在跑大负载时偶尔崩溃可能是供电纹波超标也可能散热不良导致温度保护这些都要靠硬件实测来定位。软件开发人员往往觉得“代码没问题”硬件工程师则容易觉得“电压没问题”真相通常出在软硬件的接口处也就是寄存器配置和时序约束的边界。6.3 工具链的重要性AI芯片成功的一半最后聊聊工具链。一颗AI芯片就算架构再好如果配套的工具链不成熟也很难推广。工具链包括编译器、运行时、调试器、性能分析器和模型量化工具。对于很多中小团队而言选择AI芯片时最先看的其实是工具链好不好用而不是峰值算力多高。我在做边缘AI项目时踩过工具链的不少坑。比如有些芯片的量化工具对某些激活函数支持不好跑出来的模型精度急剧下降不得不手工插入一些“伪量化”节点来强制修正再比如某些NPU的调试工具在运行时输出信息不足模型跑出错误结果时很难定位是不是算子实现Bug。反观做得好的平台通常提供一键式转换工具、算子级仿真器和详细的性能分析报告让开发者把主要精力花在业务逻辑上而不是和工具链斗争。7. 一些想留给后来人的心得7.1 架构设计要从“真实负载”出发而不是从“参数表”出发我看过很多AI芯片的评测动不动就是几百TOPS的峰值算力、上TB/s的内存带宽听着很猛实际落地效果却千差万别。关键原因就是没有针对真实负载去调架构。比如做视频分析的芯片需要的是多路视频流同时解码和推理考验的不只是NPU算力还有视频解码模块的吞吐和内存带宽做大模型推理的芯片难点在于权重加载和KV Cache的管理对增强带宽和存储容量的要求远超对纯算力的要求。所以做架构设计也好做芯片选型也好最忌讳的一件事是“参数崇拜”。先把真实场景的负载特征摸清楚再反推硬件结构该怎么设计。这个原则放到哪儿都适用。7.2 译完这份资料我重新理解了“架构”这个词“AI芯片架构”这个词翻译完之后在我脑子里变得更立体了。架构并不只是芯片内部那些方块和连线的图纸而是计算、存储、通信、软件协同的一个完整系统设计。它不要求每一个模块都做到极致但要确保整个系统的瓶颈最少、资源利用率最高。好的架构师是能从应用需求一直看到晶体管布局的人。做不到这一步也没关系先把计算阵列、存储层次、数据通路、工具链这几个维度理解清楚就已经超越了绝大多数只停留在参数层面对AI芯片的讨论。7.3 实际的工程建议如果你打算真正上手AI芯片方向我建议先从一个便宜好用的开发板开始。用RK3588这类带NPU的板子部署一个实际模型跑通全流程你会对AI硬件产生第一个直观感受原来算法要落地还有这么多工程细节要处理。然后再去读大厂芯片的白皮书或者读TPUv4、Hopper架构的公开论文那时候你对文档里每一句话的理解都会比现在深得多。硬件的世界和纯软件很不一样摸到电的那一瞬间很多概念才真正落地。多上手多踩坑这些经历最终都会变成你做架构和选型时最靠谱的判断力。