From d6dbd12559cea7e3a98b7c0138cf780476bb7064 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Thu, 20 Apr 2023 23:54:14 +0000 Subject: [PATCH 01/11] modify lerp_kernel.cu --- paddle/phi/kernels/gpu/lerp_kernel.cu | 111 +++++++++++++++++++++++--- 1 file changed, 102 insertions(+), 9 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 25f37bb170476..81e12ab10423a 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -15,13 +15,106 @@ #include "paddle/phi/kernels/lerp_kernel.h" #include "paddle/phi/backends/gpu/gpu_context.h" +#include "paddle/phi/common/amp_type_traits.h" #include "paddle/phi/core/kernel_registry.h" -#include "paddle/phi/kernels/impl/lerp_kernel_impl.h" - -PD_REGISTER_KERNEL(lerp, - GPU, - ALL_LAYOUT, - phi::LerpKernel, - phi::dtype::float16, - float, - double) {} +#include "paddle/phi/kernels/funcs/broadcast_function.h" +#include "paddle/phi/kernels/funcs/common_shape.h" +#include "paddle/phi/kernels/funcs/eigen/common.h" +#include "paddle/phi/kernels/funcs/math_function.h" + +namespace phi { + +template struct LerpElementWiseDirectCUDAFunctor { + HOSTDEVICE inline T operator()(const T x, const T y, const T weight) const { + return x + weight * (y - x); + } +}; + +template struct LerpScalarDirectCUDAFunctor { + const T *weight_; + + HOSTDEVICE inline LerpScalarDirectCUDAFunctor(const T *weight) + : weight_(weight) {} + + HOSTDEVICE inline T operator()(const T x, const T y) const { + return x + weight_[0] * (y - x); + } +}; + +template +static void LerpFunction(const Context &ctx, const DenseTensor &x, + const DenseTensor &y, const DenseTensor &weight, + DenseTensor *out) { + std::vector outputs; + outputs.reserve(1); + outputs.emplace_back(out); + ctx.template Alloc(out); + + std::vector inputs; + + if (weight.dims().size() == 0) { + const T *weight_ptr = weight.data(); + inputs.reserve(2); + inputs.emplace_back(&x); + inputs.emplace_back(&y); + auto functor = LerpScalarDirectCUDAFunctor(weight_ptr); + funcs::BroadcastKernel( + ctx, inputs, &outputs, 1, functor); + } else { + inputs.reserve(3); + inputs.emplace_back(&x); + inputs.emplace_back(&y); + inputs.emplace_back(&weight); + auto functor = LerpElementWiseDirectCUDAFunctor(); + funcs::BroadcastKernel( + ctx, inputs, &outputs, 1, functor); + } +} + +template +static void LerpFunctionZero(const Context &ctx, const DenseTensor &x, + const DenseTensor &y, const DenseTensor &weight, + DenseTensor *out) { + ctx.template Alloc(out); + + auto dim = make_ddim(std::vector(1, 1)); + auto eigen_x = phi::EigenTensor::From(x, dim); + auto eigen_y = phi::EigenTensor::From(y, dim); + auto eigen_w = phi::EigenTensor::From(weight, dim); + auto eigen_out = phi::EigenTensor::From(*out, dim); + + using MPType = typename phi::dtype::MPTypeTrait::Type; + auto &place = *ctx.eigen_device(); + eigen_out.device(place) = + (eigen_x.template cast() + + eigen_w.template cast() * + (eigen_y.template cast() - eigen_x.template cast())) + .template cast(); +} + +template +void LerpKernel(const Context &ctx, const DenseTensor &x, const DenseTensor &y, + const DenseTensor &weight, DenseTensor *out) { + int rank = out->dims().size(); + PADDLE_ENFORCE_GE( + rank, 0, phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "greater than or equal to 0, but the value received is %d.", + rank)); + PADDLE_ENFORCE_LE( + rank, 6, phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "less than or equal to 6, but the value received is %d.", + rank)); + + if (rank == 0) { + LerpFunctionZero(ctx, x, y, weight, out); + } else { + LerpFunction(ctx, x, y, weight, out); + } +} + +} // namespace phi + +PD_REGISTER_KERNEL(lerp, GPU, ALL_LAYOUT, phi::LerpKernel, phi::dtype::float16, + float, double) {} From 60e071f0803f07d665b52f8ee006a61aa823932c Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Fri, 21 Apr 2023 01:29:46 +0000 Subject: [PATCH 02/11] pre-commit --- paddle/phi/kernels/gpu/lerp_kernel.cu | 56 ++++++++++++++++++--------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 81e12ab10423a..d2cc2d3a2ce39 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -24,13 +24,15 @@ namespace phi { -template struct LerpElementWiseDirectCUDAFunctor { +template +struct LerpElementWiseDirectCUDAFunctor { HOSTDEVICE inline T operator()(const T x, const T y, const T weight) const { return x + weight * (y - x); } }; -template struct LerpScalarDirectCUDAFunctor { +template +struct LerpScalarDirectCUDAFunctor { const T *weight_; HOSTDEVICE inline LerpScalarDirectCUDAFunctor(const T *weight) @@ -42,8 +44,10 @@ template struct LerpScalarDirectCUDAFunctor { }; template -static void LerpFunction(const Context &ctx, const DenseTensor &x, - const DenseTensor &y, const DenseTensor &weight, +static void LerpFunction(const Context &ctx, + const DenseTensor &x, + const DenseTensor &y, + const DenseTensor &weight, DenseTensor *out) { std::vector outputs; outputs.reserve(1); @@ -72,8 +76,10 @@ static void LerpFunction(const Context &ctx, const DenseTensor &x, } template -static void LerpFunctionZero(const Context &ctx, const DenseTensor &x, - const DenseTensor &y, const DenseTensor &weight, +static void LerpFunctionZero(const Context &ctx, + const DenseTensor &x, + const DenseTensor &y, + const DenseTensor &weight, DenseTensor *out) { ctx.template Alloc(out); @@ -93,19 +99,26 @@ static void LerpFunctionZero(const Context &ctx, const DenseTensor &x, } template -void LerpKernel(const Context &ctx, const DenseTensor &x, const DenseTensor &y, - const DenseTensor &weight, DenseTensor *out) { +void LerpKernel(const Context &ctx, + const DenseTensor &x, + const DenseTensor &y, + const DenseTensor &weight, + DenseTensor *out) { int rank = out->dims().size(); PADDLE_ENFORCE_GE( - rank, 0, phi::errors::InvalidArgument( - "The number of dimensions for LerpOp must be " - "greater than or equal to 0, but the value received is %d.", - rank)); + rank, + 0, + phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "greater than or equal to 0, but the value received is %d.", + rank)); PADDLE_ENFORCE_LE( - rank, 6, phi::errors::InvalidArgument( - "The number of dimensions for LerpOp must be " - "less than or equal to 6, but the value received is %d.", - rank)); + rank, + 6, + phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "less than or equal to 6, but the value received is %d.", + rank)); if (rank == 0) { LerpFunctionZero(ctx, x, y, weight, out); @@ -114,7 +127,12 @@ void LerpKernel(const Context &ctx, const DenseTensor &x, const DenseTensor &y, } } -} // namespace phi +} // namespace phi -PD_REGISTER_KERNEL(lerp, GPU, ALL_LAYOUT, phi::LerpKernel, phi::dtype::float16, - float, double) {} +PD_REGISTER_KERNEL(lerp, + GPU, + ALL_LAYOUT, + phi::LerpKernel, + phi::dtype::float16, + float, + double) {} From ab512b88261b52f360e9d5f880f4aef5f0463408 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Fri, 21 Apr 2023 03:44:22 +0000 Subject: [PATCH 03/11] fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index d2cc2d3a2ce39..ae3b84b55792f 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -63,7 +63,7 @@ static void LerpFunction(const Context &ctx, inputs.emplace_back(&y); auto functor = LerpScalarDirectCUDAFunctor(weight_ptr); funcs::BroadcastKernel( - ctx, inputs, &outputs, 1, functor); + ctx, inputs, &outputs, -1, functor); } else { inputs.reserve(3); inputs.emplace_back(&x); @@ -71,7 +71,7 @@ static void LerpFunction(const Context &ctx, inputs.emplace_back(&weight); auto functor = LerpElementWiseDirectCUDAFunctor(); funcs::BroadcastKernel( - ctx, inputs, &outputs, 1, functor); + ctx, inputs, &outputs, -1, functor); } } From 1d6373215434cc76d585c5cf03c567a2fc44cb71 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Fri, 21 Apr 2023 09:51:30 +0000 Subject: [PATCH 04/11] fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index ae3b84b55792f..c9196189c0c82 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -63,7 +63,7 @@ static void LerpFunction(const Context &ctx, inputs.emplace_back(&y); auto functor = LerpScalarDirectCUDAFunctor(weight_ptr); funcs::BroadcastKernel( - ctx, inputs, &outputs, -1, functor); + ctx, inputs, &outputs, 0, functor); } else { inputs.reserve(3); inputs.emplace_back(&x); @@ -71,7 +71,7 @@ static void LerpFunction(const Context &ctx, inputs.emplace_back(&weight); auto functor = LerpElementWiseDirectCUDAFunctor(); funcs::BroadcastKernel( - ctx, inputs, &outputs, -1, functor); + ctx, inputs, &outputs, 0, functor); } } From 2d43b55173370f73f0fd078cdeb0ce8b2cb34d0b Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Fri, 21 Apr 2023 13:38:41 +0000 Subject: [PATCH 05/11] fix some CI issues --- paddle/phi/kernels/funcs/dims_simplifier.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/phi/kernels/funcs/dims_simplifier.h b/paddle/phi/kernels/funcs/dims_simplifier.h index fa0953ec46aab..4d11a5a88543f 100644 --- a/paddle/phi/kernels/funcs/dims_simplifier.h +++ b/paddle/phi/kernels/funcs/dims_simplifier.h @@ -107,7 +107,7 @@ struct BroadcastDimsSimplifier { for (auto &in_dim : in_dims) { if (in_dim.size() < rank) { DimVector extended_in_dim(rank, 1); - int out_idx = axis; + int out_idx = out_dims.size() - in_dim.size(); for (int in_idx = 0; in_idx < in_dim.size(); in_idx++) { if (in_dim[in_idx] == out_dims[out_idx] || in_dim[in_idx] == 1) { extended_in_dim[out_idx] = in_dim[in_idx]; From f791c5d630621768111ce866a2fd78799d57a570 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Fri, 21 Apr 2023 23:37:41 +0000 Subject: [PATCH 06/11] fix some CI issues --- paddle/phi/kernels/funcs/dims_simplifier.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/paddle/phi/kernels/funcs/dims_simplifier.h b/paddle/phi/kernels/funcs/dims_simplifier.h index 4d11a5a88543f..e4b5bc6f918f7 100644 --- a/paddle/phi/kernels/funcs/dims_simplifier.h +++ b/paddle/phi/kernels/funcs/dims_simplifier.h @@ -104,10 +104,17 @@ struct BroadcastDimsSimplifier { private: // To compensate the lackage of input_tensors' dimension with axis. void ExtendInputDimensions(int N, int axis) { + bool case_bug = in_dims.size() == 3 && in_dims[0] != in_dims[1] && + in_dims[1] != in_dims[2]; for (auto &in_dim : in_dims) { if (in_dim.size() < rank) { DimVector extended_in_dim(rank, 1); - int out_idx = out_dims.size() - in_dim.size(); + int out_idx; + if (case_bug) { + out_idx = out_dims.size() - in_dim.size(); + } else { + out_idx = axis; + } for (int in_idx = 0; in_idx < in_dim.size(); in_idx++) { if (in_dim[in_idx] == out_dims[out_idx] || in_dim[in_idx] == 1) { extended_in_dim[out_idx] = in_dim[in_idx]; From 09c0042f877b05eca3d43c12c70ed7fe81addfc0 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Mon, 24 Apr 2023 12:54:39 +0000 Subject: [PATCH 07/11] fix some CI issues --- paddle/phi/kernels/funcs/dims_simplifier.h | 9 +--- paddle/phi/kernels/gpu/lerp_kernel.cu | 61 ++++++++++++++++++++-- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/paddle/phi/kernels/funcs/dims_simplifier.h b/paddle/phi/kernels/funcs/dims_simplifier.h index e4b5bc6f918f7..fa0953ec46aab 100644 --- a/paddle/phi/kernels/funcs/dims_simplifier.h +++ b/paddle/phi/kernels/funcs/dims_simplifier.h @@ -104,17 +104,10 @@ struct BroadcastDimsSimplifier { private: // To compensate the lackage of input_tensors' dimension with axis. void ExtendInputDimensions(int N, int axis) { - bool case_bug = in_dims.size() == 3 && in_dims[0] != in_dims[1] && - in_dims[1] != in_dims[2]; for (auto &in_dim : in_dims) { if (in_dim.size() < rank) { DimVector extended_in_dim(rank, 1); - int out_idx; - if (case_bug) { - out_idx = out_dims.size() - in_dim.size(); - } else { - out_idx = axis; - } + int out_idx = axis; for (int in_idx = 0; in_idx < in_dim.size(); in_idx++) { if (in_dim[in_idx] == out_dims[out_idx] || in_dim[in_idx] == 1) { extended_in_dim[out_idx] = in_dim[in_idx]; diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index c9196189c0c82..3e4722a85ba8c 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -17,6 +17,7 @@ #include "paddle/phi/backends/gpu/gpu_context.h" #include "paddle/phi/common/amp_type_traits.h" #include "paddle/phi/core/kernel_registry.h" +#include "paddle/phi/kernels/empty_kernel.h" #include "paddle/phi/kernels/funcs/broadcast_function.h" #include "paddle/phi/kernels/funcs/common_shape.h" #include "paddle/phi/kernels/funcs/eigen/common.h" @@ -24,6 +25,11 @@ namespace phi { +template +struct BroadcastMinElementWiseDirectCUDAFunctor { + HOSTDEVICE inline T operator()(const T min) const { return min; } +}; + template struct LerpElementWiseDirectCUDAFunctor { HOSTDEVICE inline T operator()(const T x, const T y, const T weight) const { @@ -63,15 +69,60 @@ static void LerpFunction(const Context &ctx, inputs.emplace_back(&y); auto functor = LerpScalarDirectCUDAFunctor(weight_ptr); funcs::BroadcastKernel( - ctx, inputs, &outputs, 0, functor); + ctx, inputs, &outputs, -1, functor); } else { inputs.reserve(3); - inputs.emplace_back(&x); - inputs.emplace_back(&y); - inputs.emplace_back(&weight); + auto functor = LerpElementWiseDirectCUDAFunctor(); + if (x.dims().size() != y.dims().size() && + weight.dims().size() != y.dims().size()) { + DenseTensor b_min = phi::EmptyLike(ctx, *out); + std::vector broadcast_min_inputs; + std::vector broadcast_min_outputs = {&b_min}; + auto broadcast_min_functor = + BroadcastMinElementWiseDirectCUDAFunctor(); + if (x.dims().size() < y.dims().size() && + x.dims().size() < weight.dims().size()) { + broadcast_min_inputs.emplace_back(&x); + funcs::BroadcastKernel( + ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + -1, + broadcast_min_functor); + inputs.emplace_back(&b_min); + inputs.emplace_back(&y); + inputs.emplace_back(&weight); + } else if (y.dims().size() < weight.dims().size()) { + broadcast_min_inputs.emplace_back(&y); + funcs::BroadcastKernel( + ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + -1, + broadcast_min_functor); + inputs.emplace_back(&x); + inputs.emplace_back(&b_min); + inputs.emplace_back(&weight); + } else { + broadcast_min_inputs.emplace_back(&weight); + funcs::BroadcastKernel( + ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + -1, + broadcast_min_functor); + inputs.emplace_back(&x); + inputs.emplace_back(&y); + inputs.emplace_back(&b_min); + } + } else { + inputs.emplace_back(&x); + inputs.emplace_back(&y); + inputs.emplace_back(&weight); + } funcs::BroadcastKernel( - ctx, inputs, &outputs, 0, functor); + ctx, inputs, &outputs, -1, functor); } } From c73530bf1bf8871533edb2b5d2dc19af05d9400f Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Tue, 25 Apr 2023 00:36:05 +0000 Subject: [PATCH 08/11] fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 33 +-------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 3e4722a85ba8c..40b4af05e7d23 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -20,7 +20,6 @@ #include "paddle/phi/kernels/empty_kernel.h" #include "paddle/phi/kernels/funcs/broadcast_function.h" #include "paddle/phi/kernels/funcs/common_shape.h" -#include "paddle/phi/kernels/funcs/eigen/common.h" #include "paddle/phi/kernels/funcs/math_function.h" namespace phi { @@ -59,9 +58,7 @@ static void LerpFunction(const Context &ctx, outputs.reserve(1); outputs.emplace_back(out); ctx.template Alloc(out); - std::vector inputs; - if (weight.dims().size() == 0) { const T *weight_ptr = weight.data(); inputs.reserve(2); @@ -72,7 +69,6 @@ static void LerpFunction(const Context &ctx, ctx, inputs, &outputs, -1, functor); } else { inputs.reserve(3); - auto functor = LerpElementWiseDirectCUDAFunctor(); if (x.dims().size() != y.dims().size() && weight.dims().size() != y.dims().size()) { @@ -126,29 +122,6 @@ static void LerpFunction(const Context &ctx, } } -template -static void LerpFunctionZero(const Context &ctx, - const DenseTensor &x, - const DenseTensor &y, - const DenseTensor &weight, - DenseTensor *out) { - ctx.template Alloc(out); - - auto dim = make_ddim(std::vector(1, 1)); - auto eigen_x = phi::EigenTensor::From(x, dim); - auto eigen_y = phi::EigenTensor::From(y, dim); - auto eigen_w = phi::EigenTensor::From(weight, dim); - auto eigen_out = phi::EigenTensor::From(*out, dim); - - using MPType = typename phi::dtype::MPTypeTrait::Type; - auto &place = *ctx.eigen_device(); - eigen_out.device(place) = - (eigen_x.template cast() + - eigen_w.template cast() * - (eigen_y.template cast() - eigen_x.template cast())) - .template cast(); -} - template void LerpKernel(const Context &ctx, const DenseTensor &x, @@ -171,11 +144,7 @@ void LerpKernel(const Context &ctx, "less than or equal to 6, but the value received is %d.", rank)); - if (rank == 0) { - LerpFunctionZero(ctx, x, y, weight, out); - } else { - LerpFunction(ctx, x, y, weight, out); - } + LerpFunction(ctx, x, y, weight, out); } } // namespace phi From ac7d1f2c02f640006b78c568dc09ebdea9351bc2 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Tue, 25 Apr 2023 07:41:01 +0000 Subject: [PATCH 09/11] fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 59 ++++++++++++--------------- 1 file changed, 25 insertions(+), 34 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 40b4af05e7d23..8887a48b63fea 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -48,16 +48,31 @@ struct LerpScalarDirectCUDAFunctor { } }; -template -static void LerpFunction(const Context &ctx, - const DenseTensor &x, - const DenseTensor &y, - const DenseTensor &weight, - DenseTensor *out) { - std::vector outputs; - outputs.reserve(1); - outputs.emplace_back(out); +template +void LerpKernel(const Context &ctx, + const DenseTensor &x, + const DenseTensor &y, + const DenseTensor &weight, + DenseTensor *out) { + int rank = out->dims().size(); + PADDLE_ENFORCE_GE( + rank, + 0, + phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "greater than or equal to 0, but the value received is %d.", + rank)); + PADDLE_ENFORCE_LE( + rank, + 6, + phi::errors::InvalidArgument( + "The number of dimensions for LerpOp must be " + "less than or equal to 6, but the value received is %d.", + rank)); + ctx.template Alloc(out); + std::vector outputs = {out}; + std::vector inputs; if (weight.dims().size() == 0) { const T *weight_ptr = weight.data(); @@ -74,6 +89,7 @@ static void LerpFunction(const Context &ctx, weight.dims().size() != y.dims().size()) { DenseTensor b_min = phi::EmptyLike(ctx, *out); std::vector broadcast_min_inputs; + broadcast_min_inputs.reserve(1); std::vector broadcast_min_outputs = {&b_min}; auto broadcast_min_functor = BroadcastMinElementWiseDirectCUDAFunctor(); @@ -122,31 +138,6 @@ static void LerpFunction(const Context &ctx, } } -template -void LerpKernel(const Context &ctx, - const DenseTensor &x, - const DenseTensor &y, - const DenseTensor &weight, - DenseTensor *out) { - int rank = out->dims().size(); - PADDLE_ENFORCE_GE( - rank, - 0, - phi::errors::InvalidArgument( - "The number of dimensions for LerpOp must be " - "greater than or equal to 0, but the value received is %d.", - rank)); - PADDLE_ENFORCE_LE( - rank, - 6, - phi::errors::InvalidArgument( - "The number of dimensions for LerpOp must be " - "less than or equal to 6, but the value received is %d.", - rank)); - - LerpFunction(ctx, x, y, weight, out); -} - } // namespace phi PD_REGISTER_KERNEL(lerp, From fa83ab14e71a1119eab809c350b9ad04267d2f51 Mon Sep 17 00:00:00 2001 From: WintersMontagne10335 <22251099@zju.edu.cn> Date: Wed, 26 Apr 2023 02:08:28 +0000 Subject: [PATCH 10/11] fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 8887a48b63fea..8ba2ad2b2ef4d 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -62,19 +62,12 @@ void LerpKernel(const Context &ctx, "The number of dimensions for LerpOp must be " "greater than or equal to 0, but the value received is %d.", rank)); - PADDLE_ENFORCE_LE( - rank, - 6, - phi::errors::InvalidArgument( - "The number of dimensions for LerpOp must be " - "less than or equal to 6, but the value received is %d.", - rank)); ctx.template Alloc(out); std::vector outputs = {out}; std::vector inputs; - if (weight.dims().size() == 0) { + if (weight.numel() == 1) { const T *weight_ptr = weight.data(); inputs.reserve(2); inputs.emplace_back(&x); @@ -85,9 +78,9 @@ void LerpKernel(const Context &ctx, } else { inputs.reserve(3); auto functor = LerpElementWiseDirectCUDAFunctor(); + DenseTensor b_min = phi::EmptyLike(ctx, *out); if (x.dims().size() != y.dims().size() && weight.dims().size() != y.dims().size()) { - DenseTensor b_min = phi::EmptyLike(ctx, *out); std::vector broadcast_min_inputs; broadcast_min_inputs.reserve(1); std::vector broadcast_min_outputs = {&b_min}; From ff52b7ca05585de46bb66631a056cc60047719de Mon Sep 17 00:00:00 2001 From: Winters Montagne <118546135+WintersMontagne10335@users.noreply.github.com> Date: Sat, 6 May 2023 09:48:11 +0800 Subject: [PATCH 11/11] Add files via upload fix some CI issues --- paddle/phi/kernels/gpu/lerp_kernel.cu | 36 +++++++++++---------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/paddle/phi/kernels/gpu/lerp_kernel.cu b/paddle/phi/kernels/gpu/lerp_kernel.cu index 8ba2ad2b2ef4d..4304dd38238f7 100644 --- a/paddle/phi/kernels/gpu/lerp_kernel.cu +++ b/paddle/phi/kernels/gpu/lerp_kernel.cu @@ -73,8 +73,7 @@ void LerpKernel(const Context &ctx, inputs.emplace_back(&x); inputs.emplace_back(&y); auto functor = LerpScalarDirectCUDAFunctor(weight_ptr); - funcs::BroadcastKernel( - ctx, inputs, &outputs, -1, functor); + phi::funcs::BroadcastKernel(ctx, inputs, &outputs, functor); } else { inputs.reserve(3); auto functor = LerpElementWiseDirectCUDAFunctor(); @@ -89,34 +88,28 @@ void LerpKernel(const Context &ctx, if (x.dims().size() < y.dims().size() && x.dims().size() < weight.dims().size()) { broadcast_min_inputs.emplace_back(&x); - funcs::BroadcastKernel( - ctx, - broadcast_min_inputs, - &broadcast_min_outputs, - -1, - broadcast_min_functor); + phi::funcs::BroadcastKernel(ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + broadcast_min_functor); inputs.emplace_back(&b_min); inputs.emplace_back(&y); inputs.emplace_back(&weight); } else if (y.dims().size() < weight.dims().size()) { broadcast_min_inputs.emplace_back(&y); - funcs::BroadcastKernel( - ctx, - broadcast_min_inputs, - &broadcast_min_outputs, - -1, - broadcast_min_functor); + phi::funcs::BroadcastKernel(ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + broadcast_min_functor); inputs.emplace_back(&x); inputs.emplace_back(&b_min); inputs.emplace_back(&weight); } else { broadcast_min_inputs.emplace_back(&weight); - funcs::BroadcastKernel( - ctx, - broadcast_min_inputs, - &broadcast_min_outputs, - -1, - broadcast_min_functor); + phi::funcs::BroadcastKernel(ctx, + broadcast_min_inputs, + &broadcast_min_outputs, + broadcast_min_functor); inputs.emplace_back(&x); inputs.emplace_back(&y); inputs.emplace_back(&b_min); @@ -126,8 +119,7 @@ void LerpKernel(const Context &ctx, inputs.emplace_back(&y); inputs.emplace_back(&weight); } - funcs::BroadcastKernel( - ctx, inputs, &outputs, -1, functor); + phi::funcs::BroadcastKernel(ctx, inputs, &outputs, functor); } }