跳转至

二十一:分布式训练:DDP、DP 与 FSDP自测题

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484201&idx=1&sn=993d27d8908d2961f134b981acbe837c&chksm=f01eb050c76939464ea7b5f14aa90a1ea8952abbf8db6a916fbefc948c60a89e3cd60e078220#rd

覆盖范围

  • 分布式训练基本动机和并行方式

  • DP、DDP、FSDP、ZeRO 的区别

  • rank、local_rank、world_size、process group、backend

  • DDP 的初始化、数据切分、梯度 all-reduce

  • DistributedSampler、global batch、gradient accumulation

  • AMP、checkpoint、unused parameters、SyncBatchNorm

  • 多机训练、性能瓶颈和常见排错

一、分布式训练基础

  • 为什么需要分布式训练?

  • 数据并行、张量并行、流水线并行分别拆分什么?

  • DDP 属于哪类并行?它默认是否切分模型参数?

  • 数据并行中 global batch 如何计算?

  • 数据并行为什么需要同步梯度?

  • 多卡训练为什么不一定线性加速?

  • 通信带宽为什么会成为分布式训练瓶颈?

  • 单机多卡和多机多卡训练的主要差异是什么?

二、DP、DDP 与 FSDP 对比

  • PyTorch DataParallel 的基本工作方式是什么?

  • DataParallel 为什么通常不推荐用于生产训练?

  • DDP 和 DataParallel 的核心区别是什么?

  • DDP 为什么推荐一张 GPU 一个进程?

  • DDP 每张卡是否保存完整模型?

  • DDP 能不能解决单卡放不下模型的问题?为什么?

  • FSDP 与 DDP 的核心区别是什么?

  • ZeRO 与 FSDP 的共同目标是什么?

  • 什么情况下优先选择 DDP?

  • 什么情况下应考虑 FSDP 或 ZeRO?

三、DDP 核心概念

  • rank、local_rank、world_size 分别是什么?

  • process group 是什么?

  • NCCL 和 Gloo backend 有什么区别?

  • 为什么 GPU 训练通常选择 NCCL?

  • torchrun --nproc_per_node=8 train.py 表示什么?

  • 多机 DDP 还需要配置哪些启动参数?

  • torch.cuda.set_device(local_rank) 为什么重要?

  • DDP 包装模型前后 checkpoint key 可能有什么区别?

四、DDP 训练流程

  • 请描述 DDP 从初始化到训练一步的完整流程。

  • DDP 中每个 rank 的模型参数初始如何保持一致?

  • forward 阶段 DDP 是否通信?

  • backward 阶段 DDP 何时通信?

  • all-reduce 在 DDP 中做什么?

  • 为什么 all-reduce 后每个 rank 的梯度相同?

  • optimizer step 为什么每个 rank 都要执行?

  • 如果只在 rank 0 执行 optimizer step 会怎样?

  • DDP bucket 的作用是什么?

  • DDP 如何实现通信和 backward 计算重叠?

五、数据加载与 Batch

  • DistributedSampler 解决什么问题?

  • 为什么使用 DistributedSampler 时通常要设置 shuffle=False

  • sampler.set_epoch(epoch) 的作用是什么?

  • 如果忘记 set_epoch 会有什么影响?

  • DDP 中每个 rank 的 dataloader 长度不一致可能导致什么问题?

  • global batch 变大后学习率应如何考虑?

  • gradient accumulation 如何影响 global batch?

  • DDP 中 no_sync() 解决什么问题?

  • loss 是 mean 时是否需要再除以 world_size?

  • 日志中的 loss 和 accuracy 应如何跨 rank 汇总?

六、混合精度、Unused Parameters 与 Checkpoint

  • DDP 可以和 AMP 一起使用吗?需要注意什么?

  • BF16 和 FP16 在 DDP 混合精度中有什么差异?

  • 什么是 unused parameter 问题?

  • find_unused_parameters=True 有什么作用和代价?

  • 动态图模型为什么更容易触发 unused parameter?

  • SyncBatchNorm 解决什么问题?

  • LLM 中为什么通常不关心 SyncBatchNorm?

  • DDP 保存 checkpoint 时为什么常用 model.module.state_dict()

  • DDP 断点恢复应保存哪些状态?

  • 为什么多 rank 同时写同一个 checkpoint 路径可能出问题?

七、性能与排错

  • DDP 训练速度慢时应从哪些方面排查?

  • dataloader 成为瓶颈有什么表现?

  • NCCL timeout 可能有哪些原因?

  • DDP 卡住可能有哪些非通信原因?

  • 某个 rank OOM 为什么可能让其他 rank 也卡住?

  • 如何判断通信开销是否过高?

  • 为什么 batch size 太小会降低 DDP 效率?

  • 多机 DDP 中 MASTER_ADDR 和 MASTER_PORT 有什么作用?

  • NCCL 网络接口配置错误会导致什么问题?

  • 如何排查不同 rank 数据重复或数据遗漏?

八、综合设计

  • 请写出一个最小 DDP 训练脚本需要包含的关键步骤。

  • 如何把单卡训练代码改造成 DDP?

  • 如何设计一个 2 机 8 卡 DDP 训练启动方案?

  • 请完整比较 DP、DDP、FSDP、ZeRO 在并行对象、显存占用、通信方式、优缺点和适用场景上的差异。

            预览时标签不可点
    

    <div class="