当前位置: 首页 > news >正文

DataParallel (DP) DistributedDataParallel (DDP)

DataParallel (DP) 和DistributedDataParallel (DDP)的区别

在 PyTorch 中,DataParallel (DP) 是将总 batch size 均分至每个 GPU 的实现方式,而 DistributedDataParallel (DDP) 则是每个 GPU 独立设置 batch size。具体区别如下:

1. DataParallel (DP):自动均分总 batch size

  • 特点

    • 单进程多线程,所有 GPU 由主进程(rank 0)控制。
    • 输入的 batch_size 表示所有 GPU 上的总样本数,会被自动均分至每个 GPU。
    • 例如:batch_size=128 且使用 4 个 GPU 时,每个 GPU 处理 128/4 = 32 个样本。
  • 代码示例

    model = nn.DataParallel(model)  # 包裹模型
    train_loader = DataLoader(dataset, batch_size=128)  # 总 batch size
    
  • 缺点

    • 主进程成为瓶颈,通信开销大,效率低于 DDP。
    • 内存使用不均衡(主 GPU 占用更多)。
    • 不支持模型并行(仅数据并行)。

2. DistributedDataParallel (DDP):每个 GPU 独立设置 batch size

  • 特点

    • 多进程模式,每个 GPU 对应一个独立进程。
    • 输入的 batch_size 表示每个 GPU 上的样本数,全局 batch size = 本地 batch size × GPU 数量。
    • 例如:batch_size=32 且使用 4 个 GPU 时,总 batch size 为 32×4 = 128
  • 代码示例

    # 初始化 DDP
    torch.distributed.init_process_group(backend='nccl')
    local_rank = torch.distributed.get_rank()
    model = model.to(local_rank)
    model = nn.DistributedDataParallel(model, device_ids=[local_rank])# 每个 GPU 的 DataLoader 加载本地 batch size
    train_loader = DataLoader(dataset, batch_size=32)  # 每个 GPU 32 样本
    
  • 优点

    • 高效通信(使用 NCCL 后端),支持大规模分布式训练。
    • 内存使用更均衡,训练速度更快

DP 与单卡训练的核心区别

DataParallel 的核心作用是利用多卡进行数据并行训练,与单卡训练的关键差异体现在以下方面:

1. 计算方式

单卡训练:
模型和数据都放在单个 GPU 上,所有计算(前向传播、反向传播)都在这张卡上完成。
例如:batch_size=128 时,128 个样本全部在 GPU 0 上处理。

DP 训练:
主进程(通常是 GPU 0)将模型复制到所有参与训练的 GPU 上(如 GPU 0、1、2、3)。
输入的 batch_size=128 会被均分到每个 GPU(例如 4 卡时,每卡处理 32 个样本)。
每个 GPU 独立进行前向传播,计算各自的损失。
所有 GPU 的梯度会被汇总到主 GPU(GPU 0),主 GPU 执行参数更新后,再将更新后的权重同步到其他 GPU。

2. 性能与适用场景

单卡训练:
优点:实现简单,无多卡通信开销。
缺点:受限于单卡显存,无法处理过大的模型或 batch size。

DP 训练:
优点:只需一行代码(model = nn.DataParallel(model))即可实现多卡数据并行,适合中小规模多卡场景(如 2-4 卡)。

缺点:主 GPU(GPU 0)承担更多通信和计算任务(如汇总梯度、更新参数),容易成为瓶颈,内存占用也更高。
效率低于 DDP(多进程模式),不适合大规模分布式训练(如 8 卡以上)。

http://www.dtcms.com/a/304685.html

相关文章:

  • 15-TPS65261 4.5V 至 18V 输入电压、3A/2A/2A 输出电流三路同步降压转换器
  • 分布式时序数据库的特点解析
  • Three.js 完整实战项目:构建一个 3D 商品展示空间
  • UE5 打包Windows平台时无法找到SDK的解决方法
  • C# 基于halcon的视觉工作流-章25-椭圆查找
  • 【自动化运维神器Ansible】Ansible常用模块之service模块详解
  • C++ 赋值与交换法则
  • STM32 集成 USB 时出现 HAL_StatusTypeDef 未定义 的错误
  • STM32--DHT11(标准库)驱动开发
  • AI崛起后,对使用AI的一些小思考
  • LaTeX 下载安装保姆级教程
  • 异形设备前端适配挑战:条形屏/嵌入式终端的布局弹性与触控热区重构
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • 《UE教程》第一章第九回——地图BGM
  • Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
  • 减速机:自动化生产线的“精密传动心脏”
  • 网站备案号被注销了,怎么重新备案
  • 博弈论03——混合纳什均衡的收益求法
  • 76.最小覆盖子串
  • 线性回归原理与进阶
  • MySQL数据库 mysql常用命令
  • pvc怎么扩容
  • 深入解析Java元注解与运行时处理
  • Linux之网络部分-应用层协议 HTTP
  • 【RK3588部署yolo】算法篇
  • StackingClassifier参数详解与示例
  • 博创软件数智通OA平台:高效协同,安全办公新选择
  • 深度学习 目标检测常见指标和yolov1分析
  • Xilinx高性能低延时PCIe-DMA控制器IP,SGDMA,QDMA,RDMA,CDMA,V4L2驱动,视频采集、AD采集