随着基于深度学习的人工智能技术在几乎所有生活领域蓬勃发展,对通用人工智能计算架构的需求也日益增长。虽然目前基于GPGPU的架构能够出色地处理各种人工智能工作负载,但它们在效率和成本效益方面往往有所欠缺。相反,各种领域特定架构(DSA)虽然在特定人工智能任务上表现出色,但难以将其能力扩展到更广泛的应用领域,更遑论适应快速发展的AI算法。
M100正是理想汽车针对这一挑战推出的方案:它是一款高性能、高性价比的架构,旨在满足自动驾驶(AD)、大型语言模型(LLM)和智能人机交互等领域的AI推理需求。这些领域对于构建当今最具竞争力的汽车平台至关重要。
M100采用数据流并行架构(dataflow parallel architecture),其中编译器与架构协同设计不仅协调计算,更重要的是协调数据在时间和空间上的移动。利用数据流计算固有的高效性,我们采用的软硬件一体化方法在显著降低硬件复杂性和成本的同时,提升了系统整体性能。M100遵循数据流范式,基本消除了缓存。张量计算由编译器和运行时管理的数据流驱动,这些数据流在计算单元和片上/片外存储器之间流动,与传统的基于缓存的系统相比,效率和可扩展性更高。
另一个关键的设计原则是为调度、发出和执行选择合适的操作粒度——涵盖编译器、固件和硬件层面。考虑到AI工作负载的共性,我们选择张量(无论大小)作为M100架构的基本数据元素。
M100已在各种推理应用中展现出通用的AI计算能力,包括UniAD(用于AD)和LLaMA(用于LLM)。基准测试结果表明,M100在AD应用中优于GPGPU架构,并具有更高的硬件利用率。在云栈社区,开发者们也在持续关注这类前沿AI芯片架构的演进,探讨软硬件协同设计的更多可能。我们相信,M100代表着未来通用AI计算架构融合的一个有前景的方向。
简介
自动驾驶(AD)技术长期以来一直处于人工智能(AI)技术发展的前沿。前沿的视觉-语言-动作(VLA)模型涵盖了自主任务的诸多方面,例如视觉感知、环境理解和动作规划。种类繁多的AI推理任务需要一种功能全面的软硬件解决方案,该方案不仅性能卓越,而且还能适应多种深度学习推理算法。此外,汽车(很可能是电动汽车)内部的应用环境也要求加速器架构具有更小的物理尺寸和功耗。理想汽车(Li Auto)一直认识到,自主研发的AD加速器芯片对于打造兼具AD性能和物料清单(BOM)成本竞争力的汽车产品至关重要。
与许多其他汽车制造商一样,理想汽车最初也是基于现成的通用图形处理器(GPGPU)平台开发其自动驾驶(AD)系统。尽管这些GPGPU平台凭借其通用可编程性和成熟的软件生态系统等优势,能够支持理想汽车早期AD系统的开发和部署,但它们在峰值性能、效率、定制化和拥有成本等方面的局限性也逐渐显现。主流汽车制造商选择自主研发AD推理芯片,并将其与自身的AD模型和软件栈垂直集成。为了在降低物料清单(BOM)成本的同时,为客户提供卓越的AD体验,理想汽车也致力于开发一款采用创新架构的AI推理加速器芯片,以满足所有性能和成本指标。此外,该架构还应具备面向未来的特性,使其能够适应快速发展的AD模型和算法。
这项努力的成果是集成了M100 NPU的M100 SoC,它采用了一种协调的数据流架构,能够提供强大的通用AI计算能力,这已通过AD任务验证。我们之所以选择数据流架构,是因为大多数深度学习(DL)推理算法都涉及张量计算和操作任务,其数据移动和转换模式通常具有规律性和可预测性。数据流架构可以有效地并行化这些任务,并将同步开销降至最低。借助数据流编译器,M100通过允许编译器以更高的粒度协调任务执行,成功避免了传统数据流架构的设计复杂性和开销,因此我们将M100称为“协调的数据流架构”。M100架构的成功也需要理想汽车团队在平衡软件和硬件的复杂性、选择加速操作的粒度以及选择硬件组件的确定性和非确定性行为程度等方面做出正确的权衡。我们认为,理想汽车的M100架构可能已经找到了应对通用AI推理计算挑战的最佳方案。
本文余下部分将介绍M100架构及其应用成果。第二节概述了理想汽车自主研发AI推理芯片的动机。第三节阐述了M100架构的设计原则。第四节详细描述了M100 NPU。第五节简要介绍了编译器和软件栈。第六节介绍了评估方法和实际应用结果。最后,第七节总结了理想汽车在M100项目上所做的努力,并探讨了该项目的未来发展方向。
动机
基于深度学习的自动驾驶系统依赖神经网络,利用摄像头图像和激光雷达数据进行感知、预测和规划。这些任务计算量巨大,必须以低延迟执行,以确保高速安全运行。NVIDIA的Orin和Thor等基于GPGPU的平台构建于SIMT架构之上,并辅以张量核心。尽管它们因其多功能性和强大的并行处理能力而被广泛应用,但也存在一些权衡取舍。这些现成的解决方案并非针对特定的自动驾驶软件栈进行定制,通常包含未使用的功能,并且总体拥有成本(TCO)较高。它们基于缓存的内存层次结构也带来了优化挑战和不可预测性。
为此,一些公司转向了领域特定架构(DSA),例如特斯拉的FSD芯片,该芯片将神经网络操作硬编码到固定的流水线中。尽管DSA在执行特定任务时效率极高,但往往难以跟上快速发展的AI算法——尤其是在端到端VLA模型兴起的情况下——导致生命周期缩短和重新设计成本增加。
理想汽车意识到需要一种折衷方案,因此着手设计一种兼顾效率和灵活性的NPU架构。最终成果是M100——一种可扩展的、数据流驱动的架构,旨在支持广泛的边缘AI推理任务。其模块化设计和分层互连实现了高硬件利用率和跨代车型的适应性,有助于摊销开发成本,同时在快速变化的AI需求面前保持性能领先地位。
A. 设计理念
M100 NPU摒弃了传统的CPU和GPU的指令顺序执行模型,采用了数据驱动的并行执行模型。M100 NPU不执行预定义的指令流,而是将张量运算指令分发到大量的执行单元,数据流在这些单元之间流动并触发这些指令的执行。为了进一步提升M100 NPU的容量,它将能够运行完整张量指令集的同构计算节点通过可扩展的网络互连,该网络针对节点间的数据传输和同步进行了优化。在每个节点内部,各个执行单元之间的数据和同步路径也可以灵活构建,以支持节点内的数据流执行。凭借其模块化和可扩展的设计,M100 NPU架构致力于提供一个弹性的硬件抽象层,编译器可以在该抽象层上映射AI推理任务,并以最佳性能协调其执行。以下各节将讨论M100 NPU架构各个方面的设计决策是如何制定的。

