日益复杂的网络和多样化的工作负载要求网络内置更多的自动化决策能力,通过可编程网络设备在用户面支持机器学习工作负载就是一个可能的选项,本文提出了一种支持用户面推理的架构设计,相对控制面机器学习的性能有数量级的提升。原文: Taurus: A Data Plane Architecture for Per-Packet ML
概要
新兴应用(云计算、物联网、增强/虚拟现实)需要反应迅速、安全、可扩展的数据中心网络,当前这些网络实现了简单的、逐包计算的数据平面(如 ECMP 和 sketches),并在实现了数据驱动的性能、安全策略的慢速、毫秒级延迟控制平面的管理之下。然而,为了满足现代数据中心的应用服务水平目标(SLOs, service-level objectives),网络必须弥合线速(line-rate)、逐包执行(per-packet execution)和复杂决策之间的差距。
因此我们提出并设计和实现了 Taurus,这是一个用于线速推理的数据平面。Taurus 将灵活的、抽象了并行模式(MapReduce)的定制化硬件添加到可编程网络设备(如交换机和网卡)中,这种新硬件基于流水线 SIMD 实现并行,完成逐包 MapReduce 操作(如推理)。我们对 Taurus 交换机 ASIC 的评估(基于几个真实世界的模型)表明,Taurus 的运行速度比基于服务器的控制平面快几个数量级,同时面积增加了 3.8%,线速机器学习模型的延迟增加了 221ns。此外,Taurus FPGA 原型实现了完整的模型精度,比最先进的控制平面异常检测系统的能力提升了两个数量级。
1. 简介
为现代分布式工作负载(如云计算、物联网、增强/虚拟现实)保证严格的安全和服务水平目标(SLO),需要根据整个数据中心网络的当前状态(如拓扑结构、队列大小以及链路和服务器负载)做出计算密集型管理和控制决策,并按线速应用在每个数据包上[170]。在当今双向 Pb 级带宽网络[60]中,即使是几微秒的延迟,也可能产生数以百万计的异常数据包[8][17][154],从而使交换机队列饱和并导致拥堵[66][162][169],或者由于丢包而导致过度重传[37],以及造成流量和服务器负载不均衡[4][85]。然而,当前的实现面临两难,必须在每包线速执行或计算复杂性之间做出选择。
数据面 ASIC(如交换机和 NIC)可以在纳秒级对网络条件做出反应,但其编程模型被限制为以线速度转发数据包(如流量表[15][63]),从而将网络操作限制在简单的启发式方法上[4][85][98],或者需要在固定功能硬件中实现特定任务(如中间件[29][103])。
控制面服务器可以做出复杂的、数据驱动的决策,但频率不高(通常在每条流的第一个数据包上)。即使有快速数据包 IO[38][83][132]和专用硬件(如 TPU[84]或 GPU[119]),控制器和交换机之间的往返时延(10us 或更多)也从根本上限制了控制面的反应速度。将计算转移到交换机 CPU 也没有帮助,因为缺乏全局网络知识,而且交换机 ASIC 和 CPU 之间的 PCIe 接口增加了大约 900ns 的往返延迟[117],意味着在 12.8Tb/s 的网络上,ASIC 在做出决定之前已经转发了大约 12000 个 128 字节的数据包(或 22000 个 64 字节数据包)。
因此提出如下问题:"如何能将控制面的复杂决策委托给数据面 ASIC?"控制面可以通过对全局网络状态进行采样来学习新的趋势(如攻击[106][153]、流量模式[162][169]和工作负载[169]),并可以训练机器学习(ML)模型来处理此类事件。然后,数据面可以使用封装了全网行为的模型,在不访问控制面的情况下做出转发决策。同时,控制面可以继续捕捉交换机的决策及其对指标的影响(如流量完成时间),训练和优化模型以学习新的事件类型(或签名)以及提高决策质量,并以固定的时间间隔更新交换机模型。这种训练将发生在较粗的时间尺度上(几十毫秒),但不在关键路径上。而且,使用最近训练的机器学习模型,数据面可以从流量的第一个数据包开始做决定,同时对已知(学习)类型的事件做出自主反应,控制面只需要对新(未见)事件类型进行干预[1]。
[1] 另一方面,无论事件类型(或签名)如何[96],流量规则需要控制面对每个事件进行干预。
那么挑战就在于如何在数据面上运行机器学习模型。如果网络行为是稳定的,可以将模型输出映射为交换机的匹配动作表(MAT, match-action table)中的流量规则[15]。然而,现代数据中心网络是动态的,这将导致表项的频繁失效并需要频繁访问控制面,从而增加对网络事件做出反应的时间[170]。直接在现有交换机上实施模型,特别是深度神经网络(DNN, deep neural network)也是不可行的[144][168]。大多数机器学习算法是围绕线性代数建立的,使用了大量的重复性计算,在少量权重上进行定期通信[88][127][150]。匹配动作流水线的 VLIW 架构[15]缺乏必要的循环和乘法运算,以及不必要的灵活性(如全连通 VLIW 通信[178]、大型存储器和 MAT 中的三元 CAM[15]),消耗了芯片面积,但对机器学习却没有好处[144]。简而言之,现有数据面缺乏执行现代机器学习算法(如 DNN)所需的计算资源,而控制面服务器(和加速器)没有针对超过每秒几十比特的网络速度下的每包低延迟操作进行优化。
我们在本文中提出了 Taurus,一个用于数据面逐包运算机器学习的特定领域架构。Taurus 扩展了独立于协议的交换架构(PISA, ProtocolIndependent Switch Architecture)[15][63],有一个基于并行模式抽象的新计算模块(即 MapReduce)[88],支持现代机器学习应用中常见的数据并行性[28]。MapReduce 模块实现了空间 SIMD 架构,由内存单元(MU, memory unit)和计算单元(CU, computeunit)组成,交错排列在一个网格中,并由一个静态互连(第 4 节)连接。每个 CU 有四个流水线计算阶段,每个计算阶段对 16 个独立的数据元素(通道)各进行一次 8 位定点操作。当评估一个 16 位输入感知器时,CU 使用第一级来映射 16 个平行的乘法,然后使用第二级将乘法的值减少到一个单元。第二个 CU 应用激活函数(例如 ReLU[112])。多个 CU 可以并行用于分层 MapReduce 计算(宽模型层)或串联用于流水线计算(多层)。
MapReduce 模块与解析器、MAT、调度器一起工作转发数据包,MAT 将 MapReduce 与流水线连接起来,预处理 MAT 负责提取、格式化并记录数据包级、流级[154]、交叉流以及设备特征(基于带内网络遥测即 INT[87]),MapReduce 模块基于这些特征和机器学习模型生成数学结果,后处理 MAT 将输出转化为数据包转发决策。不需要机器学习决策的数据包可以绕过 MapReduce 模块,避免产生额外延迟。
总之,Taurus 是一个集成系统,集合了网络和机器学习架构领域的想法(即用 MapReduce 模块扩展 PISA 流水线),实现了逐包机器学习(per-packet ML) 这种新的计算范式,以供行业和学界探索、创新[2]。我们做出了如下贡献:
- 用于 MapReduce 的带有可重配 SIMD 数据流引擎的 Taurus 交换机硬件设计(第 3 节)和实现(第 4 节)。
- 基于 15ns 预测 PDK[12]对 ASIC[3](第 5.1.1 节)进行分析,并针对真实的机器学习网络应用(第 5.1.2 节)、微测试(第 5.1.3 节)和纯 MAT 实现(第 5.1.4 节)进行合成,以确定相对于市售交换机的速度和面积开销。Taurus 的 MapReduce 模块为线速(1GPkt/s)机器学习模型平均增加了 122ns 延迟,而对于最大的模块配置来说,产生的面积和功耗开销分别增加了 3.8%和 2.8%。
- 基于 Taurus 测试平台进行端到端系统评估,该测试平台基于连接到 FPGA 的可编程交换机,可对 MapReduce 模块进行模拟(第 5.2.1 节)。结果表明,Taurus 完全实现了模型精度,并比控制面事件检测能力提升了两个数量级(第 5.2.2 节)。此外,数据面模型可以在几毫秒内学会处理来自控制器的新(异常)行为(第 5.2.3 节)。
[2] Taurus 原型源代码可以在 https://gitlab.com/dataplane-ai/taurus 上公开获取。
[3] 设计评估基于最近的空间 SIMD 加速器 Plasticine[127],并将其修改为针对线速的纯推理应用。代价是需要降低精度,缩短流水线,并且不支持浮点运算,没有 DRAM,以及更少的片上存储器。
2. 逐包机器学习需求(THE NEED FOR PER-PACKET ML)
为了满足现代超大规模数据中心严格的 SLO,网络界已经基于可编程数据平面(如 Barefoot Tofino 芯片[114][115])以包为单位运行服务(如负载均衡[4][85]、异常检测[95][102]和拥塞控制[162][169])。然而,数据平面的受限编程模型将服务限制在简单的启发式方法上,无法处理大规模数据中心网络的复杂交互[75]。另一方面,机器学习(ML)可以一定程度上处理这些复杂的交互[43][52],而且,通过自动决策,机器学习算法可以利用大量网络数据,逐步学习适合特定数据中心的更明智的决策[6][17][42][101][110][123][152][153][172-174][99][131][169]。此外,最近关于拥塞控制[162][169]、数据包分类[99][126][131]和异常检测[106][153]的机器学习工作表明,这些算法比手动编写的启发式算法有更平滑、更准确的决策边界。例如,与现有机制(如 PCC[37]和 QUIC[91])相比,机器学习为拥塞控制提供了更好的针对吞吐量和延迟的平衡。
然而,机器学习通常用于闭环决策系统,因此其反应速度对数据中心的性能和安全性至关重要。例如,如表 1 所示,主动队列管理(例如 RED[45][70]和 DCTCP[5])必须针对每个数据包做出标记/删除的决定。入侵/故障检测和缓解方案(例如,针对重击[148]、微爆[139]、DoS[17][36]以及灰色故障[77][170])必须快速行动,因为即使几微秒的延迟也会造成 PB 级带宽网络中数百万的丢包,从而产生严重的影响。例如,在 SYN-flood 攻击中,每个丢包会在服务器上打开一个新的连接,造成 CPU、内存资源以及网络带宽的不必要的消耗。另一方面,有效的资源分配(例如链接带宽)需要及时对网络流量进行分类[11]。在这些情况下,缓慢的机器学习决策会造成不同后果,但通常会导致次优的行为(例如无法达成安全和服务级别目标),增加的延迟会导致延迟决策,并最终降低机器学习模型的准确性(第 5 节)。
表 1. 网内应用需要的快速反应时间(基于包 packet、微流 flowlet、流 flow 或微秒级突发µburst)。
2.1. 数据面机器学习的限制(Limitations of Data-Plane ML)
最近有许多基于当前交换机抽象(例如 MAT)[136][144][168]以及专门硬件[53]进行网络内机器学习的尝试,然而,这两种方法都有缺陷,因此无法提供线速的逐包机器学习。
2.1.1. 基于 MAT 的推理
基于 VLIW 架构的匹配动作(match-action)抽象,由于缺少指令(尤其是循环和乘法)以及低效的 MAT 流水线,在现代数据平面设备中不足以实现线速机器学习[15]。已经实现的二进制神经网络(基于几十个 MAT)也不够精确[136][144]。同样,用于物联网分类的 SVM[168]被证明在 NetFPGA 参考交换机(一个实验研究平台)上需要消耗额外 8 个表[104][113]。因此,相对于模型质量而言,其资源使用非常大(第 5.1.4 节)。
VLIW 与 SIMD 并行模式的比较。 单指令/多数据(SIMD)的每个指令成本比交换机的 VLIW 模型更便宜。目前在交换机 MAT[15]中使用的 VLIW 模型,每级可以并行执行多个逻辑上独立的指令,可以在包头向量(PHV, packet-header vector)中读写任意位置。这种全对多(all-to-multiple)的输入通信和多对全(multiple-to-all)的输出通信需要大型交换结构,从而限制了每级指令数量。例如,一个 16 并发 VLIW 处理器的控制逻辑是同样强大的 8 个双并发处理器集群的 20 倍[178]。因此,Barefoot Tofino 芯片每级只执行 12 个操作,8、16、32 位操作各 4 个[65]。一个典型的 DNN 层可能需要 72 次乘法和 144 次加法[153],即使乘法被添加到 MAT 中,也需要 18 个阶段(大部分情况下)。
2.1.2. 基于加速器的推理
传统加速器(如 TPU[84]、GPU[119]和 FPGA[44])可以扩展数据平面,作为通过 PCIe 或以太网连接的直连推理引擎。在大多数加速器中,输入是批量的,以提高并行性,较大的批量可以通过更有效的矩阵乘法运算来提高吞吐量。然而,非批量(矩阵向量)处理对于确定性延迟是必要的,否则数据平面的数据包需要在等待批量填充时停滞。此外,增加物理上独立的加速器将消耗交换机端口(浪费收发器和带宽)或需要重复实现交换机功能(如数据包解析或者特征提取的匹配行动规则)。因此,独立的加速器会增加冗余面积,降低吞吐量,并增加更多能耗。
2.2. 控制面机器学习的限制(Limitations of Control-Plane ML)
MAT[108]可以缓存在控制面上计算的推理结果,而不是按数据包执行深度模型。在缓存方案中,具有先前未见特征的数据包将被发送到控制面进行推理,而推理结果将作为流量规则存储在数据面中。然而,不同输入的深度模型(如数据包大小),将被频繁触发昂贵的控制面操作。
由于控制面的网络往返时间以及软件本身的开销,很难避免缓存失效的问题,即使有加速器,也会极大损害模型的准确性。表 2 在矢量 CPU[1]、GPU[119]和 TPU[84]上对一个用于异常检测的 DNN 模型[153]进行非批量推理的延迟进行了基准测试。延迟来自加速器的设置开销(例如 Tensorflow[1]),CPU 延迟最少,但仍需要 0.67ms。最后,由于缓存随着流表的增加而增大[47][90],规则配置时间(TCAM[25]为 3ms)会限制缓存的大小。
表 2. 控制面加速器推理时间。
3. Taurus 架构
Taurus 是用于交换机(和网卡)的新型数据面架构,以线速基于每个数据包运行机器学习模型,并基于模型输出进行转发决策。
系统概要设计。 在支持 Taurus 的数据中心中,控制面收集网络全局视图,并训练机器学习模型以优化安全和交换机级指标。同时,数据面基于模型对每个数据包做出数据驱动决策。与传统基于 SDN 的数据中心不同,控制面在交换机中同时配置了权重和流量规则(图 1)。权重比流量规则更节省空间,例如,匹配基准 DNN(第 5.1.2 节)的动作可能需要 12MB 的流量规则(完整数据集),但权重规则只占 5.6KB,内存用量减少了 2135 倍。使用 Deep Insight[78]等监控框架,控制面可以识别机器学习决策的影响并相应优化权重。
图 1. 逐包机器学习: 训练和推理。主机随机标记数据包,追踪网络中的转发决策和 QoS 指标,以更新权重。
异常检测案例研究。 本节以基于机器学习的异常检测(使用 4 层 DNN[153])作为实际运行的例子引入和介绍 Taurus 数据面流水线的各种逻辑组件(图 2)。当数据包进入交换机时,首先被解析为包头矢量(PHV, 一种固定布局的结构化格式)[15],以提取包头级别的特征(例如,连接时间、传输的字节数以及协议和服务类型)。接下来,交换机通过预处理 MAT 查找域级特征(例如,匹配 IP 地址与自治系统子网,以表明所有权或地理位置),这些特征由控制面发现和配置,并使用 VLIW 动作对头域进行数据整合和增强(第 3.1 节)。然后,一旦 MapReduce 模块在提取的特征上执行完模型(第 3.3 节),Taurus 就通过后处理 MAT 将机器学习模型的输出转化为决策(第 3.2 节)。然后,这一决策被用来调度、转发或丢弃数据包。我们在基于 PISA 的交换机中共享 MAT,以用于预处理和后处理。
图 2. Taurus 异常检测应用逻辑步骤。
3.1. 解析和预处理(Parsing & Preprocessing)
在推理之前,Taurus 通过 MAT 将原始数据包头处理成规范的形式,根据需要添加或修复包级数据。通过交换机处理流水线的有状态元素(即寄存器)汇聚跨包和跨流特征。然后,MAT 将汇聚信息添加到每个数据包元数据中,以增强基于每个数据包的预测。数据预处理也可以使用 MAT 将头域字段转换为机器学习模型的特征。例如,在异常检测例子中,MAT 把特征格式化为定点数,MapReduce 模块决定一个数据包是否正常。
Taurus 通过查找表将分类关系替换为更简单的数字关系。例如,表格将端口数字转换为线性似然值,这样更容易推理[31]。预处理也可以反转取样值所依据的概率分布。对指数分布的变量取对数会产生均匀分布,机器学习模型可以用更少的层来处理[138]。这样的特征工程将负载从机器学习模型转移到设计者身上,精炼特征可以用恒定大小来提高准确性[16][138]。
最后,带内网络遥测(INT, 将测量嵌入数据包)为交换机提供了全局网络状态视图[87]。因此,Taurus 设备不限于利用交换机本地状态进行推理。相反,模型可以通过 INT 检查数据包的整个历史,并通过有状态寄存器检查流量的整个历史,以提升其预测能力(例如,计算整个流量的紧急标志或监测连接持续时间)。
3.2. 后处理和调度(Postprocessing & Scheduling)
MAT 也可以解释机器学习的决策。例如,如果异常检测模型输出 0.9(表明可能的异常数据包),MAT 需要决定如何处理这个数据包,丢弃、标记还是隔离。在 Taurus 中,这些后处理 MAT 将推理与调度联系起来,使用像 PIFO[147]这样的抽象来支持各种调度算法。
机器学习模型将提供概率保证,但我们可以用硬约束来约束其行为,以确保网络稳健运行。控制面将高层次的安全(没有不正确行为)和有效性(最终行为正确)属性编译成交换机的约束,作为后处理流程规则。通过约束机器学习模型的决策边界,数据面可以保证正确的网络行为,而无需复杂的模型验证。
3.3. 用于逐包机器学习推理的 MapReduce(MapReduce for Per-Packet ML Inference)
对于每个数据包来说,通过推理结合清理过的特征和模型权重来做出决定。机器学习算法,例如支持向量机(SVM, support-vector machine)和神经网络,使用矩阵-向量线性代数运算和元素级非线性运算[59][72]。非线性运算让模型学习非线性语义,否则输出将是输入的线性组合。与头处理不同,机器学习运算是非常有规律的,使用许多乘加运算。在单个 DNN 神经元的计算量较大的线性部分中,输入特征分别与权重相乘,然后相加,产生标量值。概括来说,向量到向量(map)和向量到标量(reduce)运算足以满足神经元计算密集型的线性部分。这一点,加上目前交换机架构的局限性,促使我们需要新的数据面抽象,即 MapReduce,该抽象足够灵活,可以表达各种机器学习模型,但又足够定制化,从而允许有效的硬件实现。
3.3.1. MapReduce 抽象
我们的设计利用 MapReduce 的 SIMD 并行性,以廉价的方式提供高计算量。Map 运算是对元素的向量运算,如加法、乘法或非线性运算。Reduce 运算是将元素的向量合并为标量,使用关联运算,如加法或乘法。图 3 显示了如何使用 map 和 reduce 来计算单个神经元(点积),该神经元可以分层组合成大型神经网络。MapReduce 是机器学习模型的一种流行形式,既可以在分布式系统中加速机器学习[22][54][55][57][133],也可以在更精细的颗粒度上加速机器学习[20][21][28][150]。
图 3. 感知机(perceptron)计算图,包括 map、reduce 和激活函数(外循环 map)之间的细分,感知机是一个更大的 DNN 的基本构件。
P4 中的 MapReduce 控制块。 为了给 Taurus 编程,我们在 P4[13][122]中引入了新的专用控制块类型,称为MapReduce
,此外还有用于入口和出口匹配动作计算的控制块。在这个新的控制块中,MapReduce 单元可以用Map
和Reduce
结构来调用。图 4 显示了我们提出的 MapReduce 语法(受到最近提出的 Spatial 语言[88]的启发),实现了一个用于异常检测的例子。最外层的 map 对所有层的神经元进行迭代,而内部的 MapReduce 对每个神经元进行线性运算。最后一个 map 指令应用激活函数(即 ReLU 或 sigmoids)。除了Map
和Reduce
之外,唯一需要的额外结构是数组和带外权重更新。
图 4. P4 中基于 Spatial[88]的 MapReduce 语法,用于异常检测示例的 DNN 层。
3.3.2. 更广泛的应用支持
通过提供通用原语,可以支持一系列比机器学习更广泛的应用(图 5),包括用于数据分析的流处理[18][89],用于大规模分布式训练的梯度聚合[57][97][111][137],以及交换机和 NIC 上的应用[125]。例如,Elastic RSS(eRSS)使用 MapReduce 进行一致性哈希调度数据包和处理器,map 评估处理器的适用性,reduce 选择最近的处理器[134]。MapReduce 还可以支持 sketching 算法,包括用于流量大小估计的 Count-Min-Sketches(CMS)[30]。此外,最近研究表明,布隆过滤器也可以从神经网络中受益,或者被神经网络取代[130]。实质上,Taurus 提供了一个可编程的数据面抽象(MapReduce),与现有的数据面抽象(即 MAT)相比,可以更有效(在硬件资源使用和性能方面,第 5 节)的支持大量应用。
图 5. 机器学习应用(上层)映射到模型和更简单的原语,然后编译到 MapReduce。其他应用(右)直接映射到 MapReduce。
4. Taurus 实现
图 6 显示了 Taurus 设备的完整物理数据面流水线,包括数据包解析控制块、MapReduce 机器学习、基于 MAT 的数据包转发、调度以及非机器学习数据包的旁路。Taurus 数据包解析器、预/后处理 MAT 和调度器基于现有硬件实现[15][56][147]。我们将 Taurus 的 MapReduce 模块建立在 Plasticine[127]上,这是一个由计算和存储单元组成的粗粒度可重配阵列(CGRA, coarse-grained reconfigurable array),可重新配置以匹配应用程序数据流图。然而,Plasticine 最初是用于设计独立的加速器,而我们需要在网络中运行延迟优化的流媒体结构。
MapReduce: 计算单元(Compute Unit, CU)。 每个计算单元(CU,图 8)由功能单元(FU, functional unit)组成,按通道(lane) 和阶段(stage) 组织,分别或者同时执行 map 和 reduce。在一个 CU 阶段内,所有通道执行相同的指令,并读取相同的相对位置。CU 在各阶段之间有流水线寄存器,因此每个 FU 在每个周期都是活跃的,流水线也在 CU 之间的较高层次上发生。
由于该结构需要作为全交换 ASIC 的一部分运行,因此资源效率是关键。我们使用定点低精度硬件来执行机器学习算法中线性代数所需的算术运算。与浮点运算相比,定点硬件速度更快,面积更小,而且功耗更低。此外,我们定制了 CU 中通道与阶段的比例,以适应应用空间的最低要求。对设计空间探索过程的完整解释见第 5 节。
MapReduce: 内存单元(Memory Unit, MU)。 接下来,我们重点关注内存访问速度。如果想对每个数据包做决策,就需要快速检索机器学习模型中的权重。基于 SRAM 操作可以在单周期内完成,所以我们只用片上存储器。由于 DRAM 访问需要 100 个周期,因此我们取消了 DRAM 控制器。虽然这限制了 Taurus 可以支持的模型大小,但可以在 1GHz 时钟下确保纳秒级延迟。我们使用堆叠的 SRAM 作为内存单元(MU),像棋盘一样与 CU 穿插在一起,用于存储机器学习模型的权重(图 7)。该设计也能支持粗粒度流水线,其中 CU 执行运算,MU 充当流水线寄存器。
每个 CU 内的多级流水线和互连流水线保证了 1GHz 的时钟频率,这是匹配高端交换机硬件线速的关键因素[15][147][4]。
[4] Taurus 中的 CU 和 MU 架构目前支持密集机器学习模型,但也可以被扩展以支持稀疏线性代数[135],这是我们未来的工作。
预/后处理 MAT。 通过 MAT(VLIW)进行数据清理,使用 MapReduce(SIMD)进行推理,Taurus 结合了不同的并行模式,建立了快速而灵活的数据面流水线。MAT 通过相同的 PHV 接口与 MapReduce 模块相连,PHV 接口用于连接流水线中其他阶段。只有包含特征的 PHV 的一部分进入 MapReduce 模块,而其他头域则直接进入后处理 MAT,如图 7 所示。
图 6. Taurus 修改后的数据面流水线,包括非机器学习数据包的旁路路径。预处理 MAT 根据 PHV 的元数据决定是否绕过机器学习,轮询(RR, round-robin)选择器仲裁哪条路径连接到后处理 MAT。
图 7. Taurus MapReduce 模块与流水线其余部分的接口。
图 8. 三级 CU,由功能单元(FU, functional unit)和流水线寄存器(PR, pipeline register)组成。第三阶段支持 map 和稀疏 reduce。
非机器学习流量旁路。 对于不需要机器学习推理的数据包,Taurus 直接将其转发到后处理 MAT,绕过了 MapReduce(图 6)。它将传统交换机的单一、大型包队列[15]分成三个子队列: 预处理 MAT、MapReduce 模块和后处理 MAT。根据这些模块的流水线深度,按比例分配流量。预处理 MAT 将机器学习数据包转发到 MapReduce 模块(PHV 在该模块中处理),包体被排入相应队列,而非机器学习数据包则直接发送到后处理 MAT,不会产生任何额外延迟。此外,数据包的非特征头也按照旁路路径进入后处理 MAT,只有必要的特征头作为密集 PHV 才会进入 MapReduce 模块(以最小化稀疏数据的出现)。
目标无关的优化。 MapReduce 的通用性足以支持与目标无关的优化,即考虑可用执行资源(并行化系数、带宽等)的优化,而不考虑特定硬件的设计细节[128][176]。并行化 MapReduce 程序在空间上展开循环,如果有足够的硬件资源,一个模型可以在每个周期执行一次迭代。由于循环的展开是在编译时进行的,Taurus 可以保证确定性的吞吐量: 要么是线速性能,要么遵循已知系数。在交换机中由于回流[15],或者在数据中心网络中由于链路超额订阅[62][118],原有线速都会以某个静态系数下降。
除了面积之外,由于交换机必须在数百纳秒内转发数据包,因此延迟也限制了交换机级的机器学习。延迟随着深度的增加而增加,所以数据中心 SLO 有效限制了模型的层数。通过用 MAT 预处理特征,可以用更少的层数和更少的延迟提供足够的准确性: 模型只需要学习特征间的关系,而不用考虑包头与特征的映射。
依赖目标的编译。 各种编程语言都支持 MapReduce[71][109][121][155]。为了支持基于 SIMD 的结构,我们使用 Spatial[88]的修改版对 Taurus 的 MapReduce 模块进行编程,Spatial 是一种基于并行模式的特定领域语言(DSL),将 MapReduce 程序表示为一连串嵌套循环,支持与目标相关的优化,也支持与目标无关的 Taurus 优化。程序被编译成流式数据流图,在这一层次结构中,最内部的循环是一个 CU 内的 SIMD 操作,外部循环被映射到多个 CU。然后,过大的模式(那些需要太多计算阶段、输入或内存的模式)被分割成适合 CU 和 MU 的较小模式,这对于映射具有长基本块(即没有分支的长代码序列)的非线性函数很有必要。最后,得到的图通过 MapReduce 模块的互连结构进行路由。
5. 演进
5.1. Taurus ASIC 分析
我们首先通过分析其功率和面积来检查 MapReduce 模块(第 5.1.1 节),然后通过编译几个最近提出的网络机器学习应用来评估其性能(第 5.1.2 节)。接下来,使用常见的机器学习组件来证明其灵活性,这些组件可以被组成表达各种算法(第 5.1.3 节)。最后,我们将其与现有的纯 MAT 的机器学习实现进行比较(第 5.1.4 节)。
5.1.1. 设计空间探索(Design Space Exploration)
Taurus 的 MapReduce 模块是参数化的,包括精度、通道数和阶段数。我们通过 ASIC 合成和 FreePDK15(一个预测性的 15ns 标准单元库[12])来估算 Taurus 的面积和功率,还使用 CACTI 7.0[9]来估算存储器面积。为了指导评估,我们最大限度的减少面积、功率和延迟,同时以全模型精度(即无量化损失)和每包吞吐量为目标。
*定点精度。 对于机器学习推理来说,在同等精度下,定点运算比浮点运算要快[67][84]。Taurus 使用 8 位精度,其已经被证明足以用于推理(压缩模型使用的位数更少)[34][100][160]。表 3 中我们可以看到,对于各种 DNN 来说,量化误差(使用 TensorFlow Lite [61][81])可以忽略不计。最小精度损失和 4 倍的资源节约(表 4)证明我们降低精度的架构是有用的。
通道数。 理想情况下,一个 CU 中的通道数与可用的向量(SIMD)并行量相匹配。如果提供的通道太少,一个向量操作将不得不在多个 CU 之间进行映射,增加所需的控制逻辑,降低了效率。同样,提供超过向量并行量的通道会导致一些通道被闲置,因为 CU 只能在一个向量上执行操作。图 9 显示,原始面积效率(每 FU 的面积)随着通道数量的增加而增加。
图 9. 各种 CU 配置(通道和阶段)的每个 FU 的面积和功耗。
异常检测 DNN[153]是需要线速运算的最大模型,所以我们用它来设定理想的通道数。DNN 的最大层有 12 个隐藏单元,因此最大的点积计算涉及 12 个元素,16 通道配置在一个 CU 内完全展开点积,同时最大限度减少利用率的不足。目前,16 通道的配置平衡了面积开销、功率和 map 效率,但随着数据面机器学习模型的发展,最佳通道数可能会发生变化。由于 MapReduce 程序与硬件无关,编译器将根据需要处理展开系数的差异(即 CU 内与跨 CU 的并行性)。
阶段数。 我们进行了类似研究来量化 CU 的阶段数对准确性的影响。内积(大多数模型背后的线性运算)使用两个阶段: 一个 map(乘法)和一个 reduce(加法),而非线性运算使用一连串的 map。因此,我们研究阶段数对非线性运算的影响。图 10 显示了使用不同深度的 CU 实现各种激活函数所需的总面积(CU 数与面积的乘积)。此外,对于浅层激活函数(如 ReLU),后面的阶段没有被映射,导致面积随着阶段的增加而增加。理论上,更多的阶段更有效率(图 9),并且通过上下文合并可以让编译器映射更复杂的激活函数[177]。然而,内积和 ReLU 微基准(它们构成了许多普通网络的核心)只受益于两个阶段。因此,我们在最终的 ASIC 设计中选择了四个计算阶段来支持这两者。
图 10. 随着阶段数的变化,激活函数所需的面积,所有运算都在线速(1GPkt/s)下进行。
最终 ASIC 配置。 最终的 CU 有 16 个通道、4 阶段以及一个 8 位定点数据路径。包括路由资源[176]在内,需要 0.044 mm2(平均每个 FU 680 µm2)。每个 MU 有 16 组,每组 1024 个条目,包括路由资源在内消耗 0.029 mm2。总的来说,我们提供 12×10 的网格,CU 和 MU 的比例为 3:1,占用 4.8 mm2。考虑有 4 个可重配流水线的交换机,每个流水线有 32 个 MAT,50%的芯片面积被 MAT 占用[86]。而且,每条流水线增加一个 MapReduce 模块会使总芯片面积增加 3.8%,一个相同面积的设计会使每条流水线减少 3 个 MAT。与我们可以支持的程序类型相比,这是一个可以忽略不计的开销(第 5.1.2 节)。Taurus 的 ASIC 参数基于目前使用的应用和功能,对于新的模型来说,新的参数可能提供更大的效率。
5.1.2. 应用基准测试(Application Benchmarks)
我们用 4 个机器学习模型[106][153][168][169]评估 Taurus。第一个是物联网流量分类,基于 11 个特征和 5 个类别实现了 KMeans 聚类。第二个是基于 SVM[106]的异常检测算法,有 8 个从 KDD 数据集[2][36]中选出的输入特征和一个径向基函数来模拟非线性关系。第三个是基于 DNN 的异常检测算法,需要 6 个输入特征(也是 KDD 子集),有 12、6 和 3 个隐藏单元的层[153]。最后是基于 LSTM 的在线拥堵控制算法(Indigo [169]),使用 32 个 LSTM 单元和一个 softmax 层,被设计为在终端主机网卡上运行。虽然 Indigo 不是按包计算,但其更新间隔明显低于 Taurus,从而能够实现更准确的控制决策和更快的反应时间。
面积与功率。 表 5 显示了相对于现有带有 PISA 流水线[15]的可编程交换 ASIC[5]的面积和功率,只考虑执行有用工作的 CU 和 MU 的数量。因此,这些基准测试所用原型的实际面积是最大基准面积,禁用了较小基准的未使用 CU。如基于 SVM 的异常检测这样的简单模型,只有 0.2%的面积开销和 0.3%的功率开销。因此,我们设定 Taurus 的 MapReduce 模块面积为 4.8 mm2,与最近提出的交换结构增加的面积相似(例如,CONGA[4]和 Banzai[146]分别消耗 2%和 12%的额外面积)。如果只支持较小的模型,KMeans、SVM 和 DNN 将只增加约 0.8%的面积和 0.9%的功率。对于 16 位和 32 位的数据路径,面积和功率都将分别增加约 2 倍和 4 倍。
[5] 由于台积电的光罩限制为 858 mm2[142],64×100 Gb/s 交换芯片的尺寸为 500-600 mm2。
表 5. 几种应用模型的性能和资源开销。开销是相对于具有 4 个可重配流水线的 500 mm2 芯片计算的[65],该系统在以 1 GPkt/s 线速运行时预计功耗为 270W[3][19][114]。
延迟和吞吐量。 KMeans、SVM 和 DNN 每周期(线速)处理一个数据包头,其延迟保持在纳秒范围内(表 5)。假设数据中心交换延迟为 1 μs[35],KMeans、SVM 和 DNN 分别增加了 6.1%、8.3%和 22.1%的延迟。在软件实现中,Indigo LSTM 每 10 毫秒运行一次(可能是受 LSTM 的计算要求限制),大大改善了应用层的吞吐量和延迟[169]。在 Taurus 中,Indigo 可以每 805 ns 产生一个决策,从而使得 LSTM 网络可以对负载的变化做出更快速的反应,并更好的控制尾部延迟,数据旁路也能够避免增加非机器学习数据包的延迟。
5.1.3. 微基准(Microbenchmarks)
较小的数据流应用可以组成一个大应用,例如,图 11 显示了由几个(线性)感知器层与非线性激活函数融合而成的 DNN。这些微观基准是一般的构建模块,旨在展示可编程的、基于 MapReduce 的结构的多功能性。线性函数包含 reduce 网络,能够限制免通信并行的程度。相反,非线性函数由于相邻的数据元素之间没有互动,可以完美实现 SIMD 并行化。例如,如果 16 个不同的感知器的输出被输入到 ReLU,我们只需将 ReLU 映射到 16 个输出上,然后就可以并行计算。表 6 显示了每个微基准在以线速运行时所需的面积和延迟。
线性运算。 线性微基准是由一个具有 8 个输出和 2 个内核维度的一维卷积(经常用于寻找空间或时间上的相关性[94])和一个 16 元素的内积组成的,构成了感知器神经网络、LSTM 和 SVM 的核心。由于卷积不能很好的映射到向量 MapReduce 中(有多个小的内积),需要 8 倍的展开和大量芯片面积。然而,内积只在一个 CU 中以线速运行,可以被有效组成高性能深度神经网络。一个 16 通道的 CU 执行一个 MapReduce 的最小延迟是 5 个周期: 1 个周期用于 map,4 个周期用于 reduce,每个 reduce 周期处理不同片段(图 8)。其余延迟来自于数据从输入到 CU 再到输出的移动,Taurus 每次移动数据大约需要 5 个周期,这是空间分布式数据流的结果。
展开(Unrolling)。 基于 MapReduce 与目标无关的优化,大型机器学习模型可以在多个周期内运行,并相应的降低线速(表 7)。展开内循环和外循环将实现更高的吞吐量和更低的延迟,同时消耗更多的面积。然而,并不是所有基准都可以展开其外循环的,例如,内积就没有外循环。迭代(即基于循环的)卷积以 1/8 的线速运行,展开它以满足线速会导致面积增加 8 倍。
表 7. 展开因子为 1 到 8 的微基准的吞吐量和面积比例。
非线性运算。 激活函数对于学习非线性行为是必要的,否则整个神经网络会崩溃成单一线性函数。每个激活函数都有不同的用途: LSTM 使用 tanh 进行门控[73],而 DNN 使用更简单的 ReLU 和 Leaky ReLU[112]。最有效的函数(ReLU 和 Leaky ReLU)不需要查找表(LUT, lookup table),只需要 CU。更复杂的函数,包括 sigmoid 和 tanh,有几个版本: 泰勒级数(Taylor series)、分片逼近(piecewise approximations)和 LUT[67][161],泰勒级数和分片逼近需要 2-5 倍的面积。基于 LUT 的函数需要更多内存,每个表通过将预先计算的输出值存储为 1024 个 8 位条目来近似模拟激活函数[67][161],即使在复制时,也需要消耗交换内存的一小部分。
5.1.4. 与只有 MAT 的机器学习设计的比较
正如第 5.1.1 节所述,最终 Taurus ASIC 有 4 条流水线,每条流水线有一个 MapReduce 模块,消耗了 3.8%的额外芯片面积(或者说相当于每个 MapReduce 模块等价于 3 个 MAT 的面积)。相比之下,只有 MAT 的神经网络(NN)实现[144][168]需要消耗 10 个 MAT。例如,N2Net(一个二进制神经网络实现),每层至少需要 12 个 MAT[144],总共需要 48 个 MAT 来支持异常检测 DNN[153],而 Taurus 只需要 3 个。同样,如果用 IIsy 框架[168]在 MAT 上实现非神经网络算法,SVM 和 KMeans 分别消耗 8 和 2 个 MAT,而相应的 Taurus ASIC 只需要 0.5%的芯片面积(或 1 个 MAT)。N2Net 和 IIsy 都提供了将机器学习算法映射到 MAT 的独特方法,然而为了使数据面机器学习无处不在,我们需要为网络提供更有效的机器学习硬件。