Skip to content

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

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

Op(conv2d_fusion) error message enhancement. !23596

  • Report abuse
!23596 已合并 4月 08, 2020 由 saxon_zh@saxon_zh 创建
#<User:0x00007fede9511cb8>
  • 概览 2
  • 提交 8
  • 变更 7

Created by: Xreki

OP conv2d_fusion报错信息优化 [仅C++端]

(1) 抽取conv2d_fusion和conv的InferShape中的公共部分。

  • conv2d_fusion的InferShape大部分代码与conv中的一样。因此在ConvOp的定义中,提取ComputeOutputShape(ctx)函数,主要用来对输入、熟悉做一些公共的检查,并且计算出输出的shape。
  • 对conv的InferShape中的报错信息进行了轻微的调整和优化。

(2) conv2d_fusion的InferShape报错信息优化

  • InferShape中改成调用ConvOp基类的ComputeOutputShape(ctx),避免大量的重复代码。
  • conv2d_fusion中的Bias输入应该是必须设置的,在Kernel里面有PADDLE_ENFORCE_NOT_NULL(bias, "The bias should not be null.");这样的检查。这个PR将Bias的检查增加到InferShape中(OP_INOUT_CHECK(ctx->HasInput("Bias"), "Input", "Bias", "Conv2DFusion");)。
  • conv2d_fusion只支持2D卷积,增加输入是否是4-D Tensor的检查。
  • conv2d_fusion只支持NCHW,因此增加data_format是否是NCHW的检查。注意,此处最初使用 PADDLE_ENFORCE_EQ(data_format, "NCHW")进行检查,CI是报错,错误信息中显示data_format的值为AnyLayout,故而改成了跟ConvOp中一样的判断: image
  • split_channels非空时,增加对输出Outputs以及shape的检查。

(3) conv2d_fusion的Kernel中的保存信息优化

主要是cudnn函数调用。目前只在报错信息中增加了增加了函数名的打印,但仅有这些信息,调试还是比较困难。由于cudnn这些函数是公共调用的函数,建议后续对这些函数的报错进行统一的封装和优化。

(4) 对conv_op.h的ConvOutputSize函数中,2处PADDLE_ENFORCE报错信息进行优化。

(5) 在调整InferShape实现的过程,碰到一次错误,顺便优化了下动态图InferShape的一处报错

  • 优化前
464: PreconditionNotMetError: dim size [4] is not match output var number [2]
464:   [Hint: Expected it->second.size() == dims.size(), but received it->second.size():2 != dims.size():4.] at (/paddle/paddle/fluid/imperative/infer_shape_context.h:291)
  • 优化后
464: InvalidArgumentError: The number of dims is expected to be equal to the number of Outputs(Outputs). But receieved: the number of dims = 4, the number of Outputs(Outputs) = 2.
464:   [Hint: Expected dims.size() == it->second.size(), but received dims.size():4 != it->second.size():2.] at (/paddle/paddle/fluid/imperative/infer_shape_context.h:291)
指派人
分配到
审核者
Request review from
无
里程碑
无
分配里程碑
工时统计
标识: paddlepaddle/Paddle!23596
Source branch: github/fork/Xreki/error/conv_fusion
渝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