1) 计算单元:
M100 NPU旨在加速自动驾驶中使用的各种深度学习推理任务,其中许多任务严重依赖于张量收缩运算,例如卷积和矩阵乘法——这需要计算密集型功能单元来实现高吞吐量。此外,向量运算虽然计算密集度较低,但涉及多种操作,需要在灵活性和性能之间取得平衡。标量计算也很常见,需要通用CPU内核。如图1所示,M100将张量、向量和标量处理单元集成到统一的计算模块中,这些模块共享本地内存并进行同步。该架构通过实例化多个此类模块来实现扩展,这些模块通过片上通信网络连接,并由软件协调跨模块的粗粒度指令分发。
2) 内存层次结构:并行性仍然是加速AI推理工作负载的主要策略,但系统性能很大程度上取决于数据在并行执行单元之间的共享方式。缓存一致性内存系统通过抽象出一个大型共享内存空间来简化编程,并在可能的情况下利用时间和空间局部性。然而,这些系统在大规模并行环境中难以扩展,并且通常会阻碍流式性能——这是AI推理的关键方面。为了解决这个问题,M100采用了一种现代化的数据流计算模型。
如图2所示,M100 NPU基本避免了使用多级缓存。每个张量处理块(TPB:Tensor Processing Block)都包含高带宽本地内存,使得功能单元能够在计算和处理任务期间并行地进行数据流的输入和输出。TPB内存与NPU共享的SRAM之间的数据传输由可编程DMA单元显式控制。此外,还有DMA引擎负责管理SRAM和DDR内存之间的数据传输。这种软件管理的数据传输方式,结合高效的数据流同步和充足的缓冲,使得计算和数据传输可以重叠进行,从而最大限度地提高吞吐量。

