From eee9c7887aaffb92cb2247c81a58fc88dcc2bd73 Mon Sep 17 00:00:00 2001 From: huangjiyi <43315610+huangjiyi@users.noreply.github.com> Date: Thu, 27 Apr 2023 10:30:37 +0800 Subject: [PATCH] Register fluid xpu kerenls to phi [part 2] (#53188) * update * fix bug --- .../c_softmax_with_cross_entropy_op_xpu.cc | 20 ++++++++----- .../operators/collective/c_split_op_xpu.cc | 13 ++++---- .../collective/c_sync_calc_stream_op_xpu.cc | 4 +-- .../collective/c_sync_comm_stream_op_xpu.cc | 4 +-- .../operators/controlflow/logical_op_xpu.h | 7 ++++- .../controlflow/logicaland_op_xpu.cc | 27 +++++++++++------ .../controlflow/logicalnot_op_xpu.cc | 19 +++++++----- .../operators/controlflow/logicalor_op_xpu.cc | 26 ++++++++++------ .../detection/iou_similarity_op_xpu.cc | 5 ++-- .../fused/fused_gemm_epilogue_op_xpu.cc | 30 ++++++++++--------- paddle/fluid/operators/load_combine_op_xpu.cc | 17 ++++++----- paddle/fluid/operators/lod_reset_op.cc | 16 +++++----- paddle/fluid/operators/log_loss_op_xpu.cc | 13 ++++---- .../operators/metrics/accuracy_op_xpu.cc | 8 ++--- .../optimizers/lars_momentum_op_xpu.cc | 12 +++++--- .../operators/reduce_ops/logsumexp_op_xpu.cc | 4 +++ 16 files changed, 134 insertions(+), 91 deletions(-) diff --git a/paddle/fluid/operators/collective/c_softmax_with_cross_entropy_op_xpu.cc b/paddle/fluid/operators/collective/c_softmax_with_cross_entropy_op_xpu.cc index 83824c81084..695c28d7755 100644 --- a/paddle/fluid/operators/collective/c_softmax_with_cross_entropy_op_xpu.cc +++ b/paddle/fluid/operators/collective/c_softmax_with_cross_entropy_op_xpu.cc @@ -29,7 +29,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class CSoftmaxWithCrossEntropyOp : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -468,7 +468,7 @@ struct CSoftmaxWithCrossEntropyFunctor { } }; -template +template class CSoftmaxWithCrossEntropyGrad : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { @@ -535,9 +535,13 @@ class CSoftmaxWithCrossEntropyGrad : public framework::OpKernel { namespace ops = paddle::operators; namespace plat = paddle::platform; -REGISTER_OP_XPU_KERNEL(c_softmax_with_cross_entropy, - ops::CSoftmaxWithCrossEntropyOp); - -REGISTER_OP_XPU_KERNEL( - c_softmax_with_cross_entropy_grad, - ops::CSoftmaxWithCrossEntropyGrad); +PD_REGISTER_STRUCT_KERNEL(c_softmax_with_cross_entropy, + XPU, + ALL_LAYOUT, + ops::CSoftmaxWithCrossEntropyOp, + float) {} +PD_REGISTER_STRUCT_KERNEL(c_softmax_with_cross_entropy_grad, + XPU, + ALL_LAYOUT, + ops::CSoftmaxWithCrossEntropyGrad, + float) {} diff --git a/paddle/fluid/operators/collective/c_split_op_xpu.cc b/paddle/fluid/operators/collective/c_split_op_xpu.cc index bad920a11ff..d573a83d708 100644 --- a/paddle/fluid/operators/collective/c_split_op_xpu.cc +++ b/paddle/fluid/operators/collective/c_split_op_xpu.cc @@ -22,7 +22,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class CSplitOpXPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -87,7 +87,10 @@ class CSplitOpXPUKernel : public framework::OpKernel { namespace ops = paddle::operators; namespace plat = paddle::platform; -REGISTER_OP_XPU_KERNEL(c_split, - ops::CSplitOpXPUKernel, - ops::CSplitOpXPUKernel, - ops::CSplitOpXPUKernel); +PD_REGISTER_STRUCT_KERNEL(c_split, + XPU, + ALL_LAYOUT, + ops::CSplitOpXPUKernel, + float, + int, + plat::float16) {} diff --git a/paddle/fluid/operators/collective/c_sync_calc_stream_op_xpu.cc b/paddle/fluid/operators/collective/c_sync_calc_stream_op_xpu.cc index 4917057059f..0b432cab281 100644 --- a/paddle/fluid/operators/collective/c_sync_calc_stream_op_xpu.cc +++ b/paddle/fluid/operators/collective/c_sync_calc_stream_op_xpu.cc @@ -17,5 +17,5 @@ limitations under the License. */ namespace ops = paddle::operators; namespace plat = paddle::platform; -REGISTER_OP_XPU_KERNEL(c_sync_calc_stream, - ops::CSyncCalcStreamKernel) +PD_REGISTER_STRUCT_KERNEL( + c_sync_calc_stream, XPU, ALL_LAYOUT, ops::CSyncCalcStreamKernel, float) {} diff --git a/paddle/fluid/operators/collective/c_sync_comm_stream_op_xpu.cc b/paddle/fluid/operators/collective/c_sync_comm_stream_op_xpu.cc index bbb3b62bf3c..ce2c20d57f0 100644 --- a/paddle/fluid/operators/collective/c_sync_comm_stream_op_xpu.cc +++ b/paddle/fluid/operators/collective/c_sync_comm_stream_op_xpu.cc @@ -17,5 +17,5 @@ limitations under the License. */ namespace ops = paddle::operators; namespace plat = paddle::platform; -REGISTER_OP_XPU_KERNEL(c_sync_comm_stream, - ops::CSyncCommStreamKernel); +PD_REGISTER_STRUCT_KERNEL( + c_sync_comm_stream, XPU, ALL_LAYOUT, ops::CSyncCommStreamKernel, float) {} diff --git a/paddle/fluid/operators/controlflow/logical_op_xpu.h b/paddle/fluid/operators/controlflow/logical_op_xpu.h index 8afefd68374..614db61558f 100644 --- a/paddle/fluid/operators/controlflow/logical_op_xpu.h +++ b/paddle/fluid/operators/controlflow/logical_op_xpu.h @@ -156,7 +156,12 @@ class BinaryLogicalOpXPUKernel : public framework::OpKernel { } }; -template +#define DEFINE_BINARY_LOGICAL_OP_XPU_KERNEL(op_name, xpu_type) \ + template \ + class BinaryLogical##op_name##CPUKernel \ + : public CReduceOpCPUKernel {}; + +template class UnaryLogicalOpXPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { diff --git a/paddle/fluid/operators/controlflow/logicaland_op_xpu.cc b/paddle/fluid/operators/controlflow/logicaland_op_xpu.cc index 6248b6e0b06..563317f209e 100644 --- a/paddle/fluid/operators/controlflow/logicaland_op_xpu.cc +++ b/paddle/fluid/operators/controlflow/logicaland_op_xpu.cc @@ -14,14 +14,23 @@ limitations under the License. */ #ifdef PADDLE_WITH_XPU #include "paddle/fluid/operators/controlflow/logical_op_xpu.h" + +namespace paddle { +namespace operators { +DEFINE_BINARY_LOGICAL_OP_XPU_KERNEL(AND, XpuLogicalType::XPU_AND); +} // namespace operators +} // namespace paddle + namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL( - logical_and, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel); +PD_REGISTER_STRUCT_KERNEL(logical_and, + XPU, + ALL_LAYOUT, + ops::BinaryLogicalANDCPUKernel, + bool, + int8_t, + int16_t, + int, + int64_t, + float, + double) {} #endif diff --git a/paddle/fluid/operators/controlflow/logicalnot_op_xpu.cc b/paddle/fluid/operators/controlflow/logicalnot_op_xpu.cc index b8336c7201c..1431816810b 100644 --- a/paddle/fluid/operators/controlflow/logicalnot_op_xpu.cc +++ b/paddle/fluid/operators/controlflow/logicalnot_op_xpu.cc @@ -15,12 +15,15 @@ limitations under the License. */ #ifdef PADDLE_WITH_XPU #include "paddle/fluid/operators/controlflow/logical_op_xpu.h" namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL(logicalnot, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel, - ops::UnaryLogicalOpXPUKernel); +PD_REGISTER_STRUCT_KERNEL(logicalnot, + XPU, + ALL_LAYOUT, + ops::UnaryLogicalOpXPUKernel, + bool, + int8_t, + int16_t, + int, + int64_t, + float, + double) {} #endif diff --git a/paddle/fluid/operators/controlflow/logicalor_op_xpu.cc b/paddle/fluid/operators/controlflow/logicalor_op_xpu.cc index 126596841a2..03c707222e4 100644 --- a/paddle/fluid/operators/controlflow/logicalor_op_xpu.cc +++ b/paddle/fluid/operators/controlflow/logicalor_op_xpu.cc @@ -15,14 +15,22 @@ limitations under the License. */ #ifdef PADDLE_WITH_XPU #include "paddle/fluid/operators/controlflow/logical_op_xpu.h" +namespace paddle { +namespace operators { +DEFINE_BINARY_LOGICAL_OP_XPU_KERNEL(OR, XpuLogicalType::XPU_OR); +} // namespace operators +} // namespace paddle + namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL( - logical_or, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel, - ops::BinaryLogicalOpXPUKernel); +PD_REGISTER_STRUCT_KERNEL(logical_or, + XPU, + ALL_LAYOUT, + ops::BinaryLogicalORCPUKernel, + bool, + int8_t, + int16_t, + int, + int64_t, + float, + double) {} #endif diff --git a/paddle/fluid/operators/detection/iou_similarity_op_xpu.cc b/paddle/fluid/operators/detection/iou_similarity_op_xpu.cc index 1dc669075b1..27ffa64c2a8 100644 --- a/paddle/fluid/operators/detection/iou_similarity_op_xpu.cc +++ b/paddle/fluid/operators/detection/iou_similarity_op_xpu.cc @@ -19,7 +19,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class XPUIOUSimilarityKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -57,6 +57,7 @@ class XPUIOUSimilarityKernel : public framework::OpKernel { namespace ops = paddle::operators; using XPU = paddle::platform::XPUDeviceContext; -REGISTER_OP_XPU_KERNEL(iou_similarity, ops::XPUIOUSimilarityKernel); +PD_REGISTER_STRUCT_KERNEL( + iou_similarity, XPU, ALL_LAYOUT, ops::XPUIOUSimilarityKernel, float) {} #endif diff --git a/paddle/fluid/operators/fused/fused_gemm_epilogue_op_xpu.cc b/paddle/fluid/operators/fused/fused_gemm_epilogue_op_xpu.cc index 82b437b943c..6594df2f516 100644 --- a/paddle/fluid/operators/fused/fused_gemm_epilogue_op_xpu.cc +++ b/paddle/fluid/operators/fused/fused_gemm_epilogue_op_xpu.cc @@ -22,7 +22,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class FusedGemmEpilogueXPUKernel : public framework::OpKernel { using XPUType = typename XPUTypeTrait::Type; @@ -102,7 +102,7 @@ class FusedGemmEpilogueXPUKernel : public framework::OpKernel { } }; -template +template class FusedGemmEpilogueXPUGradKernel : public framework::OpKernel { using XPUType = typename XPUTypeTrait::Type; @@ -227,15 +227,17 @@ class FusedGemmEpilogueXPUGradKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; - -REGISTER_OP_XPU_KERNEL( - fused_gemm_epilogue, - ops::FusedGemmEpilogueXPUKernel, - ops::FusedGemmEpilogueXPUKernel); - -REGISTER_OP_XPU_KERNEL( - fused_gemm_epilogue_grad, - ops::FusedGemmEpilogueXPUGradKernel, - ops::FusedGemmEpilogueXPUGradKernel); +namespace plat = paddle::platform; + +PD_REGISTER_STRUCT_KERNEL(fused_gemm_epilogue, + XPU, + ALL_LAYOUT, + ops::FusedGemmEpilogueXPUKernel, + float, + plat::float16) {} +PD_REGISTER_STRUCT_KERNEL(fused_gemm_epilogue_grad, + XPU, + ALL_LAYOUT, + ops::FusedGemmEpilogueXPUGradKernel, + float, + plat::float16) {} diff --git a/paddle/fluid/operators/load_combine_op_xpu.cc b/paddle/fluid/operators/load_combine_op_xpu.cc index 307c9042c54..d285af37cda 100644 --- a/paddle/fluid/operators/load_combine_op_xpu.cc +++ b/paddle/fluid/operators/load_combine_op_xpu.cc @@ -15,11 +15,12 @@ limitations under the License. */ #include "paddle/fluid/operators/load_combine_op.h" namespace ops = paddle::operators; -using XPUCtx = paddle::platform::XPUDeviceContext; - -REGISTER_OP_XPU_KERNEL(load_combine, - ops::LoadCombineOpKernel, - ops::LoadCombineOpKernel, - ops::LoadCombineOpKernel, - ops::LoadCombineOpKernel, - ops::LoadCombineOpKernel); +PD_REGISTER_STRUCT_KERNEL(load_combine, + XPU, + ALL_LAYOUT, + ops::LoadCombineOpKernel, + float, + double, + int, + int8_t, + int64_t) {} diff --git a/paddle/fluid/operators/lod_reset_op.cc b/paddle/fluid/operators/lod_reset_op.cc index aa5c6bc249c..ae464e7b471 100644 --- a/paddle/fluid/operators/lod_reset_op.cc +++ b/paddle/fluid/operators/lod_reset_op.cc @@ -259,13 +259,15 @@ PD_REGISTER_STRUCT_KERNEL(lod_reset, int64_t) {} #ifdef PADDLE_WITH_XPU -using XPUCtx = paddle::platform::XPUDeviceContext; -REGISTER_OP_XPU_KERNEL(lod_reset, - ops::LoDResetKernel, - ops::LoDResetKernel, - ops::LoDResetKernel, - ops::LoDResetKernel, - ops::LoDResetKernel); +PD_REGISTER_STRUCT_KERNEL(lod_reset, + XPU, + ALL_LAYOUT, + ops::LoDResetKernel, + plat::float16, + float, + double, + int, + int64_t) {} #endif PD_REGISTER_STRUCT_KERNEL(lod_reset_grad, diff --git a/paddle/fluid/operators/log_loss_op_xpu.cc b/paddle/fluid/operators/log_loss_op_xpu.cc index 87e6d42e98a..6c0c7f30d8e 100644 --- a/paddle/fluid/operators/log_loss_op_xpu.cc +++ b/paddle/fluid/operators/log_loss_op_xpu.cc @@ -17,7 +17,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class LogLossXPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -37,7 +37,7 @@ class LogLossXPUKernel : public framework::OpKernel { PADDLE_ENFORCE_XDNN_SUCCESS(r, "log_loss"); } }; -template +template class LogLossGradXPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -67,10 +67,9 @@ class LogLossGradXPUKernel : public framework::OpKernel { } // namespace operators } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL( - log_loss, ops::LogLossXPUKernel); -REGISTER_OP_XPU_KERNEL( - log_loss_grad, - ops::LogLossGradXPUKernel); +PD_REGISTER_STRUCT_KERNEL( + log_loss, XPU, ALL_LAYOUT, ops::LogLossXPUKernel, float) {} +PD_REGISTER_STRUCT_KERNEL( + log_loss_grad, XPU, ALL_LAYOUT, ops::LogLossGradXPUKernel, float) {} #endif diff --git a/paddle/fluid/operators/metrics/accuracy_op_xpu.cc b/paddle/fluid/operators/metrics/accuracy_op_xpu.cc index 737228902b6..0ac30b3e873 100644 --- a/paddle/fluid/operators/metrics/accuracy_op_xpu.cc +++ b/paddle/fluid/operators/metrics/accuracy_op_xpu.cc @@ -21,7 +21,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class AccuracyXPUKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { @@ -73,8 +73,6 @@ class AccuracyXPUKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL( - accuracy, - ops::AccuracyXPUKernel); - +PD_REGISTER_STRUCT_KERNEL( + accuracy, XPU, ALL_LAYOUT, ops::AccuracyXPUKernel, float) {} #endif diff --git a/paddle/fluid/operators/optimizers/lars_momentum_op_xpu.cc b/paddle/fluid/operators/optimizers/lars_momentum_op_xpu.cc index 267e064b306..52b57252b0a 100644 --- a/paddle/fluid/operators/optimizers/lars_momentum_op_xpu.cc +++ b/paddle/fluid/operators/optimizers/lars_momentum_op_xpu.cc @@ -20,7 +20,7 @@ limitations under the License. */ namespace paddle { namespace operators { -template +template class LarsMomentumOpXPUKernel : public framework::OpKernel { using XPUType = typename XPUTypeTrait::Type; @@ -115,7 +115,11 @@ class LarsMomentumOpXPUKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP_XPU_KERNEL(lars_momentum, - ops::LarsMomentumOpXPUKernel, - ops::LarsMomentumOpXPUKernel); +namespace plat = paddle::platform; +PD_REGISTER_STRUCT_KERNEL(lars_momentum, + XPU, + ALL_LAYOUT, + ops::LarsMomentumOpXPUKernel, + float, + plat::float16) {} #endif diff --git a/paddle/fluid/operators/reduce_ops/logsumexp_op_xpu.cc b/paddle/fluid/operators/reduce_ops/logsumexp_op_xpu.cc index e250b5585da..b23fee1a012 100644 --- a/paddle/fluid/operators/reduce_ops/logsumexp_op_xpu.cc +++ b/paddle/fluid/operators/reduce_ops/logsumexp_op_xpu.cc @@ -70,6 +70,10 @@ class XPULogsumexpKernel : public framework::OpKernel { } // namespace paddle namespace ops = paddle::operators; +// This kernel can not be registered in phi, because op logsumexp should run +// phi::LogsumexpKernel rather than XPULogsumexpKernel here. And if register +// xpu logsumexp kernel in phi, op logsumexp will run XPULogsumexpKernel here +// and raise error. REGISTER_OP_XPU_KERNEL( logsumexp, ops::XPULogsumexpKernel); -- GitLab