Paddle
Paddle copied to clipboard
【快乐开源】PIR SaveLoad 体系单测适配
问题描述 Please describe your issue
一、BackGround 📚
飞桨新IR(PIR)save load 功能建设已经基本完成,涉及到2组API的相关单测开启适配。分别是动转静api paddle.jit.save / paddle.jit.load
;以及推理api paddle.static.save_inference_model / paddle.static.load_inference_model
.
二、Task Introduction📚
任务分为多期进行:首先发布动转静API相关的第一期任务,此任务需要为指定单测文件中涉及到paddle.jit.save / paddle.jit.load
的单测增加装饰器test_with_dygraph_pir,
进行旧ir +pir 下的测试。此装饰器可以保证动转静运行在动态图模式下,转静后运行在pir 模式下。参考test_jit_save_load.py
中相关样例。
dygraph_to_static 目录下相关单测装饰器为@test_legacy_and_pt_and_pir, 大部分单测已增加装饰器,只需将pir 分支下的jit.save,jit.load 内容打开进行调试。
P0, P1 单测常见的调试问题如下:参考https://github.com/PaddlePaddle/Paddle/pull/63958/files
问题1: 动转静to_static的参数需要增加 full_graph=True 确保动转静运行在AST整图模式下。
问题2:动转静to_static 如果在layer 的class 中以装饰器实现,会在装饰器外完成动转静,导致模式错误,InputSpec数据类型错误,需要将to_static写在测试的函数内。
问题3: 动转静输入输出的shape 在pir 模式下是list [], 旧ir模式下是tuple () 。需要在单测中加分支处理。
问题4: paddle.jit.save 中如需传递output_spec, output_spec 需要从动转静的layer中获取(value),不能是执行结果(tensor)
注意事项:
确保jit.save 和 jit.load 在同一模式下,有些样例save在整个测试类的启动位置,无法使用装饰器进行测试,此时需要单独写一个新类只在pir模式下测试。例如TestTranslatedLayer
如遇到原始单测跑不通的情况,可以单独执行pir 模式测试,(if not paddle.framework.use_pir_api())仍有相同报错的可@SigureMo 协助修复。
P2 单测常见的调试问题如下:参考https://github.com/PaddlePaddle/Paddle/pull/64151/files
问题1. pir 的model 存储后缀为.json
与旧ir 的pdmodel
不同, 因此需要单独适配文件后缀
问题2. 目前推理的predictor 未开发完成 predict_analysis_inference 函数需要在pir模式下跳过。
Task Submit📚
1. 单测验证
修复完成后,可以在本地执行验证:
ctest -R 单测名称
或python 单测名称
2. 认领方式
请大家以 comment 的形式认领任务,如:
【报名】:1、3、12-13
多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5
3. PR提交
- PR名称需要加前缀 【Fix PIR JIT SaveLoad Unittest No.XXX】
- PR描述中需要附上本issue
- 评论里或者 review request @xiaoguoguo626807 进行review
看板信息
任务方向 | 任务数量 | 提交作品 / 任务认领 | 提交率 | 完成 | 完成率 |
---|---|---|---|---|---|
【快乐开源】PIR SaveLoad 体系单测适配 | 23 | 18 / 18 | 78.26% | 7 | 30.43% |
四、Task List📚
序号 | 单测 | 优先级 | PR |
---|---|---|---|
1 | dygraph_to_static/test_container.py | P0 | @xiaoguoguo626807 |
2 | dygraph_to_static/test_declarative.py | P0 | @xiaoguoguo626807 |
3 | dygraph_to_static/test_for_enumerate.py | P0 | @xiaoguoguo626807 |
4 | dygraph_to_static/test_grad.py | P0 | @xiaoguoguo626807 |
5 | dygraph_to_static/test_layer_hook.py | P0 | @xiaoguoguo626807 |
6 | dygraph_to_static/test_loop.py | P0 | @xiaoguoguo626807 |
7 | dygraph_to_static/test_lstm.py | P0 | |
8 | dygraph_to_static/test_save_inference_model.py | P0 | @xiaoguoguo626807 |
9 | dygraph_to_static/test_slice.py | P0 | @xiaoguoguo626807 |
10 | dygraph_to_static/test_typing.py | P0 | @xiaoguoguo626807 |
11 | rnn/test_rnn_nets.py | P0 | |
12 | test_input_spec.py | P0 | @xiaoguoguo626807 |
13 | test_ops_nms.py | P0 | @xiaoguoguo626807 |
14 | dygraph_to_static/test_pylayer.py | P1 | |
15 | dygraph_to_static/test_layer_hook.py | P1 | @xiaoguoguo626807 |
16 | dygraph_to_static/test_legacy_error.py | P1 | |
17 | test_translated_layer.py | P1 | |
18 | test_bert.py | P2 | @xiaoguoguo626807 |
19 | test_bmn.py | P2 | @enkilee |
20 | test_mobile_net.py | P2 | @xiaoguoguo626807 |
21 | test_resnet.py | P2 | @xiaoguoguo626807 |
22 | test_build_strategy.py | P2 | @xiaoguoguo626807 |
23 | test_se_resnet.py | P2 | @xiaoguoguo626807 |
统计信息
排名不分先后 @xiaoguoguo626807 (6) @enkilee (1)
【报名】:18
【报名】:19
【报名】 20-21
【报名】 12, 22-23
【报名】 1-6, 8-10, 13, 15