3) 操作粒度:由于大多数AI推理工作负载都涉及基于张量的计算和数据传输,因此在张量级别定义加速器指令是自然而然的。这使得流式架构成为可能,操作数和结果可以直接在内存中流动,从而无需寄存器文件和显式的加载/存储指令。内存延迟在大张量上分摊,流水线执行最大限度地提高了吞吐量。虽然某些不规则操作仍然需要在传统的CPU内核上进行细粒度计算,但这些任务通常不在关键路径上。因此,M100将大部分硬件资源用于常规的、张量粒度的计算,并辅以轻量级的CPU内核来满足细粒度的通用计算需求。
4) 数据流同步:M100 NPU设计的另一个关键方面是其高效的同步机制。作为一个大规模并行系统,M100通过生产者-消费者(producer–consumer)同步模型协调多个并发处理引擎,如图3所示。图的上半部分展示了两个代理之间的生产者-消费者同步。红色箭头线表示内存读写操作。黑色箭头线表示同步计数器(SC:Synchronization Counters)的更新,蓝色箭头线表示对SC的监控行为。虚线箭头表示数据从生产者到消费者的逻辑移动方向。生产者将数据写入预分配的缓冲区,并通过更新SC来发出数据可用信号。消费者监控该SC,并在预期数据可用时开始处理。
反之,消费者更新另一个SC来通知生产者缓冲区空间何时释放,从而实现持续的数据流。这些SC操作由专用硬件处理,确保了最小的同步开销。同步粒度由软件控制,从而可以灵活地控制生产者和消费者在张量运算期间的协调频率。图中下半部分展示了如何将这种基于同步控制(SC)的同步机制扩展到一组代理,其中一些代理可以同时充当生产者和消费者——这实际上使M100成为一个数据流并行计算系统。
M100 NPU还支持其他同步模式,例如屏障同步、广播同步和归约同步。这些同步机制高效且易于编程,不仅适用于单个NPU,也适用于多芯片配置中的多个NPU。

5) 指令分发:M100 NPU使用集中式指令分发器,利用指令链总线高效地在多个处理单元之间广播张量运算指令。为了简化硬件设计,每个处理单元的指令必须按分发顺序执行,而不同单元之间的指令可以乱序执行。当存在依赖关系时,软件负责管理同步。与传统的数据流架构不同,这种设计将部分复杂性转移到编译器和运行时,它们可以利用AI推理工作负载的规律性来规划和调度执行。这种“编排式数据流架构”在硬件的简易性和软件控制之间取得了切实的平衡,同时保持了数据流并行性的效率。
6) 总结:总而言之,M100 NPU集成了张量/向量计算引擎、DMA单元和轻量级CPU内核。大部分计算以流式方式在张量级别执行,数据直接流入和流出内存。通用任务由轻量级CPU处理,这些CPU可能具有向量扩展能力。编译器或控制器通过调度计算和数据移动指令并管理处理单元之间的同步来控制数据流执行。架构细节将在下一节中讨论。
B. M100 概述
1) M100 SoC:M100是一款专为支持理想汽车AD软件栈而设计的SoC。
与其他AD芯片一样,它包含应用CPU、多媒体IP、安全模块和标准I/O接口。其主要区别在于理想汽车自主研发的神经处理单元(NPU),该单元旨在加速AI推理。图4显示了其高级框图。

图4展示了M100 SoC的主要功能模块。它配备8个LPDDR5X子系统,提供64 GB内存和273 GB/s的峰值带宽。MIPI-CSI系统支持来自多达11个摄像头的输入,其图像信号处理器(ISP)子系统负责处理原始图像,供NPU的感知模型使用。视频处理单元(VPU)负责视频编码/解码,而功能安全岛(FSI)和安全引擎则确保功能安全(FuSa)合规性和内容安全处理。电源管理单元(PMU)和时钟复位单元(CRU)负责协调上电时序和时钟/复位信号分配。专用的NPU调度器负责调度推理任务并收集结果。调试和跟踪模块支持对CPU和NPU子系统进行侵入式和非侵入式调试。该SoC还包括用于外部存储的UFS/QSPI控制器、用于高速I/O的USB/以太网接口以及各种低速接口。CPU集群集成了24个ARM Cortex-A78AE内核,具有一致的CMN互连和共享的末级缓存。
2) M100 NPU:M100 NPU是本文的核心,也是SoC中最重要的子系统。它占据了芯片的很大一部分,并作为AI推理的主要引擎。其创新的数据流架构使M100与其他AI加速器区别开来。图5显示了NPU的高级架构。

