StudyAi的TensorFlow课程笔记
client 客户端,设计计算蓝图,通过Session的接口与master以及多个worker相连接
master 负责所有的worker按照流程执行计算图
worker 每一个worker可以与多个硬件设备相连,比如CPU和GPU,并负责管理这些硬件
device
TensorFlow单机模式下,client,master,worker全部在同一台计算机上的同一个进程中
分布模式下,允许client,master,worker在不同的机器的不同进程中,同时由集群调度系统统一管理各项任务
TensorFlow设计了一套为节点分配设备的策略
不同设备间的通信方法:
CPU和GPU通信:
单机多设备分配GPU: tf.device()
for i in range(8):
for d in range(4):
with tf.device('/gpu:%d' %d):
input = x[i] if d is 0 else m[d-1]
m[d],c[d] = LSTMCell(input,mprev[d],cprev[d])
mprev[d] = m[d]
cprev[d] = c[d]
TensorFlow数据并行计算模式:
——加速效果最明显的
同步并行:
使用一个线程。比如1000个样本的minn-batch拆成10份,每份100个样本,进行并行计算。完成后把这10份梯度数据合并得到最终梯度并更新到共享的参数服务器(Parameter Server)。缺点是容错性差,一个device出问题后,就需要重头再来
异步并行:
使用多线程控制梯度计算,每一个线程计算完成后,异步地更新模型参数。缺点是梯度更新不同步,会有梯度干扰问题,每一组梯度利用率下降。
TensorFlow模型并行模式
模型并行就是将计算图的不同部分放在不同的设备上运算,模型并行需要模型自身有大量的互不依赖或者依赖程度不高的子图。
多核CPU上使用多线程基本是没有什么额外开销,多GPU上的限制主要在于PCle的带宽,多机之间的开销在于网络通信。
TensorFlow流水线并行模式
和异步数据并行比较像,只不过在同一个硬件设备上实现并行。提高设备的利用率。