RecStore 架构总览¶
RecStore 采用分层架构设计,旨在支撑万亿级稀疏参数的存储与高效更新。整个系统从逻辑上分为三层:计算层 (Calculation Layer)、参数服务器层 (Parameter Server Layer) 和 存储层 (Storage Layer)。
架构简图¶
graph TD
subgraph Calculation ["1. 计算层 (Calculation Layer)"]
Model[推荐模型 PyTorch] --> KVClient["Python KVClient<br/>src/python/pytorch/recstore/KVClient.py"]
KVClient --> TorchBinding["PyTorch 扩展<br/>src/framework/pytorch/op_torch.cc"]
TorchBinding --> CommonOp["C++ Interface (CommonOp)<br/>src/framework/op.h"]
end
subgraph PS ["2. 参数服务器层 (Parameter Server Layer)"]
CommonOp --> PSClient["PS Client<br/>src/ps/grpc/dist_grpc_ps_client.cpp"]
PSClient -- "RPC (gRPC/bRPC)" --> PSServer["PS Server<br/>src/ps/grpc/grpc_ps_server.cpp"]
end
subgraph Storage ["3. 存储层 (Storage Layer)"]
PSServer --> CachePS["CachePS 核心逻辑<br/>src/ps/base/cache_ps_impl.h"]
CachePS --> BaseKV["BaseKV 抽象层<br/>src/storage/kv_engine/base_kv.h"]
BaseKV --> KVEngine["KV 引擎 (Composite/PetKV/External)<br/>src/storage/kv_engine/"]
KVEngine --> MemMgr["内存管理器<br/>src/memory/"]
end
style Calculation fill:#5c6bc01a,stroke:#5c6bc0,stroke-width:2px,stroke-dasharray: 5 5
style PS fill:#9e9e9e1a,stroke:#9e9e9e,stroke-width:2px,stroke-dasharray: 5 5
style Storage fill:#689f381a,stroke:#689f38,stroke-width:2px,stroke-dasharray: 5 5
1. 计算层 (Calculation Layer)¶
计算层是 RecStore 与深度学习框架(如 PyTorch)的交界面,负责将模型的前向查询和反向更新请求转换为 RecStore 内部的 Tensor 操作。
- Python Client: 提供面向用户的
RecStoreClient(src/python/pytorch/recstore/KVClient.py)接口。 - PyTorch Binding: 在
src/framework/pytorch/op_torch.cc中定义了torch.ops.recstore_ops扩展。 - C++ Interface:
CommonOp(src/framework/op.h)是客户端的核心抽象,KVClientOp实现了跨组件的调用转发。 - BagPipe GPU Cache: BagPipe ownership 说明 C++ GPU cache 与 Python residency mirror 的单一写者协议。
2. 参数服务器层 (Parameter Server Layer)¶
参数服务器层负责分布式环境下参数的分发与通信。它屏蔽了底层的网络细节,支持多种通信协议。
- RPC 通信: 支持 gRPC 和 bRPC。例如
DistGRPCPSClient(src/ps/grpc/dist_grpc_ps_client.cpp)负责序列化数据并发送请求。 - 服务端分发:
GRPCPS_Server(src/ps/grpc/grpc_ps_server.cpp)接收请求并将其路由给后端的存储逻辑。 - 协议定义:
src/ps/proto/ps.proto定义了GetParameter、UpdateParameter等核心接口。
3. 存储层 (Storage Layer)¶
存储层是 RecStore 的核心,负责参数在异构存储介质(DRAM, NVM, SSD)上的高效读写与管理。
- 核心逻辑 (CachePS):
CachePS(src/ps/base/cache_ps_impl.h)是存储层的入口,负责处理来自 RPC Server 的请求。 - 引擎抽象 (BaseKV):
BaseKV(src/storage/kv_engine/base_kv.h)定义了统一的操作接口。 - 组合引擎:
KVEngineComposite(src/storage/kv_engine/engine_composite.h)通过index.type+value.type组合 DRAM 索引与 DRAM/SSD/Tiered 值存储;仓库默认组合为DRAM_PET_HASH+DRAM_VALUE_STORE+CONCURRENT_SLAB_MEMORY_POOL。 - 内存管理: 提供
PersistSimpleMalloc(src/memory/allocators/persist_loop_slab_allocator.h)等组件,实现对持久化内存的直接管理。
开发参考:添加算子流转
可以参考 添加算子 文档来追踪一个新功能是如何从 Python 层一步步渗透到存储层的。