diff --git a/paddle/fluid/eager/backward.cc b/paddle/fluid/eager/backward.cc index 0477c5d5f90d8bc61caf0f2a02c9f44d9e73ad64..dd310757956c037290edccbc344012e5d1a00695 100644 --- a/paddle/fluid/eager/backward.cc +++ b/paddle/fluid/eager/backward.cc @@ -141,6 +141,7 @@ std::vector RunBackward( std::deque orig_queue; std::unordered_map> node_input_buffers_dict; + std::unordered_set visited; for (size_t i = 0; i < tensors.size(); i++) { const paddle::Tensor& tensor = tensors[i]; @@ -215,6 +216,10 @@ std::vector RunBackward( } // Prepare queue, potential startup_nodes + if (visited.count(grad_node)) { + continue; + } + visited.insert(grad_node); queue.push_back(grad_node); } diff --git a/paddle/fluid/eager/pylayer/py_layer_node.cc b/paddle/fluid/eager/pylayer/py_layer_node.cc index 4dac92b63dd8e31b260a269e80481596264d9ad1..3f88c22148c105cde2e14b568d35eabc0034b42a 100644 --- a/paddle/fluid/eager/pylayer/py_layer_node.cc +++ b/paddle/fluid/eager/pylayer/py_layer_node.cc @@ -163,7 +163,7 @@ GradNodePyLayer::operator()( {paddle::pybind::UnSafeGetTensorFromPyObject(obj)}); } else if (obj == Py_None) { VLOG(4) << "Got None for Tensor with pos: " << i; - grad_out.push_back({}); + grad_out.push_back({paddle::Tensor()}); } else { PADDLE_THROW(phi::errors::InvalidArgument( "We can only support Tensor or None for backward output, "