返回 S01~S90 教材库
S17 · 总 Day 107教材已备 ≠ 学习已完成

S17:双进程 CPU/Gloo 与 Collective 观察

Collective 是一组 rank 必须以兼容顺序共同参与的数据交换操作;两进程 CPU/Gloo 能观察其同步与故障语义,但不代表 GPU 集群性能。

2026-12-09processgroup、rank、worldsize、collective

内容类型:预习教材(不代表已完成)
日期:2026-12-09
阶段:P2 · AI Systems Engineering 90
总路线:Day 107 / 360
周次 / 节奏:W3 · 周三引导练习
状态:教材已备;学习未完成
主题:process group、rank、world size、collective

一句话定义

Collective 是一组 rank 必须以兼容顺序共同参与的数据交换操作;两进程 CPU/Gloo 能观察其同步与故障语义,但不代表 GPU 集群性能。

学习目标

  1. 能解释 rank、world size、process group 和 rendezvous 的基本关系。
  2. 能追踪一次 all-reduce 前后每个 rank 的张量值。
  3. 能观察 collective 顺序不一致或 rank 缺席为何会等待/失败。
  4. 能清楚标注本地 CPU 演示与 NCCL、多机训练的差异。

核心知识

每个分布式进程拥有 rank,参与同一个 process group,world size 是组内成员数。初始化需要 rendezvous 信息,让进程就地址、端口和成员达成会合。Collective 的关键不只是 API:所有 rank 必须参与相匹配的操作,张量 shape/dtype 也要兼容。

All-reduce 对每个 rank 输入做归约,再把结果发送给所有 rank。例如 rank0 输入 1、rank1 输入 2,SUM 后两边都得到 3。Broadcast 由一个 source rank 向其他成员复制;all-gather 让每个成员得到各 rank 分片;reduce-scatter 先聚合再分片。同步点可能显式或隐式,快 rank 会等待慢 rank。

Gloo 支持 CPU 上的教学演示,便于不依赖 CUDA/NCCL 理解语义。它不能用来预测 GPU kernel、NVLink/InfiniBand、NCCL 拓扑或大规模吞吐。若当前 Python/PyTorch 环境不适合双进程,本日可以跟踪纸面模拟,不需要安装或修复大型环境。

机制与推导

以数据并行梯度平均为例,rank r 计算本地梯度 g_r

[ \bar g=\frac{1}{P}\sum_{r=0}^{P-1}g_r ]

可用 all-reduce SUM 后除以 P。若某 rank 使用不同 batch size,简单平均 rank 梯度不一定等于按样本平均,需按样本数加权。若 rank0 先 all-reduce 而 rank1 先 broadcast,两边操作序列不匹配,可能 hang;这说明分布式控制流也必须一致。

故障会传播:一个 rank 崩溃,其他 rank 的 collective 无法永久自行完成。Timeout 能终止等待,却不自动恢复 optimizer 与数据位置;恢复依赖 checkpoint 和作业编排。

最小练习或观察步骤

  1. 先画 rank0/rank1,写出初始化、local compute、all-reduce、继续训练的顺序。
  2. 若 PyTorch 环境已可用,使用官方最小 Gloo 示例运行两个本地进程;否则手工模拟数值。
  3. 为两个 rank 赋不同标量,记录 collective 前后;不预设输出,按实际结果填写。
  4. 只在安全临时副本中尝试一次顺序不一致或 rank 延迟,设置合理 timeout,避免长时间挂起。
  5. 写出 CPU/Gloo 演示能证明与不能证明的各三点。

常见误区与边界

  • 以为 rank 是设备编号;进程、设备和 rank 映射需显式定义。
  • 两进程都返回就声称具备容错;正常同步不等于故障恢复。
  • 不设 timeout 测试错误序列,造成进程长期等待。
  • 用 CPU/Gloo 延迟推测 GPU/NCCL 生产性能。
  • 本地环境不满足时强行安装;纸面 collective 模拟同样是正式学习方式。

系统场景连接

训练作业中的“一个 worker 慢导致全部慢”来自同步 collective 与 barrier-like 行为。平台监控需同时看各 rank step time、通信等待和数据加载,不能只看平均 GPU 利用率。Checkpoint 还要与所有 rank 的一致 step 对齐,才能在故障后恢复相同训练状态。

自检问题

  1. Process group 初始化解决什么问题?
  2. All-reduce SUM 与梯度平均差哪一步?
  3. Collective 调用顺序不一致为什么可能 hang?
  4. CPU/Gloo 演示不能支持哪些性能结论?

专业课程对齐

  • 阅读 PyTorch Distributed 官方文档 的 initialization、rank/world size 和 collective API,重点跟踪每个 rank 的输入输出。
  • 阅读 CMU Deep Learning Systems 的 distributed execution 内容,把计算图中的梯度同步映射为 collective。
  • 阅读 MIT 6.5840 中容错与一致性课程框架,思考成员失败为什么会让同步操作无法仅靠 timeout 自动恢复。

深入学习提示

先手算两个标量,再运行任何代码。代码层重点观察进程是谁启动、group 在哪里初始化、每个 rank 是否执行相同控制流、资源怎样清理。若实验失败,记录失败阶段和错误即可,不把修环境变成主任务。最后用“数值语义、同步语义、故障语义、性能边界”四栏总结。

学后填写区

  • 采用运行还是纸面模拟:
  • 每个 rank 的输入与输出:
  • 观察到的同步/错误事实:
  • 演示不能证明的事项:
  • 下一次最想确认的 collective:
重点主线 · H01 · 任务契约与上下文架构本周配套机制实验 · W3 · 分布式训练:先算内存,再谈并行 →详细讲义、离线示例与源码;按需要选读,不新增必交任务。
本页是未来 P2 的预习教材。等 P1 完成并正式进入 P2 后,再填写真实理解、练习结果和不确定项;现在阅读不会改变P1 唯一进度账本