分布式系统:参数服务器

参数服务器

问题

  • 大规模的机器学习。
  • 训练数据的规模可以从1TB到1PB。模型的参数极多,可以从 1 0 9 10^9 109 1 0 12 10^{12} 1012个。

架构

  • 训练数据分区,分散到不同的worker上训练。
  • 每个worker只需要用到一小部分参数——由它分配到训练数据决定。
  • 训练前,worker从参数服务器pull需要的参数集合。
  • 训练完,worker将对参数的更新push到参数服务器。

异步

  • 如果用户没有限制任务依赖,则不用等push/pull完成,可以先开始下一个任务。
  • 虽然参数可能是过时的(stale),但是很多机器学习算法都可以容忍。直观上看,如果参数只是发生了小小变化,用旧的数字也不会有什么大错。

故障耐受

  • 参数服务器有多台。实现fault-tolerance的方法就是做副本。
  • 用consistent hashing来决定每个参数存放在哪台服务器。
    • 一致性哈希的基本想法就是把服务器用哈希函数映射到一个环形数域,参数也用另一个哈希函数映射到同一个环形数域。
    • 一台服务器负责存放哪个参数,就按照逆时针方向决定。从它映射到的点,到下一台服务器映射到的点之间,那个区间内的参数由这台服务器负责。
    • 目的是,不管增加服务器,还是减少服务器,影响到的参数存放位置都只是局部的。
  • Replicatng也是顺着consistent hashing的方式:在逆时针的下一台服务器,为本服务器存放的参数做一份副本。因为在consistent hashing中,如果本服务器退出,它承载的参数就是由逆时针方向的下一台服务器承担。
  • worker挂掉,比较没关系,可以用它分配到的训练数据重新训练一次。或者干脆不管,因为丢掉一小部分训练数据通常也没多大影响,顶多是训练得慢一点。

参考

https://pdos.csail.mit.edu/6.824/notes/l-parameter.txt

你可能感兴趣的:(分布式系统:参数服务器)