银行 社区服务 每日签到 会员排行 网站地图
  • 1578阅读
  • 5回复

为什么要用GPU来训练神经网络而不是CPU

楼层直达
级别: 上尉
[棋中红钻2级]发帖数量≥100篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻2级]贡献值数量≥5点 [棋中彩钻2级]精华帖数量≥2篇
发帖
369
金币
508
威望
2
贡献值
5
乐币
0
主题
92

什么是CPU?

中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速及实现它们缓冲处理器之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。

什么是GPU?

图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。

GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。GPU的生产商主要有NVIDIA和ATI。

GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

什么是TPU?

TPU(Tensor Processing Unit)即张量处理单元,是一款为机器学习而定制的芯片,经过了专门深度机器学习方面的训练,它有更高效能(每瓦计算能力)。

因为它能加速其第二代人工智能系统TensorFlow的运行,而且效率也大大超过GPU――Google的深层神经网络就是由TensorFlow引擎驱动的。TPU是专为机器学习量身定做的,执行每个操作所需的晶体管数量更少,自然效率更高。

TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。

TPU每瓦能为机器学习提供比所有商用GPU和FPGA更高的量级指令,这基本相当于7年后的科技水平。TPU是为机器学习应用特别开发,以使芯片在计算精度降低的情况下更耐用,这意味每一个操作只需要更少的晶体管,用更多精密且大功率的机器学习模型,并快速应用这些模型,因此用户便能得到更正确的结果。

什么是NPU?

嵌入式神经网络处理器(NPU)采用“数据驱动并行计算”的架构,特别擅长处理视频、图像类的海量多媒体数据。

NPU处理器专门为物联网人工智能而设计,用于加速神经网络的运算,解决传统芯片在神经网络运算时效率低下的问题。

在GX8010中,CPU和MCU各有一个NPU,MCU中的NPU相对较小,习惯上称为SNPU。

NPU处理器包括了乘加、激活函数、二维数据运算、解压缩等模块。

乘加模块用于计算矩阵乘加、卷积、点乘等功能,NPU内部有64个MAC,SNPU有32个。

激活函数模块采用最高12阶参数拟合的方式实现神经网络中的激活函数,NPU内部有6个MAC,SNPU有3个。

二维数据运算模块用于实现对一个平面的运算,如降采样、平面数据拷贝等,NPU内部有1个MAC,SNPU有1个。

解压缩模块用于对权重数据的解压。为了解决物联网设备中内存带宽小的特点,在NPU编译器中会对神经网络中的权重进行压缩,在几乎不影响精度的情况下,可以实现6-10倍的压缩效果。

附:

APU -- Accelerated Processing Unit, 加速处理器,AMD公司推出加速图像处理芯片产品。

BPU -- Brain Processing Unit, 地平线公司主导的嵌入式处理器架构。

CPU -- Central Processing Unit 中央处理器, 目前PC core的主流产品。

DPU -- Deep learning Processing Unit, 深度学习处理器,最早由国内深鉴科技提出;另说有Dataflow Processing Unit 数据流处理器, Wave Computing 公司提出的AI架构;Data storage Processing Unit,深圳大普微的智能固态硬盘处理器。

FPU -- Floating Processing Unit 浮点计算单元,通用处理器中的浮点运算模块。

GPU -- Graphics Processing Unit, 图形处理器,采用多线程SIMD架构,为图形处理而生。

HPU -- Holographics Processing Unit 全息图像处理器, 微软出品的全息计算芯片与设备。

IPU -- Intelligence Processing Unit, Deep Mind投资的Graphcore公司出品的AI处理器产品。

MPU/MCU -- Microprocessor/Micro controller Unit, 微处理器/微控制器,一般用于低计算应用的RISC计算机体系架构产品,如ARM-M系列处理器。

NPU -- Neural Network Processing Unit,神经网络处理器,是基于神经网络算法与加速的新型处理器总称,如中科院计算所/寒武纪公司出品的diannao系列。

RPU -- Radio Processing Unit, 无线电处理器, Imagination Technologies 公司推出的集合集Wifi/蓝牙/FM/处理器为单片的处理器。

