Deep Net Performance —— 并行处理

20180829
参考:https://www.nowcoder.com/courses/190

GPU

训练深度学习的强大工具,基本上,每个软件库都支持GPU。

CPU需要复杂的控制逻辑来管理不同任务。且CPU设计为一个接一个的串行处理任务,而不是并行处理。并行性可以通过多核技术来获得,这些核是通用的,但需要设计为处理通用任务

用向量来实现深度学习网络,向量代数等并行计算
通过使用并行实现,深度网络能够快上几个数量级。
并行处理:在硬件层实现的并行。

  • 共享内存Shared memory
    GPU:不像CPU只有个位数或者两位数的和,GPU可以有成百上千的和。每一个GPU的和是通用的,能够进行通用的并行计算。Disadvantage:通用性导致了很高的电力消耗。
    现场可编程逻辑门阵列FPGA:FPGA是高可配置的,在最低的逻辑门层次修改芯片的功能。能为深度学习应用定制成低功耗的硬件。
    特定电路集成电路(ASIC):ASIC设计在硬件和集成电路层级,功耗最小。(Tensor Processing Unit \ Nervana System)

  • 分布式计算Distributed Computing

    • 数据并行:让你在训练的每一步在各个不同的节点上,训练数据的一部分子集,对集群中的节点进行参数平均和替换。
    • 模型并行:模型的不同部分会同时在不同的设备上并行训练。
    • 流水线并行:每一个job分解成独立的task,每一个task会被分配到一个专有的工人,以确保每个工人相对来说都得到合理应用。当一个工人完成了task,它可以继续处理流水线上的其他job的task,同时其他工人还在处理当前任务。
      并行编程:在软件层实现的并行。

三种并行化代码的方法

  • 把数据模型分解成几个chunk,每个chunk处理一个task。
  • 有相互依赖性的task,分到同一组里。通过创建多个组,每个组之间没有相互依赖性,即可并行处理这个最终任务。
  • 实现线程,每个线程处理不同task或task组。结合方法二使用

猜你喜欢

转载自blog.csdn.net/qq_21980099/article/details/82181687