分布式机器学习训练方案

分布式机器学习训练主流方案:Spark MLlib、Parameter Server、Tensorflow。
分布式:指计算节点之间,不共享内存,需要通过网络通信交换数据。

Spark

建立在大量廉价计算节点上,这些节点可以是廉价主机、也可以是虚拟的Docker容器。
Spark将程序拆解成任务DAG,在并行处理DAG过程,关键是找到哪些部分可以并行处理,哪些必须shuffle和reduce。shuffle和reduce操作,决定了纯并行处理阶段的边界,依据此 可以将DAG分割成不同的并行处理stage。
Spark MLlib的并行训练过程,其实是“数据并行”过程,不涉及复杂的梯度更新策略,也没通过“参数并行”的方式实现并行训练:(1)每轮迭代前,master节点 广播全部模型参数到 每个worker计算节点(2)阻断式梯度下降[一致性最强],每轮梯度下降由最慢的节点决定。

Parameter Server

Parameter Server的主要作用是并行进行梯度下降的计算,完成模型参数的更新收敛。损失函数里的正则化项计算,需要汇总所有模型参数才能正确计算,较难对模型参数完全并行训练。
在这里插入图片描述
server节点:保存模型参数,接受worker节点计算出的局部梯度,汇总计算全局梯度,更新模型参数
worker节点:保存部分训练数据,[从server节点拉去最新的模型参数]-pull,[根据训练数据计算局部梯度,上传给server节点]-push

Parameter Server梯度更新方式是异步非阻断式,即一个worker节点的相邻两次局部梯度更新,不需要等其余节点是否已经完成同轮次的局部梯度更新。在同步和异步之间,可以设置“最大延迟”参数,限制异步计算的程度。

Parameter Server服务器节点组内,每个server负责部分模型参数,模型参数使用kv形式,负责一个参数键范围(key range)内的参数。对于每个server负责的参数范围,通过一致性哈希原理(一致性哈希环)保证。

Tensorflow

将模型转化成有向计算图,利用关系图进行调度的原则:存在依赖关系的任务节点或者子图间需要串行执行,不存在依赖关系的任务节点或子图间可以并行执行。
Tensorflow维护一个任务队列:当一个任务的前序任务全部执行完时,将当前任务推送到任务队列尾;有空闲计算节点时,该计算节点 从任务队列的队首拉取任务进行计算。
对比Spark的并行机制更多是任务内部的并行执行;Tensorflow的任务关系图是把任务拆解到非常细粒度的操作级别,并行执行 互不依赖的子任务 加速训练。

单机版的Tensorflow训练,在共享内存里,实现CPU+GPU的并行计算;而**多机分布式训练,**是由多台不共享内存的独立计算节点组成,计算节点间需要依靠网络通信,类似Parameter Server的计算环境。

单机版的Tensorflow训练,是在一个worker节点进行的。每个worker内部是CPU+GPU模式:GPU多核优势,可以快速处理矩阵加、向量乘等张量运算。在处理一个任务节点或任务子图时,CPU主要负责数据和任务调度,GPU负责计算密集度高的张量运算。如处理两个向量乘op,CPU居中调度把两个向量对应范围的元素发给GPU,再收集处理结果,生成处理好的结果向量。

多机分布式训练,平台存在多worker节点,其中可采用tf.distribute.experimental.ParameterServerStrategy,各worker节点以数据并行方式训练,即任务关系图相同,训练数据不同,梯度以异步非阻断式的server&worker结构 形式汇总。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值