-
Notifications
You must be signed in to change notification settings - Fork 275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【Hackathon No.69】eval_paddle #88
Merged
Merged
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
f2a655f
Create rfc
sober-6 d135512
Create 20200331_eval_docs.md
sober-6 e036a52
【Hackathon No.69】eval_paddle
sober-6 9144a1d
Delete 20200331_eval_docs.md
sober-6 68a1d2e
【Hackathon No.69】eval_paddle
sober-6 aafc734
Update 20200331_eval_docs.md
sober-6 644e95d
Create eval
sober-6 427a451
Create test
sober-6 e29394b
Update 20200331_eval_docs.md
sober-6 9d70221
Update and rename test to 20200331_eval_docs.md
sober-6 8496225
Delete eval
sober-6 d0427da
Delete 20200331_eval_docs.md
sober-6 79d3d66
Delete rfc
sober-6 53c4848
Delete 20200331_eval_docs.md
sober-6 5a687a0
Merge branch 'PaddlePaddle:master' into sober-6-patch-1
sober-6 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
# 飞桨动态图训练功能体验方案 | ||
|
||
| 领域 | 飞桨动态图训练功能体验方案 | | ||
| ------------------------------------------------------------ | -------------------------- | | ||
| 提交作者<input type="checkbox" class="rowselector hidden"> | 王源 袁闯闯 | | ||
| 提交时间<input type="checkbox" class="rowselector hidden"> | 2022-03-31 | | ||
| 版本号 | V1.0 | | ||
| 依赖飞桨版本<input type="checkbox" class="rowselector hidden"> | paddlepaddle-gpu==2.2 | | ||
| 文件名 | 20200331_eval_docs.md<br> | | ||
|
||
|
||
# 一、概述 | ||
## 1、相关背景 | ||
|
||
飞桨框架于 2.0 正式版全面支持了动态图训练,并在2.1、2.2 两个大版本中不断新增了API以及大幅增强了训练功能。 | ||
|
||
希望有人对于飞桨框架动态图下单机训练功能整体的使用感受,可以与其他深度学习框架做功能对比,包括API、Tensor 索引、NumPy Compatibility、报错信息提示、训练性能、以及各种 trick 的用法等,并产出一份对应的评估报告。 | ||
|
||
## 2、功能目标 | ||
|
||
深度体验飞桨动态图训练功能,如:使用高层API、Numpy兼容性体验、训练和测试整个MNIST训练集等,并产出一份文档功能评估报告。主要关注该功能 Paddle 的使用体验。 | ||
|
||
## 3、意义 | ||
|
||
从用户角度认为的该功能比较好的使用体验和该功能 Paddle 的使用体验,以及两者之间的使用体验对比,包括易用性、完整性、前瞻性等。 | ||
|
||
# 二、飞桨现状 | ||
|
||
飞桨从 [2.0.0](https://github.com/PaddlePaddle/Paddle/releases/tag/v2.0.0) 从 1.x 到 2.0 做了较大的功能更新,在数据处理、组网方式、模型训练、多卡启动、模型保存和推理等开发流程都有了对应优化。。 | ||
|
||
从编程范式上说,飞桨兼容支持声明式编程和命令式编程,通俗地讲即静态图和动态图。其实飞桨本没有图的概念,在飞桨的设计中,把一个神经网络定义成一段类似程序的描述,也就是用户在写程序的过程中,就定义了模型表达及计算。 | ||
|
||
在静态图的控制流实现方面,飞桨借助自己实现的控制流OP而不是python原生的if else和for循环,这使得在飞桨中的定义的program即一个网络模型,可以有一个内部的表达,是可以全局优化编译执行的。 | ||
|
||
考虑对开发者来讲,更愿意使用python原生控制流,飞桨也做了支持,并通过解释方式执行,这就是动态图。但整体上,这两种编程范式是相对兼容统一的。飞桨将持续发布更完善的动态图功能,同时保持更强劲的性能。 | ||
|
||
# 三、业内方案调研与对比分析 | ||
|
||
动态图编程:采用 Python 的编程风格,解析式地执行每一行网络代码,并同时返回计算结果。相当于先计算前面的节点的值,再根据这些值搭建后面的计算图。 | ||
|
||
PyTorch 是一个动态的深度学习框架,目前的文档丰富,且积累了大量的官方、第三方的学习资料。 | ||
pytorch也采用的是动态计算图方式,运算与搭建同时进行,灵活易调节。 | ||
|
||
TensorFlow 最早方便地、较完备地实现了模型预研、训练到工业部署的问题,在此方面积累了丰富的基础组件和用户群体。不过在 API 设计方面,TensorFlow 由于各种原因导致的 API 功能重复、概念复杂,降低了用户体验感受,同时也间接影响到了文档结构的清晰。 | ||
在TensorFlow2.0时代,采用的是动态计算图,即每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行得到结果,而无需开启Session。使用动态计算图即Eager Excution的好处是方便调试程序。它会让TensorFlow代码的表现和Python原生代码的表现一样,写起来就像写numpy一样,各种日志打印,控制流全部都是可以使用的。 | ||
|
||
其它的主流深度学习框架,都或多或少受到 TensorFlow 与 PyTorch 的影响。 | ||
|
||
总结而言,影响用户体验的动态图训练功能可以归为以下几个方面: | ||
|
||
解析式的执行方式。用户无需预先定义完整的网络结构,每写一行网络代码,即可同时获得计算结果。 | ||
|
||
代码运行完成后,可以立马获取结果,支持使用 IDE 断点调试功能,使得调试更方便。 | ||
|
||
属于命令式的编程方式,与编写Python的方式类似,更容易上手。 | ||
|
||
网络的结构在不同的层次中可以变化,使用更灵活。 | ||
|
||
|
||
|
||
# 四、设计思路与实现方案 | ||
|
||
全面体验飞桨的动态图单机训练功能,即参考飞桨官网 -> 教程 -> 产业级实践深度学习 -> 动态图介绍下的内容,体验动态图模型训练评估等功能,产出一份整体功能体验报告。评估内容包含如下几个方面: | ||
|
||
语法层面:语法支持是否完备;控制流语法转换是否流畅 | ||
报错层面:报错信息可读性;调试工具是否易用 | ||
文档层面:教程文档是否完善,是否具有较好的指导性 | ||
意见建议:非常欢迎提供更多的建设性意见和建议 | ||
|
||
评估报告设计思路包括如下几部分: | ||
|
||
1、如何开启动态图模式 | ||
|
||
2、利用paddle动态图训练并测试MNIST数据集(同时将体验以下功能): | ||
|
||
调用高层API:如:paddle.Model、paddle.vision,与pytorch框架做对比。并利用Resnet、goolenet等网络模型或模型自己组网(Sequential组网、SubClass组网)进行训练; | ||
|
||
Numpy兼容性体验:在动态图模型代码中,所有与组网相关的 numpy 操作都必须用 paddle 的 API 重新实现,所以将在模型训练过程中体验Paddle.API来感受对比Pytorch的表现; | ||
|
||
Tensor 索引方面:将在模型训练中体验Tensor在数据传递过程中的表现(如:了解索引和 其切片规则、访问与修改Tensor、逻辑相关函数重写规则),并体验使用指南里有关Tensor的所有基本操作; | ||
|
||
训练性能:跑模型之前,先体验控制流和共享权重的使用效果,然后在数据集定义、加载和数据预处理、数据增强方面感受与Pytorch使用的区别,最后通过训练结果进行对比分析 | ||
|
||
报错汇总:根据实际体验步骤进行报错记录 | ||
|
||
3、撰写模型训练测试评估文档 | ||
|
||
4、对比Pytorch等框架动态图单机训练过程和结果 | ||
|
||
5、通过实验分析飞桨动态图训练功能的易用性、完整性、前瞻性等 | ||
|
||
|
||
其中动态图模式常见的使用技巧,如: | ||
1、中间变量值/梯度打印 | ||
2、断点调试 | ||
3、阻断反向传递 | ||
4、以及某些场景下如何改写为静态图模式运行。 | ||
|
||
## 五、命名与参数设计 | ||
|
||
因为是评估报告,没有 API 接口设计,无需命名与参数设计 | ||
|
||
# 六、测试和验收的考量 | ||
|
||
通过深度体验飞桨动态图训练功能,提交一份评估报告。具体考量标准和方式以飞桨 RFC 中讨论为准,但至少应包含存在较好使用体验的内容点、存在不足及改进建议。 | ||
|
||
# 七、可行性分析和排期规划 | ||
|
||
对各主流深度学习框架已经有一定基础和研究,需要进一步做细致的体验测试及分析,最终形成详细的评估报告。 | ||
|
||
预计整个工作在一个月内可以完成,最晚不会晚于黑客松设定的验收时间。 | ||
|
||
|
||
# 八、影响面 | ||
|
||
需要进一步讨论的问题,开放性问题,有争议问题;对其他模块是否有影响 | ||
从用户的角度基于paddlepaddle框架对动态图单机训练进行评估。 | ||
|
||
# 名词解释 | ||
|
||
无 | ||
|
||
# 附件及参考资料 | ||
|
||
飞桨大量的官方文档、网站等学习资料 | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这五部分还需要再加强深度。RFC可以先合入,后续在PR中沟通
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
好的