Skip to content

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

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 8月 29, 2017 by saxon_zh@saxon_zhGuest

[discussion]关于编译时和运行时的区别

Created by: jacquesqiao

主题:

Paddle编译时和运行时的区别

参与人:

董志宏,严春伟,乔龙飞

1. 如果VarDesc作为编译时,Scope/Variable作为运行时

实现方法 VarDesc创建的时候无需Scope,只需要在一个全局map中保存VarDesc,InferShape需要修改对应的VarDesc即可。

优点:

  1. 切换Scope简单,只需在Op Run的时候传入一个新的Scope,框架根据全局的VarDesc Map在其中创建对应的Var即可运行。
  2. 用VarDesc存储元信息,方便做优化。
  3. InferShape就可以不需要传入Scope这个参数,因为修改的VarDesc都存在于全局的map中

缺点: InferShape实现复杂,编译时Infer是基于VarDesc,但是考虑到运行时size可能会被用户修改(这点不知道是否合理),运行时也需要做InferShape,这个InferShape是基于Scope中的Variable进行,代码上会有一定的重复。

2. 不带内存的Tensor作为编译时,带内存的Tensor作为运行时。

实现方法 Var必须创建在某个已经存在的Scope中,切换Scope之前,需要clone某个创建过Var的Scope

优点 InferShape只需要实现一遍,配置时和运行时都调用同样的函数即可

缺点 Clone的实现可能并不简单,比如多种设备类型之间内存如何同步(Scope for CPU vs Scope for GPU)

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