@@ -39,11 +39,11 @@ limitations under the License. */
3939#pragma GCC diagnostic ignored "-Wwrite-strings"
4040#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
4141COMMON_DECLARE_bool (check_cuda_error);
42-
43- using egr::ConvertToDistTensor;
44-
42+ COMMON_DECLARE_bool (check_nan_inf);
43+ COMMON_DECLARE_int32 (call_stack_level);
4544COMMON_DECLARE_int64 (offload_retry_times);
4645
46+ using egr::ConvertToDistTensor;
4747namespace paddle ::pybind {
4848
4949PyTypeObject* p_pylayer_type;
@@ -192,7 +192,11 @@ PyObject* pylayer_method_apply(PyObject* cls,
192192 PyObject* kwargs) {
193193 EAGER_TRY
194194 SetPythonStack ();
195- VLOG (6 ) << " Begin run PyLayer apply..." ;
195+ std::string classname =
196+ std::string (reinterpret_cast <PyTypeObject*>(cls)->tp_name );
197+ VLOG (3 ) << classname << " :Running PyLayer Apply " ;
198+ VLOG (4 ) << classname << " :"
199+ << " Construct PyLayerContext" ;
196200 PyObject* backward_function =
197201 PyObject_GetAttrString (cls, " _backward_function" );
198202 if (!backward_function) {
@@ -230,7 +234,8 @@ PyObject* pylayer_method_apply(PyObject* cls,
230234 forward_args = PyTuple_New (args_size + 1 ); // NOLINT
231235 Py_INCREF (ctx);
232236 PyTuple_SET_ITEM (forward_args, 0 , reinterpret_cast <PyObject*>(ctx));
233-
237+ VLOG (6 ) << classname << " :Prepare Pylayer forward args " ;
238+ VLOG (6 ) << classname << " :Input size is " << inputs_size;
234239 std::vector<std::vector<egr::AutogradMeta*>> inputs_autograd_meta;
235240 inputs_autograd_meta.reserve (inputs_size);
236241 std::vector<std::vector<paddle::Tensor*>> inputs_tensor;
@@ -374,6 +379,7 @@ PyObject* pylayer_method_apply(PyObject* cls,
374379 }
375380
376381 VLOG (6 )
382+ << classname << " :"
377383 << " PyLayer forward args is ready, begin call user's forward function..." ;
378384 // call forward
379385 auto forward_fn = PyObject_GetAttrString (cls, " forward" );
@@ -502,7 +508,8 @@ PyObject* pylayer_method_apply(PyObject* cls,
502508 PADDLE_THROW (common::errors::InvalidArgument (
503509 " At least one output of `PyLayer.forward` is a `Tensor`." ));
504510 }
505- VLOG (6 ) << " PyLayer forward function finish..." ;
511+ VLOG (6 ) << classname << " :"
512+ << " PyLayer forward function finish..." ;
506513
507514#ifdef PADDLE_WITH_CUDA
508515 bool has_grad = false ;
@@ -539,8 +546,13 @@ PyObject* pylayer_method_apply(PyObject* cls,
539546 std::make_shared<egr::GradNodePyLayer>(reinterpret_cast <PyObject*>(ctx),
540547 outputs_autograd_meta.size (),
541548 inputs_autograd_meta.size ());
542- VLOG (3 ) << " Create grad node " << grad_node->name () << " addr "
549+ VLOG (3 ) << classname << " :"
550+ << " Create grad node " << grad_node->name () << " addr "
543551 << grad_node;
552+ // For dump call stack
553+ if (FLAGS_check_nan_inf || FLAGS_call_stack_level == 3 ) {
554+ grad_node->SetForwardTrace (egr::Controller::Instance ().GetPythonStack ());
555+ }
544556
545557#ifdef PADDLE_WITH_CUDA
546558 has_grad = true ;
@@ -575,7 +587,8 @@ PyObject* pylayer_method_apply(PyObject* cls,
575587 grad_node->SetGradInMeta (*outputs_tensor[i][0 ], i);
576588 }
577589 }
578- VLOG (6 ) << " PyLayer construct backward node finish..." ;
590+ VLOG (6 ) << classname << " :"
591+ << " PyLayer construct backward node finish..." ;
579592 }
580593
581594 if (outputs_size == 1 ) {
@@ -586,6 +599,8 @@ PyObject* pylayer_method_apply(PyObject* cls,
586599 Py_XDECREF (outputs_tuple);
587600 }
588601 }
602+ VLOG (3 ) << classname << " :"
603+ << " PyLayer output size " << outputs_size;
589604
590605 if (PyList_Check (outputs)) {
591606 Py_XDECREF (outputs_tuple);
@@ -610,7 +625,8 @@ PyObject* pylayer_method_apply(PyObject* cls,
610625 egr::CUDAErrorCheck (" pylayer_method_apply " +
611626 std::string (Py_TYPE (ctx)->tp_name ) + " finish" );
612627 }
613-
628+ VLOG (3 ) << classname << " :"
629+ << " Finish PyLayer Apply" ;
614630 return outputs;
615631 EAGER_CATCH_AND_THROW_RETURN_NULL
616632}
0 commit comments