AI系统-15国内AI芯片介绍

本文主要聚焦国内AI厂商的架构技术进行探讨,独创AI芯片五步分析法,同时这5个方面也组成了AI芯片的核心。

对于AI芯片的架构,总结有下面5点(AI芯片五步分析法):

  1. 簇:计算部分有很多的cluster就是簇
  2. PE:簇里面有几个PE(处理引擎),一般是4个,里面有张量、标量等计算硬件算子
  3. 调度:簇里面有调度器管理PE的计算
  4. 通信:簇之间的通信,一般通过NoC总线
  5. 缓存:SRAM一般有两级,PE有一个小的SRAM,簇或者整体有一个大的SRAM

参考:chenzomi12.github.io/aisystem-do...

1. 壁仞科技

壁仞的产品形态是直接跟英伟达竞争,号称中国英伟达,有点狂,动的蛋糕太大了,所以还是被老美台积电的一套组合拳给制裁的最惨,本文讲的BR100产品也只停留在PPT上,估计流片成功了,但是量产不了。

其实讲国内的AI芯片,被卡脖子是绕不过去的事实,很多公司都是坚持不下去甚至倒闭了,大多数也是苟延残喘,做点小的端侧推理芯片为主。做AI芯片的难度系数从低到高依次为:端侧推理-》云端推理-》云端训练。

1.1 BR100通用GPU介绍

从封装上采用了双Die设计,就是晶圆上切下来的两个芯粒(硅材质),采用封装技术(加一个铁皮,引出来引脚)封装到一块,这样外面看就是一个大号的芯片在电路板上。

好在封装技术相对芯片制造难度小些,国产可以搞定。应该华为就用了芯片堆叠封装的方式来规避性能的缺陷,都是被迫的创新。

上图可见还封装了HBM(高速带宽内存),这个HBM为什么快?就是其用了3D技术,将多个DRAM芯片进行三维堆叠。

1.2 BR100架构

对于AI芯片的架构,总结有下面5点(AI芯片五步分析法):

  1. 簇:计算部分有很多的cluster就是簇
  2. PE:簇里面有几个PE(处理引擎),一般是4个,里面有张量、标量等计算硬件算子
  3. 调度:簇里面有调度器管理PE的计算
  4. 通信:簇之间的通信,一般通过NoC总线
  5. 缓存:SRAM一般有两级,PE有一个小的SRAM,簇或者整体有一个大的SRAM

下面我们对对照上面几点分析下:

  • 关于簇:SPC就是簇,
  • 关于通信:簇之间通信用了NoC
  • 关于PE:一个簇有多个EU,执行单元这里跟PE(运算引擎)的概念差不多。 EU里面就集成了向量运行的V-Core、TensorFlow算子的T-core,SFU就是特殊数学函数的处理算子,这里就是软件硬化的算子。
  • 关于调度:做到了EU的内部,但是多个EU可以联合起来一起调度,这样就是CU
  • 关于缓存:三级cache缓存,EU使用了L0,簇内部使用了L1,整个芯片使用了L2 cache,如上图在芯片中间。这样在EU上布局缓存就是近存计算,这是实现存算一体的前提。

2. 寒武纪

发展历程:

产品比较全面:

寒武纪面向云、边、端三大场景分别研发了三种类型的芯片产品,分别为云端智能芯片及加速卡、边缘智能芯片及加速卡、IP 授权及软件。与此同时,寒武纪为云边端全系列智能芯片与处理器产品提供统一的平台级基础系统软件 Cambricon Neuware(包含软件开发工具链等),打破了不同场景之间的软件开发壁垒,兼具高性能、灵活性和可扩展性的优势,可让同一 AI 应用程序便捷高效地运行在寒武纪云边端系列化芯片与处理器产品之上,从而使得各种场景下 AI 模型迁移更方便。

刚开始寒武纪卖端侧IP的时候,跟华为有合作

然后华为就有了自己的NPU,这里要说一个华为是一个商业公司,并非技术至上,除了跟美帝硬刚外,产品质量好外,其他方面并不是消费者眼中想的那个样子,业界基本愿意跟华为合作的公司很少,奉行"拿来主义",俗称"行业搅屎棍",这里的寒武纪就这样被抛弃了,不过寒武纪从一个小公司发展壮大也离不开华为背书做的贡献,只能说相互利用。

