二十一:分布式训练: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="