跳转至

RecStore 参数服务器模块

概述

RecStore 参数服务器(PS)模块负责分布式训练中模型参数和嵌入表的存储、管理和同步。采用分层设计,通过抽象接口支持 gRPC、bRPC 等多种通信协议。

架构设计

模块组织

模块 目录 说明
base ps/base 抽象接口和基础数据结构
grpc ps/grpc gRPC 协议实现
brpc ps/brpc bRPC 协议实现
proto ps/proto Protocol Buffer 定义
rdma ps/rdma RDMA 实现(实验性)

核心接口

BaseParameterServer - 服务器抽象基类

class BaseParameterServer {
  virtual void Init(const json& config);
  virtual void Run() = 0;
};

BasePSClient - 客户端抽象基类

方法 说明
GetParameter 同步获取参数
PutParameter 设置参数初始值
UpdateParameter 更新参数(应用梯度)
InitEmbeddingTable 初始化嵌入表
AsyncGetParameter 异步获取参数
PrefetchParameter 预取参数

数据结构

参数压缩格式

struct ParameterCompressItem {
  uint64_t key;          // 参数键
  int dim;               // 维度
  float embedding[0];    // 可变长度数组
};

嵌入表配置

struct EmbeddingTableConfig {
  uint64_t num_embeddings;  // 嵌入数量
  uint64_t embedding_dim;   // 嵌入维度
};

工作流程

参数操作

  1. GetParameter - 客户端发送 keys,服务器返回对应的参数值
  2. PutParameter - 初始化阶段设置参数初值
  3. UpdateParameter - 训练过程中更新参数(通常是应用梯度)

预取机制

1. PrefetchParameter(keys) -> prefetch_id
2. [等待网络传输和处理]
3. WaitForPrefetch(prefetch_id) / IsPrefetchDone(prefetch_id)
4. GetPrefetchResult(prefetch_id) -> values

模块说明

详细文档:

配置

参数服务器通过 JSON 配置文件指定后端类型和参数。详见 config.md

基本配置结构:

{
  "backend": "grpc",  // 或 "brpc"
  "server_addresses": ["192.168.1.1:50051"],
  "num_embeddings": 1000000,
  "embedding_dim": 128
}