深度学习利器之 GPU
1.背景
深度学习算法在 CPU 和 GPU 上的训练效率有明显的差距。为什么 GPU 更适合深度学习,今天和大家扒一扒 GPU。
2.器材
● Python
● Linux Shell
3.内容
3.1 GPU 和 CPU 架构差别
此图片来源 nVidia CUDA 文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
可以看出 CPU 的结构比 GPU 结构要复杂。
解读:
名称:CPU(Center Processing Unit)即中央处理器,GPU(Graphics Processing Unit)即图形处理器
通过控制单元,CPU 能处理复杂的逻辑计算,用缓存来换取低延迟,具有强大的计算单元,支持通用的计算,CPU 适用于复杂计算和控制,如操作系统,分布式计算,人工智能算法等;
相比 CPU,GPU 只有少量的缓存和而拥有大量的计算单元(简单计算)。特别适用于大吞吐量的简单的任务,最早是主要是为了支持视频游戏(即显卡)中,对海量数据做简单操作,比如坐标变换等。
有个形象的比喻: CPU 是教授(少),GPU 是小学生(多)
3.2 GPU 发展史
解读:
1999 年,NVIDIA 发布了 Geforce 256, 第一款提出 GPU 概念,开天辟地的产品.
2003-2004 年左右,图形学之外的领域专家开始注意到 GPU 与众不同的计算能力,开始尝试把 GPU 用于通用计算(即 GPGPU)
NVIDIA 提出高性能并行计算平台和编程模型。CUDA(Compute Unified Device Architecture 的简称),GPU 计算应用到各个领域。
3.3 什么程序适合 GPU
(1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是 SSD, 也实在是太慢了。
(2)易于并行的程序。GPU 其实是一种 SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。
目前编写 GPU 上跑的程序,有 CUDA 提供了良好的平台,可以通过 C 语言来编写。但是相对入门门槛高,好在现在已有框架已经封装好 GPU 计算,如 tensorflow, 在默认情况下可以使用 GPU 来计算,而不需要做额外的处理。
3.4 找一找你的 GPU
查看显卡和 CPU 信息
lspci | grep -i vga
可以看到两种一个 NVIDIA 一个是服务器的显卡 ASPEED
查看具体信息
lspci -v -s 02:00.0
可以看显存等信息
nvidia 显卡使用情况
nvidia-smi
看看你的 tensorflow 是不是跑在 GPU 上
要配置 tensorflow 支持 GPU 计算,需要安装 CUDA9.0 和 cuDNN 以及疼 soflow GPU 版本。 安装这里就不说了。 这里验证下 tensorFlow 是否跑在 GPU 上。
tensorflow 也提供了许多灵活的配置,来限制 GPU 的使用情况。
限制使用 GPU,下面限制只使用 0 和 1 GPU
限制 GPU 使用率
4.结语
和大家一起了解了下 GPU。总结一下,GPU 拥有众多处理简单任务的计算单元(核),适用于大吞吐量的并行计算。适合深度学习过程中大量卷积计算(矩阵操作)。流行的深度学习框架都支持 GPU 计算,如 tensorflow,keras 等。
版权声明: 本文为 InfoQ 作者【AIWeker-人工智能微客】的原创文章。
原文链接:【http://xie.infoq.cn/article/ad80f6b6131f7180f9226a7a4】。文章转载请联系作者。
评论