PERSIA
快手开源的百万亿参数分布式推荐系统训练框架,Rust+PyTorch 混合架构支持亿级 DAU 场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
快手开源的百万亿参数分布式推荐系统训练框架,Rust+PyTorch 混合架构支持亿级 DAU 场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:PERSIA 项目 Logo
想象一下打开抖音或快手的瞬间——系统要在毫秒级时间内,从数以亿计的视频中挑出你最想看的那一条。这背后,是推荐算法在疯狂运转:用户 ID、兴趣标签、历史行为、视频特征……每一个维度都需要独立的「记忆单元」来存储参数。当用户规模达到亿级,这些参数的总和轻轻松松突破万亿。
这就是推荐系统区别于普通深度学习的独特挑战:参数规模巨大但计算密度相对较低。传统的 PyTorch、TensorFlow 训练框架,在处理这种「宽而浅」的 Embedding 表格时效率极低——GPU 算力被白白浪费在稀疏数据处理上。
快手科技 AI 平台团队联合苏黎世联邦理工学院(ETH Zurich),给出了他们的答案:PERSIA(Parallel rEcommendation training System with hybrId Acceleration,混合加速并行推荐训练系统)。
PERSIA 的核心设计哲学是**「让专业的人干专业的事」**。系统由三类角色组成:
负责存储和管理海量的稀疏 Embedding 参数(万亿级别)。这些参数以 Hash 桶形式分片,每个桶独立管理更新。在推荐场景中,用户的 ID 特征经过 Hash 后,Lookup 找到对应的 Embedding 向量,再参与后续计算。Rust 语言实现的参数服务器,通过 SIMD 指令和高速序列化(Speedy)最大化吞吐。
运行在 CPU 上的 worker,从 Parameter Server 获取 Embedding 数据做前向传播,并将梯度回传。其核心任务包括:批量 Lookup、梯度聚合、混合通信(All-Reduce + 点对点)。Embedding Worker 与 Parameter Server 之间通过自定义 RPC 协议通信,也支持 NATS 消息队列做服务发现。
运行在 GPU 上的 PyTorch 神经网络训练器。接收来自 Embedding Worker 的稠密 Embedding 向量,结合稠密特征,执行 PyTorch 前向/反向传播。NN Worker 之间通过 NCCL 做 GPU 梯度同步,天然支持多卡多节点扩展。
三层之间通过 NATS 做服务协调,实现了真正的异构并行——CPU 负责稀疏 Embedding,GPU 负责稠密计算,两者各司其职。
PERSIA 支持训练高达 100 万亿(10¹⁴)参数的推荐模型。据项目论文和公开资料,这是截至目前(2021年)公开的最大规模推荐系统模型参数。在快手商业广告场景中,PERSIA 已验证支撑亿级日活(100M DAU)应用的稳定训练。
论文中的基准测试显示,PERSIA 在相同硬件配置下,相比同期主流方案(XDL、TensorFlow Parameter Server)有显著优势。官方描述「单机训练速度提升 640 倍」,主要来自三个方面:
项目核心(Embedding 服务、参数管理、通信层)用 Rust 编写,性能和内存安全兼得;对外暴露 Python SDK,用户用 PyTorch 风格写训练代码即可。Python SDK 提供了 DataLoader、PersiaBatch 等高层抽象,隐藏了分布式通信细节。
from persia import DataLoader, PersiaBatch
# PERSIA DataLoader 自动处理 Embedding Lookup
dataloader = DataLoader(
dataset=StreamingDataset(...),
batch_size=1024
)
for batch in dataloader:
# batch 已经是包含 Embedding + 稠密特征的完整数据
output = model(batch)
output.backward()
PERSIA 提供了完整的 Kubernetes Operator(CRD: PersiaJob),可在 K8s 集群上一键提交分布式训练任务,自动管理 Embedding Server、Embedding Worker、NN Worker 的生命周期。配合 GPU 调度、Prometheus + Grafana 监控,生产可用。
项目提供了开箱即用的 docker-compose 配置,适用于本地开发和小规模训练验证:
# 克隆并构建镜像
git clone https://github.com/PersiaML/PERSIA.git
cd PERSIA
make build_dev_image
# 启动训练(Adult Income 示例)
cd examples/src/adult-income
docker-compose -f docker-compose.train.yml up
即使是小规模训练示例,也需要 NVIDIA GPU(CUDA 11.2+)。无 GPU 环境下无法完成有意义的训练。生产部署建议单节点 4+ GPU,分布式场景需 10GB+ VRAM 的企业级 GPU(如 A100)。
⚠️ 重要提示:项目 README 顶部明确标注:
WARNING: THIS PROJECT IS CURRENTLY NOT MAINTAINED, DUE TO COMPANY REORGANIZATION.
这意味着代码停止更新、Issue 可能无人响应、使用中存在风险。企业级生产使用前请充分评估。
PERSIA 代表了推荐系统训练框架的一个技术流派:异构并行 + Rust 高性能通信层。它的出现证明了即使是「稀疏主导」的推荐模型,也可以通过精细的架构设计达到接近稠密模型训练的效率。
从行业视角看,PERSIA 的开源意义在于:
然而项目已停止维护,后续演进可关注同领域其他活跃项目,如 Meta 的 PyTorch Distributed、阿里巴巴的 DeepRec 等。
| 维度 | 信息 |
|---|---|
| 开发语言 | Rust(核心)+ Python(SDK) |
| 深度学习框架 | PyTorch |
| 最大参数量 | 100 万亿参数 |
| 通信后端 | NATS、自定义 RPC、NCCL |
| 部署方式 | Docker Compose / Kubernetes |
| GPU 支持 | CUDA 11.2+ |
| 许可证 | MIT |
| 维护状态 | ⚠️ 已停止维护 |
| 主要贡献者 | 快手科技 AI 平台、ETH Zurich |
PERSIA 论文:Lian et al., "Persia: A Hybrid System Scaling Deep Learning Based Recommenders up to 100 Trillion Parameters", arXiv:2111.05897 (2021)