2.1 MLU03产品介绍

寒武纪产品架构官方公布的名称分为 MLU00 MLU01 MLU02 MLU03,分别对应于 1A、1H、1M、以及官方尚未公布型号的 MLU370 的处理器内核。

以 MLU02 的产品为例,不同产品线采用的核心相同,但 DRAM、PCIe 等都有不同。以官网所公布的目前(2024.4)为止最新的板卡 MLU370 为例,下图显示了它的产品形态,板卡之间借助主板的的 MLU Link bridge 互联,内存采用低功耗的 LPDDR5,PCIe 采用 Gen4.0 来与 CPU 互联。

两个芯粒封装到一块成为一个芯片,就是Die to Die的方式。然后多个芯片通过PCIE相连,另外Host CPU也通过PCIE跟这两个芯片相连。然后多个产品间通过MLU-Link相连,形成训练的网络。

MLU370-X8 智能加速卡是全面升级的数据中心训推一体 AI 加速卡,基于寒武纪全新一代思元 370 芯片,接口为 PCIe 4.0 X16,是全高全长双宽(FHFL-Dual-Slot)的标准 PCIe 加速卡,适用于业内最新的 CPU 平台,可轻松搭载于最先进的 AI 服务器,快速实现 AI 算力的部署。MLU370-X8 加速卡功耗为 250W,可为计算机视觉、自然语言处理、语音等多样化的 AI 应用提供强大算力支持。

这里Host CPU控制的芯片个数可以扩展,都用MLU-link连接起来.MLU370-X8 通过 MLU-Link™高速网络,组建大规模训练集群,并实现芯片间互联。新一代 MLU-Link™,不仅支持板卡上 2 个思元 370 芯片间通过 MLU-Link™进行通讯,同时也可以通过 MLU-Link™桥接卡对外互联,板卡间 MLU-Link 互联双向总带宽为 200 GB/s,满足大型 AI 模型训练的需要。

2.2 MLU03架构

分析架构还是从五个方面来

2.2.1 簇

PE:寒武纪硬件的基本组成单元是 MLU Core。每个 MLU Core 是具备完整计算、IO 和控制功能的处理器核心,可以独立完成一个计算任务,也可以与其他 MLU Core 协作完成一个计算任务。

簇:每 4 个 MLU Core 核心构成一个 Cluster,在 MLUv02 以及后续架构中,每个 Cluster 内还会包含一个额外的 Memory Core 和一块被 Memory Core 和 4 个 MLU Core 共享的 SRAM(Shared RAM,共享存储单元)。Memory Core 不能执行向量和张量计算指令,只能用于 SRAM 与 DDR (Double Data Rate Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器,DDR SDRAM 通常简称为 DDR)和 MLU Core 之间的数据传输。

下图中展示了 MLU03 的核心架构,MLU03 采用 4 个 IPU 和一个 MPU 组成一个 Cluster(实际上 MLU02 也是),IPU 上有大量的计算单元以及本地 scratchpad memory(NeuronRAM WeightRAM),MPU 上有 SharedRAM,相当于 GPU 的 shared memory。不同 Cluster 数量可以组成不同的产品形态(云端、边缘端、IP)

对于单个Die里面有多个cluser,一个cluser如下:

  • IPU:Intelligence,作为 MLU 核心 模块,负责 AI 应用的计算、访存 和控制指令执行。
  • MPU:Memory,MLU中负责片上 Shared-RAM相关协处理器核心, 对数据进行处理。
  • Cluster:NLUv03架构,4个IPU和 1个MPU作为核心构成1个Cluster。 多个Cluster组合不同产品形态。

IPU作为PE,里面SRAM、调度都有,一个cluster把SRAM、调度又独立出来一个大的管理,这里面是不是太冗余了?把IPU里面的SRAM和调度拿出来只cluster里面有,甚至一个芯片只有一个大的调度和SRAM,所有的cluster共享不是更好

2.2.2 PE-IPU

通用叫法是PE,寒武纪叫IPU,也叫MLU Core,这个地方各家的叫法都不一样。

Control Unit 比较重要,负责指令的读取、译码和发射。自研指令可以通过 Control Unit 被负责计算和访存的调度器 Dispatch 到 ALU、VFU、TFU、IO-DMA、Move-DMA 五个队列。

