Skip to content

Latest commit

 

History

History
62 lines (44 loc) · 5.14 KB

【Hackathon No.111】RFC.md

File metadata and controls

62 lines (44 loc) · 5.14 KB

飞桨动静转换评估

提交作者 wjc、mkm
提交时间 2022-04-15
版本号 V1.0
依赖飞桨版本 V2.2
文件名 20220415_api_eval_for_to_static.md

一、概述

1、相关背景

飞桨框架于 2.0 正式版之后正式发布了动静转换功能,并在2.1、2.2 两个大版本中不断新增了各项功能,以及详细的使用文档和最佳实践教程。

2、功能目标

在本任务中,全面体验飞桨的动静转换@to_static功能,即参考飞桨官网 -> 使用指南 -> 动态图转静态 下的内容,体验动转静模型导出、动转静训练等功能,产出一份整体功能体验报告.

3、意义

从用户角度深度体验飞桨动静转换功能,并产出一份评估报告

二、飞桨现状

飞桨框架于 2.0 正式版之后正式发布了动静转换功能,并在2.1、2.2 两个大版本中不断新增了各项功能,以及详细的使用文档和最佳实践教程。

三、业内方案调研

  • 动态图编程: 采用Python的编程风格,解析式地执行每一行网络代码,并同时返回计算结果;其运算和搭建同时进行,也就是可以先计算前面的节点的值,再根据这些值搭建后面的计算图。
  • 静态图编程: 采用先编译后执行的方式。需先在代码中预定义完整的神经网络结构,然后再输入数据进行计算。
  • 动态图编程体验更佳、更易调试,但是因为采用 Python 实时执行的方式,开销较大,在性能方面与 C++ 有一定差距;静态图调试难度大,但是其执行性能更佳,并且预先拥有完整网络结构也更利于全局优化。

在TensorFlow1.0时代,采用的是静态计算图,使用静态计算图分两步,第一步定义计算图,第二部在会话中执行计算图;即首先需要先使用TensorFlow的各种算子创建计算图,通过placeholder进行输入数据的占位,然后再开启一个会话Session,通过feed_dict传入输入数据同时显式执行计算图。

而在TensorFlow2.0时代,采用的是动态计算图,即每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行得到结果,而无需开启Session。使用动态计算图即Eager Excution的好处是方便调试程序。它会让TensorFlow代码的表现和Python原生代码的表现一样,写起来就像写numpy一样,各种日志打印,控制流全部都是可以使用的。

动态计算图运行效率相对较低。在TensorFlow2.0中可以用@tf.function装饰器将普通Python函数转换成和TensorFlow1.0对应的静态计算图构建代码。转换的这个过程称为AutoGraph

pytorch采用的是动态计算图方式,运算与搭建同时进行,灵活易调节。pytorch转换为静态计算图,有两种方法torch.jit.trace和torch.jit.script。torch.jit.trace:顾名思义跟踪,给定模型一个输入(只要求输入的shape正确),开始执行一次前向传播,会追踪运行经过的模块算子,实时构建计算力图。缺点是trace将不会捕获根据输入数据而改变的行为。比如依赖于数据的分支判断。如果要使用动态控制流导出模型,则需要使用torch.jit.script。torch.jit.script:从Python源代码级别进行解析,而非在运行时构建。

四、对比分析

对第三部分调研的方案进行对比评价对比分析,论述各种方案的优劣势。

  • 目前pytorch采用的是动态计算图的方式,灵活容易调节。通过torch.jit.trace和torch.jit.script转换为静态图,但是torch.jit.trace无法追踪到模型中的动态运行结构,比如与依赖于数据的分支判断;而torch.jit.script目前只支持编译部分Python语法,像继承、生成器等复杂的控制流结构无法进行转换。

五、设计思路与实现方案

全面体验飞桨的动静转换@to_static功能,即参考飞桨官网 -> 使用指南 -> 动态图转静态下的内容,体验动转静模型导出、动转静训练等功能,产出一份整体功能体验报告。评估内容包含如下几个方面:

  • 接口层面:接口功能是否覆盖所有使用场景;InputSpec 指定信息是否好用
  • 语法层面:语法支持是否完备;控制流语法转换是否流畅
  • 报错层面:报错信息可读性;调试工具是否易用
  • 文档层面:教程文档是否完善,是否具有较好的指导性
  • 意见建议:非常欢迎提供更多的建设性意见和建议

六、测试和验收的考量

从用户的角度提供一份飞桨动静转换的评估报告,按照第五步中的评估内容进行体验,并反馈每个步骤的问题和卡点;写下动静转换任务的使用体验和感受。

七、可行性分析和排期规划

对多个深度学习框架有一定的使用基础,并且对深度学习下动态图与静态图机制有一定的了解,可以满足在当前版本周期内评估完成。

八、影响面

需要进一步讨论的问题,开放性问题,有争议问题;对其他模块是否有影响 从用户的角度基于paddlepaddle框架对动静转换进行评估。

名词解释

附件及参考资料