随着人工智能的广泛应用,深度学习已经成为当前人工智能研究和应用的主流方法。面对海量数据的并行计算,人工智能对计算能力的要求不断提高,对硬件计算速度和功耗提出了更高的要求。目前,除了通用CPU之外,硬件加速的GPU、NPU、FPGA等芯片处理器在深度学习的不同应用中各有优势,但究竟哪一种更好呢?以人脸识别为例,其处理过程和对应的功能模块所需要的算力分配基本如下:为什么会有这样的应用区分?有什么意义?要想知道答案,就需要从它们各自的原理、架构和性能特点入手去了解。首先我们来看一下通用CPU的架构。CPUCPU(CentralProcessingUnit)中央处理器是一种超大规模的集成电路。状态总线(Bus)。简单的说就是计算单元、控制单元和存储单元。架构图如下:CPU遵循冯·诺依曼架构,其核心是存储程序和顺序执行。CPU的架构需要大量的空间来放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占很小的一部分,因此在大容量方面非常受欢迎-规模并行计算能力。限制,但更擅长逻辑控制。CPU无法实现大量矩阵数据的并行计算能力,但GPU可以。GPUGPU(GraphicsProcessingUnit),即图形处理单元,是由大量计算单元组成的大规模并行计算架构,专为同时处理多个任务而设计。为什么GPU可以实现并行计算能力?GPU也包括基本的计算单元、控制单元和存储单元,但GPU的架构与CPU不同,如下图所示:与CPU相比,CPU芯片空间相差高达20%是ALU,GPU芯片空间80%以上是ALU。即GPU有更多的ALU用于数据并行处理。使用Darknet构建的神经网络模型AlexNet、VGG-16和Restnet152在GPUTitanX、CPUInteli7-4790K(4GHz)上预测ImageNet分类任务的结果:备注:以上数据来自https://pjreddie.com/darknet/imagenet/#reference可以看出GPU处理神经网络数据的效率远高于CPU。总结起来,GPU有以下几个特点:1.多线程,提供了多核并行计算的基本结构,而且核数非常多,可以支持大量数据的并行计算。2.更高的内存访问速度。3.更高的浮点运算能力。因此,GPU比CPU更适合深度学习中的大量训练数据、大量矩阵、卷积运算。GPU虽然在并行计算能力上显示出优势,但它不能单独工作,需要CPU的协同处理。神经网络模型的构建和数据流的传输仍然在CPU上进行。同时也存在功耗高、体积大的问题。性能更高的GPU体积更大,功耗更高,价格也更高,因此不能用于一些小型设备和移动设备。于是,一款体积小、功耗低、计算性能高、计算效率高的专用芯片NPU诞生了。NPUNPU(NeuralNetworksProcessUnits)神经网络处理单元。NPU的工作原理是在电路层模拟人类神经元和突触,利用深度学习指令集直接处理大规模神经元和突触,一条指令完成一组神经元的处理。与CPU和GPU相比,NPU通过突触权重整合存储和计算,从而提高运行效率。NPU是模仿生物神经网络构建的。CPU和GPU处理器需要几千条指令才能完成神经元的处理,而NPU只需要一条或几条指令就可以完成。因此,它在深度学习的处理效率上具有明显的优势。实验结果表明,在相同功耗下,NPU的性能是GPU的118倍。与GPU一样,NPU也需要CPU的协同处理才能完成特定的任务。下面,我们就来看看GPU和NPU是如何与CPU协同工作的。GPUAccelerationGPU目前只是简单的并行矩阵的乘法和加法,神经网络模型的构建和数据流的传输还是在CPU上进行。CPU加载权重数据,根据代码构建神经网络模型,通过CUDA或OpenCL等类库接口将各层的矩阵运算传输给GPU,实现并行计算并输出结果;然后CPU调度下层神经元组的矩阵数据计算,直到神经元网络输出层的计算完成,得到最终的结果。CPU与GPU的交互过程:1获取GPU信息,配置GPUid2加载神经元参数给GPU3GPU加速神经网络计算4接收GPU计算结果NPU加速NPU不同于GPU加速,主要体现在计算各层神经元的结果不使用输出送入主存,而是根据神经网络的连接传递给下层神经元继续计算,因此在计算性能和功耗上有很大的提升消耗。CPU将编译好的神经网络模型文件和权重文件加载到专用芯片中,完成硬件编程。在CPU的整个运行过程中,主要实现数据的加载和业务流程的控制。交互过程如下:1.打开NPU专用芯片设备2.传入模型文件获取模型任务3.获取任务的输入输出信息4.将输入数据复制到模型内存中5.运行模型并得到输出数据除了NPU,在功耗和计算能力方面还有FPGA。FPGAFPGA(Field-ProgrammableGateArray)全称为现场可编程门阵列,用户可以根据自己的需要进行重复编程。与CPU、GPU相比,具有高性能、低功耗、硬件可编程等特点。FPGA的基本原理是在芯片中集成了大量数字电路的基本门电路和存储器,用户可以通过烧入FPGA配置文件来定义这些门电路和存储器之间的连接。这个burn-in不是一次性的,可以重复写定义,重复配置。FPGA的内部结构如下图所示:FPGA的ProgrammableLogicBlocks包含许多功能单元,由LUT(Look-upTable)和触发器组成。FPGA直接通过这些门电路实现用户的算法,不需要指令系统的翻译,执行效率更高。我们可以对比一下:CPU/GPU/NPU/FPGAcharacteristicssummaryofeachchiparchitecturecharacteristics/CPU/70%的晶体管用于构建Cache,还有一些计算单元较少的控制单元,适合逻辑控制运算。大多数/GPU/晶体管用于构建计算复杂度低的计算单元,适用于大规模并行计算。主要用于大数据、后台服务器、图像处理。/NPU/电路层模拟神经元,通过突触权值将存储和计算集成,一条指令完成一组神经元的处理,提高运行效率。主要应用于通信、大数据、图像处理等领域。/FPGA/可编程逻辑,运算效率高,更接近底层IO,逻辑可通过冗余晶体管和布线进行编辑。本质上,它没有指令,不需要共享内存,计算效率高于CPU和GPU。主要用于智能手机、便携式移动设备、汽车。作为最通用的部分,CPU与其他处理器协作完成不同的任务。GPU适用于深度学习中后台服务器的大量数据训练和矩阵卷积运算。NPU和FPGA在性能、面积、功耗等方面具有很大优势,可以更好地加速神经网络计算。FPGA的特点是开发使用硬件描述语言,开发门槛高于GPU和NPU。可以说每种处理器都有其优缺点。在不同的应用场景下,需要根据需要权衡利弊,选择合适的芯片。
