From 9a8b6c69cbb9df458679539c6953eb0365906baf Mon Sep 17 00:00:00 2001 From: junjun315 Date: Mon, 22 Apr 2019 15:20:04 +0000 Subject: [PATCH] fix bug in save, select-row save bug. test=release/1.4 --- paddle/fluid/operators/save_op.cc | 4 ++-- paddle/fluid/operators/save_op.h | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/paddle/fluid/operators/save_op.cc b/paddle/fluid/operators/save_op.cc index 338e2fbb5d8..c660bbb8ed9 100644 --- a/paddle/fluid/operators/save_op.cc +++ b/paddle/fluid/operators/save_op.cc @@ -31,8 +31,8 @@ class SaveOp : public framework::OperatorWithKernel { protected: framework::OpKernelType GetExpectedKernelType( const framework::ExecutionContext &ctx) const override { - return framework::OpKernelType(ctx.Input("X")->type(), - ctx.GetPlace()); + auto data_type = framework::GetDataTypeOfVar(ctx.InputVar("X")); + return framework::OpKernelType(data_type, ctx.device_context()); } }; diff --git a/paddle/fluid/operators/save_op.h b/paddle/fluid/operators/save_op.h index 642235aad58..c5bc12caa23 100644 --- a/paddle/fluid/operators/save_op.h +++ b/paddle/fluid/operators/save_op.h @@ -103,12 +103,21 @@ class SaveOpKernel : public framework::OpKernel { const platform::Place &place, const framework::Variable *var) const { framework::Variable *out_put_var = ctx.OutputVar(LOOKUP_TABLE_PATH); - PADDLE_ENFORCE( - out_put_var != nullptr, - "Can not find variable kLookupTablePath for SaveSelectedRows"); - auto *lt_var = out_put_var->GetMutable(); + auto file_path = ctx.Attr("file_path"); + auto overwrite = ctx.Attr("overwrite"); + + std::string filename = file_path; + + if (out_put_var != nullptr) { + auto *lt_var = out_put_var->GetMutable(); + filename = *lt_var; + } + + if (FileExists(filename) && !overwrite) { + PADDLE_THROW("%s is existed, cannot save to it when overwrite=false", + filename, overwrite); + } - std::string filename = lt_var->data(); VLOG(4) << "SaveSelectedRows get File name: " << filename; MkDirRecursively(DirName(filename).c_str()); -- GitLab