【PIR】记录新ir全量算子覆盖需要修复的算子 #58266
Labels
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
status/close
已关闭
记录正在修复的算子
ops.yaml
中添加dpsgd的注册信息之后,运行报错[Hint: Expected param->numel() == sz, but received param->numel():10710 != sz:0.]
,原因是没有给dpsgd配置infermeta,在paddle/phi/infermeta/ternary.cc
下添加infermeta函数后成功解决.问题二:
error: eager_api_dpsgd was not declared in this scope
,添加算子n时编译出现该问题需要将算子名称加入paddle/fluid/pir/dialect/op_generator/ops_api_gen.py NO_NEED_GEN_STATIC_ONLY_APIS
new_ir_op_test_no_check_list
不对输出结果做相应的检查St6vectorIlSaIlEE
问题二:randint的输出同样具有随机性,所以这里将其加入
new_ir_op_test_no_check_list
对输出值不做检查FLAGS_enable_new_ir_in_executor
时执行错误,开启FLAGS_PIR_OPTEST
,FLAGS_PIR_OPTEST_WHITE_LIST
单测成功,这里暂时不做处理RepeatsTensor
翻译成repeat_interleave_with_tensor_index
或者repeat_interleave
这里增加RepeatInterLeaveOpTranscriber就可以实现,但是要注意对对应的grad op也要做相同的处理。问题二:报错
the type of data we are trying to retrieve (float32) does not match the type of data (flaot64)
这个错误原因主要是组网时声明的tensor的dtype为float32但是测试文件中给出的数据是float64,旧Ir下的GetExpectedKernelType函数可以根据输入的数据的数据类型选择kernel,而新ir下暂不支持,新ir下根据x的dtype选择对应的kernel。所以对于此类问题需要修改单测文件,强制输入的数据类型和声明的dtype一致。seed
is not registered. Selected wrong DataTypeint64
. Paddle support following DataTypes: int32.GetExpectedKernelType
不一致造成的,旧Ir下kerneltype为INT32
,而新ir下的GetExpectedKernelType
返回的是Out的dtype,修改新ir下的GetExpectedKernelType
问题解决OpYamlInfoParser
在解析runtime_info.kernel_param
时会将可变属性放入kernel_fn_attr_params
这样对于新Ir下定义的sparse_momentum_op(定义了Scalar axis)会造成AttributeMap
中不存在axis
属性的问题。所以对于此类legacy op
暂时将可变属性统一放入kernel_fn_tensor_params
中。解决方案是需要给OpYamlInfoParser
多增加一个属性,用来判断当前翻译的Op是非为legacy op
。Segmentation fault
is detected by the operating system.FLAGS_enable_new_ir_in_executor
时执行错误,开启FLAGS_PIR_OPTEST
,FLAGS_PIR_OPTEST_WHITE_LIST
单测成功,这里暂时不做处理Segmentation fault
is detected by the operating system.FLAGS_enable_new_ir_in_executor
时执行错误,开启FLAGS_PIR_OPTEST
,FLAGS_PIR_OPTEST_WHITE_LIST
单测成功,这里暂时不做处理is_sorted
的值选择unique或者unique_raw两个kernel
执行。在新Ir下不存在这样的机制,所以需要根据is_sorted的值将旧Ir下的unique翻译为新Ir下的unique或者unique_raw两个OP.这里在新Ir下补充了unique_raw的定义。问题二:修复后在GPU环境上运行,在GPU版本的
kernel
中发生空指针异常,这是选kernel
的逻辑存在问题,旧Ir下通过GetReduceGradExpectedKernelType
在GPU环境下选择CPU中的kernel
,新IR下不适配GetReduceGradExpectedKernelType导致在GPU环境下Kernel选择 出现问题,暂时尚未处理input
对应的Variable
在构建PhiContext
时holder_
为空。在python侧_StandaloneExecutor执行run函数时传入的feed_names为空,在旧IR中会在program_interpreter中执行run函数,对于program_interpreter初始化Variable的机制,他会在构建Varibale是就将其初始化。而pir_interpreter不会先初始化Variable,它根据feed_names为输入变量初始化,所以如果feed_names为空,会导致input不会被初始化,导致后面运行报错。解决方案是在exe.run()中加入feed
The text was updated successfully, but these errors were encountered: