来源于李沐大神的talk:基于系统和算法的协同设计的大规模分布式机器学习(Scaling Distributed Machine Learning with System and Algorithm Co-design)
视频链接:https://pan.baidu.com/s/1dE5a4dr
PDF: https://pan.baidu.com/s/1dFsvkY1
大规模数据机器学习的需求:
分布式系统:
- 大数据量,复杂模型
- 容灾
- 易用
大规模优化:
- 通信高效
- 保证收敛
已存在的一些解决方案
talk的四大部分MPI:难以用到稀疏模型上,没有容灾
KV存储:独立的kv对通信带来了很大的通信开销,服务端不好编程
Hadoop/Spark: 只能用同步并行,不好实现其余的并行方式
Parameter Server Architecture
实现时要注意的关键点:
如何平衡 data consistency 与 speed
SSP就是一个不错的思想
image.png- 用户定义的Filter
可以做一些数据的压缩,甚至是有损的压缩。- 做容灾
通过一致性哈希来分割模型(一致性哈希:http://blog.codinglabs.org/articles/consistent-hashing.html )
链备份
Delayed Block Proximal Gradient
基于Proximal Gradient算法做了并行优化(也是一个收敛算法)
image.png
看起来其实很像梯度下降,如下图:
image.png
区别就是在于用了个Prox函数,可以处理很general的case。
M Li的优化点主要是:
- 把feature分block,一次只update一部分的block
- block之间是bounded-delay并行跑的
加了一些filter压缩通讯
最后是一个收敛的分析,做了一些约束和证明:
image.png
一枚实验
image.png
放松数据的一致性后得到的速度的提升
如何用filter减低数据的通讯
- Key Caching: cache feature IDs (具体看论文[PDF]Communication Efficient Distributed Machine ... - Semantic Schol)
- 数据压缩: 用的LZ压缩,对server起到了很好的效果
- KKT filter: 通过KKT condition把一些梯度设置成0
MXNet
- 和machine learning的区别:任务更复杂,对硬件兼容性更高
- MXNet拿到计算图之后如何做一些后端的优化
MXNet怎么做分布式:
多GPU下使用了2层的server,Level-1负责GPU间的Agg,再走GPU-CPU的通讯。MXNet的通讯模块也就1-2K行
image.png基于上述优化做了个实验,用的mini-SGD, 可以看出这个优化是有效的,Scalability也不错
image.png
网友评论