返回

机器学习参数服务器ps-lite(4) 应用层、通信、基础支撑、基类

人工智能

简介

参数服务器ps-lite是一个高效的分布式深度学习训练系统,它可以帮助您在GPU集群上训练大型模型。本文是ps-lite的第四篇,介绍了KVWorker和KVServer这两个重要的组件。

基础支撑类

KVWorker和KVServer都是基于SimpleApp构建的。SimpleApp是一个非常简单的类,它只提供了一些基本的功能,比如初始化、启动和停止。

class SimpleApp {
 public:
  explicit SimpleApp(bool as_daemon) : as_daemon_(as_daemon) {}
  virtual ~SimpleApp() = default;
  virtual bool Init() = 0;
  virtual void Start() = 0;
  virtual void Stop() { running_.store(false); }
  virtual bool IsRunning() const { return running_.load(); }
  virtual bool IsAsDaemon() const { return as_daemon_; }

 private:
  std::atomic<bool> running_{false};
  bool as_daemon_;
};

基类

KVWorker和KVServer都继承自基类SimpleApp。SimpleApp提供了基本的功能,KVWorker和KVServer只需要实现自己的Init()和Start()函数即可。

class KVWorker : public SimpleApp {
 public:
  explicit KVWorker(const std::string& addr) : SimpleApp(true), addr_(addr) {}
  virtual ~KVWorker() = default;
  virtual bool Init() override;
  virtual void Start() override;

 private:
  std::string addr_;
};

class KVServer : public SimpleApp {
 public:
  explicit KVServer(const std::string& addr) : SimpleApp(true), addr_(addr) {}
  virtual ~KVServer() = default;
  virtual bool Init() override;
  virtual void Start() override;

 private:
  std::string addr_;
};

KVWorker

KVWorker是参数服务器的客户端。它可以向参数服务器请求参数,也可以将梯度发送给参数服务器。

bool KVWorker::Init() {
  kv_worker_.reset(new KVWorkerImpl(addr_));
  return kv_worker_->Init();
}

void KVWorker::Start() {
  kv_worker_->Start();
  while (IsRunning()) {
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
  }
}

KVServer

KVServer是参数服务器的服务器端。它可以接收参数请求,也可以接收梯度。

bool KVServer::Init() {
  kv_server_.reset(new KVServerImpl(addr_));
  return kv_server_->Init();
}

void KVServer::Start() {
  kv_server_->Start();
  while (IsRunning()) {
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
  }
}

总结

本文介绍了参数服务器ps-lite的KVWorker和KVServer两个组件。这些组件是参数服务器的基础,它们提供了基本的功能,比如初始化、启动和停止。