一句话定义
参数服务器(Parameter Server,PS)是一种把模型参数集中托管在一组 server 节点上、由大量 worker 节点反复「拉参数—算梯度—交梯度」的分布式训练架构;异步 SGD(Asynchronous Stochastic Gradient Descent)是它最省等待时间的跑法:谁算完谁提交,不等别人。
它怎么干活
把训练想成一家中央仓库 + 一群外勤。模型参数按 key-value 切成很多片,分别放在几台 server 上;每个 worker 只领走自己这一批数据需要的参数,在前向反向算完梯度,再推回给对应的 server,由 server 统一做优化器更新。worker 之间从不直接说话,一切经中央转手——这就是「中心化」的含义。
换成同步跑法,快的 worker 要等最慢的那个,一整队人被一块小 batch 拖住。异步的诱惑就在这:谁先算完谁先提交,吞吐立刻上去。代价是「过期梯度」(stale gradient)——worker A 拿到的是第 100 步的参数快照,等它推回梯度时 server 可能已经走到第 130 步,这批梯度是按旧参数算的。好比拿昨天的股价下单。缓解手段包括调小学习率、限制落后步数(Stale Synchronous Parallel,SSP)、梯度裁剪,但都是调参玄学。
和 AI 词典:AllReduce">AllReduce 的区别
AllReduce(尤其是 Ring AllReduce)走的是另一条路:每个节点都持有完整参数副本,通过环形接力把梯度求和,没有中心。
| 维度 | 参数服务器 PS | AllReduce(环/树) |
|---|---|---|
| 拓扑 | 星形,server + worker | 对等,无中心节点 |
| 参数存放 | server 分片存 | 每个 worker 全量副本 |
| 瓶颈 | server 的网卡和带宽 | 环上最慢的那个节点 |
| 一致性 | 可异步,梯度会过期 | 一般同步(BSP),语义简单 |
| 稀疏大表 | 友好,只拉被访问的行 | 不擅长,整张表都要搬 |
| 工程复杂度 | 高,要自己处理分片与容错 | 低,框架基本内置 |
为什么后来被 AllReduce 取代
三点。一是带宽:worker 数量一上去,所有流量都涌向 server,中心节点先被打满,加机器不再线性加速。二是收敛:异步梯度的噪声让学习率和同步策略变得难调,复现性差,团队宁愿要「慢一点但稳」。三是生态与硬件:GPU 之间有了高速互联,同步等一等没那么贵;而 Horovod、PyTorch 的 DistributedDataParallel 之类的库把 AllReduce 做成几乎一行代码,没人愿意再手写一套参数服务器。具体支持情况以各项目官方页面为准。
但 PS 没有死。推荐系统里万亿级的稀疏特征(embedding 表)至今常用它的思路——一次只碰被访问到的少数行,AllReduce 却要把整张表搬一遍,纯属浪费。而大模型训练中的参数分片(ZeRO 一类做法),某种意义上正是把「参数切开放在不同地方」这个老想法,以对称的方式请了回来。
对从业者的意义
看到 checkpoint 分片、embedding server、梯度累积这些词时不必发怵,它们都是这套老账本的远房亲戚。做选型时记住一条粗线:稠密模型、要可复现,选 AllReduce;超大稀疏特征表,选参数服务器式架构。它对普通职场人也是个不错的隐喻——中心协调省心,但容易堵在中间;对等协作快,但得先想清楚一致性怎么兜。
