
数据并行需要在每个计算设备上都有一份模型拷贝,整个的数据被分片到不同的计算设备计算梯度,为了保持参数的一致性,需要在更新参数前进行梯度参数的通信,进行梯度平均,然后获得一致性的参数更新。
怎样对训练数据进行分片,每个设备能获得不同的batch数据,最后完成整个数据的迭代。

训练设备 testbed:2个主机 (node),每个主机上有3张GPU计算设备,共6张卡。
名词解释:
数据分配代码:
indices = indices[self.rank:self.total_size:self.num_replicas]
"""
self.rank 即 Global Rank,
self.total_size,总的数据量。
Self.num_replicas,即worldsize。
"""在每个host上运行启动命令,建立DDP组,等待每个GPU设备测试通信正常后,即可开始训练。
分布式训练需要同步每个GPU设备上的梯度,获得一致的参数更新。具体步骤如下:

在第四步时进行梯度的all-reduce 操作,将所有GPU设备上的梯度进行求和取平均。使用ring-all-reduce算法,通信量为两倍的参数量。

更详细的通信量计算可以参考/[2]/[3]
总结:DDP通过分布式多进程设计、去中心化梯度同步、计算与通信重叠等优化,显著解决了 DP的冗余拷贝、线程开销、主GPU瓶颈等问题,尤其适合大规模分布式训练场景。
FSDP (Fully Sharded Data Parallelism) 是一种分布式训练技术,通过分片(Sharding) 模型参数、梯度和优化器状态,将大型模型的训练负载分散到多个GPU或计算节点上,从而解决传统数据并行方法(如DDP) 在训练超大模型时的内存瓶颈问题。
其核心思想源自 ZeRO (Zero Redundancy Optimizer) 优化器 (如DeepSpeed 的ZeRO-3阶段),通过消除内存冗余实现内存高效利用。
DP-DDP-FSDP, 是pytorch的官方实现,兼容性较好,推荐使用DDP。
特性 | DP | DDP | FSDP |
|---|---|---|---|
目标 | 单机多卡数据并行加速 | 多级多卡分布式训练,消除中心节点瓶颈 | 超大规模训练,通过分片解决显存不足问题 |
并行维度 | 纯数据并行 | 纯数据并行 | 数据并行+模型参数并行 |
内存占用 | 冗余存储:每个GPU保存完整的模型、梯度、优化器状态 | 冗余存储:每个GPU保存完整的模型、梯度、优化器状态 | 无冗余存储:模型参数、梯度、优化器状态分片,显存降低至 1/N |
通信机制 | 主GPU聚合梯度,单进程多线程 | 多进程all-reduce同步梯度,使用 NCCL/GLOO后端 | 分片参数动态拉取 + All-Gather/Reduce-Scatter。通信开销较高,但支持计算与通信重叠 |
模型同步 | 每次前向传递前同步,主GPU将模型参数广播到其他GPU,确保副本一致。 | 初始同步,进程启动时广播一次模型参数,后续通过梯度同步自动保持一致,无需重复同步。 | 动态分片同步,初始时分片参数广播到各GPU,前向/反向传播中按需拉取其他分片参数,通过梯度同步保持一致。 |
数据分发 | 主GPU分发,数据从主机内存复制到主GPU,在分割为子批次分发到其他的GPU中。 | 进程独立加载,每个GPU进程直接从主机内存加载完整数据,按本地batch size切分,无主机分发。 | 与DDP相同,数据直接加载到各GPU内存中。 |
参数更新 | 主GPU更新后,将参数广播到其他GPU。 | 各GPU独立更新,所有GPU给予同步后的梯度独立更新本地完整模型参数。 | 分片独立更新。各GPU仅更新本地分片对应的参数,无需全局同步。 |
GPU利用率 | 不均衡,主GPU负载远高于其他GPU。 | 均衡,计算与通信重叠,各GPU负载均匀,利用率接近100% | 接近均衡。分片参数引入额外开销,但计算与通信流水线化实现较高利用率。略低于DDP |
参考:
[1] blog: Distributed data parallel training using Pytorch on AWS _ Telesens
[2] https://tech.preferred.jp/en/blog/technologies-behind-distributed-deep-learning-allreduce/
[3] https://andrew.gibiansky.com/blog/machine-learning/baidu-al1reduce/
[4] https://medium.com/@davechirav/distributed-training-demystified-a-beginners-guide-to-ddp-fsdp-4c7f12973108