From 2b2e8b85a7ed09b220c3a39b4a337204474b1ab4 Mon Sep 17 00:00:00 2001 From: Aurelius84 Date: Wed, 3 Nov 2021 10:08:04 +0800 Subject: [PATCH] Fix persistable var is GC as unexpected (#36932) * Fix persistable var is GC as unexpected * polish code and rebase develop --- paddle/fluid/framework/new_executor/interpretercore.cc | 10 +++++----- .../framework/new_executor/interpretercore_util.cc | 2 +- .../fluid/framework/new_executor/new_executor_defs.h | 9 +++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/paddle/fluid/framework/new_executor/interpretercore.cc b/paddle/fluid/framework/new_executor/interpretercore.cc index a8007c2f26a..5b00214566c 100644 --- a/paddle/fluid/framework/new_executor/interpretercore.cc +++ b/paddle/fluid/framework/new_executor/interpretercore.cc @@ -502,11 +502,11 @@ void InterpreterCore::CheckGC(const Instruction& instr) { for (auto var_id : instr.GCCheckVars()) { bool is_ready = atomic_var_ref[var_id]->fetch_sub(1, std::memory_order_relaxed) == 1; - if (is_ready && var_scope.VarDesc(var_id) && - !var_scope.VarDesc(var_id)->Persistable()) { - gc_.Add(var_scope.Var(var_id), gc_event_.at(instr_id), - &instr.DeviceContext()); - } else if (is_ready && var_scope.VarDesc(var_id) == nullptr) { + // ignore all persistable var while GC + if (var_scope.VarDesc(var_id) && var_scope.VarDesc(var_id)->Persistable()) { + continue; + } + if (is_ready) { gc_.Add(var_scope.Var(var_id), gc_event_.at(instr_id), &instr.DeviceContext()); } diff --git a/paddle/fluid/framework/new_executor/interpretercore_util.cc b/paddle/fluid/framework/new_executor/interpretercore_util.cc index 9de03a435ab..fdc5617eaff 100644 --- a/paddle/fluid/framework/new_executor/interpretercore_util.cc +++ b/paddle/fluid/framework/new_executor/interpretercore_util.cc @@ -146,7 +146,7 @@ void build_variable_scope(const framework::ProgramDesc& pdesc, if (nullptr == var_desc_tmp) { VLOG(3) << "update var:" << var_name << " desc from nullptr into " << var_desc; - var_scope->VarMetaInfo(var_name).vardesc_ = var_desc; + var_scope->SetVarDesc(var_name, var_desc); } } } diff --git a/paddle/fluid/framework/new_executor/new_executor_defs.h b/paddle/fluid/framework/new_executor/new_executor_defs.h index d70243b93fe..580a0ed8d5f 100644 --- a/paddle/fluid/framework/new_executor/new_executor_defs.h +++ b/paddle/fluid/framework/new_executor/new_executor_defs.h @@ -564,6 +564,11 @@ class VariableScope : public ScopeBase { vec_meta_info_.push_back(info); } + void SetVarDesc(const std::string& name, framework::VarDesc* var_desc) { + CheckExist(name); + vec_meta_info_[VarId(name)].vardesc_ = var_desc; + } + paddle::framework::VarDesc* VarDesc(const std::string& name) const { return VarDesc(VarId(name)); } @@ -573,10 +578,6 @@ class VariableScope : public ScopeBase { return vec_meta_info_[id].vardesc_; } - VariableMetaInfo& VarMetaInfo(const std::string& name) { - return vec_meta_info_[VarId(name)]; - } - void CheckExist(int id) const { PADDLE_ENFORCE_LT(id, var_list_.size(), platform::errors::PreconditionNotMet( -- GitLab