NPU通过三个主要接口与SoC的其他部分连接。首先,两个高带宽AXI主接口(每个128 GB/s)允许通过片上网络(NoC)系统访问DDR内存和其他SoC资源,该系统支持足够的未完成事务以维持峰值内存吞吐量。其次,NPU可以生成中断来通知调度CPU事件,例如任务完成。第三,调度CPU通过低带宽AXI从接口与NPU通信,以发出命令、检查状态和访问内部资源。
NPU内部由一个中央控制块(CCB:Central Control Block)和14个张量处理块(TPB)集群组成,每个集群包含4个TPB。为了支持AI推理的数据传输需求,CCB和TPB通过两条互连线路连接:一条二维网状总线和一条数据环总线(DRB)。网状总线在TPB集群、中央控制块、CPU、DMA和块SRAM之间提供可扩展的高带宽点对点通信。它在每个节点对之间提供高达256 GB/s的带宽,在低拥塞条件下具有良好的扩展性。另一方面,DRB提供了一条确定性的高效广播路径,聚合带宽高达256 GB/s,使其成为跨TPB进行多播数据的理想选择。软件会根据通信需求动态地在网状总线和DRB互连线路之间进行选择。
指令链总线(ICB:Instruction Chain Bus)以菊花链方式将CCB连接到TPB集群。CCB中的RISC-V内核通过ICB将指令分发到单个或多个TPB。这些TPB指令定义了张量操作,并包含丰富的元数据,例如张量形状和通信需求。尽管每条指令可能长达数千位,以64位/周期传输需要数百个周期,但它们的执行时间跨越数万个周期,从而确保指令分发不会成为瓶颈。
以下各节将深入探讨M100 NPU构建模块的架构细节,重点介绍其数据流执行模型和精心选择的编程粒度如何实现高性能和灵活性。
NPU架构细节
A. 中央控制模块

如图6所示,中央控制块(CCB)是NPU的控制中心。其固件运行在4核SiFive X280 RISC-V CPU上,每个CPU都与一个定制的向量引擎配对,该引擎通过ICB分发TPB指令。这些引擎解析并转发大型、复杂的TPB指令(通常长达数千位),以定义诸如矩阵乘法或逐元素加法之类的张量运算。指令包括操作数访问、计算方法和结果处理。
CCB通过四个CPU-引擎对,最多支持四个并发推理任务。TPB指令还可以使用目标掩码广播到多个TPB,并且由于其执行时间较长,ICB的带宽通常足以维持持续的吞吐量。CCB包含32 MB的片上SRAM,分为四个8 MB的存储体,采用4 KB交错排列,以实现高带宽并行访问。两个DMA引擎负责管理DDR和CCB SRAM之间的数据传输,并且可以通过DRB直接向TPB广播权重,DRB支持高达256 GB/s的速率,与DDR读取带宽相匹配。CCB的其他功能包括屏障同步和中断生成。
屏障操作确保TPB组在继续执行之前完成当前指令,这对于不频繁的全局同步点非常有用。中断可以通过控制寄存器触发到CCB或主机CPU。所有组件均通过Arteris FlexNoC互连。
B. 张量处理块集群
图7展示了TPB集群的结构。引入集群级层次结构主要有两个原因。首先,四个TPB可以共享公共资源,例如指令缓冲区、ICB和DRB节点以及RISC-V CPU,从而可以将更多芯片面积分配给张量处理,提高计算密度。其次,四个TPB之间的紧密排列可以实现低延迟、高带宽的通信,使其非常适合跨少量TPB的任务——这在我们的AD推理工作负载中很常见。对于更大的任务,多个集群可以通过网状总线进行协作,但程序员应注意不同集群中TPB之间的通信效率相对较低,并相应地进行优化。

共享的RISC-V向量CPU(SiFive X280)提供通用计算能力。TPB指令可以通过中断触发基于CPU的任务。CPU获取任务参数,执行预加载的服务例程,并在TPB指令完成后将其标记为已完成。最多可以有四个TPB并发请求服务,CPU会按顺序仲裁和处理这些请求。这种机制使得基于CPU的操作能够遵循与张量操作相同的指令语义,从而简化编译、调度和分发。
每个集群都包含一个TPB指令队列,该队列从ICB下载指令并将其存储在一个大缓冲区中。指令在就绪后会被分发到TPB功能单元,无需全局执行顺序——只需保持单个TPB的同一功能单元内的顺序即可。这体现了我们编排数据流架构的核心:编译器发出一个松散排序的指令流,运行时执行由数据就绪和同步条件驱动。指令队列确保一旦输入和同步条件满足,功能单元就会保持忙碌状态。
与CCB类似,每个集群都包含一个内部片上网络(NoC),该NoC连接四个TPB和CPU内存端口。集群NoC通过主/从端口连接到NPU级网状总线,以实现双向数据访问。ICB节点负责TPB的指令传递,而DRB节点则管理集群内外的广播数据流量。
C. 张量处理模块(TPB)
TPB是负责张量计算和变换的核心单元。它由多个专用功能单元组成,每个单元都针对特定类型的张量运算进行了优化。以下简要概述了TPB中的主要功能单元:
- 高带宽共享存储器(HBSM: High Bandwidth Shared Memory)既用作2 MB的数据存储,又用作TPB功能单元的灵活通信枢纽。生产者和消费者通过预定义的地址范围交换数据,并通过计数器进行同步,从而无需专用数据通路。为了减少SRAM端口冲突并保持性能,HBSM采用了分块存储器设计。
- 张量计算单元(TCU: Tensor Computing Unit)处理计算密集型操作,例如卷积和矩阵乘法,并包含一个用于激活函数的非线性流水线。
- 可配置向量单元(CVU: Configurable Vector Unit)由模块化向量运算单元组成,这些单元可以重新配置为自定义流水线。它能够高效地处理基本的向量运算和常见的AI任务,例如池化、softmax和层归一化。
- 数据转换DMA单元(DTDU: Data Transformation DMA Unit)负责TPB内部的数据移动或向其他TPB广播数据。它还支持张量布局变换,例如矩阵转置。
- CPU启动单元(CSU: CPU Starter Unit)处理请求集群CPU协助的TPB指令。它保存指令参数并触发中断。然后,CPU通过向量协处理器指令扩展(VCIX)接口访问请求TPB的数据和设备。
- 自定义引擎通过VCIX接口代表CPU执行TPB操作,包括控制寄存器和内存访问。它还包含一个Gather/Scatter DMA单元(GSDU),CPU可以使用该单元移动具有非连续地址模式的数据。
- 同步单元(SU)管理TPB功能单元可以在本地更新或监控的同步计数器。它还支持通过DRB和NPU片上网络(NoC)进行远程同步。
以下章节将更详细地讨论TPB功能单元。
1) 高带宽共享内存单元

