Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • 合并请求
  • !22126

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看板

Support uninitialized grad in optimizer ops !22126

  • Report abuse
!22126 已关闭 1月 07, 2020 由 saxon_zh@saxon_zh 创建
#<User:0x00007f0e56447008>
  • 概览 0
  • 提交 5
  • 变更 6

Created by: Aurelius84

背景

在控制流中(如cond、switch等),如果某些分支不会实际运行,则为了保证框架兼容性,对此分支内的Variable的反向grad进行了值为0.的初始化。避免由于反向grad未初始化导致输入到其他op时,在runtime infershape时挂掉,尤其对于优化器op。

相关PR:

  • https://github.com/PaddlePaddle/Paddle/pull/21532

但是,这种方式,会带来性能上的损失。因为控制流的False分支里的所有param都会对应一个优化器Op,并进行了梯度值为0的更新计算。

目标

因为,此PR旨在对optimizer ops进行优化,支持未初始化grad(参考sum_op),以避免优化器op的Compute函数调用。

方案

修改optimizer op里的infershape和Compute函数,对grad是否初始化进行判断。若未初始化,则直接return。

目前仅对SGD和Adam两个op进行升级测试。

存在问题

  • 如果fetch 控制流False分支的反向grad值,则返回为None,而非之前的全0值
  • 需要sum op支持全未初始化的Tensor Array。由于在optimizer.py中会对部分同名grad作梯度聚合,有可能输入sum的所有同名梯度都是未初始化的(目前sum的输入至少一个是初始化的)
  • 允许在runtime期间grad未初始化,可能存在输入到其他op的情况(如assign,cast等),需评估是否需要同步修改此类op支持未初始化tensor。
  • 可能需要给出更加优雅的兼容方式,比如在optimizer.py对False分支的参数梯度进行剪枝
指派人
分配到
审核者
Request review from
无
里程碑
无
分配里程碑
工时统计
标识: paddlepaddle/Paddle!22126
Source branch: github/fork/Aurelius84/uninitialized_optimizer
渝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