【杂谈】学深度学习的你有GPU了吗
随着人工智能越来越火,越来越多的人想从事人工智能相关的工作,如计算机视觉等。如果你正想或已经入门计算机视觉行业,你必须拥有GPU。因为深度学习的成功与否很大程度上取决于硬件承载的能力,所以你必须要一个GPU来训练你的模型!
作者&编辑 | 汤兴旺&言有三
1 什么是GPU
计算机常见的处理器包括CPU和GPU,CPU即中央处理单元(Central processing unit),它是计算机的控制核心。CPU需要很强的通用性来处理各种不同的数据类型,同时在大量的逻辑判断中,包含了大量的分支跳转和中断处理,使得CPU的内部结构异常复杂,不擅长于快速计算。
GPU(Graphic Processing Unit),中文名称是图形处理器。其主要是用于处理图形信号的单芯片处理器,在独立显卡中, 一般位于PCB板的中心 。
GPU专为图像处理设计,存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。
可以说GPU是一种让计算机视觉领域的从业者和无数游戏玩家为之疯狂的处理器,目前GPU是研发强大深度学习算法必备的硬件。
2 GPU发展简史
了解完什么是GPU后,我们说下GPU始祖——Geforce256。
1999年,第一款真正意义上的显卡芯片Geforce256由NVIDIA推出,Geforce256第一次被称为GPU(Graphics Processing Unit),即图形处理单元,其具有完整的顶点变换、光照计算、参数设置以及渲染等四种3D计算引擎,极大加快了计算机3D程序运行速度,减轻了CPU负担。
尽管Geforce256中的固定管线虽然能实现完整的3D图形计算,但是其处理算法固定,弊端日渐凸显,因此人们开始考虑一种可编程的GPU。
于是NVIDIA推出了Geforce3,ATI推出了Radeon8500。这也就是第二代GPU,接下来的几年,GPU都是以这种独立的可编程架构设计发展,时间是1999年到2002年。
但此时的GPU编程比较有限,于是到了03年后,第三代GPU推出,特别是2006年NVIDIA与ATI分别推出了CUDA(Computer Unified Device Architecture,统一计算架构)编程环境和CTM(Close To the Metal)编程环境,这使GPU通用计算编程的复杂性大幅度降低。
GPU技术当前在不断进步,我们再来了解下它的发展历程和其技术的创新和突破。
从上表GPU的发展历程,我们可以从并行体系结构的角度将其划分为三个时代:
1 固定功能架构时代
这个时代发生在1995-2000年, 期间各硬件单元形成一条图形处理流水线,每个流水线功能固定, 硬化了一些给定的函数。其计算模型是流式计算(stream computing),GPU也卸去了CPU的计算负担, 聚焦于图形绘制功能, 促进了图形学发展。
2 分离渲染架构时代
这个时代发生在2001-2005年,此时GPU用可编程的顶点渲染器替换了变换与光照相关的固定单元,用可编程的像素渲染器替换了纹理采样与混合相关的固定单元。这两部分是实现图形特效最密集的部分, 使用渲染器大大加强了图形处理的灵活性与表现力。
3 统一渲染架构时代
从2006年开始到现在GPU技术一直处于统一渲染架构时代。在这一时代,GPU首次提供几何渲染程序(geometry shader program)功能,并动态调度统一的渲染硬件(unified shader)来执行顶点、几何、像素程序,在体系结构上不再是流水线的形式,而呈现并行机的特征。
如今GPU厂商们开始从硬件和API上提供对GPU专门支持,且推出专门做通用计算的GPU(如AMD FireStream和NVIDIA Tesla)。GPU的服务对象也从以图形为主发展为图形和高性能计算并重。
3 GPU与CPU运算能力对比
我们应该知道GPU有着高速的浮点运算能力,那么其计算能力到底有多大呢?
CPU的峰值计算能力=CPU频率×CPU核心数*浮点运算单元数
i7-8700K的CPU频率=3.7GHZ,核数为6,浮点运算单元数为16。
那么i7-8700K的CPU的浮点运算能力是3.7*16*6<360Gflops以下,而目前的TITAN V峰值浮点性能(特指深度学习)为110TFlops(1T=1024G),TESLA v00是125TFlops,可以看出GPU的浮点运算能力吊打CPU。
GPU特殊的硬件架构突出了对CPU的优势:拥有高带宽的独立显存;浮点运算性能高;几何处理能力强;适合处理并行计算任务;适合进行重复计算;适合图像或视频处理任务;能够大幅度降低系统成本。
尽管GPU运算能力超强,但不代表GPU可以取代CPU了。CPU是设计用来处理通用任务的处理、加工、运算以及系统核心控制等业务逻辑类工作,其微架构是为高效率处理数据相关性不大的计算类、复杂繁琐的非计算类等工作而优化的。总之,当前CPU和GPU各有各的优势,各司其职。
4 深度学习与GPU
想要搞好深度学习,GPU是必备的,其适合深度学习的有三大理由,分别是高宽带的内存、多线程并行下的内存访问隐藏延迟和数量多且速度快的可调整的寄存器和L1缓存。
接下来,我们详细说说GPU与深度学习完美搭配的三大理由。
第一大理由——高带宽
首先,我们需要知道CPU是基于延迟优化的,而GPU是基于带宽优化的。举个例子:如下图所示,CPU与GPU就像法拉利与卡车,两者的任务都是从随机位置A提取货物(即数据包),并将这些货物传送到另一个随机位置B。法拉利(CPU)可以快速地从RAM里获取一些货物,而大卡车(GPU)则慢很多,有着更高的延迟。但是,法拉利传送完所有货物需要往返多次,相比之下,大卡车可以一次提取更多的货物,减少往返次数。
换句话说,CPU更擅长于快速获取少量的内存,GPU则更擅长于获取大量的内存。
第二大理由——多线程并行
为了理解多线程并行这个概念,我们同样举一个例子。如下图所示:
如果让大卡车往返多次来提取货物,一旦卡车已经出发,你将会花上大量的时间来等待下一次的货物装载,毕竟卡车速度很慢。然而,如果你使用一队法拉利或大卡车(即多线程并行)来运输大量的货物(例如像矩阵一样的大块内存),那么你只需要花上一点时间来等待第一次运输,之后就无需等待了,因为卸货的过程长,此时所有卡车都在B区排队卸货,所以你可以直接在B区取到你的货物。
这种方法有效地隐藏了延迟,GPU可以在多线程并行下隐藏延迟的同时提供高带宽,因此,对于大块内存来说,GPU提供了几乎没有缺点的最佳内存带宽。这是为什么GPU比CPU在处理深度学习上更快速的第二个理由。
第三大理由——可调整的L1缓存和寄存器
GPU寄存器的充分利用似乎很难实现,因为它作为最小的计算单元,需要进行微调来满足高性能。关于这个问题,NVIDIA已经开发出了很好的编译工具,它可以准确地指出你使用了多少寄存器,让你更容易调整GPU代码,合理安排寄存器和L1缓存的数量以获得快速的性能,这就使得GPU比其他诸如Xeon Phis一类的架构有优势。
最终,这意味着你可以在GPU的L1 缓存和寄存器中存储大量数据来反复计算卷积和矩阵乘法。如果你有一个100MB的矩阵,你可以把它拆分为适合你缓存和寄存器的多个小矩阵,然后用10-80TB/s的速度做三个矩阵块的乘法,处理速度非常快。这也是GPU比CPU快且更适合于深度学习的第三个原因。
5 选择GPU的笔记本
从开始我们就说过学深度学习成功与否与硬件的关系很大,其最重要的就是显卡,当然我们首推Nvidia显卡。想要了解各种显卡参数,请看https://www.nvidia.com/zh-cn/
因为显卡的参数就是显存,而且我们大部分模型是在GPU上进行训练,所以这个显存当然是越大越好,但是对于个人开发者来说,必须在显存和经济能力之间取得平衡。在这里我们推荐显存8G的显卡,其可以满足你在学习深度学习时候的大多数需求,不管是验证和训练都不会有问题!
最后推荐下预算8000左右可以购买神舟(HASEE)战神ZX8-CR6S1,其是GTX1070 8G独显!
当然如果大家有更好的选择,欢迎留言!
6 深度学习与GPU
对于像我这样的学生党来说,上面带有GPU的笔记本的价格还是挺贵的,如果我们要去租GPU,一个月也要好几百,这也是我们无法承受的。于是我们在想,如果要有免费的GPU多好!接下来我就推荐一些免费的GPU资源。
1、Google Colab
Google Colab,全名Colaboratory,它可以让我们免费使用GPU,其GPU型号是Tesla K80!它本身包含 Keras、TensorFlow、PyTorch、OpenCV等大部分深度学习库,基本不需要我们额外安装运行环境。下面是其官方教程,我们可以凭借它基本入门Colab。
新手指引:https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d
常见问题:https://research.google.com/colaboratory/faq.html
2、FloydHub
FloydHub,这是一个由Heroku提供的Deep Learning的训练平台,可以让你使用简单的命令就在本机提交训练任务,支持Caffe,Tensoflow,Torch等等。
对于新用户,有免费的2个小时的GPU训练时间,当然后续你可以购买其他计划。
3、 Kaggle Kernels
Kaggle Kernels是一个能在浏览器中运行Jupyter Notebooks 的免费平台,我们可以通过它免费使用 NVidia K80 GPU训练我们的模型。
总结
工欲善其事,必先利其器,为了学好深度学习,我们必须备好GPU。如果你是刚入门深度学习,请问你有GPU了吗?如果您在深度学习领域工作多年,那么请问您什么时候拥有自己的GPU了呢?欢迎留言!
转载文章请后台联系
侵权必究