2MB HBSM SRAM由所有TPB功能单元统一共享。如图9所示,大多数单元在执行任务时,会将张量数据流式地输入和输出到HBSM(通常是并行传输)。由于一个单元的输出经常作为另一个单元的输入,HBSM无需专用数据通路即可实现高效的生产者-消费者通信。虽然共享内存会引入延迟(约20个时钟周期),但TPB操作的流式特性可以最大限度地降低延迟的影响,前提是保持高带宽——不仅是单个单元的带宽,而且是多个单元并发访问的带宽,这对于维持TPB的吞吐量至关重要。
HBSM通过分块架构实现高带宽,使用32个内存块,每个内存块每个时钟周期支持32字节。地址空间以32字节粒度交错,从而支持跨内存块的并发访问。虽然更多的内存块可以通过减少冲突来提高带宽,但它们也会增加路由拥塞——尤其是在高吞吐量设计中。经过广泛的建模和后端评估,最终选择了32个存储体和8个请求端口的配置作为最佳平衡方案。
当多个请求者访问同一个存储体时,HBSM采用轮询仲裁机制,确保每个请求者都能按顺序访问。同步操作(例如将数据标记为已生成或已使用)与内存访问相关联,并在仲裁成功后触发。此后,该访问被视为全局可见,因为任何后续请求都无法覆盖它。通过统一数据移动和同步,HBSM成为M100数据流架构的核心骨干。
2) 张量遍历单元(Tensor Walker Unit)
TPB功能单元通过流式输入数据和输出数据来访问HBSM中的张量。这需要生成针对特定计算模式定制的地址序列。对于卷积等运算,地址通常遵循由嵌套循环定义的复杂非线性模式,而不是简单的线性递增。为了支持这一点,张量遍历单元(TWU)用于灵活地生成所需的地址序列,从而能够高效地访问输入激活值和权重。

通常,一个TPB功能单元包含两个或多个输入TWU和一个输出TWU。可以通过该功能单元的TPB指令配置TWU,指定嵌套循环层数以及每个循环层的初始值、步长值和最终值。配置完成后,TWU在每次迭代中生成一个地址,直到每个循环层的Value计数器达到该层的最终值。图10展示了一个3级TWU的示例。输出地址是所有循环层Value计数器的总和。当最内层循环的Value计数器达到最终值时,该循环层的Value计数器将按该循环层的步长值递增。当然,最内层循环的Value计数器在每次迭代中都会无条件递增。当某个循环层的Value计数器达到最终值时,下次递增时将从初始值重新开始。TWU还支持双缓冲的地址生成。通过在外部循环级别指定带有缓冲区偏移量的步长值,程序员可以无缝地在两个缓冲区区域之间切换。
TWU生成丰富地址模式的能力,结合基于HBSM的数据共享,使得TPB功能单元之间无需专用数据通路或缓冲区即可高效地实现复杂的数据通信。因此,TWU是M100 NPU简洁而强大的数据流架构的关键推动因素。
3) 同步单元
同步是数据流并行计算的关键组成部分。功能单元必须在数据被生成或使用时通知对等单元,以维持流水线各阶段之间的数据流。传统架构依赖于原子操作或互斥的加载/存储指令进行同步,这可能效率低下,并且与缓存和内存子系统紧密耦合。
相比之下,M100 NPU(一款针对数据流执行优化的AI加速器)中的同步可以大大简化,其处理方式如下:
- 一个代理在执行特定任务时更新自身的执行状态。
- 另一个代理监控第一个代理的状态,并决定是否可以继续执行下一步。
这种更新/监控关系可以在两个代理之间双向运行。例如,生产者在监控消费者的消费状态的同时更新自身的数据生成状态,同时,消费者在监控生产者生成状态的同时更新自身的消费状态。这使得两者能够协同工作,构成一个计算流水线。同样的机制可以扩展到多个代理,通过简单的状态更新和监控操作形成同步网络。
在每个TPB内部,同步单元(SU: Synchronization Unit)管理着用于跟踪和协调执行状态的硬件计数器。功能单元可以声明一个计数器来更新自身的进度,并可以监控其他计数器以确定依赖关系是否得到满足。更新和监控操作会在TPB指令定义的特定执行阶段触发。当发出更新请求时,SU会将分配的计数器加一。监控请求包含一个预期值,SU仅在计数器达到或超过该值时才会响应。在此之前,请求单元会暂停执行。软件控制哪些计数器被更新或监控,通过合理的分配,可以在并行功能单元之间实现高效的同步执行流水线。
4)张量计算单元(Tensor Computing Unit)

