作者:Cathal Murphy/Yao Fu
为了满足不断攀升的数据处理需求,未来的系统需在运算能力上进行改善。传统解决方案(如x86处理器)再也无法以高效率、低成本的方式提供所需运算带宽,因此系统设计人员须寻找新的运算平台。
越来越多系统设计人员将现场可编程门阵列(FPGA)和绘图处理器(GPU)视为能够满足未来需求的运算平台。本文将分析未来GPU、FPGA和系统单芯片(SoC)组件,能为新时代提供哪些必要的运算效率和弹性。
云端数据中心和自动驾驶汽车等未来系统,需在运算能力上进行改善,以支持不断增加的工作负载,以及不断演进的底层算法[1]。例如,大数据分析、机器学习、视觉处理、基因体学以及先进驾驶辅助系统(ADAS)的传感器融合工作负载都超出现有系统(如x86系统)所能提供的效率与成本效益。
系统架构师正在寻找能满足需求的新运算平台,且该平台需要有足够的弹性,以便整合至现有架构中,并支持各种工作负载及不断演进的算法。此外,许多这类系统还须提供确定性低延迟效能,以支持如自动驾驶汽车在实时系统上所需的快速反应时间。
因GPU在机器学习训练的高效能运算(HPC)领域获得的成果,因此GPU厂商非常积极地将GPU定位为新时代运算平台的最佳选择。在此过程中,GPU厂商已修改其架构来满足机器学习推论的工作负载。
然而,GPU厂商一直忽视GPU基本架构的局限性。而这些局限会严重影响GPU以高效率、低成本方式提供必要的系统级运算效能之能力,例如,在云端数据中心系统中,工作负载需求在一天内会发生很大的变化,且这些工作负载的底层算法也正快速地演进。GPU架构的局限性会阻碍很多现今与未来的工作负载映像到GPU,导致硬件闲置或低效率。本文稍后提及的章节,将针对这些局限进行更详细的介绍。
相反地,FPGA与SoC具有众多重要特质,将成为解决未来系统需求的最佳选择。这些独特特质包括:
・针对所有数据类型提供极高的运算能力和效率
・针对多种工作负载提供极高弹性,并将运算和效率之优势最大化
・具备I/O弹性,能方便地整合到系统中并达到更高效率
・具备大容量芯片内建高速缓存,以提供高效率及最低延迟率
看清背景/应用/优劣势 绘图处理器大拆解
GPU的起源要追溯到PC时代,辉达(NVIDIA)声称在1999年推出世界首款GPU,但其实许多显卡推出时间更早[2]。GPU是一款全新设计的产品,用于分担及加速图像处理任务,例如从CPU进行像素数组的遮蔽和转换处理,使其架构适用于高并行传输率处理[3]。本质上,GPU的主要作用为替视觉显示器(VDU)提供高质量影像。
图1 GPU模块图
多年来,如大规模矩阵运算的医疗影像应用,此类少量非影像但需大规模平行及受内存限制的相关工作负载,已从GPU而非CPU上实现。GPU厂商意识到有机会将GPU市场拓展到非影像应用,因此如OpenCL这类的GPU非影像编程语言应运而生,而这些编程语言将GPU转化成通用GPU(GPGPU)。
・机器学习
最近,能够良好映像到GPU运行方案的工作负载之一,便是机器学习训练。透过充分运用GPU,能明显缩短深度神经网络的训练时间。
GPU厂商试图利用机器学习训练的成功,来牵动其在机器学习推论上的发展(部署经过训练的神经网络)。随着机器学习算法与所需数据精度的演进,GPU厂商一直在调整其架构以保持自身地位优势。其中一个例子就是,NVIDIA在其Tesla P4产品中支持INT8,然而现今许多用户探索着更低的精度,如二进制和三进位[4]。若要利用机器学习与其它领域的发展,GPU用户必须等待新硬件推出之后再购买。
GPU厂商想运用机器学习作为基础,使自身成为此新运算时代的首选运算平台。但若要清楚了解GPU是否适合未来系统,仍需做更全面的系统级分析、考虑GPU架构的局限性,以及系统要如何随时间发展演进。
・GPU架构局限性
本章节将深入研究典型的GPU架构,来揭露其局限性及如何将其应用于各种算法和工作负载。
・SIMT ALU数组
图1展示典型的GPU模块图。通用GPU运算功能的核心是大型算术逻辑单元(ALU)或运算核心。这些ALU通常被认为是单指令多线程(SIMT),类似于单指令多数据(SIMD)。
基本原理是将工作负载分成数千个平行的线程(Thread),ALU需要大量的GPU线程来预防闲置。在对线程进行调度后,不同的ALU组便能平行执行相同的(单一)指令。GPU厂商透过使用SIMT,能提供相较于CPU占位面积更小和功效更高的方案,因为许多核心资源能与同组的其他核心共享。
然而,显然特定工作负载(或部分工作负载)能被有效地映射到这大规模平行的架构中[5]。倘若构成工作负载的线程不具足够的共通性或平行性,例如连续或适度平行的工作负载,ALU则会呈现闲置状态,导致运算效率降低。此外,构成工作负载的线程预期要将ALU利用率最大化,进而产生延迟。即使在NVIDIA的Volta架构中使用独立线程调度的功能,其底层架构仍保持SIMT,如同需要大规模平行工作负载。
对于连续、适度平行或稀疏的工作负载,GPU提供的运算与效率低于CPU所能提供的[6]。其中一个量化实例为在GPU上执行稀疏矩阵运算;假使非零元素数量较少,并从效能和效率的角度来看,GPU低于或等同于CPU[7][8]。有趣的是,很多研究人员正在研究稀疏卷积式类神经网络,来利用卷积式类神经网络中的大规模冗余[9],这趋势显然代表GPU在机器学习推论中所遇到的挑战。稀疏矩阵运算也是大数据分析中的关键环节[10]。
多数包含大量平行运算任务的工作负载亦包含一些连续或适度平行元素,这意味着需要GPU-CPU混合系统来满足系统效能要求[11]。显然,对于高阶CPU的需求会影响平台的效率与成本效益,而且CPU与GPU之间的通讯需求为系统增添潜在瓶颈。SIMT/GPU架构的另一个局限性是ALU的功能取决于其固定指令集和所支持的数据类型。
・离散数据类型精度支援
系统设计人员正在探索简化数据类型精度,以此达到运算效能的跳跃式提升,而且不会明显降低精度[12][13][14]。机器学习推论导致精度下降,首先是FP16,接着是INT16和INT8。研究人员正在探索进一步降低精度,甚至降到二进制[4][15]。
GPU ALU通常原生支持单精度浮点类型(FP32),而有些情况下支持双精度浮点(FP64)。FP32是影像工作负载的首选精度,而FP64通常用于一些HPC应用。然而低于FP32的精度通常无法在GPU中获得有效支持,因此相较于降低所需的内存带宽,采用标准GPU上降低精度较有优势。
GPU通常提供一些二进制运算功能,但通常只能每ALU进行32位运算,且32二进制运算有很大的复杂度和面积需求。在二值化神经网络中,算法需要XNOR运算,紧接着进行族群(Population)统计。由于NVIDIA GPU仅能每四个周期进行一次族群统计运算,因此对二进制运算有极大的影响[18]。
如图2所示,为了跟上机器学习推论空间的发展脚步,GPU厂商持续进行必要的芯片修改,以支持如FP16和INT8的有限降低精度数据类型。其中一个实例为,Tesla P4和P40运算卡上的NVIDIA GPU支持INT8,为每ALU/Cuda核心提供4个INT8运算。
图2 NVIDIA降精度支援
然而,依NVIDIA在Tesla P40上的GoogLeNet v1 Inference推出的机器学习推论基准显示,INT8方案与FP32方案相比效率仅提升3倍,此结果显示在GPU架构中强行降低精度,并取得高效率存在较大难度[16]。
随着机器学习和其他工作负载转向更低精度和客制化精度,GPU厂商需要在市场上推出更多新产品,且厂商的现有用户亦需升级平台,才能受益于此领域的发展。
内存多阶层把关 软件定义数据到达路径艰辛
与CPU类似,GPU中的数据流也由软件定义,并取决于GPU严格且复杂的内存阶层[17],而典型的GPU内存阶层如图3所示。每个线程在缓存器档案中都有自己的内存空间,用以储存线程的局部变量。同一个模块内的少量线程可透过共享内存来通讯;且所有线程皆能透过全局或芯片外内存通讯[18]。
如图3所示,由于数据需从缓存器档案横跨整个内存阶层到全局内存,造成与内存存取相关的功耗和延迟分别增加100倍和80倍以上[15][17][19]。此外,内存冲突是必然的,同时亦会增加延迟导致ALU闲置,进而降低运算能力和效率。
图3 典型的GPU内存阶层
因此,若想发挥GPU的运算和效率潜能,工作负载的数据流必须准确映像到GPU内存阶层。事实上,很少工作负载具备足够的数据局部性来有效地映像到GPU上。对多数的工作负载而言,当在GPU上运行时,实际的运算能力和效率会大打折扣,解决方案的延迟也会增加[19][20]。
机器学习推论作为量化实例,能清楚展现出数据流的局限性。GPU必须进行如128笔的批处理(Batch),以获得高效率但延迟更长的解决方案。最终,批处理使机器学习处理局部化,但须付出增加延迟的代价[21],而此结果能清楚的在GoogLeNet v1 Inference的NVIDIA P40基准检验中看到。对于GoogLeNet v1来说,其网络因P40内存带宽而受到运算束缚,因此减少与批处理有关的内存带宽并不会产生很大的帮助。然而,P40显然需要透过128的批处理以达到50%的GPU理论效能,但同时也增加系统的延迟[16]。
某些情况下,资料可透过CPU进行前置处理,以便工作负载能更有效的映像到GPU SIMT架构和内存阶层,但其代价则是产生更多CPU运算和功耗,因而抵消了GPU的优势[7]。
・有限I/O选项
如本文一开始的段落所述,GPU原本的角色是作为协同处理器。为了促进与主机沟通,GPU以往只有一个PCIe接口与几个如GDDR5的芯片外接DRAM接口。近期的产品中,有些GPU采用硬件接口来进行GPU到GPU的通讯。而CPU仍须连接网络来分配任务予GPU,此不仅增加系统功耗,还会因PCIe有限的带宽而带来瓶颈。例如,支持PCIe 3.0×16的NVIDIA Tesla 40,只能拥有16GB/s的带宽。
GPU厂商已开始建构小型SoC,例如NVIDIA Tegra X1,其能整合GPU运算、Arm处理器、一些通用汽车周边和如HDMI、MIPI、SIP、CAN的基础以太网络等。由于上述组件具备少量运算能力,因此必须倚赖额外的分离式GPU来达到必要的运算能力。然而,分离的GPU接口有很大局限性,例如Tegra X1仅支持PCIe 2.0×4,导致严重瓶颈,且额外SoC的功耗会更进一步降低平台的效率。
・芯片内建内存资源
除了延迟、效率和传输率方面的不利影响,芯片外内存的带宽要明显低于局部/芯片内建内存。因此,若工作负载需要依靠芯片外内存,不仅芯片外内存的带宽会成为瓶颈,且运算资源也会被闲置,从而降低GPU能提供的运算功能和效率。
因此,更有利的做法是采用大型、低延迟且高带宽的芯片内建内存,再以机器学习推论为例,GoogLeNet共需27.2MB的内存空间;假设执行FP32,是没有GPU能提供的,这意味着需要芯片外内存[22]。在很多情况下,则需采用高成本的高带宽内存(HBM)和批处理,以防止核心处于闲置状态。若选择具更大型的芯片内建内存组件,便能避免HBM成本及额外的延迟和功耗问题。
・功耗范围
GPU厂商在设计板卡和GPU时通常要适用于250W的功耗上限,并依靠有效热管理来调节温度。针对机器学习推论市场,NVIDIA已开发如Tesla M4和P4等满足75W功耗范围的组件。虽然75W已远超出所允许的系统级功耗和热范围,但GPU的绝对功耗依然是阻碍GPU被广泛采用的因素之一。
功能安全性
GPU源于消费图像处理和高效能运算领域,其不存在功能安全性的需求。但随着GPU厂商瞄准ADAS市场,功能安全性就成了必要条件,因此为用于ADAS系统中,组件需要重新设计,以确保达到所需的功能安全性认证等级。这对GPU厂商来说不仅是一个长期且涉及各方面的学习过程,还需要新工具和设备。
实现多元应用推手 FPGA/SoC好处多
・原始运算能力
与GPU拥护者的说法不同,单一个FPGA组件能提供的原始运算能力,能达到38.3 INT8 TOP/s的效能。NVIDIA Tesla P40加速卡以基础频率运行时提供相似的40 INT8 TOP/s原始运算能力,但功耗是FPGA方案的2倍多[26]。
此外,FPGA组件的弹性能支持各种数据类型的精度[27]。例如,针对二值化神经网络,FPGA可提供500TOPs/s的超高二进制运算能力(假设2.5LUT/运算的情况),相当于GPU典型效能的25倍。有些精度较适用于DSP资源,有些则能在可编程逻辑中运行,还有些适合将两者结合起来使用,而这些弹性确保组件的运算和效率能随着精度降低,且降低到二进制。机器学习领域的大量研究都从运算、精度和效率角度来进行最佳精度的研究[28~32]。无论最佳点在哪,对于给予的工作负载都能随之调整。
多年来,许多FPGA用户针对多种工作负载,运用脉动数组处理设计达到最佳效能,其中包括机器学习推论[33][34]。
有趣的是,NVIDIA为了现今的深度学习工作负载来提高可用的运算能力和效率,在Volta架构中以Tensor Core形式强化类似的功能。然而,深度学习工作负载会随着时间演进,因此Tensor Core架构亦需要改变,且GPU用户也需等待购买新的GPU硬件。
・效率和功耗
从系统层级来看,运算平台必须在指定的功率和热范围内提供最大运算能力。为满足此需求,运算平台必须:
1. 处于允许的功率范围内
2. 在功率预算内将运算能力最大化
All Programmable系列组件,使用户能选择与功率和热范围最相符的组件。如表1所示,从原始运算角度来看,该组件能针对固定精度数据类型提供高效通用运算平台,主要是因为FPGA架构中的间接开销较低。例如,GPU需要更多复杂性围绕其运算资源,以促进软件可编程功能。对于当今的深度学习工作负载的张量(Tensor)运算,NVIDIA的Tesla V100凭借已强化的Tensor Core达到能与FPGA和SoC匹敌的效率。然而,深度学习工作负载正以非常快的速度演进,因此无法确定NVIDIA Tensor Core的高效率能在深度学习工作负载维持多久。
由此看来,对于其他通用工作负载,NVIDIA V100亦面临效率的挑战。鉴于本文之前介绍的局限性,对于实际的工作负载与系统,GPU很难达到如表1中所提供的数字。
・All Programmable组件弹性
赛灵思透过将硬件可编程资源(如逻辑、路径和I/O)与具弹性且独立的整合核心区块(如DSP分割和UltraRAM)结合,并将全部构建在领先制程技术上,如台积电(TSMC)的16nm FinFET制程,进而达到这种平衡。
硬件可编程性和弹性,意味着底层硬件通过配置可满足指定工作负载的需求。随后,数据路径甚至能在运行时,透过部分可重组功能简易地进行重新配置[35]。图4试图举例All Programmable组件提供的部分弹性。核心(或用户设计元素)可直接连接可编程I/O、任意其它核心、LUTRAM、Block RAM和UltraRAM、及外部内存等。
图4 All Programmable数据路径和各种形式IO
硬件可编程性组件意味着它们不存在这类的特定局限,如SIMT或固定数据路径等。无论是大规模平行、适度平行、管线连续或混合形式,都能获得赛灵思组件的运算能力和效率。此外,若底层算法改变,例如机器学习网络的发展,则平台也能随之调整。
很多系统和工作负载中都能看到FPGA与SoC组件发挥弹性优势,而机器学习推论就是其中之一。其中机器学习推论的趋势就是向稀疏网络迈进,且FPGA与SoC组件用户已在利用此趋势,而NVIDIA本身就是其中一位用户。在近期与NVIDIA联合编写关于语音识别的一篇文章中提到,通过使用FPGA,相较于CPU能提升43倍速度和40倍效率,而NVIDIA GPU仅能提升3倍速度和11.5倍效率[36]。可编程数据路径还减少了FPGA的批处理需求,批处理是系统延迟对比实时效能的重要决定因素。
从大数据角度来看,FPGA在处理包括在如可变长度字符串的复杂数据情况下,SQL工作负载时具高效率且快速。基因体分析则是一个实例,有人已利用GPU来加速基因体分析,其相较于Intel Xeon CPU方案能提升6至10倍的速度[40]。不过,FPGA提升速度的效果更高,相较于同等CPU可提升约80倍的速度[41]。
最后,对于正在努力研发自动驾驶功能的汽车系统设计人员来说,FPGA与SoC组件的灵活能为他们提供可扩展的平台,以满足美国汽车工程学会(SAE)各种完全自动驾驶道路的标准。
・各种形式I/O弹性
除了组件运算资源的弹性,FPGA的各种形式之I/O弹性能确保组件无缝整合至既有的基础架构,例如在不使用主机CPU的情况下,直接连接到网络或储存设备[42]。此外,I/O弹性还允许平台针对基础架构的变化或更新进行调整。
・芯片内建内存
如表2所示,这种庞大的芯片内建内存快取,代表着多数的工作负载内存需求是透过芯片内建内存提供,来降低外部内存存取所带来的内存瓶颈,以及如HBM2这类高带宽内存的功耗和成本问题。例如,针对多数深度学习网络技术(例如GoogLeNet)的系数/特性图都可存在芯片内建内存中,以提高运算效率和降低成本。芯片内建存取能消除芯片外内存存取所引起的巨大延迟问题,将系统的效能最大化。
・封装内HBM
针对需要高带宽内存的情况下,FPGA组件提供HBM,以便工作负载有效的映像到组件和可用内存带宽,将效能和运算效率最大化。
在新的运算时代,系统设计人员面临许多困难选择。FPGA和SoC为系统设计人员提供最低风险,来协助其满足未来系统的核心需求与挑战,同时提供足够的弹性以确保平台在未来不会落伍,堪称兼顾双重需求。在深度学习领域,UltraScale架构中DSP架构固有的平行性透过INT8向量点积的扩展性效能,为神经网络强化卷积和矩阵乘法传输率,使得深度学习推论达到更低延迟。快速DSP数组、最高效率的Block RAM内存阶层及UltraRAM内存数组的组合可达到最佳功率效益。
评论
查看更多