From db8ac5857243dea15863465a4118e9d12e1b0f78 Mon Sep 17 00:00:00 2001 From: helen88 Date: Fri, 22 Jul 2022 07:00:18 +0000 Subject: [PATCH 1/4] fix bug of elementwise_add_grad, *test=kunlun --- cmake/external/xpu.cmake | 4 +-- .../elementwise/elementwise_add_op_xpu.cc | 28 ++++++++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/cmake/external/xpu.cmake b/cmake/external/xpu.cmake index 81128ccf3b6a0..8021d2a6f80c6 100644 --- a/cmake/external/xpu.cmake +++ b/cmake/external/xpu.cmake @@ -10,7 +10,7 @@ set(XPU_RT_LIB_NAME "libxpurt.so") if(NOT DEFINED XPU_BASE_URL) set(XPU_BASE_URL_WITHOUT_DATE "https://baidu-kunlun-product.cdn.bcebos.com/KL-SDK/klsdk-dev") - set(XPU_BASE_URL "${XPU_BASE_URL_WITHOUT_DATE}/20220718") + set(XPU_BASE_URL "${XPU_BASE_URL_WITHOUT_DATE}/20220722") else() set(XPU_BASE_URL "${XPU_BASE_URL}") endif() @@ -19,7 +19,7 @@ endif() if(NOT DEFINED XPU_XDNN_BASE_URL) set(XPU_XDNN_BASE_URL_WITHOUT_DATE "https://klx-sdk-release-public.su.bcebos.com/xdnn/dev") - set(XPU_XDNN_BASE_URL "${XPU_XDNN_BASE_URL_WITHOUT_DATE}/20220718") + set(XPU_XDNN_BASE_URL "${XPU_XDNN_BASE_URL_WITHOUT_DATE}/20220722") else() set(XPU_XDNN_BASE_URL "${XPU_XDNN_BASE_URL}") endif() diff --git a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc index 74dca5b57481f..42a9f07c6543d 100644 --- a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc +++ b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc @@ -52,15 +52,12 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { ctx.template device_context(); if (dx != nullptr) { - T* dx_data = dx->mutable_data(ctx.GetPlace()); if (dx->dims() == dz_dims) { - if (dx_data != dz_data) { - framework::TensorCopy( - *dz, - ctx.GetPlace(), - ctx.template device_context(), - dx); - } + framework::TensorCopy( + *dz, + ctx.GetPlace(), + ctx.template device_context(), + dx); } else { // For inplace strategy, dx will be stored in addr of dz, which makes // the result of dy wrong. @@ -71,6 +68,7 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { std::vector reduce_dims = GetReduceDim(dx->dims(), dz_dims, axis); std::vector dz_vector = phi::vectorize(dz_dims); + T* dx_data = dx->mutable_data(ctx.GetPlace()); int ret = xpu::reduce_sum(dev_ctx.x_context(), reinterpret_cast(dz_data), @@ -82,18 +80,16 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { } if (dy != nullptr) { - T* dy_data = dy->mutable_data(ctx.GetPlace()); if (dy->dims() == dz_dims) { - if (dy_data != dz_data) { - framework::TensorCopy( - *dz, - ctx.GetPlace(), - ctx.template device_context(), - dy); - } + framework::TensorCopy( + *dz, + ctx.GetPlace(), + ctx.template device_context(), + dy); } else { std::vector reduce_dims = GetReduceDim(dy->dims(), dz_dims, axis); std::vector dz_vector = phi::vectorize(dz_dims); + T* dy_data = dy->mutable_data(ctx.GetPlace()); int ret = xpu::reduce_sum(dev_ctx.x_context(), reinterpret_cast(dz_data), From 15df22a99ac345119906d96ce1a6f6755d73c927 Mon Sep 17 00:00:00 2001 From: helen88 Date: Fri, 22 Jul 2022 07:08:13 +0000 Subject: [PATCH 2/4] fix bug, *test=kunlun --- .../operators/elementwise/elementwise_add_op_xpu.cc | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc index 42a9f07c6543d..2575e09091d9c 100644 --- a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc +++ b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc @@ -53,11 +53,8 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { if (dx != nullptr) { if (dx->dims() == dz_dims) { - framework::TensorCopy( - *dz, - ctx.GetPlace(), - ctx.template device_context(), - dx); + // TensorCopy will call mutable_data of dx. + framework::TensorCopy(*dz, ctx.GetPlace(), dev_ctx, dx); } else { // For inplace strategy, dx will be stored in addr of dz, which makes // the result of dy wrong. @@ -81,11 +78,7 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { if (dy != nullptr) { if (dy->dims() == dz_dims) { - framework::TensorCopy( - *dz, - ctx.GetPlace(), - ctx.template device_context(), - dy); + framework::TensorCopy(*dz, ctx.GetPlace(), dev_ctx, dy); } else { std::vector reduce_dims = GetReduceDim(dy->dims(), dz_dims, axis); std::vector dz_vector = phi::vectorize(dz_dims); From 566c3cb33401f0184f544097883cfb79fa66e7c5 Mon Sep 17 00:00:00 2001 From: helen88 Date: Fri, 22 Jul 2022 08:11:53 +0000 Subject: [PATCH 3/4] rm pooling_t, *test=kunlun --- paddle/fluid/operators/pool_op_xpu.cc | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/paddle/fluid/operators/pool_op_xpu.cc b/paddle/fluid/operators/pool_op_xpu.cc index 591559001309a..bfa638e5bde5d 100644 --- a/paddle/fluid/operators/pool_op_xpu.cc +++ b/paddle/fluid/operators/pool_op_xpu.cc @@ -21,23 +21,6 @@ namespace operators { using framework::Tensor; -xpu::Pooling_t XPUPoolingType(const std::string& pooltype, - bool exclusive, - bool is_test) { - if (pooltype == "max") { - return xpu::Pooling_t::MAX_WITHOUT_INDEX; - } else if (pooltype == "avg") { - if (exclusive) { - return xpu::Pooling_t::AVG_WITHOUT_PAD; - } else { - return xpu::Pooling_t::AVG_WITH_PAD; - } - } else { - PADDLE_THROW(platform::errors::InvalidArgument( - "Pool op only supports 2D and 3D input.")); - } -} - template class PoolXPUKernel : public framework::OpKernel { using XPUType = typename XPUTypeTrait::Type; From 0fedb3e4e08c62df90a627119a4b12a9aecea7d4 Mon Sep 17 00:00:00 2001 From: helen88 Date: Mon, 25 Jul 2022 11:26:59 +0000 Subject: [PATCH 4/4] fix bug of ew_add_grad when inplace, *test=kunlun --- .../elementwise/elementwise_add_op_xpu.cc | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc index 2575e09091d9c..7b2c72d081262 100644 --- a/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc +++ b/paddle/fluid/operators/elementwise/elementwise_add_op_xpu.cc @@ -1,11 +1,8 @@ -/* Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. - +/* 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. @@ -52,9 +49,15 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { ctx.template device_context(); if (dx != nullptr) { + T* dx_data = dx->mutable_data(ctx.GetPlace()); if (dx->dims() == dz_dims) { - // TensorCopy will call mutable_data of dx. - framework::TensorCopy(*dz, ctx.GetPlace(), dev_ctx, dx); + if (dx_data != dz_data) { + framework::TensorCopy( + *dz, + ctx.GetPlace(), + ctx.template device_context(), + dx); + } } else { // For inplace strategy, dx will be stored in addr of dz, which makes // the result of dy wrong. @@ -65,11 +68,10 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { std::vector reduce_dims = GetReduceDim(dx->dims(), dz_dims, axis); std::vector dz_vector = phi::vectorize(dz_dims); - T* dx_data = dx->mutable_data(ctx.GetPlace()); int ret = xpu::reduce_sum(dev_ctx.x_context(), reinterpret_cast(dz_data), - reinterpret_cast(dx_data), + reinterpret_cast(dx->data()), dz_vector, reduce_dims); PADDLE_ENFORCE_XDNN_SUCCESS(ret, "reduce_sum"); @@ -77,12 +79,18 @@ class ElementwiseAddGradXPUKernel : public ElemwiseGradKernel { } if (dy != nullptr) { + T* dy_data = dy->mutable_data(ctx.GetPlace()); if (dy->dims() == dz_dims) { - framework::TensorCopy(*dz, ctx.GetPlace(), dev_ctx, dy); + if (dy_data != dz_data) { + framework::TensorCopy( + *dz, + ctx.GetPlace(), + ctx.template device_context(), + dy); + } } else { std::vector reduce_dims = GetReduceDim(dy->dims(), dz_dims, axis); std::vector dz_vector = phi::vectorize(dz_dims); - T* dy_data = dy->mutable_data(ctx.GetPlace()); int ret = xpu::reduce_sum(dev_ctx.x_context(), reinterpret_cast(dz_data),