diff --git a/paddle/fluid/eager/pylayer/py_layer_node.cc b/paddle/fluid/eager/pylayer/py_layer_node.cc index fad4fd50a5e3e1a57f191126f1c810dd31af5e9b..a00b292fe09152b470181d22ce959e7dc5ad76f1 100644 --- a/paddle/fluid/eager/pylayer/py_layer_node.cc +++ b/paddle/fluid/eager/pylayer/py_layer_node.cc @@ -106,8 +106,6 @@ GradNodePyLayer::operator()( pybind11::detail::error_string().c_str())); } - outputs_ = outputs; - VLOG(6) << "PyLayer backward function finish..."; PyObject* outputs_tuple = nullptr; @@ -165,6 +163,9 @@ GradNodePyLayer::operator()( if (!PyTuple_Check(outputs)) { Py_XDECREF(outputs_tuple); } + Py_XDECREF(outputs); + Py_XDECREF(ctx_); + ctx_ = nullptr; return grad_out; } diff --git a/paddle/fluid/eager/pylayer/py_layer_node.h b/paddle/fluid/eager/pylayer/py_layer_node.h index b477d7a9ad9969c1221e300dfc17c1fcc638e858..c1a8c6e626b4fdb527fca05e2e86aa5dffacdb50 100644 --- a/paddle/fluid/eager/pylayer/py_layer_node.h +++ b/paddle/fluid/eager/pylayer/py_layer_node.h @@ -32,10 +32,7 @@ class GradNodePyLayer : public GradNodeBase { ctx_ = ctx; } - ~GradNodePyLayer() override { - Py_DECREF(ctx_); - Py_XDECREF(outputs_); - }; + ~GradNodePyLayer() override { Py_XDECREF(ctx_); }; virtual paddle::small_vector, kSlotSmallVectorSize> @@ -50,9 +47,6 @@ class GradNodePyLayer : public GradNodeBase { return "GradNodePyLayer_" + std::string(Py_TYPE(ctx_)->tp_name); } - // for paddle.grad get result - PyObject* GetMutableOutputs() { return outputs_; } - void SaveForwardOutputsMeta( const std::vector>& outputs_tensor) { @@ -81,7 +75,6 @@ class GradNodePyLayer : public GradNodeBase { private: PyObject* ctx_{nullptr}; - PyObject* outputs_{nullptr}; std::vector> forward_outputs_meta_; std::vector> forward_outputs_place_; };