IO-DMA 用来实现片外 DRAM 与 W/N-RAM 数据传输,也可以用于实现 Register 与片内 RAM 之间的 Load/Store 操作以及原子操作。

Move-DMA 用于 IPU 中 W/N-RAM 与 MPU S-RAM 间数据传输和类型转换。I-Cache 顾名思义就是指令缓存,有 64 KB,如 512 bit 指令可以缓存 1024 条。VA-Cache(Vector Addressing)是离散数据访问指令的专用缓存。用于加速离散向量访问效率,减少对总线和存储单元读写次数。Neural-RAM(nram)是 768 KB,需 16 byte 对齐,存储 Input 和 Feature Map 数据。Weight-RAM(wram)是 1024 KB,需 8 byte 对齐,存储权重和优化器数据。

ALU 就是标量 Scale 数据的算术逻辑运算。GPR 是指一组位宽 48 bit 的寄存器,IPU 为 Load/Store 架构,除立即数以外所有操作加载到 GPR 才能参与算术逻辑运算。SREG 是指位宽 32 bit 的特殊寄存器,用于存储硬件特定属性,如 Perf 计数、任务索引等。

VFU/TFU 是计算单元,实现张量 Tensor 和向量 Vector 运算;输入输出:Vector 运算输入输出在 Neuron-RAM;Tensor 运算输入自 Neuron-RAM 和 Weight-RAM,输出根据调度情况到 Neuron-RAM 和 Weight-RAM。

关于指令流水,那么 MLU Core 有三类可以并行执行的指令队列:XFU-PIPE、 DMA-PIPE、ALU-PIPE。XFU-PIPE 可以执行向量和张量单元指令。DMA-PIPE 可以支持双流同时进行数据搬运执行。具体包括上述的 move-DMA 和 IO-DMA 两个流。ALU-PIPE 可以执行标量数据算术逻辑指令。各个指令队列的并行执行有助于让 IPU 的不同种类的操作互相掩盖。

2.2.3 通信

这里所述的片内通信分为两种:Cluster 内通信与 Cluster 间通信。

Cluster 内通信中我们先看 IPU(MLU-Core),其中 ICache 访问 Global-DRAM 读取指令并保存到 Icache 中,IO-DMA 还可以直接在 DRAM 和 W/N-RAM 之间搬运数据。Move-DMA 负责在 S/W/N-RAM 之间以及它们与 GPR 之间搬运数据。之所以要使用两种不同的 DMA 是为了方便两者之间的并行。

MPU 上同样有 ICache,此外它也通过 Global-DMA 在 DRAM 和 Shared RAM 之间搬运数据。特别地,它还有两个不同的 Cluster-DMA 通道负责在 Shared RAM 之间搬运数据。

2.2.4 调度

Control Unit 比较重要,负责指令的读取、译码和发射。自研指令可以通过 Control Unit 被负责计算和访存的调度器 Dispatch 到 ALU、VFU、TFU、IO-DMA、Move-DMA 五个队列。

2.2.5 缓存

GPR 是每个 MLU Core 和 Memory Core 私有的存储资源。MLU Core 和 Memory Core 的标量计算系统都采用精简指令集架构,所有的标量数据,无论是整型数据还是浮点数据,在参与运算之前必须先加载到 GPR。

NRAM 是每个 MLU Core 私有的片上存储空间,主要用来存放向量运算和张量运算的输入和输出数据,也可以用于存储一些运算过程中的临时标量数据。相比 GDRAM 和 LDRAM 等片外存储空间,NRAM 有较低的访问延迟和更高的访问带宽。

WRAM 是每个 MLU Core 私有的片上存储空间,主要用来存放卷积运算的卷积核数据。为了高效地实现卷积运算,WRAM 上的数据具有特殊的数据布局。

SREG:~位宽32bit,用于存储硬 件特定属性,如Perf计数、任务 索引等。

SRAM 是一个 Cluster 内所有 MLU Core 和 Memory Core 都可以访问的共享存储空间。SRAM 可以用于缓存 MLU Core 的中间计算结果,实现 Cluster 内不同 MLU Core 或 Memory Core 之间的数据共享及不同 Cluster 之间的数据交互。

