Monolith
论文:Monolith: Real Time Recommendation System With Collisionless Embedding Table(arXiv:2209.07663)。短视频推荐的两个数据事实:特征极度稀疏且 ID 集合一直涨;兴趣分布非平稳(concept drift)。
用户行为
BMQ
Training Worker
训练 PS
Serving PS
模型服务
完播或划走样本
▶
实时消费
▶
更新 embedding
▶
分钟级同步碰到的 key
▶
下次精排查表
◀
无碰撞 embedding 表
稀疏参数不用固定 TensorFlow Variable(会 hash 碰撞,头部用户/视频受伤最重),而用基于 Cuckoo Hashing 的 HashTable:两张表两种 hash,插入搬迁直到稳定,查找最坏 O(1)。内存靠频率过滤和过期驱逐,不是无限涨。
Worker–PS
架构跟随 TensorFlow 的 Worker–Parameter Server:Worker 读样本、做前向反向;PS 存稠密权重和稀疏 embedding。模型体积 TB 级,所以禁止把整模拷到每台推理机。
在线训练
- Batch:历史数据把模型拉到可上线。
- Online:Worker 消费实时样本,算梯度,写训练 PS。
- 只把本周期被碰到的 sparse key 增量同步到 serving PS(分钟级)。
- 稠密参数同步更慢,动量类优化器下不会秒变。PS 日快照用于故障恢复。
User action → Kafka/BMQ → Flink sample join
→ Training Worker → Training PS
→ incremental sync (touched keys)
→ Serving PS → Model Server