Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #27025

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 9月 04, 2020 by saxon_zh@saxon_zhGuest

DataParallel模式,单机多卡怎么计算loss或梯度的

Created by: IvyGongoogle

问题1: 数据并行模式,pytorch的单机多卡训练原理是:

假设读入一个 batch 的数据,其大小为 [30, 5, 2],假设采用三张 GPUs,其运行过程大致为:

[1] - 将模型放到主 GPU 上,一般为 cuda:0;

[2] - 把模型同步到 3 张 GPUs 上;

[3] - 将总输入 batch 的数据平分为 3 份,这里每一份大小为 [10, 5, 2];

[4] - 依次分别作为每个副本模型的输入;

[5] - 每个副本模型分别独立进行前向计算,假设为 [4, 5, 2];

[6] - 从 3 个 GPUs 中收集分别计算后的结果,并按照次序拼接,即 [12, 5, 2],计算 loss;

[7] - 更新梯度.

但是我读paddlepaddle的文档,上面说在使用GPU训练时,如果每个trainer节点有多个GPU卡,则会先在每个trainer节点的多个卡之间执行NCCL2通信方式的梯度聚合, 这是和我上面写的pytorch的单机多卡训练时每个卡计算网络输出或loss或梯度的方式不同的,是吗?

问题2:数据并行模式下,对于paddle的单机多卡训练:当使用paddle.distributed.launch时,是使用多进程进行训练对吧?具体每个进程是负责一张卡和切分的batch数据进行单独训练的吗?然后loss和梯度又是怎么计算的? 是每个进程单独计算然后单独更新自己卡上的模型参数? 还是每个进程得到网络输出或loss后,把每个进程的输出或loss汇合到一起计算梯度再更新到每个卡呢?

问题3:类似问题2,数据并行模式下:对于paddle的单机多卡训练,当不使用paddle.distributed.launch时,是一个进程负责问题2中的所以事情吗? batch数据切分到不同卡上,每个卡计算完网络输出或loss, 每个卡单独计算梯度,然后多个卡之间执行NCCL2通信方式的梯度聚合?

希望得到答复。 Thanks

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#27025
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7