L2 Cache 是位于片上的全局存储空间,由硬件保证一致性,目前主要用于缓存指令、Kernel 参数以及只读数据。

LDRAM 是每个 MLU Core 和 Memory Core 私有的存储空间,可以用于存储无法在片上存放的私有数据。LDRAM 属于片外存储,不同 MLU Core 和 Memory Core 之间的 LDRAM 空间互相隔离,软件可以配置其容量。与 GDRAM 相比,LDRAM 的访存性能更好,因为 LDRAM 的访存冲突比较少。

与 LDRAM 类似,GDRAM 也是片外存储。位于 GDRAM 中的数据被所有的 MLU Core 和 Memory Core 共享。GDRAM 空间的作用之一是用来在主机侧与设备侧传递数据,如 Kernel 的输入、输出数据等。Cambricon BANG 异构编程模型提供了专门用于在主机侧和设备侧之间进行数据拷贝的接口。

整体上:GPR、WRAM 和 NRAM 是一个 MLU Core 的私有存储,Memory Core 没有私有的 WRAM 和 NRAM 存储资源。L2 Cache 是芯片的全局共享存储资源,目前主要用于缓存指令、Kernel 参数以及只读数据。LDRAM 是每个 MLU Core 和 Memory Core 的私有存储空间,其容量比 WRAM 和 NRAM 更大,主要用于解决片上存储空间不足的问题。GDRAM 是全局共享的存储资源,可以用于实现主机端与设备端的数据共享,以及计算任务之间的数据共享。

3. 华为昇腾

如图所示为华为昇腾系列产品,覆盖边缘推理、云端推理、云端训练三大场景,昇腾计算的 AI 硬件系统主要包括有:

  • 基于华为达芬奇内核的昇腾系列处理器等多样化 AI 算⼒;
  • 基于昇腾处理器的系列硬件产品,⽐如嵌⼊式模组、板卡、⼩站、服务器、集群等。

昇腾计算中的硬件体系、基础软件、开发工具链、AI 计算框架、应用使能等如图所示,跟全书介绍的 AI 系统基本上逻辑吻合。

底层的 AI 芯片和结构体系在昇腾 AI 全栈架构中主要指具体的硬件,覆盖了端边云全场景,支持数据中心,边缘和终端侧的灵活部署方式。基础软件则是对应本书中 AI 系统的编译以及 AI 计算架构,使能芯片能力,提供具体的软件计算能力。再往上的框架层则是包含 AI 推理引擎、AI 计算框架。最后上层的应用使能则是针对具体的算法和模型提供的封装等相关的接口。

3.1 Ascend芯片介绍

华为公司针对 AI 领域专用计算量身打造了"达芬奇架构",并于 2018 年推出了基于"达芬奇架构"的昇腾 AI 处理器,开启了华为的 AI 之旅。

主就是集成了NPU,里面有AI应用需要的矢量、矩阵等运算硬件,对AI算法进行加速。例如对矩阵运算进行加速的原理如下:

cycle就是计算耗时(时钟周期),从CPU的8192到向量的256到矩阵的1,优化时间巨大。

作为SoC,需要有异构核和业务相关的核硬件,整体如下:

芯片系统控制 CPU(Control CPU),AI 计算引擎(包括 AI Core 和 AI CPU),多层级的片上系统缓存(Cache)或缓冲区(Buffer),数字视觉预处理模块(Digital Vision Pre-Processing,DVPP)等。芯片可以采用 LPDDR4 高速主存控制器接口,价格较低。目前主流 SoC 芯片的主存一般由 DDR(Double Data Rate)或 HBM(High Bandwidth Memory)构成,用来存放大量的数据。HBM 相对于 DDR 存储带宽较高,是行业的发展方向。其它通用的外设接口模块包括 USB、磁盘、网卡、GPIO、I2C 和电源管理接口等。

这里需要特别注意,国内大多做端侧推理的AI SoC芯片,那基本就是这个框架了。某某公司特别是汽车、手机等终端产品研发了AI芯片,那就是这了。跟传统芯片最大不同的地方就是这个芯片里面大量的晶体管(面积)都留给了NPU,其他子系统的设计也是为了满足NPU高吞吐计算做了优化。后续单独拿出来介绍。

