GPU与Cuda
这篇文章来聊聊做深度学习最离不开的GPU以及cuda,GPU部分的科普知识参考自网上资料。
一.什么是GPU
我们知道计算机常见的处理器包括CPU和GPU,CPU即中央处理单元(Central processing unit),它是计算机的控制核心。CPU需要很强的通用性来处理各种不同的数据类型,同时在大量的逻辑判断中,包含了大量的分支跳转和中断处理,使得CPU的内部结构异常复杂,不擅长于快速计算。GPU(Graphic Processing Unit),中文名称是图形处理器。其主要是用于处理图形信号的单芯片处理器,在独立显卡中, 一般位于PCB板的中心 。
GPU专为图像处理设计,存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache缓存。
可以说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的服务对象也从以图形为主发展为图形和高性能计算并重。
GPU特殊的硬件架构突出了对CPU的优势:
拥有高带宽的独立显存
浮点运算性能高
几何处理能力强
适合处理并行计算任务
适合进行重复计算
适合图像或视频处理任务
能够大幅度降低系统成本
尽管GPU运算能力超强,但不代表GPU可以取代CPU了。CPU是设计用来处理通用任务的处理、加工、运算以及系统核心控制等业务逻辑类工作,其微架构是为高效率处理数据相关性不大的计算类、复杂繁琐的非计算类等工作而优化的。总之,当前CPU和GPU各有各的优势,各司其职。
二.深度学习与GPU
想要搞好深度学习,GPU是必备的,有以下三大个理由,分别是高宽带的内存、多线程并行下的内存访问隐藏延迟和数量多、速度快、可调整的寄存器和L1缓存,下面仔细展开。
第一大理由——高带宽:
CPU是基于延迟优化的,而GPU是基于带宽优化的。
举个例子:CPU与GPU就像法拉利与卡车,两者的任务都是从随机位置A提取货物(即数据包),并将这些货物传送到另一个随机位置B。法拉利(CPU)可以快速地从RAM里获取一些货物,而大卡车(GPU)则慢很多,有着更高的延迟。但是,法拉利传送完所有货物需要往返多次,相比之下,大卡车可以一次提取更多的货物,减少往返次数。
一句话总结就是:CPU更擅长于快速获取少量的内存,GPU则更擅长于获取大量的内存。
第二大理由——多线程并行
如果让大卡车往返多次来提取货物,一旦卡车已经出发,你将会花上大量的时间来等待下一次的货物装载,毕竟卡车速度很慢。然而,如果你使用一队法拉利或大卡车(即多线程并行)来运输大量的货物(例如像矩阵一样的大块内存),那么你只需要花上一点时间来等待第一次运输,之后就无需等待了,因为卸货的过程长,此时所有卡车都在B区排队卸货,所以你可以直接在B区取到你的货物。
这种方法有效地隐藏了延迟,GPU可以在多线程并行下隐藏延迟的同时提供高带宽,因此,对于大块内存来说,GPU提供了几乎没有缺点的最佳内存带宽。这是为什么GPU比CPU在处理深度学习上更快速的第二个理由。
第三大理由——可调整的L1缓存和寄存器
GPU寄存器的充分利用似乎很难实现,因为它作为最小的计算单元,需要进行微调来满足高性能。关于这个问题,NVIDIA已经开发出了很好的编译工具,它可以准确地指出你使用了多少寄存器,让你更容易调整GPU代码,合理安排寄存器和L1缓存的数量以获得快速的性能。
最终,这意味着你可以在GPU的L1 缓存和寄存器中存储大量数据来反复计算卷积和矩阵乘法。如果你有一个100MB的矩阵,你可以把它拆分为适合你缓存和寄存器的多个小矩阵,然后用10-80TB/s的速度做三个矩阵块的乘法,处理速度非常快。这也是GPU比CPU快且更适合于深度学习的第三个原因。
三.什么是cuda?
显卡:(GPU)主流是NVIDIA的GPU,深度学习本身需要大量计算。GPU的并行计算能力,在过去几年里恰当地满足了深度学习的需求。AMD的GPU基本没有什么支持,可以不用考虑。
驱动:没有显卡驱动,就不能识别GPU硬件,不能调用其计算资源。
CUDA:是NVIDIA推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能够进行复杂的并行计算。主流的深度学习框架也都是基于CUDA进行GPU并行加速的,几乎无一例外。还有一个叫做cudnn,是针对深度卷积神经网络的加速库。
NVIDIA cuDNN:是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中。
CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
四.安装cuda与Tensorflow-GPU
下面是在win10系统上安装的流程,硬件上要是NVIDIA GPU。我们需要先准备:cuda、cudnn与Tensorflow,cuda与cudnn版本要与Tensorflow-gpu的对应。举例:我想在电脑中安装Tensorflow-gpu1.15的版本,在官网对应的是 CUDA Toolkit 10.0 版本和cuDNN v7.5。版本对应非常重要。
1.首先在NVIDIA官网下载好CUDAToolkit ,对应版本后最好选择默认安装路径。
官方下载地址:https://developer.nvidia.com/cuda-downloads
一路next即可,为了验证是否安装成功打开cmd命令行输入nvcc -V若显示配置信息则完成安装,如图:
2.接下来安装cuDNN,注意这是需要登陆账号,要先注册后才可以下载。
cuDNN Download:https://developer.nvidia.com/rdp/cudnn-download
下载解压后cuDNN如下图:
将上图的三个文件夹中的文件分别复制到前面cuda安装路径中对应的同名文件。到此cuda安装完成。
3.Tensorflow-GPU的安装
在anaconda Prompt下输入指令:
pip install tensorflow-gpu==1.15.0 -i https://pypi.douban.com/simple,其中https://pypi.douban.com/simple是豆瓣镜像,下载速度比官方的快。1.15.0版本可以随个人需要版本变动,安装到此结束。
五.结束语
通过上述的介绍,大家应该都能明白刚入门学AI的小白学习是很不容易的,配置环境这一关如果没有人指导或者自己十足有耐心,必不可少要走很多弯路的。用了华为云ModelArts以后我再也没有自己用本地的跑项目,我们知道这个一站式AI开发平台有多方便,即使电脑配置很差也丝毫不影响。全程在云端完成,而且交互操作友好,十分推荐AI小白以及初级开发者使用。最后就抛出个链接吧,大家可以自行过来体验感受下,从此告别繁琐的安装配置步骤,本地计算机的内存可以腾出干更多别的事情,何乐不为?
华为云ModelArts官网:https://console.huaweicloud.com/modelarts/?region=cn-north-4#/dashboard
- 点赞
- 收藏
- 关注作者
评论(0)