From e90f93675c89e2b63c15c93fe653d26a1eb0627c Mon Sep 17 00:00:00 2001 From: hong <43953930+phlrain@users.noreply.github.com> Date: Mon, 4 Apr 2022 23:31:41 +0800 Subject: [PATCH] add no need buffer; (#41367) --- .../final_state_generator/eager_gen.py | 3 +- .../unittests/test_elementwise_add_op.py | 4 +-- python/paddle/utils/code_gen/api.yaml | 29 ++++++------------ python/paddle/utils/code_gen/backward.yaml | 30 ++++++++++++------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/paddle/fluid/eager/auto_code_generator/final_state_generator/eager_gen.py b/paddle/fluid/eager/auto_code_generator/final_state_generator/eager_gen.py index 12738b72062..b2db256f602 100644 --- a/paddle/fluid/eager/auto_code_generator/final_state_generator/eager_gen.py +++ b/paddle/fluid/eager/auto_code_generator/final_state_generator/eager_gen.py @@ -724,10 +724,11 @@ class DygraphFunctionGeneratorBase(FunctionGeneratorBase): is_optional = (name in optional_inputs) if is_fwd_input: + need_input_data = "false" if name in self.no_need_buffers else "true" if is_optional: set_tensor_wrappers = f"{indent}if({name}.get_ptr() != nullptr) grad_node->SetTensorWrapper{name}(*({name}.get_ptr()), true);" else: - set_tensor_wrappers = f"{indent}grad_node->SetTensorWrapper{name}({name}, true);" + set_tensor_wrappers = f"{indent}grad_node->SetTensorWrapper{name}({name}, {need_input_data});" else: if num_fwd_outputs > 1: # Aligned with forward output position diff --git a/python/paddle/fluid/tests/unittests/test_elementwise_add_op.py b/python/paddle/fluid/tests/unittests/test_elementwise_add_op.py index 4ddfe9d1559..22787a23fea 100644 --- a/python/paddle/fluid/tests/unittests/test_elementwise_add_op.py +++ b/python/paddle/fluid/tests/unittests/test_elementwise_add_op.py @@ -28,6 +28,7 @@ class TestElementwiseAddOp(OpTest): def setUp(self): self.op_type = "elementwise_add" + self.python_api = paddle.add self.init_dtype() self.init_input_output() self.init_kernel_type() @@ -41,8 +42,7 @@ class TestElementwiseAddOp(OpTest): self.outputs = {'Out': self.out} def check_eager(self): - return False - #return (self.use_mkldnn == False and self.axis == -1) + return (self.use_mkldnn == False and self.axis == -1) def test_check_output(self): # TODO(wangzhongpu): support mkldnn op in dygraph mode diff --git a/python/paddle/utils/code_gen/api.yaml b/python/paddle/utils/code_gen/api.yaml index b41ccf8ddb5..050cb058f7d 100644 --- a/python/paddle/utils/code_gen/api.yaml +++ b/python/paddle/utils/code_gen/api.yaml @@ -61,7 +61,6 @@ kernel : func : add backward : add_grad - # no_need_buffer : x, y - api : add_n args : (Tensor[] x) @@ -147,7 +146,6 @@ kernel : func : argsort backward : argsort_grad - # no_need_buffer : x # asin - api : asin @@ -455,7 +453,6 @@ kernel : func : diagonal backward : diagonal_grad - # no_need_buffer : x - api : digamma args : (Tensor x) @@ -666,9 +663,9 @@ - api : frobenius_norm args : (Tensor x, int64_t[] axis, bool keep_dim, bool reduce_all) output : Tensor(out) - infer_meta : + infer_meta : func : ReduceInferMetaBase - kernel : + kernel : func : frobenius_norm backward : frobenius_norm_grad @@ -817,14 +814,13 @@ func : index_sample data_type : x backward : index_sample_grad - # no_need_buffer : x - api : index_select args : (Tensor x, Tensor index, int dim) output : Tensor(out) - infer_meta : + infer_meta : func : IndexSelectInferMeta - kernel : + kernel : func : index_select data_type : x backward : index_select_grad @@ -1283,7 +1279,7 @@ func : PoolInferMeta kernel : func : pool2d - backward : pool2d_grad + backward : pool2d_grad - api : pool3d args : (Tensor x, int[] kernel_size, int[] strides, int[] paddings, bool ceil_mode, bool exclusive, str data_format, str pooling_type, bool global_pooling, bool adaptive, str padding_algorithm) @@ -1393,9 +1389,9 @@ - api : roll args : (Tensor x, IntArray shifts, int64_t[] axis) output : Tensor(out) - infer_meta : + infer_meta : func : RollInferMeta - kernel : + kernel : func : roll backward : roll_grad @@ -1428,7 +1424,6 @@ kernel : func : scatter backward : scatter_grad - # no_need_buffer : updates - api : scatter_nd_add args : (Tensor x, Tensor index, Tensor updates) @@ -1439,7 +1434,6 @@ kernel : func : scatter_nd_add backward : scatter_nd_add_grad - # no_need_buffer : updates - api : searchsorted args : (Tensor sorted_sequence, Tensor value, bool out_int32, bool right) @@ -1633,7 +1627,6 @@ kernel : func : subtract backward : subtract_grad - # no_need_buffer : x, y - api : sum args : (Tensor x, int64_t[] dims={}, DataType out_dtype=paddle::experimental::DataType::UNDEFINED, bool keep_dim=false) @@ -1707,7 +1700,6 @@ kernel : func : tile backward : tile_grad - # no_need_buffer : x - api : top_k args : (Tensor x, Scalar k, int axis = -1, bool largest = true, bool sorted = true) @@ -1726,7 +1718,6 @@ kernel : func : trace backward : trace_grad - no_need_buffer : x - api : transpose args : (Tensor x, int[] axis) @@ -1749,9 +1740,9 @@ - api : tril_triu args : (Tensor x, int diagonal, bool lower) output : Tensor(out) - infer_meta : + infer_meta : func : TrilTriuInferMeta - kernel : + kernel : func : tril_triu backward : tril_triu_grad @@ -1773,7 +1764,6 @@ kernel : func : unfold backward : unfold_grad - # no_need_buffer : x - api : unsqueeze args : (Tensor x, IntArray axes) @@ -1812,7 +1802,6 @@ func : WhereIndexInferMeta kernel : func : where_index - # no_need_buffer : x, y # yolo_box - api : yolo_box diff --git a/python/paddle/utils/code_gen/backward.yaml b/python/paddle/utils/code_gen/backward.yaml index 814c56d7d22..a45220843b2 100644 --- a/python/paddle/utils/code_gen/backward.yaml +++ b/python/paddle/utils/code_gen/backward.yaml @@ -1,3 +1,13 @@ +# - backward_api : gumbel_softmax_grad +# forward : gumbel_softmax (Tensor x, float temperature, bool hard, int axis) -> Tensor(out) +# args : (Tensor out, Tensor out_grad, int axis) +# output : Tensor(x_grad) +# infer_meta : +# func : GumbelSoftmaxGradInferMeta +# param : [out, out_grad, axis] +# kernel : +# func : gumbel_softmax_grad + - backward_api : abs_grad forward : abs (Tensor x) -> Tensor(out) args : (Tensor x, Tensor out_grad) @@ -49,7 +59,7 @@ no_need_buffer : x - backward_api : addmm_grad - forward : scatter (Tensor input, Tensor x, Tensor y, float alpha, float beta) -> Tensor(out) + forward : addmm (Tensor input, Tensor x, Tensor y, float alpha, float beta) -> Tensor(out) args : (Tensor input, Tensor x, Tensor y, Tensor out_grad, float alpha, float beta) output : Tensor(input_grad), Tensor(x_grad), Tensor(y_grad) infer_meta : @@ -67,6 +77,7 @@ param : [x] kernel : func : argsort_grad + no_need_buffer : x - backward_api : asin_grad forward : asin (Tensor x) -> Tensor(out) @@ -274,15 +285,6 @@ param: [x] kernel : func : cumprod_grad -# - backward_api : gumbel_softmax_grad -# forward : gumbel_softmax (Tensor x, float temperature, bool hard, int axis) -> Tensor(out) -# args : (Tensor out, Tensor out_grad, int axis) -# output : Tensor(x_grad) -# infer_meta : -# func : GumbelSoftmaxGradInferMeta -# param : [out, out_grad, axis] -# kernel : -# func : gumbel_softmax_grad - backward_api : depthwise_conv2d_transpose_grad forward : depthwise_conv2d_transpose(Tensor x, Tensor filter, int[] strides, int[] paddings, int[] output_padding, int[] output_size, str padding_algorithm, int groups, int[] dilations, str data_format) -> Tensor(out) @@ -302,6 +304,7 @@ param : [x] kernel : func : diagonal_grad + no_need_buffer : x - backward_api : digamma_grad forward : digamma (Tensor x) -> Tensor(out) @@ -529,6 +532,7 @@ kernel : func : index_sample_grad data_type : out_grad + no_need_buffer : x - backward_api : index_select_grad forward : index_select(Tensor x, Tensor index, int dim) -> Tensor(out) @@ -1026,6 +1030,7 @@ param : [index, updates, out_grad, overwrite] kernel : func : scatter_grad + no_need_buffer : updates - backward_api : scatter_nd_add_grad forward : scatter (Tensor x, Tensor index, Tensor updates) -> Tensor(out) @@ -1036,6 +1041,7 @@ param : [index, updates, out_grad] kernel : func : scatter_nd_grad + no_need_buffer : updates - backward_api : segment_pool_grad forward : segment_pool (Tensor x, Tensor segment_ids, str pooltype) -> Tensor(out), Tensor(summed_ids) @@ -1193,6 +1199,7 @@ param : [x, y] kernel : func : subtract_grad + no_need_buffer : x, y - backward_api : sum_grad forward : sum (Tensor x, int64_t[] dims={}, DataType out_dtype=paddle::experimental::DataType::UNDEFINED, bool keep_dim=false) -> Tensor(out) @@ -1263,6 +1270,7 @@ param : [x] kernel : func : tile_grad + no_need_buffer : x - backward_api : top_k_grad forward : top_k (Tensor x, Scalar k, int axis = -1, bool largest = true, bool sorted = true) -> Tensor(out), Tensor(indices) @@ -1283,6 +1291,7 @@ param : [x] kernel : func : trace_grad + no_need_buffer : x - backward_api : transpose_grad forward : transpose (Tensor x, int[] axis) -> Tensor(out) @@ -1323,6 +1332,7 @@ param : [x] kernel : func : unfold_grad + no_need_buffer : x - backward_api : unsqueeze_grad forward : unsqueeze(Tensor x, IntArray axes) -> Tensor(xshape), Tensor(out) -- GitLab