昇腾 910 处理器的目标场景是云端的推理和训练,其架构如图所示,包含 Davinci Core、DVPP、HBM、DDR4 等组件。

昇腾 910 处理器采用了芯粒(chiplet)技术,包含六个 die: 1 个计算芯粒(包含 32 个 Davinci Core、16 个 CPU Core 和 4 个 DVDP),1 个 IO 芯粒,和 4 个 HBM 芯粒(总计 1.2 TB/s 带宽)。针对云端训练和推理场景,昇腾 910 处理器做的优化包括:

  1. 高算力: 训练场景通常使用的 Batch Size 较大,因此采用最高规格的 Ascend-Max,每个 Core 每个周期可以完成 16×16×16=4096 次 FP16 乘累加。
  2. 高 Load/Store 带宽: 训练场景下计算反向 SGD 时,会有大量对 Last Level Cache 和片外缓存的访问,因此需要配备较高的 Load/Store 带宽,因此昇腾 910 除了 DDR 还采用了 HBM 技术。
  3. 100G NIC: 随着 DNN 的模型尺寸愈发庞大,单机单卡甚至单机多卡已经不能满足云端训练的需求,为了支持多卡多机组成集群,昇腾 910 集成了支持 ROCE V2 协议的 100G NIC 用于跨服务器传递数据,使得可以使用昇腾 910 组成万卡集群。
  4. 高吞吐率的数字视觉与处理器(DVPP): DVPP 用于 JPEG、PNG 格式图像编解码、图像预处理(对输入图像上下采样、裁剪、色调转换等)、视频编解码,为了适配云端推理场景,DVPP 最高支持 128 路 1080P 视频解码。

6个Die,这也是被卡脖子逼的没办法了,做不出来或者不让做那就不计成本的多合一

昇腾 310 处理器的目标场景是边缘推理,比如智慧城市、智慧新零售、机器人、工业制造等,其架构如上图所示,主要包含 Davinci Core、DVPP、LPDDR4 等组件。

相比昇腾 910,昇腾 310 的定制化 IP 相对较少,但是提供了更多外设接口。由于在边缘推理场景下 batch size 通常只有 1,因此昇腾 310 选择了较小的矩阵计算维度(m = 4, n = 16, k = 16)以实现 Cmn=Amk×Bkn。由于在矩阵运算中 M=batch_size×output_hight×output_width, 当 batch size = 1 时,将 m 设置成 4 可以提升乘累加利用率。

3.2 达芬奇NPU框架

没有使用簇的概念,一个SoC上直接集成了多个AI Core,这样Core的核心少了些,算力低点,但是满足使用就可以。这样五步分析变四步了。

3.2.1 PE-AI Core

昇腾 AI 处理器的计算核心主要由 AI Core 构成,负责执行标量、向量和张量相关的计算密集型算子。AI Core 采用了达芬奇架构,其基本结构上图所示,从控制上可以看成是一个相对简化的现代微处理器的基本架构。它包括了三种基础计算资源:矩阵计算单元(Cube Unit)、向量计算单元(Vector Unit)和标量计算单元(Scalar Unit)。

这三种计算单元分别对应了张量、向量和标量三种常见的计算模式,在实际的计算过程中各司其职,形成了三条独立的执行流水线,在系统软件的统一调度下互相配合达到优化的计算效率。此外在矩阵计算单元和向量计算单元内部还提供了不同精度、不同类型的计算模式。AI Core 中的矩阵计算单元目前可以支持 INT8 、 INT4 和 FP16 的计算; 向量计算单元目前可以支持 FP16 和 FP32 的计算。

为了配合 AI Core 中数据的传输和搬运,围绕着三种计算资源还分布式的设置了一系列的片上缓冲区,比如用来放置整体图像特征数据、网络参数以及中间结果的输入缓冲区和输出缓冲区,以及提供一些临时变量的高速寄存器单元,这些寄存器单元位于各个计算单元中。这些存储资源的设计架构和组织方式不尽相同,但目的都是为了更好的适应不同计算模式下格式、精度和数据排布的需求。这些存储资源和相关联的计算资源相连,或者和总线接口单元(Bus Interface Unit,BIU)相连从而可以获得外部总线上的数据。

