朱新明
PIR 算子补全与兼容机制建设
paddle.mean
API在动转静时翻译失败。主要原因是现在的ProgramTranslato没有支持VarDesc*
。在OpTranslator中适配从mutable_attributes
中
得到VarDesc*
,进而得到VarName,从param_map
得到对应的value
。这里从param_map
中的到value
的前提是该VarDesc*
已经被前述Op定义。但是在
动转静时没有插入对应的data_op。尝试进行插入,在实际执行时发现在scope
中的Tensor对应的holder_
为空,所以动转静时在新IR和就IR下都会失败。
ProgramTranslator对VarDesc*
的支持已经进行了适配。
在fake_quantize_range_abs_max
的参数is_test
为True
时,OutScale
的holder_
为null
。因为当输入x
的dtype为float16
时,会选择在GPU上的Kernel执行。中间框架会插入memcpy_d2h
算子,该算子负责将数据从GPU拷贝会主机。但是当is_test
为True
时,Kernel中并没有为OutScale
中分配显存,所以会执行失败。
目前的解决方法是当is_test
为True
时,将输出OutScale
和OutScales
加入到no_check_set中,在no_check_set中的属性不会通过fetch
算子取出,所以一九不会
涉及插入memcpy_d2h
算子。
在review pull_gpups_sparse
算子注册时发现TestOpWithBackwardTranslator中并不会成功插入反向算子,原因是out的stop_gradient
的属性值默认为True
。
现在已经修正。
- 推进分布式算子注册issue的合入,完成该issue中的内容
- review算子单测任务相关PR
对上述问题的分析很有帮助,继续努力!