PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
21.66k stars 5.44k forks source link

[pir_save_load] add pir for test_jit_save_load.py #63958

Closed xiaoguoguo626807 closed 1 week ago

xiaoguoguo626807 commented 3 weeks ago

PR Category

others

PR Types

others

Description

pcard-67164

适配test_jit_save_load.py 25/28个class 测试.

a. 解决装饰器问题,保证外部环境是动态图,save中切换静态图test_with_dygraph_pir。 todo :paddle.load 测试。 b. 多输出精度不对,原因是save 时加scale 加到了一个变量上,导致剪枝了一层linear的parameter c. input_specs_compatible(flatten(input_spec), flatten(self._function_spec.input_spec)在新IR下判断为false,因为datatype判断不同,input_spec 是DataType.FLOAT32, 原来的是paddle.float32, 原因是在layer中加动转静装饰器,在切换pir 环境前进行动转静,导致数据类型不匹配。 d. feed_var 是input_spec的时候需要找到对应的dataop拿到value. e. 补充pirtranslatelayer 的input_spec,output_spec的接口。 f. net.forward.input[0].shape 旧IR下返回了(), pir下是[] g. 适配save根据output_spec 进行输出过滤。对input_spec 进行处理 h.pir下output_spec 传递的是tensor 无法进行检查,因为value 没有名称,无法通过name检查,只能直接判断var 是否在 output中,var 需要是value, 只能通过动转静之后的网络中找到value.(添加了check逻辑) i. 多次load 需要给parameter重命名,且parameter如果需要训练,用优化器更新,返回的是EagerParamBase, 否则是tensor j. 适配combine_param save 接口中相关代码。 k. TestJitSaveLoadMultiMethods 原始动转静save 路径有问题导致load 不出其他层; 输出=输入的情况下,value拥有两个名字,执行器获取shadow_output 的名字得不到正确的tensor, 会报错tensor no holder。

TODO TestJitSaveLoadSaveWithoutRunning 含控制流 TestJitSaveLoadFinetuneLoad 原始动转静报错待修复, 含控制流

paddle-bot[bot] commented 3 weeks ago

你的PR提交成功,感谢你对开源项目的贡献! 请关注后续CI自动化测试结果,详情请参考Paddle-CI手册。 Your PR has been submitted. Thanks for your contribution! Please wait for the result of CI firstly. See Paddle CI Manual for details.