在 AI Core 中,输入缓冲区之后设置了一个存储转换单元(Memory Transfer Unit,MTE)。这是达芬奇架构的特色之一,主要的目的是为了以极高的效率实现数据格式的转换。比如要通过矩阵计算来实现卷积,首先要通过 Img2Col 的方法把输入的网络和特征数据重新以一定的格式排列起来。这一步在 GPU 当中是通过软件来实现的,效率比较低下。达芬奇架构采用了一个专用的存储转换单元来完成这一过程,将这一步完全固化在硬件电路中,可以在很短的时间之内完成整个转置过程。由于类似转置的计算在神经网络中出现的极为频繁,这样定制化电路模块的设计可以提升 AI Core 的执行效率,从而能够实现不间断的卷积计算。

AI Core 中的控制单元主要包括系统控制模块、标量指令处理队列、指令发射模块、矩阵运算队列、向量运算队列、存储转换队列和事件同步模块。系统控制模块负责指挥和协调 AI Core 的整体运行模式,配置参数和实现功耗控制等。标量指令处理队列主要实现控制指令的译码。当指令被译码并通过指令发射模块顺次发射出去后,根据指令的不同类型,将会分别被发送到矩阵运算队列、向量运算队列和存储转换队列。

三个队列中的指令依据先进先出的方式分别输出到矩阵计算单元、向量计算单元和存储转换单元进行相应的计算。不同的指令阵列和计算资源构成了独立的流水线,可以并行执行以提高指令执行效率。如果指令执行过程中出现依赖关系或者有强制的时间先后顺序要求,则可以通过事件同步模块来调整和维护指令的执行顺序。事件同步模块完全由软件控制,在软件编写的过程中可以通过插入同步符的方式来指定每一条流水线的执行时序从而达到调整指令执行顺序的目的。

在 AI Core 中,存储单元为各个计算单元提供转置过并符合要求的数据,计算单元返回运算的结果给存储单元,控制单元为计算单元和存储单元提供指令控制,三者相互协调合作完成计算任务。

计算单元是 AI Core 中提供强大算力的核心单元,相当于 AI Core 的主力军。AI Core 计算单元主要包含矩阵计算单元、向量计算单元、标量计算单元和累加器,如下图加粗所示。矩阵计算单元和累加器主要完成与矩阵相关的运算,向量计算单元负责执行向量运算,标量计算单元主要负责各类型的标量数据运算和程序的流程控制。

3.2.2 缓存

处理器中的计算资源要想发挥强劲算力,必要条件是保证输入数据能够及时准确的出现在计算单元里。达芬奇架构通过精心设计的存储单元为计算资源保证了数据的供应,相当于 AI Core 中的后勤系统。AI Core 中的存储单元由存储控制单元、缓冲区和寄存器组成,如下图 中的加粗显示。存储控制单元通过总线接口可以直接访问 AI Core 之外的更低层级的缓存,并且也可以直通到 DDR 或 HBM 从而可以直接访问内存。存储控制单元中还设置了存储转换单元,其目的是将输入数据转换成 AI Core 中各类型计算单元所兼容的数据格式。缓冲区包括了用于暂存原始图像特征数据的输入缓冲区,以及处于中心的输出缓冲区来暂存各种形式的中间数据和输出数据。AI Core 中的各类寄存器资源主要是标量计算单元在使用。

上图中的总线接口单元作为 AI Core 的"大门",是一个与系统总线交互的窗口,并以此通向外部世界。AI Core 通过总线接口从外部 L2 缓冲区、DDR 或 HBM 中读取或者写回数据。总线接口在这个过程中可以将 AI Core 内部发出的读写请求转换为符合总线要求的外部读写请求,并完成协议的交互和转换等工作。

输入数据从总线接口读入后就会经由存储转换单元进行处理。存储转换单元作为 AI Core 内部数据通路的传输控制器,负责 AI Core 内部数据在不同缓冲区之间的读写管理,以及完成一系列的格式转换操作,如补零,Img2Col,转置、解压缩等。存储转换单元还可以控制 AI Core 内部的输入缓冲区,从而实现局部数据的缓存。

