动手学深度学习 | 深度学习硬件:CPU和GPU | 30

CPU和GPU

我们讲讲GPU和CPU是什么,而且为什么深度学习使用GPU会快。

上图最直观的就是CPU的浮点运算能力比显卡差很多,但是显卡的显存不会很大,32G其实也就封顶了,但是CPU的内存可以一直叠加。

物理核只有一个,但是可以有2个超线程。就是市面上很多说的4核8线程。

超线程对于有IO等待的任务还是有用的,增加并行度。但是对于深度学习这种计算密集的,实际上超线程并不会有提升,因为超线程是共享的寄存器,计算密集型如果一个线程把cache占满了,那么另外一个线程也是只能等着。

上面关于向量的计算,左边会比右面(numpy)会慢很多。实际上会有慢个几百倍。

左边每次计算一次都要调用一次资源,python资源调动的开销还是挺大的,

但是这个加法运算是容易在Cpp中进行并行的。

CPU性能的提升就是一个保证cache的稳定性,还有一个就是尽量的利用多核。

上面一个方框可以认为是一个“大核”,其中的每个绿点可以看做是一个计算单元,在每个计算单元都可以开一个计算线程。也就是GPU是可以开出上千个线程。

就算GPU每个计算单元算的比CPU慢,但是人家数量多,总体的计算量还是远高于CPU的。

计算的峰值很难达到很大程度与内存的带宽有关,计算的再快,来不及读取,其实也是白费的。

GPU通过多核和高速带宽来实现高速的计算。

显存都是高带宽的内存,这个是很贵的。

GPU基本是没有逻辑控制单元的,就是存在大量的计算核,所以GPU的控制流处理能力很差。

QA

  1. 如果要提高泛化性,就有可能要增加数据?那么关于调参呢?

在其他条件都不变的情况下,增加数据确实是提高泛化性最直接的方法。当然数据的质量才是关键,如果找了一堆相似的图片,那么再多的图片其实也是没有效果的。

沐神建议是可以调参,但是不要过度调参,因为过度调参的话,可能只能fit到当前的数据。

  1. LLC是什么?

last level cache,就是直接和内存交换的那一级的缓存,基本的性能瓶颈也是在这里。

  1. 研一刚进入科研,是一直看论文吗?代码要怎么练习才能复现论文?

首先80%的论文是不能复现的。而且如果要复现一篇论文,你要理解论文中的每一句话,而且作者有把里面的关键细节给写出来。

但是很多时候你不用搞得那么复杂,作者可能会放代码,别人可能也会复现代码,你可以去研究别人的代码。而且代码和论文多多少少有些不一样,很多实现的技术细节是不一样的。代码也要去看懂每一句话,然后去琢磨这个细节到底是干嘛的,

网站:paper with code

  1. 分布式和高性能的差别是什么?

分布式主要考虑的容灾的问题,就是一台服务器挂了之后应该如何应对。

高性能一般不太会去考虑容灾的问题,更加关注的性能的问题。

  1. resnet只能用在图像领域吗?文本可以用吗?

resnet不能用在文本上,但是我们后面将讲如何使用卷积来处理文本。

  1. Xavier初始化和BN可以一起用么?

是可以一起用的,只不过说的是BN不要和dropout一起使用。

  1. 看了很多目标检测的paper,但是现在打比赛就是一些简单集成,数据增强,感觉没有什么模型原创性,怎么才能有更多的模型改造和优化能力?

打比赛可以打一打,但是不会学到太多东西...

原文地址:https://www.cnblogs.com/Rowry/p/15363768.html