31 CPU与GPU

CPU是串行计算,单次计算的能力更强,但是需要从寄存器中取数据,所以如果计算次数过多,其时间会画到读取数据上面,导致CPU远远达不到最好的计算效果。(如果要提升CPU利用率,方法一是增加并行的核,方法二是提前进行缓存)

GPU是并行计算,相当于有几千个计算能力比CPU更差一些的核,这样解决了大量小计算的取数据的问题,可以同时进行上千个线程。

例子: CPU对于按行的处理更快,GPU对按列的更快

cpu和gpu跑卷积神经网络 gpu神经网络比cpu快多少_人工智能


由于CPU和GPU的带宽不同,所以不要频繁在CPU和GPU之间传数据,因为会有带宽限制和同步开销。

cpu和gpu跑卷积神经网络 gpu神经网络比cpu快多少_fpga开发_02


高性能计算编程

CPU:C++或高性能的语言(编译器较成熟)

GPU:CUDA、OpenCL(编译器较成熟)

硬件与编译器同样重要。

32 TPU及其它

DSP:数字信号处理

  • 为数字信号处理算法设计:点积、卷积
  • 低功耗、高性能:比移动GPU快5x,功耗更低
  • 编程和调试困难(所以用的不多),编译器质量良莠不齐

FPGA:可编程阵列

  • 有大量可以编程逻辑单元和可配置的连接
  • 可以配置成计算复杂函数
  • 通常比通用硬件更高效
  • 工具链质量良莠不齐
  • 一次编译需要数小时

AI ASIC

  • 深度学习的热门领域
  • GoogleTPU (核心就是做大矩阵乘法,systolic array,w(Y = WX)大小和阵列大小一样)
  • 自己做的成本低,不然卡的利润过高
    硬件越专用,越容易在专用领域上做出高端芯片。

33 单机多卡并行

多GPU并行使用,可以分为数据并行或模型并行
数据并行:把小批量分为n块,每块GPU拿到完整参数计算一块数据的梯度。这样计算效率一般更高,因为每块GPU对一个batch计算的时间都差不多,并行的同步性也比较好。
模型并行:把模型分成n块,每个GPU拿一块模型和它的前向结果。因为模型太大了就需要分割计算。

34 多GPU训练实现(编程实现)

35 分布式训练

数据放在分布式文件系统上,分多块GPU来进行训练,尽量在一个小集群里面做数据通讯,而不要做全局通讯。比如在GPU上加一层server,server为CPU和GPU之间的桥梁,防止很多无用的通讯。

cpu和gpu跑卷积神经网络 gpu神经网络比cpu快多少_人工智能_03


同步SGD:每个worker都同步计算一个批量,n个GPU得到单GPU的n倍加速。性能:因为每个批量的计算时间是max(计算时间,收发时间),所以只要解决收发问题,就可以保证GPU一直满负荷运算,而不是在等待。

cpu和gpu跑卷积神经网络 gpu神经网络比cpu快多少_cpu和gpu跑卷积神经网络_04


适用情况

  • 使用一个大数据集(最好)
  • 需要好的GPU-GU的带宽
  • 模型的计算通讯比要号(FLOP / Model Size)
  • 使用足够大的批量大小来获得好的系统性能
  • 使用高效的优化算法对应批量大小