摘要:
特斯拉的全自动驾驶 (FSD) 系统是世界上第一台专用自动驾驶的高要求工作负载的计算系统。它基于一个新系统将 CPU、ISP 和 GPU 等行业标准组件集成在一起的芯片 (SoC),使用特斯拉的定制神经网络加速器。
FSD 计算机能够处理高达每秒 2300 帧,比特斯拉之前的硬件提升了 21 倍,而且成本更低,最重要的是,它的性能在得到充分利用时,可在道路上实现更高水平的安全性和自主性。
特斯拉全自动驾驶(FSD)平台和芯片目标
特斯拉全自动驾驶的主要目标是将(FSD) 计算机打造成一个用于当前和未来的数据处理的硬件平台与全自动驾驶相关的需求。
此外,特斯拉的(FSD)系统在2016年10月份以来生产的任何特斯拉汽车中都引入了形式上的主要限制因数和热包络线,以适应冷却能力有限的旧车。
FSD计算机的核心是世界上第一个专为自动驾驶的芯片。我们为神经网络推理提供了72个TOP的硬件加速器,批处理大小为1的初始工作负载的利用率超过80%。我们还包括一组用于控制需要的CPU、ISP、GPU和用于各种预处理的视频编码器以及后处理需求。所有这些都紧密集成,以满足每个芯片低于40瓦的极具攻击性的TDP。
图1。FSD计算机,具有两个特斯拉FSD芯片,采用双配置,包括摄像头等传感器。
该系统包括两个独立启动并运行独立操作系统的FSD芯片实例。这两种情况还允许独立的电源和传感器,以确保系统的异常安全水平。如图1所示的计算机满足与旧硬件的形式、配合和接口级兼容性。
FSD芯片
FSD芯片是一个260平方毫米的芯片,拥有约2.5亿个栅极或60亿个晶体管,由三星采用14纳米FinFet技术制造。如图2所示,芯片封装在37.5毫米 37.5毫米倒装芯片BGA封装中。该芯片符合AEC-Q100 2级可靠性标准
图2(a)显示了芯片中的主要模块。我们从头开始设计了两个神经网络加速器(NNA)实例,并为系统的其余部分选择了行业标准IP,如A72 CPU、G71 GPU和ISP。休息芯片的未标记区域由外围设备组成,NOC结构和内存接口。每个NNA有32-MBSRAM和96*96 MAC阵列。在2GHz时,每个NNA提供36个顶部,FSD芯片总计72个顶部。
FSD SoC,如图所示在图2(b)中,提供了通用CPU运行大多数自动驾驶仪算法。
每隔几毫秒,新的输入帧通过dedi定位的图像信号处理器接收,在存储到DRAM之前进行预处理。一旦主内存中有了新的帧,CPU就会指示NNA加速器开始处理它们。加速器控制数据和参数流到它们的本地SRAM,以及流回的结果直截了当地说。一旦得到相应的结果帧已经发送到DRAM,加速器触发一个中断返回到CPU复合体。GPU可用于任何后处理可能需要NNA加速器不支持的算法的任务。
图2。(a) 主要模块的FSD芯片模具照片。(b) SoC框图。
芯片设计方法
我们的设计方法是为满足积极的开发时间表而定制的。为此,我们决定构建一个定制加速器,因为它提供了比上一代产品更高的性能和功耗。我们使用了可用的硬IP或软IP该技术节点用于剩余的SoC块,以减少开发进度风险。
我们混合使用了行业标准工具和用于广泛应用的开源工具,如verilator模拟我们的设计。Verilator模拟特别适合长时间的测试(例如运行整个神经网络),其中他们放弃了比商业模拟器高出50的加速比。另一方面,verilator下的设计比较缓慢,因此我们依赖用于快速周转的商用模拟器并在RTL开发阶段进行调试。除了模拟,我们还广泛使用硬件仿真器,以确保高度的SoC的功能验证。
对于加速器的定时关闭,我们设定了一个非常积极的目标,大约比最终装运频率2 GHz高25%。这使得设计运行远低于Vmax,在我们的功率预算内提供最高的性能,正如硅表征后测量的那样。
神经网络加速器设计动机
神经网络加速器
设计动机
自定义NNA用于检测预先定义的一组对象,包括但不限于车道线、行人、不同类型的车辆,帧速率非常高,功率预算适中,如平台目标所述。
图3。初始网络、卷积循环和执行配置文件
图3显示了一个典型的初始卷积神经网络。1,2网络有许多层和连接,指示通信数据流或激活。每个通过这个网络的过程都涉及到一个图像,以及在每一层之后依次构建的各种功能或激活。在最后一层之后检测到对象。
如图3所示,98%以上的操作属于卷积。卷积算法由七个深嵌套循环组成,如图3所示。最内层循环中的计算是一种乘法累加(MAC)操作。因此,我们设计的主要目标是尽可能快地执行大量MAC操作,同时不增加功率预算。
按数量级加快卷积将导致量化或池化等操作的频率降低,如果这些操作的性能显著降低,则它们将成为整体性能的瓶颈。这些行动还使用专用硬件进行了优化,以提高整体性能。
卷积重构与数据流
图4。卷积重构和数据流。
卷积循环,经过一些重构,如图4(a)所示。仔细检查表明这是一个令人尴尬的平行有很多机会处理问题并行的MAC操作。在卷积中循环中MAC操作的执行三个最里面的循环,它们决定了每个点积的长度在很大程度上是连续的。但是,在三个外部循环,即对于每个图像,对于每个输出通道,用于每个输出中的所有像素通道,是可并行的。但这仍然是一个艰难的过程由于内存带宽过大而导致的问题需求和功率的显著增加消费支持如此之大的平行计算因此,在本文的其余部分,我们将主要关注这两个方面。
首先要注意的是,并行处理多个图像对我们来说是不可行的。出于安全考虑,我们不能等待所有图像到达后启动计算,因为这会增加目标检测的延迟。我们需要在图像到达后立即开始处理它们。相反,我们将跨多个输出通道和每个输出通道内的多个输出像素并行计算。
图4(a)显示了重构卷积循环,优化了数据重用以降低功耗并提高实现的计算带宽。我们合并每个输出通道的两个维度,并以行主形式将它们展平为一维,如步骤(2)、图4(a)所示。这提供了许多并行的输出像素,而不会丢失所需输入数据的局部连续性。
我们还将循环切换为迭代每个输出通道内的像素,如图4(a)的步骤(2)和(3)所示。对于一组固定的输出像素,我们首先在输出通道的子集上迭代,然后再移动到下一组输出像素以进行下一次传递。一个这样的过程,将输出通道子集内的一组输出像素组合起来,可以作为并行计算形成。我们继续这个过程,直到在输出通道的第一个子集中耗尽所有像素。一旦所有像素耗尽,我们将移动到下一个输出通道子集并重复该过程。这使我们能够最大限度地实现数据共享,就像所有输出通道内相同像素集的计算使用相同的输入数据。
图4(b)–(d)也说明了数据流通过上面的卷积重构层连续图像的相同输出像素输出通道通过共享输入激活和连续输出像素在同一输出通道内计算通过共享输入权重。这种分享点积计算的数据和权重有助于利用大型计算带宽,同时通过最小化移动数据的负载数量来降低功耗围绕。
计算方案
图5。计算方案。
最后一节中描述的重构卷积算法适用于具有数据流的计算方案,如图5所示。一个缩小的版本的物理96×96 MAC阵列显示在中间为简洁的空间,其中每个单元由一个单位实现MAC操作与一个单周期反馈回路。顶部和左侧的矩形网格是虚拟的,表示数据流。顶部网格(此处称为数据网格)显示了96个数据元素的缩小版本在每行中,左侧网格(此处称为权重网格)显示每列中96个权重的缩小版本。数据网格和权重网格的高度和宽度等于点积的长度。
计算过程如下:数据网格的第一行和权重网格的第一列分别以流水线方式在几个周期内跨MAC阵列的所有96行和96列广播。每个小区使用广播数据和本地权重计算MAC操作。在下一个周期中,以流水线方式广播数据网格的第二行和权重网格的第二列,并且类似地执行每个小区中的MAC计算。此计算过程将继续,直到数据和权重网格的所有行和列都已广播,并且所有MAC操作都已完成。因此,与许多其他处理器中实现的脉动阵列计算不同,每个MAC单元在MAC阵列中本地计算点积而不移动数据。3,4这导致比脉动阵列实现更低的功率和更少的单元面积。
当所有MAC操作完成时,累加器值准备向下推送到SIMD单元进行后处理。这将创建第一个96输出片,如图5所示。后处理通常涉及量化操作,在96宽SIMD单元中执行。96宽SIMD单元的带宽与每个输出通道相关的96元素累加器输出相匹配。MAC阵列中的累加器行以每周期一行的速率下移到SIMD单元。从物理上讲,累加器行每八个周期仅移动一次,一组八个。这大大降低了移动累加器数据所消耗的功率。MAC引擎的另一个重要特性是MAC和SIMD操作的重叠。当累加器值被下推到SIMD单元进行后处理时,在MAC阵列中立即开始下一次卷积运算。这种重叠计算提高了计算带宽的总体利用率,避免了死循环。
设计原则和指令集
建筑学
上一节描述了计算的数据流。对于控制流,我们关注简单性和电源效率。在现代无序CPU和GPGPU 5–7上执行的平均应用程序会消耗计算单元之外的大部分能量来移动指令和数据,并消耗昂贵的结构(如缓存、寄存器文件和分支预测器)。8此外,此类控制结构还引入了显著的设计复杂性。我们的目标是设计一台计算机,在这种计算机中,几乎所有挥霍的控制结构都被消除,工作负载的执行将所有精力都花在对性能最重要的事情上,即MAC引擎上。为此,我们实现了一个非常灵活但非常熟练的状态机,其中所有昂贵的控制流都内置到状态机中,例如循环构造和融合。
另一个非常重要的性能和功耗优化功能是在卷积流期间消除DRAM读写。对于推断,每个层的输出数据由相关层使用,并且可以被覆盖。加载初始激活数据集后,该机器完全通过嵌入计算引擎本身的SRAM进行操作。
本设计理念在最后一节中概述。对于具有粗粒度可编程性的柔性状态机,我们权衡了需要昂贵控制结构的细粒度可编程性。状态机驱动的控制机制有助于形成一个非常紧凑但强大且灵活的ISA。只有七条主指令,以及各种附加控制字段,用于设置状态机以执行不同的任务:数据进出SRAM(DMA读取和DMA写入)、点积(卷积、反卷积、内积)和纯SIMD(缩放、ELTWISE)。
数据移动指令的长度为32字节,对源地址和目标地址、长度和依赖标志进行编码。计算指令长256字节,对输入地址进行编码,最多可编码三个张量(输入激活和权重或两个激活张量、输出结果)、张量形状和依赖标志。它们还对各种参数进行编码,这些参数描述了计算的性质(填充、跨步、扩展、数据类型等)、处理顺序(行优先或列优先)、优化提示(输入和输出张量填充、预计算状态机字段)、融合操作(缩放、偏移、池)。所有计算指令后面都可以跟有数量可变的SIMD指令,这些指令描述了在所有点积输出上运行的SIMD程序。因此,点积层(卷积、反卷积)可以通过简单的运算(量化、缩放、ReLU)或更复杂的数学函数(如Sigmoid、Tanh等)进行融合。
网络程序
加速器可以同时执行DMA和计算指令。在每种类型中,指令都是按顺序执行的,但可以在它们之间重新排序以实现并发性。生产者/消费者排序使用显式依赖标志进行维护。
图6。典型网络程序
典型程序如图6所示。该程序从几个DMA读取操作开始,将数据和权重带入加速器的SRAM。解析器将它们插入队列,并在第一条计算指令处停止。一旦挂起的计算指令的数据和权重在SRAM中可用,就会设置它们相应的依赖标志,并且计算指令可以开始与其他排队的DMA操作并行执行。
依赖标志用于跟踪数据可用性和缓冲区使用情况。如图6所示,在步骤6中运行的DMA覆盖了由前面的卷积(步骤5)产生的一个缓冲区。因此,在卷积结束时清除其目标标志(F0)之前,它不能开始执行。然而,使用不同的目标缓冲区和标志将允许运行中的DMA与前面的卷积并行执行
我们的编译器采用Caffe格式的高级网络表示,并将其转换为类似于图6中的指令序列。它分析计算图,并根据数据流、融合或分区层对其进行排序,以匹配硬件功能。它为中间结果和权重张量分配SRAM空间,并通过依赖标志管理执行顺序
NNA微体系结构
图7。NNA微体系结构。
如图7所示,NNA围绕两个主要数据路径(dot product engine和SIMD unit)和状态机进行组织,状态机解释程序、生成内存请求流,并控制数据路径内外的数据移动。
点积引擎
如“计算方案”部分所述,点积引擎是一个96个MAC单元阵列。每个单元接受两个8位整数输入(有符号或无符号),并将它们相乘,将结果添加到30位宽的本地累加器寄存器中。有许多处理器使用单精度或半精度浮点(FP)数据和推理权重部署浮点运算。我们的integer MAC compute具有足够的范围和精度,能够以所需的精度执行所有特斯拉工作负载,并且与使用FP算法的计算相比,其功耗低一个数量级。
在每个周期中,阵列接收两个向量,每个向量96个元素,并将第一个向量的每个元素与第二个向量的每个元素相乘。结果将就地累积,直到dot产品序列结束,然后卸载到SIMD引擎进行进一步处理
每个累加器单元围绕两个30位寄存器构建:累加器和移位寄存器。一旦计算序列完成,点积结果被复制到移位寄存器中,累加器被清除。这允许结果通过SIMD引擎移出,而下一个计算阶段在点积引擎中开始
单指令多数据单元
SIMD单元是一个96宽的数据路径,可以执行全套算术指令。它从点积引擎(一个累加器行)一次读取96个值,并作为指令序列(SIMD程序)执行后处理操作。SIMD程序无法直接访问SRAM,且不支持流量控制指令(分支)。对从MAC阵列卸载的每组96个值执行相同的程序。
SIMD单元可通过具有各种数据类型、8位、16位和32位整数以及单精度浮点(FP32)的丰富指令集进行编程。指令集还为控制流提供条件执行。输入数据始终为30位宽(强制转换为int32),最终输出始终为8位宽(有符号或无符号int8),但中间数据格式可能不同于输入或输出
由于大多数常见的SIMD程序都可以用一条称为FusedReLu(FusedQuantization,scale,ReLU)的指令来表示,因此指令格式允许将任何算术运算与移位和输出运算相融合。FuseDelu指令是完全流水线的,允许96点产品引擎在96个周期内卸载。更复杂的后处理序列需要额外的指令,从而增加了点积引擎的卸载时间。一些复杂序列是由FP32指令和条件执行构建的。30位累加器值在此类SIMD程序开始时转换为FP32操作数,FP32结果在SIMD程序结束时转换回8位整数输出
联合支持
在SIMD单元中进行后处理后,输出数据也可以有条件地通过池单元进行路由。这允许最频繁的小型内核池操作(2和3)在SIMD执行的阴影下执行,与生成数据的早期层并行。池硬件实现对齐器,将重新排列以优化卷积的输出像素对齐回原始格式。池单元有三个96字节96字节池阵列,具有字节级控制。较不频繁的较大内核池操作在dotproduct引擎中作为卷积层执行。
记忆组织
NNA使用32-MB本地SRAM存储权重和激活。为了同时实现高带宽和高密度,SRAM使用许多相对较慢的单端口组来实现。每个周期可以访问多个这样的存储组,但为了保持较高的单元密度,不能在连续周期中访问存储组
SRAM通过两个独立的读取端口(256字节和128字节宽)每个周期可提供多达384字节的数据。仲裁器对来自多个来源(权重、激活、程序指令、DMA输出等)的请求进行优先级排序,并通过两个端口对它们进行排序。来自同一来源的请求不能被重新排序,但是来自不同来源的请求可以被优先排序以最小化银行冲突
在推理过程中,权重张量始终是静态的,可以在SRAM中布局,以确保有效的读取模式。对于激活,这并不总是可能的,因此加速器将最近读取的数据存储在1-kB的缓存中。这有助于通过消除相同数据的背对背读取来最小化SRAM组冲突。为了进一步减少银行冲突,加速器可以使用网络程序提示的不同模式填充输入和/或输出数据。
控制逻辑
如图7所示,控制逻辑分为几个不同的状态机:命令序列器、网络序列器、地址和数据序列器以及SIMD单元
每个NNA可以将多个网络程序排队并按顺序执行。命令序列器维护此类程序的队列及其相应的状态寄存器。一旦网络运行完成,加速器就会触发主机系统中的中断。在其中一个CPU上运行的软件可以检查完成状态,并重新启用网络以处理新的输入帧。
网络定序器解释程序指令。如前所述,指令是长数据包,编码足够的信息以初始化执行状态机。Network Sequencer对该信息进行解码并将其引导到适当的使用者,强制执行依赖项并同步机器,以避免生产者和使用者层之间的潜在竞争条件。
一旦一条计算指令被解码并引导到其执行状态机,地址序列器就会为下游的计算生成SRAM地址和命令流。它将输出空间划分为最多96个元素的部分,并且对于每个这样的部分,它将通过相应点积的所有项进行排序。
权重数据包在SRAM中预先排序以匹配执行,因此状态机只需将它们以96个连续字节的组进行流式处理。然而,激活并不总是来自连续的地址,它们通常必须从多达96个不同的SRAM位置收集。在这种情况下,地址序列器必须为每个数据包生成多个加载地址。为了简化实现并允许高时钟频率,96个元素的数据包被划分为12个片段,每个片段8个元素。每个片由单个加载操作提供服务,因此其第一个和最后一个元素之间的最大距离必须小于256字节。因此,通过发出1到12次独立的加载操作,可以形成96次激活的数据包。
负载数据与控制信息一起转发到数据定序器。权重在预取缓冲区中捕获,并根据需要发送给执行。激活存储在数据缓存中,从中收集96个元素并发送到MAC阵列。数据路径的命令也从数据序列器中导入,控制执行启用、累加器移位、SIMD程序启动、存储地址等。
图8。实现的利用率与MAC阵列维度
SIMD处理器对从MAC阵列卸载的每组96个累加器结果执行相同的程序。它由地址序列器内生成的控制信息进行同步,它可以解码、发出和执行SIMD算术指令流。虽然SIMD单元有自己的寄存器文件,并控制数据路径中的数据移动,但它不控制存储结果的目标地址。当地址序列器选择要处理的96 96输出片时,它会生成存储地址和任何池控制。
架构决策和结果
在实现我们的MAC阵列和SIMD处理器等非常广泛的机器时,主要关注点总是与其工作时钟频率有关。高时钟频率使实现目标性能更容易,但它通常需要一些逻辑简化,这反过来又会损害特定算法的利用率。
我们决定对具有大量输入和输出通道的深卷积神经网络进行优化设计。SRAM每个周期向MAC阵列提供的192字节的数据和权重只能完全用于跨距为1或2的层,而跨距较高的层往往利用率较低。
加速器的利用率可能会因MAC阵列的大小和形状而显著不同,如图8所示。inception-v4和特斯拉视觉网络都对MAC阵列的高度非常敏感。虽然同时处理更多的输出通道可能会影响总体利用率,但由于它们共享相同的输入数据,因此这种能力相对便宜。增加阵列的宽度不会对利用率造成太大的影响,但它需要大量的硬件资源。在我们选择的设计点(96 MAC阵列),这些网络的平均利用率略高于80%。
我们必须评估的另一个权衡是SRAM的大小。神经网络的规模越来越大,所以尽可能多地添加SRAM可能是一种未来验证设计的方法。然而,更大的SRAM将增加芯片的流水线深度和总面积,从而增加功耗和系统的总成本。另一方面,一个太大而无法装入SRAM的卷积层总是会被分解成多个较小的组件,这可能会为向DRAM溢出和填充数据付出一些代价。根据我们当前网络的需求和中期扩展预测,我们选择了每个加速器32 MB的SRAM。
结论
特斯拉的FSD计算机比我们以前的硬件中使用的商用解决方案提供了卓越的21性能提升,同时降低了成本,所有这些都需要适度的25%额外功率。这一水平的性能是通过毫不妥协地坚持我们最初的设计原则实现的。在每一步中,我们都通过高度的数据重用和对控制流的最低限度设计来最大限度地利用可用的计算带宽。该FSD计算机将是推进FSD特征集的基础。
从这项工作中学到的关键是效率和灵活性之间的权衡。具有固定功能硬件的定制解决方案提供最高的效率,而完全可编程的解决方案更灵活,但效率明显较低。我们最终确定了一个解决方案,该解决方案具有可配置的fixedfunction硬件,可以非常高效地执行最常见的功能,但增加了一个可编程SIMD单元,它以较低的效率执行不太常见的功能。我们对特斯拉用于推理的工作量的了解使我们能够以高度的信心进行这样的权衡。
特斯拉的FSD计算机比我们以前的硬件中使用的商用解决方案提供了卓越的21倍性能提升,同时降低了成本,所有这些都需要适度的25%额外功率。这一水平的性能是通过毫不妥协地坚持我们最初的设计原则实现的。
作者:陌世
来源:编译自-Theme Article: Hot Chips
本文暂时没有评论,来添加一个吧(●'◡'●)