张量计算单元(TCU)利用密集排列的计算单元加速张量收缩运算。为了在有限的内存带宽下维持高吞吐量,数据重用至关重要。如图11所示,TCU将乘加(MAC)单元排列成8×64的阵列。每个MAC单元每个周期执行一次4元素点积运算。激活数据在行间重用,权重数据在列间重用。对于32×32×32×64的矩阵乘法,计算在32个周期内完成——假设元素大小为1字节,则分别与激活缓冲区和权重缓冲区的32B/周期和64B/周期的输入带宽相匹配。通过双缓冲,TCU可以同时维持矩阵乘法和卷积运算的峰值吞吐量。
MAC运算后,部分和存储在输出缓冲区中,并经过非线性激活流水线处理后写入HBSM。由于张量收缩通常沿大轴方向减小,因此输出数据量较小,写入带宽很少成为瓶颈。对于大型张量,TCU包含外循环控制逻辑,可以高效地遍历数据块,从而以最小的空闲周期保持流水线的运行状态。
5、可配置矢量单元(CVU:Configurable Vector Unit)

图12展示了可配置向量单元(CVU)的核心组件,它由单功能向量算术运算符组成。每个运算符接收一个或两个输入向量流,并生成一个输出流。TPB指令可以配置CVU,使其将输入路由到单个运算符,或构建带有中间缓冲区的多级流水线。这种灵活性使得常见的向量运算能够高效执行。图12底部展示了Softmax计算的CVU配置——Softmax是Transformer模型中常用的运算符。图中标注了配置的流水线各阶段的计算步骤,以说明CVU如何以最佳效率执行Softmax运算。
对于无法完全流水线化的更复杂的向量运算,CVU可以分多个阶段处理,每个阶段由单独的TPB指令处理。虽然这可能会降低吞吐量,但其性能仍然与传统向量核心相当或更优。由于其庞大的配置空间,CVU非常适合适应AI推理工作负载中各种不同的向量计算模式。
6) DMAs
除了计算单元外,每个TPB还配备了高性能DMA引擎,以支持TPB内部以及跨TPB的数据流。TPB中有两种类型的DMA:
- 数据转换DMA单元(DTDU: Data Transformation DMA Unit)的功能类似于计算单元,执行TPB指令。它负责HBSM内部的数据移动,支持矩阵转置等操作,并且可以通过将指定地址范围填充预定义值来高效地初始化内存。
- 聚集-分散DMA单元(GSDU:Gather-Scatter DMA Unit)由集群CPU管理,不直接执行TPB指令。它处理难以用标准TPB指令编码的不规则数据移动模式。TPB指令会触发CPU启动单元(CSU),CSU启动CPU例程来控制GSDU。GSDU在本地HBSM和外部存储器(例如另一个TPB的HBSM、CCB SRAM或DDR)之间传输数据。顾名思义,它支持本地和远程内存空间之间的收集和分散操作。
7) CPU 启动单元(CSU:CPU Starter Unit)
CSU执行一条TPB指令,该指令会触发中断以请求集群CPU的协助。任务参数存储在CSU中,CPU的中断服务例程会检索这些参数以确定所需的操作。任务可能涉及标量或向量处理,或者通过VCIX接口控制GSDU以进行运行时确定的数据传输。例程完成后,它会通知CSU,CSU随后会将TPB指令标记为已完成。
编译器和运行时软件栈
作为垂直整合解决方案的一部分,M100编译器和运行时软件栈在确保功能正确性和卓越性能方面发挥着至关重要的作用。
A. 编译器
如图13所示,M100 AI编译器工具链包括时空调度器、图编译器和后端编译器:

