作者:福科 2022年11月17日 下午3:19
FPGA 的应用领域
FPGA 从最初的逻辑黏合、接口互联的角色逐渐成为大规模计算硬件平台之一。FPGA 未来 的发力点分别在机器学习领域、5G 无线通信领域、嵌入式视觉领域、工业物联网领域、云计算 平台领域五大方面。
1、机器学习
要想明白“深度学习”“机器学习”需要什么样的硬件,必须了解深度学习的工作原理。 首先在表层上,我们有一个巨大的数据集,并选定了一种深度学习模型。每个模型都有一些内 部参数需要调整,以便学习数据。而这种参数调整实际上可以归结为优化问题,在调整这些参 数时,就相当于在优化特定的约束条件。 百度的硅谷人工智能实验室(SVAIL)已经为深度学习硬件提出了 Deep Bench 基准。这一 基准着重衡量的是基本计算的硬件性能,而不是学习模型的表现。这种方法旨在找到使计算变 慢或低效的瓶颈。因此,重点在于设计一个对于深层神经网络训练的基本操作执行效果最佳的 架构。那么基本操作有哪些呢?现在的深度学习算法主要包括卷积神经网络(CNN)和循环神 经网络(RNN)。基于这些算法,Deep Bench 提出以下 4 种基本运算: 矩阵相乘(Matrix Multiplication) 几乎所有的深度学习模型都包含这一运算,它的 计算十分密集。 卷积(Convolution) 这是另一个常用的运算,占用了模型中大部分的每秒浮点运算 (浮点/秒)。 循环层(Recurrent Layers) 模型中的反馈层,并且基本上是前两个运算的组合。 All Reduce 这是一个在优化前对学习到的参数进行传递或解析的运算序列。在跨硬 件分布的深度学习网络上执行同步优化时(如 AlphaGo 的例子),这一操作尤其有效。 除此之外,深度学习的硬件加速器需要具备数据级别和流程化的并行性、多线程和高内存 带宽等特性。另外,由于数据的训练时间很长,硬件架构必须低功耗,因此效能功耗比 (Performance per Watt)是硬件架构的评估标准之一。 1. GPU VS CPU 在如今的深度学习平台上,CPU 面临着一个很尴尬的处境:它很重要又不是太重要。它很 重要,是因为它依旧是主流深度学习平台的重要组成部分,机器学习领域的专家吴恩达曾利用 16000 颗 CPU 搭建了当时世界上最大的人工神经网络 Google Brain 并利用深度学习算法识别出 了“猫”,又比如名震一时的 AlphaGo 就配置了多达 1920 颗 CPU。 但是它又不是太重要,相比于其他硬件加速工具,传统的 CPU 在架构上就有着先天的弱势。 图 1.12 所示为 CPU 和 GPU 的区别。
图 1.12 是 CPU 与 GPU 内部结构的对比。总体上来说,二者都是由控制器(Control)、寄 存器(Cache、DRAM)和逻辑单元(Arithmetic Logic Unit,ALU)构成的,但是三者的比例却 有很大的不同。在 CPU 中,控制器和寄存器占据了结构中很大一部分;与之相反,在 GPU 中, 逻辑单元的规模则远远超过其他二者之和。
GPU 进行数据处理的过程可以描述成:GPU 从 CPU 处得到数据处理的指令,把大规模、 无结构化的数据分解成很多独立的部分,然后分配给各个流处理器集群。每个流处理器集群再 次把数据分解,分配给调度器所控制的多个计算核心,同时执行数据的计算和处理。如果一个 核心的计算算作一个线程,那么在这颗 GPU 中就有 32×4×16=2048 个线程同时进行数据的处 理。 尽管每个线程/Core 的计算性能、效率与 CPU 中的 Core 相比低了不少,但是当所有线程都 并行计算时,累加之后它的计算能力又远远高于 CPU。对于基于神经网络的深度学习来说,它 的硬件计算精度要求远远没有对其并行处理能力的要求来的迫切。而这种并行计算能力转化为 对于硬件的要求就是尽可能大的逻辑单元规模。通常我们使用每秒钟进行的浮点运算(Flops/s) 来量化参数。不难看出,对于单精度浮点运算,GPU 的执行效率远远高于 CPU。 除了计算核心的增加外,GPU 另一个比较重要的优势就是它的内存结构。 (1)共享内存。在 NVIDIA 披露的性能参数中,每个流处理器集群末端设有共享内存。相 比于 CPU 每次操作数据都要返回内存再进行调用,GPU 线程之间的数据通信不需要访问全局内 存,而在共享内存中就可以直接访问。这种设置带来最大的好处就是线程间通信速度的提高。 (2)高速的全局内存(显存)。目前 GPU 上普遍采用 GDDR5 的显存颗粒,不仅具有更 高的工作频率,从而带来更快的数据读取/写入速度,还具有更大的显存带宽。我们认为在数据 处理中,速度往往最终取决于处理器从内存中提取数据以及流入和通过处理器要花多少时间。 在传统的 CPU 构架中,尽管有高速缓存(Cache)的存在,但是由于其容量较小,大量的 数据只能存放在内存(RAM)中。进行数据处理时,数据要从内存中读取,然后在 CPU 中运算, 最后返回内存中。由于构架的原因,二者之间的通信带宽通常在 60Gb/s 徘徊。与之相比,大显 存带宽的 GPU 具有更大的数据吞吐量。在大规模深度神经网络的训练中,必然带来更大的优势。 目前而言,越来越多的深度学习标准库支持基于 GPU 的深度学习加速,通俗点描述就是深度学习的编程框架会自动根据 GPU 所具有的线程/Core 数去自动分配数据的处理策略,从而达 到优化深度学习的时间,而这些软件上的全面支持也是其他计算结构所欠缺的。 2. FPGA 的潜在优势 “CPU+GPU”或者“MIC”的计算模型被广泛地应用于各种深度学习中。CPU 与 GPU 都 是利用现有的成熟技术去提供一种通用级的解决方法来满足深度学习的要求,尽管 Intel 与 NVIDIA 不断推出了 KNL 和 Pascal 等系列加速芯片来助阵深度学习,但这仅仅是大公司对于深 度学习的一种妥协,并不是一种针对性的专业解决方案。 目前,在深度学习模型的训练领域使用的基本是 SIMD(Single Instruction Multiple Data,单 指令多数据流架构)计算,即只需要一条指令就可以平行处理大批量数据。但是,在平台完成 训练之后,它还需要进行推理环节的计算。这部分的计算更多的是 MISD(Multiple Instruction Single Data,多指令流单数据流)。比如讯飞语音输入法在同一时间要对数以百万计的用户的语 音输入进行识别并转化为文字输出。 在这个阶段,它们的作用远不如训练阶段那么得心应手。未来,至少 95%的深度学习都用 于推断,尤其是在移动端,只有不到 5%的深度学习用于模型训练。因此,寻找低功耗、高性能、 低延时的加速硬件成了当务之急。在这种情况下,人们把目光投向了 FPGA 与 ASIC。 与 GPU/CPU 相比,FPGA 与 ASIC 拥有良好的运行能效比,在实现相同性能的深度学习算 法中,GPU 所需的功耗远远大于 FGPA 与 ASIC。浪潮与 Intel 于 2016 年底推出了 FPGA 加速卡 F10A,是目前最高性能的加速卡,单芯片峰值运算能力达到 1.5TFlops,功耗才 35W,每瓦特功 率为 42GFlops,是 GPU 的数倍之高。其次,对于 SIMD 计算,GPU/CPU 尽管具有很多逻辑核 心,但是受限于冯诺依曼结构,无法发挥其并行计算的特点。FPGA 与 ASIC 不仅可以做到并行 计算,还能实现流水处理。这大大减小了输入与输出的延时比。 针对移动端的深度学习,FPGA 或者 ASIC 更多的会以 SOC 形式出现,以更好地优化神经 网络结构,从而提升效率。