From 7b46fb0f149566839aa5f56d7d219c1bc2e44c75 Mon Sep 17 00:00:00 2001 From: yukavio <67678385+yukavio@users.noreply.github.com> Date: Tue, 29 Sep 2020 14:15:25 +0800 Subject: [PATCH] fix generate_proposals and affine grid error info (#27636) --- .../operators/affine_grid_cudnn_op.cu.cc | 31 ++++++++++++++----- .../detection/generate_proposals_op.cu | 2 -- .../unittests/test_affine_grid_function.py | 8 +++-- .../tests/unittests/test_affine_grid_op.py | 2 ++ .../unittests/test_generate_proposals_op.py | 2 ++ 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/paddle/fluid/operators/affine_grid_cudnn_op.cu.cc b/paddle/fluid/operators/affine_grid_cudnn_op.cu.cc index ed71594ba5..009c397e00 100644 --- a/paddle/fluid/operators/affine_grid_cudnn_op.cu.cc +++ b/paddle/fluid/operators/affine_grid_cudnn_op.cu.cc @@ -26,8 +26,12 @@ template class CUDNNAffineGridOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - PADDLE_ENFORCE(platform::is_gpu_place(ctx.GetPlace()), - "It must use CUDAPlace."); + PADDLE_ENFORCE_EQ( + platform::is_gpu_place(ctx.GetPlace()), true, + platform::errors::InvalidArgument("Only " + "support for CUDAPlace.Please switch " + "your context from CPUPlace to " + "CUDAPlace or update your cudnn.")); auto& dev_ctx = ctx.template device_context(); auto handle = dev_ctx.cudnn_handle(); auto* theta = ctx.Input("Theta"); @@ -56,8 +60,11 @@ class CUDNNAffineGridOpKernel : public framework::OpKernel { cudnnSpatialTransformerDescriptor_t cudnn_st_desc = st_desc.descriptor(4, h_size_data); - PADDLE_ENFORCE(platform::dynload::cudnnSpatialTfGridGeneratorForward( - handle, cudnn_st_desc, theta_data, output_data)); + PADDLE_ENFORCE_EQ( + platform::dynload::cudnnSpatialTfGridGeneratorForward( + handle, cudnn_st_desc, theta_data, output_data), + 0, platform::errors::Fatal("Some errors has occurred " + "during forward computation in cudnn.")); } }; @@ -65,8 +72,12 @@ template class CUDNNAffineGridGradOpKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - PADDLE_ENFORCE(platform::is_gpu_place(ctx.GetPlace()), - "It must use CUDAPlace."); + PADDLE_ENFORCE_EQ(platform::is_gpu_place(ctx.GetPlace()), true, + platform::errors::InvalidArgument( + "Only " + "support for CUDAPlace. Please switch " + "your context from CPUPlace to " + "CUDAPlace or update your cudnn.")); auto& dev_ctx = ctx.template device_context(); auto handle = dev_ctx.cudnn_handle(); auto output_grad = ctx.Input(framework::GradVarName("Output")); @@ -95,8 +106,12 @@ class CUDNNAffineGridGradOpKernel : public framework::OpKernel { const T* output_grad_data = output_grad->data(); T* theta_grad_data = theta_grad->mutable_data(ctx.GetPlace()); - PADDLE_ENFORCE(platform::dynload::cudnnSpatialTfGridGeneratorBackward( - handle, cudnn_st_desc, output_grad_data, theta_grad_data)); + PADDLE_ENFORCE_EQ( + platform::dynload::cudnnSpatialTfGridGeneratorBackward( + handle, cudnn_st_desc, output_grad_data, theta_grad_data), + 0, + "Some errors " + "has occurred during forward computation in cudnn;"); } }; diff --git a/paddle/fluid/operators/detection/generate_proposals_op.cu b/paddle/fluid/operators/detection/generate_proposals_op.cu index 485136d8e2..71323ea966 100644 --- a/paddle/fluid/operators/detection/generate_proposals_op.cu +++ b/paddle/fluid/operators/detection/generate_proposals_op.cu @@ -247,8 +247,6 @@ static void NMS(const platform::CUDADeviceContext &ctx, const Tensor &proposals, const Tensor &sorted_indices, const T nms_threshold, Tensor *keep_out) { int boxes_num = proposals.dims()[0]; - PADDLE_ENFORCE_EQ(boxes_num, sorted_indices.dims()[0]); - const int col_blocks = DIVUP(boxes_num, kThreadsPerBlock); dim3 blocks(DIVUP(boxes_num, kThreadsPerBlock), DIVUP(boxes_num, kThreadsPerBlock)); diff --git a/python/paddle/fluid/tests/unittests/test_affine_grid_function.py b/python/paddle/fluid/tests/unittests/test_affine_grid_function.py index c874cf197e..6ca13c7a72 100644 --- a/python/paddle/fluid/tests/unittests/test_affine_grid_function.py +++ b/python/paddle/fluid/tests/unittests/test_affine_grid_function.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import paddle import numpy as np from paddle import fluid, nn import paddle.fluid.dygraph as dg @@ -42,7 +43,7 @@ class AffineGridTestCase(unittest.TestCase): self.theta = np.random.randn(*(self.theta_shape)).astype(self.dtype) def fluid_layer(self, place): - # align_corners = True + paddle.enable_static() main = fluid.Program() start = fluid.Program() with fluid.unique_name.guard(): @@ -57,6 +58,7 @@ class AffineGridTestCase(unittest.TestCase): return y_np def functional(self, place): + paddle.enable_static() main = fluid.Program() start = fluid.Program() with fluid.unique_name.guard(): @@ -74,6 +76,7 @@ class AffineGridTestCase(unittest.TestCase): return y_np def paddle_dygraph_layer(self): + paddle.disable_static() theta_var = dg.to_variable( self.theta) if not self.invalid_theta else "invalid" output_shape = dg.to_variable( @@ -88,8 +91,7 @@ class AffineGridTestCase(unittest.TestCase): place = fluid.CPUPlace() result1 = self.fluid_layer(place) result2 = self.functional(place) - with dg.guard(place): - result3 = self.paddle_dygraph_layer() + result3 = self.paddle_dygraph_layer() if self.align_corners: np.testing.assert_array_almost_equal(result1, result2) np.testing.assert_array_almost_equal(result2, result3) diff --git a/python/paddle/fluid/tests/unittests/test_affine_grid_op.py b/python/paddle/fluid/tests/unittests/test_affine_grid_op.py index d3e990ca13..e4336ab05d 100644 --- a/python/paddle/fluid/tests/unittests/test_affine_grid_op.py +++ b/python/paddle/fluid/tests/unittests/test_affine_grid_op.py @@ -15,6 +15,7 @@ import unittest import numpy as np from op_test import OpTest +import paddle def AffineGrid(theta, size, align_corners): @@ -113,4 +114,5 @@ class TestAffineGridOpCase4(TestAffineGridOp): if __name__ == '__main__': + paddle.enable_static() unittest.main() diff --git a/python/paddle/fluid/tests/unittests/test_generate_proposals_op.py b/python/paddle/fluid/tests/unittests/test_generate_proposals_op.py index 26fc01ca04..8304016d7d 100644 --- a/python/paddle/fluid/tests/unittests/test_generate_proposals_op.py +++ b/python/paddle/fluid/tests/unittests/test_generate_proposals_op.py @@ -18,6 +18,7 @@ import unittest import numpy as np import sys import math +import paddle import paddle.fluid as fluid from op_test import OpTest from test_multiclass_nms_op import nms @@ -370,4 +371,5 @@ class TestGenerateProposalsOpNoBoxLeft(TestGenerateProposalsOp): if __name__ == '__main__': + paddle.enable_static() unittest.main() -- GitLab