Created by: guoshengCS
To make save/load compatible between dygraph and static-graph.
由于静态图和动态图save内容存在以下不一致,在load时进行转换处理:
-
global step:使用learning rate schduler时
- 动态图保存的key为"global_step" to save, 静态图保存的key为"@LR_DECAY_COUNTER@".
- 由于global step自增时机不同,动态图在最后,静态图在最前(初始-1),动态图保存的值会比动态图多1
-
global lr:未使用learning rate schduler时
- 静态图中作为persistable var保存,动态图不保存
-
accumulator name:
unique(param.name + "_" + optimizer.name+ "_" + accum_name)
- 静态图和动态图中optimizer.name不一致 https://github.com/PaddlePaddle/Paddle/blob/release/1.7/python/paddle/fluid/optimizer.py#L69
此外验证过程发现以下待修复问题:
- 静态图eval之后的train结果错误,原因是由于learning rate schedule在ori_prog中定义,eval_prog同样clone了下来 https://github.com/PaddlePaddle/hapi/blob/master/model.py#L291
- 静态图对input使用重载运算错误,原因是由于重载运算使用var的Program,但使用的var为ori_prog中的var
- 静态图load到CPU,只有第一步计算结果正确, 原因是由于sgd等optimizer类OP的输入输出inplace和transfer一起使用时的bug,transfer back会覆盖sgd的输出。https://github.com/PaddlePaddle/Paddle/pull/22936