- 时空调度器(space-time scheduler)将神经网络子图映射到M100 NPU硬件上。如有必要,大型张量会被分割成小型张量,这些小型张量会沿着数据流编译器时空调度器构建的处理流水线传递。图14展示了一个时空调度的示例。一个包含四个计算算子(OP1、OP2、OP3、OP4)的子图在空间上分布到四个TPB中。输入张量沿多个轴进行维度分解,生成若干小型张量,这些小型张量随后会按照时间调度的阶段依次流经分配的TPB。
- 图编译器对动态张量执行图优化和动态内存分配。图优化包括张量融合、死代码消除、代数简化、布局变换等。
- 后端编译器是一个C扩展编译器,它生成利用M100架构硬件功能的内部指令,例如张量计算、数据移动和同步。

B. 运行时软件(Runtime Software)
M100运行时软件栈包括运行在SoC的ARM Cortex-A78内核上的AI推理运行时和NPU驱动程序,以及运行在NPU RISC-V内核上的NPU固件。AI推理运行时负责准备输入数据、加载神经网络模型、启动分配资源的任务,以及对推理结果进行后处理以供下游应用程序使用。AI推理运行时还会监控NPU运行过程中遇到的任何错误或异常状态,并确保NPU满足汽车功能安全(FuSa)要求。NPU驱动程序作为高级应用程序软件的硬件抽象层。NPU固件采用即时(JIT)编译技术,根据M100编译器工具链生成的二进制代码动态生成优化的TPB指令。该固件还会实时计算张量形状和张量存储的内存地址。NPU固件会将TPB指令发送给分配给特定任务的一组TPB。
评估结果
为了评估M100 NPU架构的性能,我们使用与AD应用相关的基准测试,对M100和NVIDIA Thor-U(一款专为AD和边缘AI推理开发的先进SoC平台)进行了对比研究。本节首先介绍两个平台的硬件配置。然后,分析所选基准测试的特性。最后,展示性能数据,以证明与Thor-U相比,M100在关键AD工作负载中实现了具有竞争力甚至更优的AI推理效率和硬件利用率。
A. 硬件配置
截至撰写本文时,理想尚未正式公布M100的详细性能规格,仅公布了DDR带宽和芯片尺寸等基本指标。表I列出了M100的可用数据以及Thor-U的相应数据。两个平台的DDR带宽相同,而Thor-U的芯片尺寸略大——这表明它们的原始计算能力相当。为了确保公平性,我们在基准测试期间使用相同的功耗预算从两个平台收集了性能数据。

B. 基准测试
自动驾驶和智能座舱是现代智能汽车的两大重要特征。我们选择最先进的端到端自动驾驶算法UniAD作为自动驾驶基准测试应用。对于智能座舱场景,LLaMA2-7B等LLM是支持车辆与驾驶员/乘客之间智能交互的关键组件。因此,我们选择LLaMA2-7B作为另一个重要的性能评估基准。此外,为了全面评估集成VLA功能在自动驾驶场景下的性能,我们选择了理想汽车自主研发的MindVLA模型中的一个关键组件作为第三个基准测试。
在将UniAD、LLaMA2-7B和MindVLA移植到Thor-U和M100平台时,我们确保在两个系统上执行基准测试时保持可比的计算资源和功耗。本节的其余部分将提供这三个基准测试的更多详细信息。
1) 模型架构:
- 为了更好地展现理想汽车目前部署的自动驾驶算法,我们对UniAD基准模型进行了修改,将ResNet-101替换为RegNet。如图15所示,UniAD算法提供了一个统一的框架,无缝集成了自动驾驶的两大核心任务:感知和预测。感知部分涵盖目标检测和跟踪,预测部分则处理运动预测和占用预测。感知模块(BevFormer、TrackFormer、MapFormer)和预测模块(MotionFormer、OccFormer)均基于Transformer架构。这些组件通过大量的查询标记(例如TrackFormer中的900个)连接,从而为推理过程中的并行处理提供了充足的机会。在进入第一阶段感知(BEVFormer)之前,我们使用基于CNN的骨干网络从输入图像中提取特征。

- LLaMA2-7B是一个基于Transformer的大型语言模型,拥有约70亿个参数。它采用标准的仅解码器Transformer架构,并结合了多头自注意力机制和前馈网络。推理过程分为两个阶段:预填充阶段,并行处理输入序列;以及解码阶段,顺序生成词元。
- 理想汽车的下一代自动驾驶算法MindVLA,将LLM组件与混合专家(MoE)Transformer架构相结合,从而提升了模型容量和推理效率。

