Data Parallelism(数据并行)
就是把数据切开,让多张 GPU 同时跑,最后把梯度加权平均一下,模型还是同一个。
亦作、亦称:数据并行 · DP · DDP · Distributed Data Parallel · Data-parallel Training · distributed data parallel
数据并行是分布式训练的基础范式,通过在多设备上复制模型并分配不同数据子集来加速训练。掌握数据并行是理解现代大模型训练体系的第一步。
概述
数据并行是分布式训练中最直观、部署最广泛的并行策略。
- 核心思路:模型在每个设备上完整复制,训练数据被切分后并行处理
- 适用范围:对模型架构无特殊限制,CNN、Transformer、MLP 均适用
- 主流实现:PyTorch DDP、TensorFlow MirroredStrategy、Horovod
- 优势:实现简单,扩展性良好,通常是大规模训练的首选起点
- 前提条件:单设备显存必须能容纳完整的模型参数与优化器状态
工作原理
数据并行的执行流程分为四个阶段,各设备在每个训练步骤中协同完成。
- 数据分片:将 mini-batch 按设备数量切分为等大小的 micro-batch,各设备独立加载
- 前向传播:每个设备用本地数据独立计算 loss,无需设备间通信
- 反向传播:各设备独立计算本地梯度,PyTorch DDP 会将梯度分组到 bucket 中以重叠通信与计算
- 梯度同步:通过 AllReduce(通常为 Ring-AllReduce)将所有设备梯度求和平均,NCCL 库提供高性能实现
- 参数更新:每个设备用相同的全局梯度更新本地模型,保证所有副本参数一致
同步与异步变体
数据并行根据梯度同步时机可分为两类,各有适用场景。
- 同步数据并行(Synchronous DP):所有设备完成反向传播后统一同步梯度,训练过程与单机完全等价,收敛稳定,是 DDP 的默认模式
- 异步数据并行(Asynchronous DP): 设备独立更新参数服务器,无需等待最慢节点,吞吐更高但存在 梯度陈旧(staleness) 问题,影响收敛
-梯度压缩:PowerSGD、梯度量化等技术可在同步时压缩通信量,适用于带宽受限场景
- 局部 SGD / FedAvg252:设备在本地运行多步后再同步,通信频率大幅降低,联邦学习的核心思想
- ZeRO(Zero Redundancy Optimizer): DeepSpeed 提出,在数据并行框架内分片优化器状态、梯度和参数,突破单卡显存瓶颈
典型应用场景
数据并行在工业界和研究领域均有广泛落地。
- 预训练加速:用数百至数千张 GPU 训练 GPT、BERT 类模型,通过增大有效 batch size 加速收敛
- 计算机视觉大规模训练:ImageNet 分类、目标检测等任务,将 batch 分散到多卡以充分利用集群
- 微调与 RLHF:对已有 LLM 进行 SFT/DPO 微调时,数据并行是最常用的并行维度
- 多机多卡集群:通过 NCCL + InfiniBand/NVLink 在节点内外均可高效执行 AllReduce
- 研究复现:PyTorch DDP 提供标准化接口,大幅降低复现 SOTA 论文的工程门槛
与模型并行的区别
数据并行与模型并行是两种互补的分布式训练策略,理解其差异有助于选型。
- 显存需求:数据并行要求每卡存完整模型,模型并行将模型层拆分到不同卡,可突破单卡显存上限
- 通信模式:数据并行通信梯度(与模型参数同量级),模型并行通信激活值(与 batch size 相关)
- 实现复杂度:数据并行几乎对模型代码透明,模型并行需要手动指定层的放置策略
- 适用场景:参数量可放入单卡时优先数据并行;超大模型(>10B 参数)通常需要混合并行(数据并行 + 张量并行 + 流水线并行)
- 典型工具:数据并行用 DDP/Horovod,模型并行用 Megatron-LM、DeepSpeed、FSDP
局限与常见误区
数据并行并非万能,使用时需注意以下几点。
- 显存瓶颈:每张卡都要存完整参数 + 梯度 + 优化器状态,70B 参数模型在 bf16 下仅参数就需 ~140 GB,单卡 80 GB 的 H100 无法独立承载
- 通信开销:设备间带宽决定 AllReduce 效率;节点间带宽(InfiniBand)远低于节点内(NVLink),规模过大时通信成为瓶颈
- 线性加速神话:增加 GPU 数量并不线性提升训练速度,Amdahl 定律和通信延迟限制了实际加速比
- 大 batch 收敛问题:数据并行等效于增大 batch size,过大的 batch 可能导致泛化性下降,需配合学习率热身(warmup)等技巧
- 误区:「数据并行就是多卡跑多份模型」——实际上梯度同步是关键,忽略同步正确性会导致训练不稳定
发展脉络
数据并行技术随硬件与框架演进经历了多个重要节点。
- 2012 年:AlexNet 训练使用双 GPU 数据并行,开启深度学习多卡训练先河
- 2014 年:Jeff Dean 等提出 Parameter Server 架构(DistBelief),支持异步大规模数据并行
- 2016 年:百度提出 Ring-AllReduce 用于深度学习梯度聚合,显著降低通信瓶颈
- 2017 年:Uber 开源 Horovod,将 Ring-AllReduce 工程化,大幅简化多框架数据并行部署
- 2020 年:PyTorch 推出 DistributedDataParallel(DDP),通过 bucket 通信重叠实现更高效的同步;DeepSpeed ZeRO 系列在数据并行框架下突破显存墙
- 2022 年至今:混合并行成为 LLM 训练主流,数据并行作为最外层维度与张量并行、流水线并行组合使用
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「就是把数据切开,让多张 GPU 同时跑,最后把梯度加权平均一下,模型还是同一个。」
- 「数据并行不拆模型,只拆数据,所以每张卡都得放得下完整模型。」
- 「DDP 比老式的 DataParallel 快,因为它用 Ring-AllReduce 而不是走主卡瓶颈。」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「Data Parallelism」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。