Skip to content

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

P
Paddle-Lite
  • 项目概览

PaddlePaddle / Paddle-Lite

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

Paddle-Lite kernel选择和kernel注册方法改进

Created by: DannyIsFunny

【当前问题】Paddle-Lite在运行模型时偶尔出现如下问题: image

【问题分析】 Paddle-Lite没有找到与模型中与描述的输入输出精度一致的算子。 例如: gather 算子在模型中使用的时输入和输出都是int64类型的,而Paddle-Lite中同时注册了int64输入输出和float输入输出的 gather实现,但是运行时paddle-Lite选择了float类型实现的gather。 选中不一致精度实现的kernel后就会往模型的算子之间加入cast 算子来转换精度

【框架问题分析】

  1. 为什么Paddle-Lite选kernel时没有选择输入输出精度更匹配的int64实现
  2. kernel的int64\int32\float精度指的是什么,时输入输出的精度吗?
  3. 我们尝试将注册为int64精度的kernel修改为float32注册,发现注册会失败,找不到kernel

【问题定位与修复方法】

  1. 为什没选输入输出更匹配的int64 kenrel: static_pick_kernel.h 中为kernel打分算法
  2. kernel的精度int64\int32\float指什么? kernel精度应该只分int8和float,表示是否采用int8量化,没有其他精度类型。
  3. kernel 注册时为什么不能随意指定精度类型? kernel 注册方法问题。当前所有的被注册kernel被被保存在全局map型的单例中。Register_LITE_KERNEL和kernel_base类型实现分别指定了两次kernel的精度类型,而且分别被写入到kernels单例的map index和map value中,两者不一致时可能导致注册kernel找不到自己的输入输出精度问题

【修复计划】 下下一个版本2.7修复kernel选择方法和注册方式中可能存在的问题

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle-Lite#4346
渝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