LLaMA推理过程包含两个阶段:预填充和解码。在预填充阶段,输入序列中的所有词元并行处理,大量并发词元(类似于UniAD中的并行查询)提供了高度的计算并行性。相比之下,解码阶段每步生成一个词元,并行性有限,使其成为一个内存密集型操作。
与LLaMA2-7B不同,MindVLA的LLM组件采用了一种包含8位专家的混合专家(MoE)策略。为了进行评估,我们使用包含4.31亿个参数的配置作为基准。
C. 实验结果
值得注意的是,我们的实验使用了M100 NPU上14个可用集群中的12个,占其总计算能力的86%。这种配置旨在通过允许最多两个集群出现故障来确保更高的芯片良率。对于故障集群少于两个的芯片,利用额外的硬件资源可以实现更高的性能。
1) UniAD:表III比较了在M100和Thor-U平台上运行的六个UniAD基准测试的结果。对于M100平台,我们使用了14个可用计算集群中的8个来执行UniAD任务,并将剩余的6个集群保留给其他驾驶舱域功能。这种分配策略展示了M100在保持性能隔离的同时,能够同时处理多个特定域的工作负载。
结果表明,M100在不同的网络组件上实现了1.2倍至6.3倍的加速,其中大多数模块的性能提升幅度为3.8倍至4.4倍。即使仅使用8个集群专门处理自动驾驶任务,M100也能在感知任务中保持30 FPS的帧率,满足自动驾驶的实时性要求。相比之下,Thor-U的帧率仅为7.9 FPS,远低于在高速驾驶场景下部署“自动驾驶导航”功能所需的性能。
在相同的功耗预算下,M100的帧率比Thor-U高出3.8倍。这一性能提升归功于M100紧密集成的软硬件解决方案,该方案可并行化AI推理任务。具体而言,其编译器生成的精心编排的数据流执行机制,能够在计算单元和数据传输单元之间实现极高的并行度,同时将同步开销降至最低。

我们使用自主研发的性能分析软件,追踪M100的运行状态,并收集了详细的执行时间线数据。图16展示了最终的执行时间线。不同颜色的方块代表各个处理单元随时间变化的活动状态:连续的方块表示持续的活动,而方块间的空白则表示空闲或等待的时间段。在该追踪过程中,在大部分采样窗口内,CCB中的DMA(以及TCU、CVU、CSU和其中一个TPB中的GSDU)始终保持活动状态,且任务执行存在显著的重叠。这表明硬件利用率很高,并突显了M100架构强大的并行执行能力和整体效率。

2) LLaMA2-7B:在LLaMA2-7B基准测试设置中,输入序列长度设置为1024个标记。表IV总结了M100和Thor-U平台在推理任务的解码和预填充阶段的性能比较。在解码阶段,我们采用W4A16量化,其中权重表示为4位整数,激活特征表示为16位浮点值。M100的延迟为21.34毫秒,性能与Thor-U的20毫秒相当。虽然Thor-U在此指标上略占优势,但这主要是由于NVIDIA平台上针对LLaMA2-7B等开源模型进行了广泛的优化。另一方面,由于M100和Thor-U平台共享相同的DDR内存带宽(这主要限制了解码阶段的性能),因此两个平台的性能相当也在预期之中。在预填充阶段,我们采用W8A8量化,将权重和激活值均表示为8位整数。M100展现出显著优势,推理时间仅需79毫秒,而Thor-U则需要154毫秒,速度提升了1.95倍。这一改进归功于M100高效的张量处理单元以及数据流驱动的同步机制,该机制实现了各单元之间的无缝协调。

3) MindVLA(LLM部分):除了评估开源模型外,我们还测试了MindVLA,这是理想汽车自主研发的下一代自动驾驶模型。该评估表明M100平台能够支持生产级自动驾驶应用。表V展示了M100和Thor-U平台在MindVLA的LLM组件方面的性能对比。

在解码阶段,M100的延迟仅为0.1毫秒,而Thor-U的延迟为0.3毫秒,速度提升了3倍。在预填充阶段,M100的推理完成时间为0.84毫秒,而Thor-U为1.74毫秒,速度提升了2.1倍。虽然本文仅展示了LLM组件的性能,但这些结果凸显了M100在支持更高级的自动驾驶工作负载方面的优势。
结论
我们介绍了M100 SoC和NPU——理想汽车针对通用AI推理工作负载的解决方案——它基于数据流架构,通过使编译器和运行时软件能够协调跨处理单元的计算和数据移动,从而降低了设计复杂度。我们详细介绍了关键功能模块的架构,并解释了主要设计决策背后的原理。
对比评估结果表明,M100 NPU的性能显著优于领先的GPGPU平台,且不牺牲灵活性。我们相信,通过有效平衡软件和硬件的复杂度,经典的数据流架构可以焕发新生,以满足现代AI计算快速发展的需求。