TPU -- Tensor Processing Unit 张量处理器, Google 公司推出的加速人工智能算法的专用处理器。目前一代TPU面向Inference,二代面向训练。

VPU -- Vector Processing Unit 矢量处理器,Intel收购的Movidius公司推出的图像处理与人工智能的专用芯片的加速计算核心。

WPU -- Wearable Processing Unit, 可穿戴处理器,Ineda Systems公司推出的可穿戴片上系统产品,包含GPU/MIPS CPU等IP。

XPU -- 百度与Xilinx公司在2017年Hotchips大会上发布的FPGA智能云加速,含256核。

ZPU -- Zylin Processing Unit, 由挪威Zylin 公司推出的一款32位开源处理器。

张量处理单元(TPU)是一种定制化的 ASIC 芯片,它由谷歌从头设计,并专门用于机器学习工作负载。TPU 为谷歌的主要产品提供了计算支持,包括翻译、照片、搜索助理和 Gmail 等。

在本文中,我们将关注 TPU 某些特定的属性。

神经网络如何运算

在我们对比 CPUGPU 和 TPU 之前,我们可以先了解到底机器学习或神经网络需要什么样的计算。如下所示,假设我们使用单层神经网络识别手写数字。

如果图像为 28×28 像素的灰度图,那么它可以转化为包含 784 个元素的向量。神经元会接收所有 784 个值,并将它们与参数值(上图红线)相乘,因此才能识别为「8」。其中参数值的作用类似于用「滤波器」从数据中抽取特征,因而能计算输入图像与「8」之间的相似性:

这是对神经网络做数据分类最基础的解释,即将数据与对应的参数相乘(上图两种颜色的点),并将它们加在一起(上图右侧收集计算结果)。如果我们能得到最高的预测值,那么我们会发现输入数据与对应参数非常匹配,这也就最可能是正确的答案。

简单而言,神经网络在数据和参数之间需要执行大量的乘法和加法。我们通常会将这些乘法与加法组合为矩阵运算,这在我们大学的线性代数中会提到。所以关键点是我们该如何快速执行大型矩阵运算,同时还需要更小的能耗。

CPU 如何运行

因此 CPU 如何来执行这样的大型矩阵运算任务呢?一般 CPU 是基于冯诺依曼架构的通用处理器,这意味着 CPU 与软件和内存的运行方式如下:

图:CPU 如何运行

CPU 最大的优势是灵活性。通过冯诺依曼架构,我们可以为数百万的不同应用加载任何软件。我们可以使用 CPU 处理文字、控制火箭引擎、执行银行交易或者使用神经网络分类图像。

但是,由于 CPU 非常灵活,硬件无法一直了解下一个计算是什么,直到它读取了软件的下一个指令。CPU 必须在内部将每次计算的结果保存到内存中(也被称为寄存器或 L1 缓存)。内存访问成为 CPU 架构的不足,被称为冯诺依曼瓶颈。

虽然神经网络的大规模运算中的每一步都是完全可预测的,每一个 CPU 的算术逻辑单元(ALU,控制乘法器和加法器的组件)都只能一个接一个地执行它们,每一次都需要访问内存,限制了总体吞吐量,并需要大量的能耗。

GPU 如何工作

为了获得比 CPU 更高的吞吐量,GPU 使用一种简单的策略:在单个处理器中使用成千上万个 ALU。现代 GPU 通常在单个处理器中拥有 2500-5000 个 ALU,意味着你可以同时执行数千次乘法和加法运算。

图:GPU 如何工作

这种 GPU 架构在有大量并行化的应用中工作得很好,例如在神经网络中的矩阵乘法。实际上,相比 CPU,GPU 在深度学习的典型训练工作负载中能实现高几个数量级的吞吐量。这正是为什么 GPU 是深度学习中最受欢迎的处理器架构。

但是,GPU 仍然是一种通用的处理器,必须支持几百万种不同的应用和软件。这又把我们带回到了基础的问题,冯诺依曼瓶颈。在每次几千个 ALU 的计算中,GPU 都需要访问寄存器或共享内存来读取和保存中间计算结果。

因为 GPU 在其 ALU 上执行更多的并行计算,它也会成比例地耗费更多的能量来访问内存,同时也因为复杂的线路而增加 GPU 的物理空间占用。

