路线图

岗位分支 · Training

星辉 2026-07-02 阅读 3 min 605 字 路线图
岗位分支 · Training 封面

定位:承载分布式训练任务(非研究算法本身),让训练稳定、高效、可恢复 对应主路线:Ch4(算力资源调度) + 本附录专项 典型团队:训练平台团队、大模型预训练团队、Infra 团队


核心能力领域#

1. 分布式训练基础#

PyTorch 分布式

  • DDP(Distributed Data Parallel):每个 GPU 一份完整模型副本,反向传播后梯度 AllReduce
  • FSDP(Fully Sharded Data Parallel):模型权重分片到多 GPU,训练时分片加载
  • torchrun:多机多卡启动工具,--nnodes / --nproc_per_node / --rdzv_backend

DeepSpeed

  • ZeRO-1:优化器状态分片
  • ZeRO-2:优化器状态 + 梯度分片
  • ZeRO-3:优化器状态 + 梯度 + 模型权重全部切片
  • ZeRO-3 可以让 70B 模型在单卡上训练(虽然慢)

ZeRO 各 Stage 显存节省

Stage切分内容70B 模型单卡显存(FP16)
DDP(无切分)140GB(装不下)
ZeRO-1优化器状态~100GB
ZeRO-2优化器状态 + 梯度~75GB
ZeRO-3全部~20GB(可单卡)

2. 并行策略组合#

text
DP(数据并行):多份副本,各自吃不同的数据
TP(张量并行):单层内部切分,需要高带宽
PP(流水线并行):不同层分到不同设备,跨机首选
EP(专家并行):MoE 的 expert 分布
3D 并行 = DP × TP × PP(Megatron-LM 是事实标准)

2026 新增:
4D 并行 = DP × TP × PP × EP(MoE 模型,DeepSeek-V4 生产用)

并行策略选型

模型规模推荐组合
< 1BDDP
1B-10BFSDP 或 ZeRO-3
10B-70BTP=8(单机)+ DP
70B-405BTP=8 + PP=N(跨机)+ DP
MoE 1T+TP + PP + EP + DP(4D 并行)

3. Checkpoint 机制#

训练中断是常态(Spot 中断、OOM、抢占),需要可靠的 Checkpoint 机制:

  • 周期性保存:按 step 间隔(如每 1000 步)或时间间隔
  • 分布式一致性:所有 rank 同时保存,确保恢复时一致
  • 存储:对象存储(S3/COS/OSS)或分布式文件系统
  • 恢复:从最近 checkpoint 继续,而不是从头开始

Checkpoint 设计要点

text
保存内容:
├── 模型权重(model state dict)
├── 优化器状态(optimizer state,含 momentum)
├── 学习率调度器状态(lr scheduler)
├── 数据加载器状态(dataloader,含 shuffle 种子)
├── 训练步数(global step)
└── 随机数状态(RNG state)

保存频率:
├── 按 step(每 1000 步)
├── 按时间(每 1 小时)
└── 取更频繁者

存储策略:
├── 本地 NVMe(快速恢复)
├── 对象存储(持久化)
└── 双写(本地 + 远端)

DeepSpeed Checkpoint API

python
# 保存
engine.save_checkpoint(save_dir, tag=f"step-{global_step}")

# 恢复
engine.load_checkpoint(load_dir, tag="step-10000")

4. 训练通信#

  • NCCL:AllReduce / AllGather / ReduceScatter / Broadcast 等集合通信原语
  • 网络要求:InfiniBand(200Gbps+)或 RoCEv2(100Gbps+)
  • 环境变量:NCCL_IB_DISABLE / NCCL_SOCKET_IFNAME / NCCL_DEBUG / NCCL_P2P_LEVEL

NCCL 性能排查

bash
# 查看通信拓扑
NCCL_DEBUG=INFO python train.py 2>&1 | grep "Channel"

# 检查是否退化到 TCP
NCCL_DEBUG=INFO python train.py 2>&1 | grep "NET/"
# 如果看到 "NET/Socket" 而不是 "NET/IB",说明 IB 没启用

# 监控错包
watch -n 1 'cat /proc/net/dev | grep mlx'

5. 训练任务管理#

  • Training Operator:Kubeflow PyTorchJob / TFJob / MPIJob
  • 任务队列:Volcano / Kueue 管理训练任务排队
  • 优先级:紧急微调 > 常规训练 > 实验性训练

