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组。结合方法二使用