Skip to content

Commit

Permalink
[ BugFix] fix is_test memory problem (PaddlePaddle#58350)
Browse files Browse the repository at this point in the history
* fix is_test memory problem/

* fix bugs

* fix

* fix variable not found error, just emit it.
  • Loading branch information
2742195759 authored and zeroRains committed Nov 8, 2023
1 parent a12923c commit efba324
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 17 deletions.
8 changes: 6 additions & 2 deletions paddle/fluid/eager/to_static/run_program_op_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,12 @@ inline void newir_run_program_ad_func(
std::shared_ptr<NewIRGradNodeRunProgram> grad_node;
VLOG(2) << "start run run_program with require_any_grad = "
<< require_any_grad;
auto is_test = false;
if (attrs.count("is_test")) {
is_test = PADDLE_GET_CONST(bool, attrs.at("is_test"));
}

if (require_any_grad) {
if (!is_test && require_any_grad) {
// Create GradOpNode (1 means [out_grad], 2 means [x_grad, paramx_grad])
grad_node = std::make_shared<NewIRGradNodeRunProgram>(1, 2);
grad_node->GetMiddle().resize(middle_size);
Expand Down Expand Up @@ -267,7 +271,7 @@ inline void newir_run_program_ad_func(
// if require_any_grad is False, don't save any middle vars.
NewIRRunProgramAPI(
x, params, out, middles, step_scope, dout, require_any_grad, attrs);
if (require_any_grad) {
if (!is_test && require_any_grad) {
egr::EagerUtils::PassStopGradient(false, &p_autograd_outs);

// Set Attributes
Expand Down
22 changes: 7 additions & 15 deletions paddle/fluid/eager/to_static/run_program_op_node.h
Original file line number Diff line number Diff line change
Expand Up @@ -317,22 +317,13 @@ static void ShareTensorsFromScopeWithPartialBlock(
paddle::framework::Scope *scope) {
for (size_t i = 0; i < tensors.size(); ++i) {
auto &name = tensors[i]->name();
bool in_forward_block = forward_global_block.HasVar(name);
bool in_backward_block =
backward_global_block && backward_global_block->HasVar(name);
backward_global_block && backward_global_block->HasVar(name);
auto *var = scope->FindVar(name);
if (name == paddle::framework::kEmptyVarName ||
name == paddle::framework::kFakeVarName ||
(!in_forward_block && !in_backward_block)) {
name == paddle::framework::kFakeVarName || var == nullptr) {
VLOG(2) << "find tensor name is " << name << ", skip it!";
continue;
}
auto *var = scope->FindVar(name);
PADDLE_ENFORCE_NOT_NULL(
var,
paddle::platform::errors::NotFound("The output tensor %s is not in "
"RunProgram(Grad)Op'"
"s internal scope.",
name));
CheckOutputVarStatus(*var, *tensors[i]);
// share tensor
if (var->IsType<phi::DenseTensor>()) {
Expand Down Expand Up @@ -618,6 +609,7 @@ inline void RunProgramAPI(
if (attrs.count("is_test")) {
is_test = PADDLE_GET_CONST(bool, attrs.at("is_test"));
}
auto need_grad = !is_test && require_any_grad;
int64_t program_id = PADDLE_GET_CONST(int64_t, attrs.at("program_id"));
auto place = egr::Controller::Instance().GetExpectedPlace();

Expand Down Expand Up @@ -674,7 +666,7 @@ inline void RunProgramAPI(
paddle::framework::BlockDesc *backward_global_block = nullptr;
paddle::framework::ProgramDesc *backward_program = nullptr;

if (!is_test) {
if (need_grad) {
backward_global_block = PADDLE_GET_CONST(paddle::framework::BlockDesc *,
attrs.at("backward_global_block"));
backward_program = backward_global_block->Program();
Expand Down Expand Up @@ -725,7 +717,7 @@ inline void RunProgramAPI(
}
// Step 3. get all eager gc vars
std::set<std::string> skip_eager_delete_vars;
if (!is_test) {
if (need_grad) {
skip_eager_delete_vars =
paddle::framework::details::ParseSafeEagerDeletionSkipVarsSet(
*backward_program);
Expand Down Expand Up @@ -792,7 +784,7 @@ inline void RunProgramAPI(
details::ShareTensorsFromScopeWithPartialBlock(
dout, *forward_global_block, backward_global_block, global_inner_scope);

if (is_test || !require_any_grad) {
if (!need_grad) {
VLOG(4) << "don't require any grad, set this scope can reused";
VLOG(4) << "is_test: " << is_test
<< ", require_any_grad: " << require_any_grad;
Expand Down

0 comments on commit efba324

Please sign in to comment.