在神经网络计算中,由于输入图像特征数据通道众多且数据量庞大,往往会采用输入缓冲区来暂时保留需要频繁重复使用的数据,以达到节省功耗、提高性能的效果。当输入缓冲区被用来暂存使用率较高的数据时,就不需要每次通过总线接口到 AI Core 的外部读取,从而在减少总线上数据访问频次的同时也降低了总线上产生拥堵的风险。另外,当存储转换单元进行数据的格式转换操作时,会产生巨大的带宽需求,达芬奇架构要求源数据必须被存放于输入缓冲区中,才能够进行格式转换,而输入缓冲控制器负责控制数据流入输入缓冲区中。输入缓冲区的存在有利于将大量用于矩阵计算的数据一次性的被搬移到 AI Core 内部,同时利用固化的硬件极高的提升了数据格式转换的速度,避免了矩阵计算单元的阻塞,消除了由于数据转换过程缓慢而带来的性能瓶颈。

在神经网络中往往可以把每层计算的中间结果放在输出缓冲区中,从而在进入下一层计算时方便的获取数据。由于通过总线读取数据的带宽低,延迟大,通过充分利用输出缓冲区就可以大大提升计算效率。

在矩阵计算单元还包含有直接的供数寄存器,提供当前正在进行计算的大小为 16×16 的左、右输入矩阵。在矩阵计算单元之后,累加器也含有结果寄存器,用于缓存当前计算的大小为 16×16 的结果矩阵。在累加器配合下可以不断的累积前次矩阵计算的结果,这在卷积神经网络的计算过程中极为常见。在软件的控制下,当累积的次数达到要求后,结果寄存器中的结果可以被一次性的传输到输出缓冲区中。

3.2.3 调度

在达芬奇架构下,控制单元为整个计算过程提供了指令控制,相当于 AI Core 的司令部,负责整个 AI Core 的运行,起到了至关重要的作用。控制单元的主要组成部分为系统控制模块、指令缓存、标量指令处理队列、指令发射模块、矩阵运算队列、向量运算队列、存储转换队列和事件同步模块,如上图中加粗所示。

在指令执行过程中,可以提前预取后续指令,并一次读入多条指令进入缓存,提升指令执行效率。多条指令从系统内存通过总线接口进入到 AI Core 的指令缓存中并等待后续硬件快速自动解码或运算。指令被解码后便会被导入标量队列中,实现地址解码与运算控制。这些指令包括矩阵计算指令、向量计算指令以及存储转换指令等。在进入指令发射模块之前,所有指令都作为普通标量指令被逐条顺次处理。标量队列将这些指令的地址和参数解码配置好后,由指令发射模块根据指令的类型分别发送到对应的指令执行队列中,而标量指令会驻留在标量指令处理队列中进行后续执行,如上图所示。

3.2.3 通信

AI Core 中的存储系统为计算单元提供源源不断的数据,高效适配计算单元的强大算力,综合提升了 AI Core 的整体计算性能。与谷歌 TPU 设计中的统一缓冲区设计理念相类似,AI Core 采用了大容量的片上缓冲区设计,通过增大的片上缓存数据量来减少数据从片外存储系统搬运到 AI Core 中的频次,从而可以降低数据搬运过程中所产生的功耗,有效控制了整体计算的能耗。

数据通路指的是 AI Core 在完成一个计算任务时,数据在 AI Core 中的流通路径。前文已经以矩阵相乘为例简单介绍了数据的搬运路径。上图 展示了达芬奇架构中一个 AI Core 内完整的数据传输路径。这其中包含了 DDR 或 HBM,以及 L2 缓冲区,这些都属于 AI Core 核外的数据存储系统。图中其它各类型的数据缓冲区都属于核内存储系统。

后记:

文中也说过华为的这个AI SoC,在终端领域的AI芯片基本都可以参考,还是ZOMI的资料还比较详细,本文分析的比较粗略,后续再独立一篇文章详细介绍下达芬奇NPU,并从AI芯片五步分析法的五个方面进行一些思考总结。

相关推荐
地藏Kelvin6 分钟前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
菠萝0141 分钟前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
长勺44 分钟前
Spring中@Primary注解的作用与使用
java·后端·spring
小奏技术2 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹2 小时前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
lanfufu2 小时前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹2 小时前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹2 小时前
面试官:你知道如何在 Java 中创建对话框吗
后端
编程轨迹2 小时前
深入理解 Java 中的信号机制
后端
夕颜1112 小时前
让 cursor 教我用 cursor 的隐藏技能
后端·trae