分布式计算框架: 参数服务器

简介

产生背景:

数据量和模型的复杂性提升,导致了参数数量的上升,单台机器已经不能够快速的完成机器学习算法模型的训练

发展历史:

  1. 最早来自于Alex Smola于2010年提出的并行LDA的框架。它通过采用一个分布式的Memcached作为存放参数的存储。效率与灵活性偏差
  2. 后来由Google的Jeff Dean进一步提出了DistBelief, 将巨大的深度学习模型分布存储在全局的参数服务器中,计算节点通过参数服务器进行信息传递,很好地解决了SGD和L-BFGS算法的分布式训练问题
  3. 后来由李沐提出更加通用的第三代参数服务器设计

架构特点:

典型的Master-Slave架构,Server充当着Master角色,保存着现有的模型参数;Worker充当着Slave角色,通过计算数据得到模型参数并向Server进行Push。Worker也可以向Server发起Pull请求,获取现有的参数

主要目标:

  1. 解决参数过大,单机无法存储问题
  2. 确保机器学习算法训练迭代训练过程中,参数的状态能够被保存

主要挑战:

  1. Push、Pull参数时需要消耗大量的带宽
  2. 大多数的机器学习算法是线性的,集群整体进度容易受到单个落后节点的影响
  3. 容错性容易导致严重问题,需要额外小心设计

机器学习算法特点

既然参数服务器是专门为机器学习算法训练而设计的通用框架,我们这里先了解一下机器学习算法的通用特点:

  1. 特征提取:预先处理数据,提取出能够描述被训练数据的特征向量
  2. 目标函数:捕捉学习模型的特征,机器学习算法通常是通过降低目标函数的输出值来完成模型的训练。一般情况下都是通过迭代,最终大致收敛完成训练
  3. 学习

架构

parameter_server_arch

parameter_server_arch

  • Server Node: 存储部分参数,全局共享给Worker Node使用;相互通信以实现参数复制、可扩展
  • Server Manager: 维护着各个Server Node的元数据,列如节点的运行状态、维护的参数片段
  • Worker Node: 存储部分训练数据,通常使用梯度下降法进行参数计算,只能和Server Node进行通信
  • Task Scheduler: 分配任务给Worker Node并监控进度

数据一致性模型

在各个计算节点并行高效计算时,参数服务器通常需要根据机器学习算法对数据一致性的敏感性制定针对性的策略,从而达到计算效率与数据一致性的平衡。都在计算的过程中没有保证好数据一致性,那么很有可能会增加最终计算的收敛时间。以下是通常使用到的三种一致性模型:

  1. Sequential: 也称BSP模型,不同迭代之间是完全串行的
  2. Eventual: 也称ASP模型,与Sequential完全相反,不同迭代之间是完全并行的
  3. Bounded Delay: 也称SSP模型,是前两种模型的折中,等待固定的时间t才能进行下一个迭代计算,通过控制t的值可以变换成前两种模型

落后节点问题

参数服务器作为专门为采用迭代-收敛法训练的机器学习算法而设计的分布式计算框架,为了保证计算参数的一致性,最简单的方式就是采用BSP模式进行计算

top Created with Sketch.