分布式机器学习笔记
刘铁岩老师出的新书《分布式机器学习:算法、理论与实践》中摘录了一些笔记,总体来说这本书偏向综述,给出了大量的参考文献,可供后续进一步学习
数据与模型并行
- 数据并行
- 数据样本切分方式
- 随机采样(有放回)
- 优点:满足局部数据与原始数据是独立同分布
- 缺点:1)数据量大时全局采样复杂度比较高2)少量出现的样本有可能
- 置乱切分(无放回)
- 优缺点正好与随机采样相反
- 随机采样(有放回)
- 按数据维度切分
- 只适用特定算法,如:决策树或线性模型
- 数据样本切分方式
- 模型并行
- 神经网络
- 横向按层划分
- 为避免节点之间等待,可以设计成节点之间的流水线
- 纵向跨层划分
- 模型随机划分
- 横向按层划分
- 神经网络
通信机制
- 如果计算与通信的时间占比为1:1,那么根据Amdahl’s law(阿姆达尔定律)无论用多少机器并行计算,其加速比也不会超过两倍
- 通信拓扑:
- 基于迭代式MapReduce/AllReduce
- 注意allreduce通信算法的设计,可以减少通信次数和通信量
- 很多神经网络训练是基于AllReduce的
- caffe2的gloo
- nvidia的NCCL
- 基于parameter server
- cmu的parameter server
- 微软的multiverso
- 基于图的拓扑(tensorflow)
- 基于迭代式MapReduce/AllReduce
- 通信的步调
- 同步通信
- 异步通信
- 降低通信频率
- 增加通信间隔
- 异步通信模式在凸优化下可以保证不降低精度
- 非对称的推送和获取
- 异步通信模式下,推送梯度和更新工作节点的参数步调不一致
- 计算和传输流水线
- 比较巧妙,通信和计算分两个线程,计算线程每完成一次就把计算线程的结果buffer和通信线程的结果buffer做一次对调,然后两个线程再继续推进
- 增加通信间隔
- 降低传输数据量
- 如果梯度更新小于阈值,则不传输
- 模型用svd分解,降为低秩后,再传输
- 模型量化(bit化)后传输,关键在于量化方法
分布式机器学习算法
收敛速度衡量:$E|| w_T - w^*||^2 \leq \epsilon(T)$
学术界针对随机梯度优化算法的改进方向:
- 通过缩减随机优化算法的方差提高对数据的利用率
- SVRG,SAG,SAGA
- 在基本的随机优化算法的基础上与其他优化算法组合,从而得到更快的收敛速度
- 常见分布式机器学习算法及其特点
分布式机器学习算法 | 每个worker优化 | 划分 | 通信 | 聚合 |
---|---|---|---|---|
同步SGD | SGD | 数据样本划分 | 同步通信 | 全部模型梯度加和 |
模型平均(MA) | 不限 | 数据样本划分 | 同步通信 | 全部模型加和 |
BMUF | SGD | 数据样本划分 | 同步通信 | 全部模型加和 |
ADMM | 不限 | 数据样本划分 | 同步通信 | 全部模型加和 |
弹性平均SGD(EASGD) | SGD | 数据样本划分 | 同步/异步通信 | 全部模型加和 |
异步SGD(ASGD) | SGD | 数据样本划分 | 异步通信 | 部分模型加和 |
Hogwild! | SGD | 数据样本划分 | 异步无锁通信 | 部分模型加和 |
AdaDelay | SGD | 数据样本划分 | 异步通信 | 部分模型加和 |
。。。 |
一些研究表明:
- 凸优化中,随机样本带来的噪声远大于异步延迟带来的噪声,因此ASGD完全能达到单机SGD相同的收敛速率
- 非凸问题中,异步延迟引入的额外随机性可能帮我们探索更多更好的局部最优点,缓解训练中的过拟合问题
- 分析异步更新的迭代公式,可以把异步更新理解为冲量的作用,这个角度也说明异步更新机器数量不能太多
Hil_C对《分布式机器学习:算法、理论与实践》的笔记(18)
数据划分:
通过全局随机采样或者shuffle来进行划分时,前者问题是全局采样代价比较高,并且低频的数据难以被选择出来,后者问题是置乱切割,把全局数据shuffle之后分配到各个节点上,但是问题是乱序操作等价于或者接近于无放回的操作对很多机器学习理论中中的IDD假设不能满足。
数据划分还可以通过对维度的切分来划分,但是这时候适用的优化方法有限,例如坐标下降法,其余的由于不同维度之间计算的依赖,有非常大的通讯代价。
模型划分:
线性模型根据维度划分,深层神经网络划分考虑模型的逐层划分与纵向划分。
逐层划分的依赖关系接口清晰,但是并行度可能不够,因为一层的参数就超出了一个节点的容量了。跨层的纵向划分的依赖关系复杂,实现起来难度很大。
模型划分的随机划分手段:规模更小的骨架网络,骨架网络存在于每个工作节点,传输非骨架结构的参数,探索全局的结构。骨架网络的选取可以是周期性更新的,对全局拓扑结构的探索也是动态/随机的,大大减小模型并行的通信代价,对模型并行的效果有一定保证。
2019-02-17 16:06:54 回应
数据并行的框架下,通讯内容可以是子模型,或者非常重要的的样本(SVM中可以使用SV)。
模型并行就是中间的计算结果,可以用计算图和数据流来表示,传输量比较大可以考虑对信息进行压缩。
MapReduce通信的拓扑结构:
1.二分图的MapReduce的想法导致的问题是完全依赖硬盘IO逻辑导致的数据互访会使得效率很低。
2.中间状态不能维持,无法高效衔接。
迭代式MapReduce的结构:
1.完全依赖于内存的实现,不需要依赖IO接口(问题是这时候运算节点和逻辑存储节点没有很好的逻辑隔离,所以需要同步通信,Mapper运算步骤结束之后才能开Reuduce过程)
2.perisistent store中间的结果
3.MapReduce的使用范围并不是很大
通过Parameter Server的星型拓扑结构:
1.逻辑隔离的实现,更加灵活地支持不同的通讯模式,不需要时刻保持同步
2.多个参数服务器存储较大的结构,