From 4f33f44b546ccfcfed6b615a6782abbe37e09bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=98=A5=E4=B9=94?= <83450930+Liyulingyue@users.noreply.github.com> Date: Wed, 10 May 2023 16:20:38 +0800 Subject: [PATCH] [static op generation] lstsq (#53290) --- paddle/fluid/operators/lstsq_op.cc | 96 ----------------------------- paddle/phi/api/yaml/legacy_ops.yaml | 9 --- paddle/phi/api/yaml/op_compat.yaml | 10 +++ paddle/phi/api/yaml/op_version.yaml | 7 +++ paddle/phi/api/yaml/ops.yaml | 10 +++ paddle/phi/ops/compat/lstsq_sig.cc | 28 --------- 6 files changed, 27 insertions(+), 133 deletions(-) delete mode 100644 paddle/fluid/operators/lstsq_op.cc delete mode 100644 paddle/phi/ops/compat/lstsq_sig.cc diff --git a/paddle/fluid/operators/lstsq_op.cc b/paddle/fluid/operators/lstsq_op.cc deleted file mode 100644 index bf19e28af0a..00000000000 --- a/paddle/fluid/operators/lstsq_op.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "paddle/fluid/framework/infershape_utils.h" -#include "paddle/fluid/framework/op_registry.h" -#include "paddle/fluid/framework/op_version_registry.h" -#include "paddle/phi/infermeta/binary.h" - -namespace paddle { -namespace operators { - -class LstsqOp : public framework::OperatorWithKernel { - public: - using framework::OperatorWithKernel::OperatorWithKernel; - - protected: - // The output of lstsq is always complex-valued even for real-valued inputs - phi::KernelKey GetExpectedKernelType( - const framework::ExecutionContext& ctx) const override { - auto dtype = OperatorWithKernel::IndicateVarDataType(ctx, "X"); - if (dtype != framework::proto::VarType::FP32 && - dtype != framework::proto::VarType::FP64) { - PADDLE_THROW(platform::errors::InvalidArgument( - "unsupported data type: %s!", dtype)); - } - return phi::KernelKey(dtype, ctx.GetPlace()); - } -}; - -class LstsqOpMaker : public framework::OpProtoAndCheckerMaker { - public: - void Make() override { - AddInput("X", - "(Tensor), A real-valued tensor with shape (*, m, n). " - "The accepted datatype is one of float32, float64"); - AddInput("Y", - "(Tensor), A real-valued tensor with shape (*, m, k). " - "The accepted datatype is one of float32, float64"); - AddAttr( - "rcond", - "(float, default 0.0), A float value used to determine the effective " - "rank of A.") - .SetDefault(0.0f); - AddAttr("driver", - "(string, default \"gels\"). " - "name of the LAPACK method to be used.") - .SetDefault("gels"); - AddOutput("Solution", - "(Tensor), The output Solution tensor with shape (*, n, k)."); - AddOutput("Residuals", - "(Tensor), The output Residuals tensor with shape (*, k).") - .AsDispensable(); - AddOutput("Rank", "(Tensor), The output Rank tensor with shape (*)."); - AddOutput( - "SingularValues", - "(Tensor), The output SingularValues tensor with shape (*, min(m,n))."); - AddComment(R"DOC( - Lstsq Operator. -This API processes Lstsq functor for general matrices. -)DOC"); - } -}; - -} // namespace operators -} // namespace paddle - -namespace ops = paddle::operators; - -DECLARE_INFER_SHAPE_FUNCTOR(lstsq, - LstsqInferShapeFunctor, - PD_INFER_META(phi::LstsqInferMeta)); - -REGISTER_OPERATOR(lstsq, - ops::LstsqOp, - ops::LstsqOpMaker, - LstsqInferShapeFunctor); - -REGISTER_OP_VERSION(lstsq).AddCheckpoint( - R"ROC( - Upgrade lstsq, add 1 outputs [Residuals]. - )ROC", - paddle::framework::compatible::OpVersionDesc().NewOutput( - "Residuals", - "Output tensor of lstsq operator, " - "meaning the squared residuals of the calculated solutions.")); diff --git a/paddle/phi/api/yaml/legacy_ops.yaml b/paddle/phi/api/yaml/legacy_ops.yaml index 6eff624761c..9b76564c832 100755 --- a/paddle/phi/api/yaml/legacy_ops.yaml +++ b/paddle/phi/api/yaml/legacy_ops.yaml @@ -669,15 +669,6 @@ func : logsumexp backward : logsumexp_grad -- op : lstsq - args : (Tensor x, Tensor y, Scalar rcond, str driver) - output : Tensor(solution), Tensor(residuals), Tensor(rank), Tensor(singular_values) - infer_meta : - func : LstsqInferMeta - kernel : - func : lstsq - data_type : x - - op : matmul args : (Tensor x, Tensor y, bool transpose_x = false, bool transpose_y = false) output : Tensor diff --git a/paddle/phi/api/yaml/op_compat.yaml b/paddle/phi/api/yaml/op_compat.yaml index 1e81fcac8eb..74bdb3c53dd 100755 --- a/paddle/phi/api/yaml/op_compat.yaml +++ b/paddle/phi/api/yaml/op_compat.yaml @@ -1415,6 +1415,16 @@ extra : attrs : [bool use_mkldnn = false, bool is_test = false] +- op : lstsq + inputs : + {x : X, y : Y} + outputs : + {solution : Solution, residuals : Residuals, rank : Rank, singular_values : SingularValues} + scalar : + rcond : + data_type : float + support_tensor : true + - op : lu_unpack backward : lu_unpack_grad inputs : diff --git a/paddle/phi/api/yaml/op_version.yaml b/paddle/phi/api/yaml/op_version.yaml index b13b432c460..9d9cb6187b2 100644 --- a/paddle/phi/api/yaml/op_version.yaml +++ b/paddle/phi/api/yaml/op_version.yaml @@ -200,6 +200,13 @@ comment : In order to change output data type default : 5 +- op : lstsq + version : + - checkpoint : Upgrade lstsq, add 1 outputs [Residuals]. + action : + - add_output : Residuals + comment : Output tensor of lstsq operator, meaning the squared residuals of the calculated solutions. + - op : matrix_nms version : - checkpoint : Upgrade matrix_nms, add a new output [RoisNum]. diff --git a/paddle/phi/api/yaml/ops.yaml b/paddle/phi/api/yaml/ops.yaml index e9624cbca06..c254a75f98e 100644 --- a/paddle/phi/api/yaml/ops.yaml +++ b/paddle/phi/api/yaml/ops.yaml @@ -1231,6 +1231,16 @@ func : logsigmoid backward : logsigmoid_grad +- op : lstsq + args : (Tensor x, Tensor y, Scalar rcond=0.0f, str driver="gels") + output : Tensor(solution), Tensor(residuals), Tensor(rank), Tensor(singular_values) + infer_meta : + func : LstsqInferMeta + kernel : + func : lstsq + data_type : x + optional : residuals + - op : lu args : (Tensor x, bool pivot = true) output : Tensor(out), Tensor(pivots), Tensor(infos) diff --git a/paddle/phi/ops/compat/lstsq_sig.cc b/paddle/phi/ops/compat/lstsq_sig.cc deleted file mode 100644 index f36dfb1917c..00000000000 --- a/paddle/phi/ops/compat/lstsq_sig.cc +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "paddle/phi/core/compat/op_utils.h" - -namespace phi { - -KernelSignature LstsqOpArgumentMapping(const ArgumentMappingContext& ctx) { - return KernelSignature("lstsq", - {"X", "Y"}, - {"rcond", "driver"}, - {"Solution", "Residuals", "Rank", "SingularValues"}); -} - -} // namespace phi - -PD_REGISTER_ARG_MAPPING_FN(lstsq, phi::LstsqOpArgumentMapping); -- GitLab