Groq:软件定义硬件的张量流式处理器架构
Groq:软件定义硬件的张量流式处理器架构
Groq的张量流处理器(TSP)架构采用了创新的软件定义硬件方法,通过将芯片控制、数据流、网络调度等任务交给软件操作,实现了更高的效率和灵活性。本文详细介绍了TSP架构的背景、设计原则、微架构设计、网络拓扑-路由-流控设计等内容,帮助读者深入了解Groq的创新技术和设计理念。
软件定义硬件方法
Groq利用软硬件协同,重新审视了软硬件交互接口。通过static-dynamic接口确定编译期和运行时的任务分配,通过软硬件接口确定哪些体系结构状态对编译器可见。设计时遵循面向确定性设计原则,硬件必须使得编译器和运行时接口理解程序执行。
- 充分理解内存一致性模型,不允许内存引用的重新排序。
- 不需要有“反应性组件”,例如仲裁器、交叉开关、重放机制、缓存等。
- 软件必须能够访问到架构可见的机器状态,以便拦截数据(操作数)和将执行它们的指令。
- 编译器“知道”芯片上每个张量(tensor)的确切位置。
- 编译器协调操作数和指令,通过生产-消费者模型,使得流式寄存器文件(streaming register files)可跟踪和存储在处理器或芯片上流动的张量数据的状态。
流式编程优势在于固定大小SRAM带来了确定性延迟;显式地在空间和时间上分配张量,解锁了大规模内存并发性和计算灵活性。传统的CPU增加了执行时间和深度学习模型的吞吐量特性的动态分析需求。推测性和乱序执行提高并发的同时,增加了tail延迟。隐式数据流通过缓存层次结构DRAM->L3->L2->L1引入了复杂性和非确定性。
TSP微架构设计
传统的处理器为complexing multi-core设计,每个core都包含完整计算、整数、浮点单元及存储和网络接口。GroqChip采用single-core设计,将上述功能单元分解并重新组织成SIMD功能单元,包括MEM-片上内存SRAM、VEX-向量处理、MXM-矩阵操作、SXM-数据reshape等。将它们彼此相邻放置,通过相互之间传递数据和操作数进行交互,充分利用空间局部特性。虽然看起来与传统CPU不太一样,但执行方式一致,都是将较大的指令分解为微指令。
TSP superlane结构及数据流动如下。数据在不同SIMD单元上流动,不同时间交给不同的执行单元。
软件定义
Groqchip架构总览,包含SRAM内存,TruePoint矩阵、可编程向量单元、网络、数据开关及指令控制等。下图为芯片构建块SMID单元,为320大小的向量,每个SMID单元有位于芯片底部的指令调度控制。SIMD功能单元,包括MEM-片上内存SRAM、VEX-向量处理、MXM-矩阵操作、SXM-数据reshape等。
SMID单元布局上相互挨着,底部同步指令分发到所有SMID功能单元,实现计算同步执行。芯片上采用南北向传输指令,东西向传输数据。同时利用高带宽的SRF,Streaming Register File在不同的SMID单元间传递数据。
TSP硬件确定性,实际吞吐量取决于编译器调度。以下展示了ISA增强软件栈,将控制权转移给编译器。
- 编译器知道所有数据位置。无需多级缓存,同时消除DRAM的不确定性。
- 编译器知道时钟周期的指令调度。144位指令控制单元,每个指令控制单元控制着与其关联的SMID单元的调度,仅仅不到3%的区域用于指令解码和调度,硬件调度开销非常低。
- 编译器知道SMID单元间的数据移动。每个SMID单元与SRF交互,进行数据输入输出的传递。而且每个SRF间只有1-cycle hop,中间过程无仲裁节点、重排序等。
用于ML模型上的SMID单元核心指令集,及支持的数据类型。而且每个SMID单元都有必备的指令,如IFETFCH、NOP、SYNC、NOTIFY等。
核心矩阵乘法单元MXM,包含4个320 x 320的个MACC-乘累加plane,每个plane由20个16 x 16个supercell组成。每个plane存储了102,400个“权重参数”,并且有409,600个乘累加器(MAcCs)。MXM支持8位整数和16位浮点数的数值,通过同时使用两个320×320字节平面来实现16位浮点数结果。每个输出只经过一次舍入步骤,就产生320元素的和,以转换为int32或fp32结果。
向量执行单元VXM,包含ML模型的常见向量计算如Accum、Add、ReLU、整数浮点格式转换等。每个超通道实现了一个4x4的向量ALU网格,能够进行×16的SIMD计算。每个通道有16个向量ALU。
内存单元MEM(SRAM),MEM在芯片上有88个切片,每个切片能同时服务一对读写请求。MEM切片提供了一个分区全局共享地址空间的编程抽象,编译器支持高达176路的内存并发性。
开关执行单元SXM,用来处理数据操作、reshape、数据搬运传输等。
流寄存器文件SRF位于SMID单元间,用于在不同单元间进行数据传输交互。
系统封装、路由及网络
Groq提供的整体端到端实时AI和HPC解决方案,主要是四部分:Groq Chip、Groq Node、Groq Card、Groq Rack;并在GroqNode层集成GroqWare套件。
Dragonfly网络拓扑结构,
- 利用封装层次实现低直径网络,同时又利用了封装局部性(packaging locality)。
- 软件调度的直连网络(software-scheduled direct network),支持每个TSP上的16个直接相连的芯片到芯片链路进行通信。
GroqNode构成,
- 利用较小的网络直径将多达8个芯片打包到一个node中,8个芯片做full mesh全连接;
- 然后利用CPU做控制,每个CPU控制4块TSP芯片;
- 利用C2C做链路和数据流控。
GroqRack,由9个GroqNode组成。
- 每个TSP的引脚带宽被划分为7个“本地”链接和4个“全局”链接。7个本地链接用于同一节点中8个TSP的全连接,节点内每个TSP的所有全局链接可以组合成4 * 8 = 32的“虚拟”端口的高基数路由器,用作Dragonfly拓扑的构建块。
- 使用具有32端口虚拟路由器的节点作为构建块,TSP系统可以扩展到33个节点,总共33×8=264个TSP,通过提供所有节点之间的完全连接,实现最小路由的三跳拓扑。
- GroqRack层级,包含9个节点,每个节点8个TSP,通过每个TSP的4个“全局”链接相互连接,总共有4 *8 * 9=288个全局带宽端口。
- 为了扩展到更大的系统,可以使用机架作为“本地组”。使用288 / 2 = 144个端口,将机架中的9个节点做双重连接。其余的144个端口用于连接系统中的其他机架。
- 最大配置集群可提供145个机架,或10,440= 145(机架)×72(每个机架的TSP)总共个TSP,使用最小路由(源机架中的两个,一个全局跳,目的地机架中的两个)实现最多5跳直径。
- 进而实现万卡集群规模。
全局同步网络
当前网络由于没有统一的全局时钟,所以并不算是真正意义上的同步,这个也会影响链路延迟方差、C2C互联的不确定性。本文中则采用一系列的软硬件技术来解决同步问题。
- 硬件对齐计数器HAC
- 软件对齐计数器SAC
- 初始对齐/运行时重新同步
- ISA指令支持
全局同步网络由多同步链路组成,它们大部分是同步的,也就是在驱动每个链接的时钟晶体的容差范围内是同步的。正是基于这一点,才能够检测到漂移何时发生,并通过硬件和软件技术做漂移补偿。以下是软件定义网络中ISA对网络同步的支持,同步链路且保持lock-step执行。
软件调度网络SSN
不同于传统网络依赖硬件判优机制来动态竞争一组输出端口,Groq让编译器可以调度所有物理网络端口,使它可以像调度 ALU 或矩阵一样调度网络链接。传统方法只会对网络中的拥塞做出反应,而不是在拥塞后快速做路由选择,进而避免热点hot spots问题。
Groq的软件调度网络SSN采用的方案:
- 确定性流量模式:通过ML模型的静态图分析,通信或网络流量模式在编译时就已知,允许基于流量模式做出最优的调度决策。
- 通信调度而非路由:系统通过源点和目的地节点上的发送和接收指令来明确控制数据在网络中的逐跳路径,而不是依赖硬件中的查找表进行路由。
- 确定性负载均衡:包括非最小路径路由,以在多个可用链路上分散流量,实现负载均衡,同时避免由硬件自适应路由引起的数据包重新排序。
- 显式软件流控制:由于网络是确定性的,不使用动态仲裁,而是通过软件来安排每个物理链路上的数据流,确保不会发生路由死锁。
- 前向纠错(FEC):使用FEC来纠正传输错误,避免链路层重传,保持网络的确定性。
- 高效的通信模型:与传统网络相比,SSN消除了通信协议中的“请求”阶段,因为编译器知道何时发送回复消息,从而减少了网络请求。
- 数据封装效率:由于缺乏硬件流控制,数据不再需要封装成数据包即可穿越网络,而是通过编译器产生的指令流进行编码,减少开销。
- 避免复杂性和成本:SSN避免了额外的虚拟或物理通道来避免死锁的复杂性和成本。
- 网络编码效率:将tensor作为消息,每个320字节的向量数据包具有97.5%的编码效率,只有2.5%的编码开销。
SSN基于编译器确定网络拓扑、路由及流控虽然有优势,但在灵活性、扩展性上会有比较大的限制。
确定性负载均衡
Groq允许编译器对所有物理链路进行负载平衡,就像我们对芯片上的任何其他功能单元进行负载平衡一样。
可靠性
TSP中可靠性方案:
- Superlanes冗余,共21条但仅使用20条
- GroqNode冗余
- GroqRack内电源冗余
- 确定性简化ASIC设计和验证流程
- Groqware软件堆栈异常处理
- ECC保护等,使用单纠错和双检测(SECDED)来保护所有数据路径、SRF、指令缓冲区和指令
- 异常处理如NaN、溢出等问题
工作负载评估
实验中评估了分布式矩阵相乘、BERT-large、ALLREDUCE集合通信及 Cholesky分解等场景的工作负载。
总结
本文原文来自Groq首席架构师Dennis Abts在2022 HotChips大会上的分享。