岗位分支 · 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 生产用)并行策略选型:
| 模型规模 | 推荐组合 |
|---|---|
| < 1B | DDP |
| 1B-10B | FSDP 或 ZeRO-3 |
| 10B-70B | TP=8(单机)+ DP |
| 70B-405B | TP=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 分钟典型面试题方向#
DDP / FSDP / DeepSpeed 分别解决什么?ZeRO 各 Stage 的区别?
- 答题思路:DDP 完整副本(小模型),FSDP 权重分片(中模型),DeepSpeed ZeRO-1/2/3 逐步扩大分片范围(大模型)
Checkpoint 机制怎么设计?训练中断后如何恢复?
- 答题思路:周期性保存(step + 时间)+ 所有 rank 同步 + 对象存储 + 恢复时加载 model/optimizer/lr_scheduler/dataloader
多机多卡训练失败怎么排查?NCCL 通信瓶颈怎么分析?
- 答题思路:NCCL_DEBUG=INFO 看拓扑 → 检查是否退化 TCP → 查错包 → GPU 状态(ECC/温度)→ 训练日志(NaN/OOM/straggler)
如何设计训练任务队列?(优先级 + 队列 + Gang Scheduling)
- 答题思路:Volcano/Kueue 队列 + PriorityClass + Gang Scheduling 防死锁 + 抢占配合 checkpoint
3D/4D 并行怎么组合?MoE 训练的 EP 怎么配?
- 答题思路:TP 留单机 NVLink 域,PP 跨机,DP 扩吞吐;MoE 加 EP 切 expert,注意路由均衡