PyTorchJob 示例

yaml
apiVersion: kubeflow.org/v1
kind: PyTorchJob
metadata:
  name: llm-pretrain
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      template:
        spec:
          schedulerName: volcano       # 用 Volcano 调度
          containers:
            - name: pytorch
              image: custom/train:latest
              command: ["torchrun", "--nnodes=4", "--nproc_per_node=8", "train.py"]
              resources:
                limits:
                  nvidia.com/gpu: 8
    Worker:
      replicas: 3
      template:
        spec:
          schedulerName: volcano
          containers:
            - name: pytorch
              resources:
                limits:
                  nvidia.com/gpu: 8

加分方向#

  • ZeRO Stage 3 + offload(CPU/NVMe)的深度优化
  • 训练容错(节点故障自动恢复)
  • Nsight Systems / Nsight Compute 性能分析
  • 国产芯片训练(升腾 CANN + HCCL)
  • RLHF / DPO / GRPO 训练流程
  • MoE 训练的 expert 路由优化

技能树#

text
基础(必备)
├── PyTorch 深入(DDP / FSDP / torchrun)
├── DeepSpeed(ZeRO Stage 1/2/3)
├── Megatron-LM(TP + PP,大模型必备)
├── Linux / Bash / Python
└── K8s / Docker(任务编排)

分布式训练
├── 3D/4D 并行(DP × TP × PP × EP)
├── NCCL 通信原语与调优
├── Checkpoint 机制设计
└── 训练容错与恢复

训练框架
├── PyTorch DDP / FSDP
├── DeepSpeed(ZeRO / offload)
├── Megatron-LM(大模型标准)
└── Ray Train(分布式训练调度)

任务管理
├── Kubeflow Training Operator
├── Volcano / Kueue(任务队列)
└── Argo Workflows(训练流水线)

进阶
├── Nsight Systems / Compute(性能分析)
├── MoE 训练优化
├── RLHF / DPO / GRPO
└── 国产芯片训练(CANN / HCCL)

学习路径建议#

text
1. 先掌握 PyTorch 分布式:DDP / FSDP / torchrun
2. 再学 DeepSpeed:ZeRO Stage 1/2/3,offload
3. 然后学 Megatron-LM:TP + PP,3D 并行
4. 最后学任务管理:Kubeflow Training Operator + Volcano/Kueue
5. 加分:Nsight 性能分析、MoE 训练、RLHF 流程、国产芯片

项目经验建议#

简历表达参考:

text
构建大模型分布式训练平台,支撑 70B-405B 模型预训练与微调:
- PyTorch FSDP + DeepSpeed ZeRO-3,3D 并行(TP=8 × PP=4 × DP=4)
- Checkpoint 机制:周期性保存 + 抢占前 preStop hook + 对象存储持久化
- Volcano Gang Scheduling + 优先级抢占,训练任务排队管理
- NCCL 调优(IB 400Gbps + GPU Direct RDMA),AllReduce 带宽利用率 85%
- 训练中断自动恢复,平均恢复时间 < 5 分钟

典型面试题方向#

  1. DDP / FSDP / DeepSpeed 分别解决什么?ZeRO 各 Stage 的区别?

    • 答题思路:DDP 完整副本(小模型),FSDP 权重分片(中模型),DeepSpeed ZeRO-1/2/3 逐步扩大分片范围(大模型)
  2. Checkpoint 机制怎么设计?训练中断后如何恢复?

    • 答题思路:周期性保存(step + 时间)+ 所有 rank 同步 + 对象存储 + 恢复时加载 model/optimizer/lr_scheduler/dataloader
  3. 多机多卡训练失败怎么排查?NCCL 通信瓶颈怎么分析?

    • 答题思路:NCCL_DEBUG=INFO 看拓扑 → 检查是否退化 TCP → 查错包 → GPU 状态(ECC/温度)→ 训练日志(NaN/OOM/straggler)
  4. 如何设计训练任务队列?(优先级 + 队列 + Gang Scheduling)

    • 答题思路:Volcano/Kueue 队列 + PriorityClass + Gang Scheduling 防死锁 + 抢占配合 checkpoint
  5. 3D/4D 并行怎么组合?MoE 训练的 EP 怎么配?

    • 答题思路:TP 留单机 NVLink 域,PP 跨机,DP 扩吞吐;MoE 加 EP 切 expert,注意路由均衡