TPU 如何工作

当谷歌设计 TPU 的时候,我们构建了一种领域特定的架构。这意味着,我们没有设计一种通用的处理器,而是专用于神经网络工作负载的矩阵处理器。

TPU 不能运行文本处理软件、控制火箭引擎或执行银行业务,但它们可以为神经网络处理大量的乘法和加法运算,同时 TPU 的速度非常快、能耗非常小且物理空间占用也更小。

其主要助因是对冯诺依曼瓶颈的大幅度简化。因为该处理器的主要任务是矩阵处理,TPU 的硬件设计者知道该运算过程的每个步骤。因此他们放置了成千上万的乘法器和加法器并将它们直接连接起来,以构建那些运算符的物理矩阵。

这被称作脉动阵列(Systolic Array)架构。在 Cloud TPU v2 的例子中,有两个 128X128 的脉动阵列,在单个处理器中集成了 32768 个 ALU 的 16 位浮点值。

我们来看看一个脉动阵列如何执行神经网络计算。首先,TPU 从内存加载参数到乘法器和加法器的矩阵中。

图:TPU 如何工作

然后,TPU 从内存加载数据。当每个乘法被执行后,其结果将被传递到下一个乘法器,同时执行加法。因此结果将是所有数据和参数乘积的和。在大量计算和数据传递的整个过程中,不需要执行任何的内存访问。

这就是为什么 TPU 可以在神经网络运算上达到高计算吞吐量,同时能耗和物理空间都很小。

因此使用 TPU 架构的好处就是:成本降低至 1/5。

许多现代神经网络的实现基于GPU,GPU最初是为图形应用而开发的专用硬件组件。所以神经网络收益于游戏产业的发展。

视频游戏渲染要求许多操作能够快速并行的执行。环境和角色模型通过一系列顶点的3D坐标确定,为了将大量的3D坐标投射到2D空间的显示屏上,显卡必须并行地对许多顶点执行矩阵乘除法。在此之后,显卡还必须并行的在每个像素上执行诸多操作,来确定每个像素的颜色。在这两种情况下,计算都是非常简单的,并且不涉及CPU通常遇到的复杂的分支运算。例如,同一个物体内的每个顶点都会乘上相同的矩阵,也就是说,不需要通过if语句来判断和确定每个顶点需要乘哪个矩阵。各个计算过程也是相互独立的,因此能够实现并行操作。计算过程还涉及处理大量内存缓冲以及描述每一个需要被渲染对象的纹理的位图信息。总的来说,这使得显卡设计为拥有高度并行特性以及很高的内存带宽,虽然时钟速度和分支处理运算能力都比CPU弱太多,但是这些在训练网络的时候,都是无关紧要的。

神经网络的训练所需要的性能特性实际上和图形算法非常的类似,神经网络通常涉及大量参数,激活值,梯度值的缓冲区,其中每一个值在每一次训练迭代中都会被更新。这些缓冲太大,会超出传统的桌面计算机cache,所以内存带宽通常会成为主要瓶颈。而GPU相比CPU的一个显著优势是其极高的内存带宽。神经网络训练通常不涉及大量的分支运算与复杂的控制指令,所以更适合在GPU上训练。由于神经网络能够被分成多个单独的“神经元”,并且独立于同一层内的其他单元,所以神经网络可以从GPU的并行特性上受益匪浅。

但是通常在GPU上写高效的代码也不是一件容易的事,在GPU上获得良好表现所需要的技术与CPU上的技术非常不同。比如说,基于CPU的良好代码通常被设计为尽可能从高速缓存中读取更多的信息。而在GPU中,大多数可写内存位置并不会被高速缓存,所以计算某个值两次通常会比一次计算然后从内存中读取更快。

总的来说,CPU就像1位大学生,10分钟能做一道曲面积分,但是你让他10分钟做1000道百位数加法,他做不完。而GPU就像100个小学生,虽然咱能力不如你,但咱可以一起10分钟完成1000道百位数加法题。

