Talk - Scaling Distributed Machine Learning with System and Algorithm Co-design 笔记

来源于李沐大神的talk:基于系统和算法的协同设计的大规模分布式机器学习(Scaling Distributed Machine Learning with System and Algorithm Co-design)
视频链接:https://pan.baidu.com/s/1dE5a4dr
PDF: https://pan.baidu.com/s/1dFsvkY1

大规模数据机器学习的需求:

分布式系统:

  • 大数据量,复杂模型
  • 容灾
  • 易用

大规模优化:

  • 通信高效
  • 保证收敛

已存在的一些解决方案

MPI:难以用到稀疏模型上,没有容灾
KV存储:独立的kv对通信带来了很大的通信开销,服务端不好编程
Hadoop/Spark: 只能用同步并行,不好实现其余的并行方式

talk的四大部分

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

EMSO (for )

你可能感兴趣的:(Talk - Scaling Distributed Machine Learning with System and Algorithm Co-design 笔记)