Df092b20a588b9b88767d4252db4652b
从零实现机器学习参数服务器框架(四)

简介

序号 名称 简介
1 框架架构 介绍整体框架架构、涉及模块
2 模型、数据计算并行 实现参数服务器中的Worker与Server
3 节点间通信接口 实现应用常用接口,使用ZeroMQ实现节点间通信
4 一致性控制 在Server端实现常见的一致性控制模式:BSP/ASP/SSP
5 容错实现 使用CheckPoint Rollback、心跳监测等方式实现计算容错
6 Yarn资源管理系统支持 编写Yarn Application以使用Yarn进行资源分配
7 机器学习算法实现 实现Logistic Regression与KMeans两种算法

前面三篇文章介绍了Worker/Server线程以及它们之间通信方法的实现,然而对于参数服务器的训练过程来说,各个节点在进行迭代计算时常常又需要控制迭代的一致性,以便使梯度下降法在分布式的环境下达到指定的效果。在这一节我将实现BSP/ASP/SSP三种不同的一致性控制模式,它们底层的是通过依赖ProgressTracker来实现的。

一致性控制模式

最常见的一致性控制模式分为三种:BSP/ASP/SSP。这其中单个迭代的过程又分为这几个阶段:

  1. 当前迭代进行计算
  2. 完成计算后进行网络通信
  3. 等待其它节点完成计算

server/abstract_model.hpp

class AbstractModel {
    public:
    // 进行一致性控制
    virtual void Clock(Message &msg) = 0;

    // 更新参数
    virtual void Add(Message &msg) = 0;

    // 获取参数
    virtual void Get(Message &msg) = 0;

    ...

    virtual ~AbstractModel() {}

每个一致性控制都继承了上面的AbstractModelClock方法是最主要的方法。

BSP

BSP

BSP

BSP是最常用的一种模式,它强调的是集群中每个节点的迭代次序完全一致。优点在于简单有效,缺点在于容易受部分滞后节点影响,导致整个集群处理变慢。

server/consistency/bsp_model.cpp

void BSPModel::Clock(Message &msg) {
    int updated_min_clock = progress_tracker_.AdvanceAndGetChangedMinClock(msg.meta.sender);
    // 先从ProgressTracker中获取迭代进度
    int progress = GetProgress(msg.meta.sender);
    CHECK_LE(progress, progress_tracker_.GetMinClock() + 1);

    // 各个节点的迭代进度一致后,才对这些请求进行回应
    if (updated_min_clock != -1) {
        for (auto add_req : add_buffer_) {
            storage_->Add(add_req);
        }
        add_buffer_.clear();

        for (auto get_req : get_buffer_) {
            reply_queue_->Push(storage_->Get(get_req));
        }
        get_buffer_.clear();

        storage_->FinishIter();
    }
}

可以看到BSP内部的实现采用了get_buffer_的缓存队列来阻塞其它节点的Get请求,只有在所有节点的迭代次数达到一致后才会对这些被缓存的Get请求一个个进行处理。

ASP

ASP

ASP

ASP是与BSP截然相反的一种模式,对比BSP的严格控制各节点迭代同步,ASP让每个节点都独立的进行训练,不同的节点不需要互相等待对方。

server/consistency/asp_model.cpp

```cpp
void ASPModel::Clock(Message &msg) {
progress_tracker_.AdvanceAndGetChangedMinClock(msg.meta.sender);
}

void ASPModel::Get(Message &msg) {

top Created with Sketch.