深度学习框架由大量神经元组成,它们的计算大多是矩阵运算,这类运算在计算时涉及的数据量较大,但运算形式往往只有加法和乘法,比较简单。我们计算机中的CPU可以支持复杂的逻辑运算,但是CPU的核心数往往较少,运行矩阵运算需要较长的时间,不适合进行深度学习模型的构建。与CPU相反,GPU主要负责图形计算。图形计算同样主要基于矩阵运算,这与我们的深度学习场景不谋而合。根据NVIDIA的统计数据,对于同样的深度学习模型,GPU和CPU的运算速度可以相差数百倍。因此,一个好的GPU平台对深度学习十分重要。

因为GPU更适合来做矩阵运算,神经网络里面设计到大量的矩阵运算,所以用GPU比用CPU来的更好。

神经网络计算特性

1. 最小的逻辑单元简单 (加减乘除等)

2. 需要计算的最小逻辑单元量大(n个特征权重)

3. 计算逻辑单元大量不互相依赖,能并行。

快在矩阵乘法上。

gpu天生擅长矩阵乘法,,cpu得拆成数舞数乘法,再转成加法,慢死。

gpu是成千上万个小处理器核心构成的,CPU最多有几十个大处理器核心。虽然CPU每个核心的综合能力强很多,但面对cnn之类的神经网络大量的并行加减乘除运算,就不如gpu并行处理速度快了。

GPU在浮点数的运算上要快于CPU。神经网络训练往往需要处理大量的数据,GPU高性能会节省训练的时间。而且选择 GPU 还需要考虑显存的大小。推荐选择显存大于 8GB 的 GPU,这一点很重要,因为在运行大型神经网络时,系统默 认将网络节点全部载入显存,如果显存不足,则会显示资源耗尽提示,导致程序不能正常运行。

伦敦大学学院 计算机视觉硕士

GPU作为coprocessor适合简单重复的运算。深度学习就是无数次地计算forward/backward propagation

这种单调重复的运算就适合gpu.至于为什么适合gpu,因为它有好多个就处理器来实现并行计算

关键词: nnn gpu cpu
级别: 四级士官
[棋中红钻1级]发帖数量≥10篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
76
金币
254
威望
0
贡献值
0
乐币
3
主题
6
只看该作者 一楼  发表于: 2020-10-07
科普的很好,谢谢楼主
级别: 四级士官
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
151
金币
4
威望
0
贡献值
0
乐币
0
主题
0
只看该作者 二楼  发表于: 2020-10-07
回 楼主(lovetvb) 的帖子
楼主分享的文章有些看不懂
级别: 四级士官
[棋中红钻2级]发帖数量≥100篇 [未点亮棋中黄钻]金币数量<100枚 [未点亮棋中蓝钻]乐币数量<10枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
151
金币
4
威望
0
贡献值
0
乐币
0
主题
0
只看该作者 三楼  发表于: 2020-10-07
回 1楼(旋风代理) 的帖子
在这里做分享,谢谢楼主分享。
级别: 中尉
[棋中红钻3级]发帖数量≥500篇 [棋中黄钻2级]金币数量≥1000枚 [棋中蓝钻2级]乐币数量≥50枚 [未点亮棋中粉钻]贡献值数量<1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
624
金币
1463
威望
0
贡献值
0
乐币
69
主题
24
只看该作者 4楼 发表于: 2020-10-07
量子电脑比排名世界第一日本富岳超级电脑[每秒运算41京次(兆兆次)]还快出万倍, 量子电脑普及化后, 大概就用不着神经网络运算了
级别: 上尉
[棋中红钻3级]发帖数量≥500篇 [棋中黄钻1级]金币数量≥100枚 [未点亮棋中蓝钻]乐币数量<10枚 [棋中粉钻1级]贡献值数量≥1点 [未点亮棋中彩钻]精华帖数量<1篇
发帖
939
金币
433
威望
0
贡献值
3
乐币
2
主题
6
只看该作者 5楼 发表于: 2020-10-07
THANKS for sharing !!!
快速回复

限56 字节
请不要在回贴只采用字母:“ PP、asdfhjkl、HAO、OK、ddddddd ......”。  请不要在回贴过于简单的内容:“不错、顶、支持、厉害、呵呵、靠、晕........”
 
验证问题: 本站网址是?不带http://
上一个 下一个