Skip to content

Commit 78fb3a6

Browse files
committed
fix env variable settting bug
test=develop
1 parent a7d0ac5 commit 78fb3a6

File tree

10 files changed

+49
-28
lines changed

10 files changed

+49
-28
lines changed

paddle/fluid/framework/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ cc_library(lod_tensor SRCS lod_tensor.cc DEPS ddim place tensor framework_proto
6363
cc_test(lod_tensor_test SRCS lod_tensor_test.cc DEPS lod_tensor memory)
6464
nv_test(lod_tensor_gpu_test SRCS lod_tensor_test.cu DEPS lod_tensor)
6565

66-
cc_library(garbage_collector SRCS garbage_collector.cc DEPS device_context memory gflags)
66+
cc_library(garbage_collector SRCS garbage_collector.cc DEPS device_context memory gflags glog)
6767

6868
cc_library(reader SRCS reader.cc DEPS lod_tensor ddim)
6969
cc_test(reader_test SRCS reader_test.cc DEPS reader)

paddle/fluid/framework/details/eager_deletion_pass.cc

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,9 @@
2222
#include "paddle/fluid/framework/details/computation_op_handle.h"
2323
#include "paddle/fluid/framework/details/eager_deletion_op_handle.h"
2424
#include "paddle/fluid/framework/details/multi_devices_helper.h"
25+
#include "paddle/fluid/framework/garbage_collector.h"
2526
#include "paddle/fluid/framework/ir/graph_helper.h"
2627

27-
DEFINE_double(memory_fraction_of_eager_deletion, 1.0,
28-
"Fraction of eager deletion. If less than 1.0, all variables in "
29-
"the program would be sorted according to its memory size, and "
30-
"only the FLAGS_memory_fraction_of_eager_deletion of the largest "
31-
"variables would be deleted.");
32-
3328
namespace paddle {
3429
namespace framework {
3530
namespace details {
@@ -206,8 +201,9 @@ std::unique_ptr<ir::Graph> EagerDeletionPass::ApplyImpl(
206201
}
207202
}
208203

209-
op_vars_map = ShrinkGCVars(op_vars_map, vars, places,
210-
FLAGS_memory_fraction_of_eager_deletion);
204+
double memory_fraction = framework::GetEagerDeletionMemoryFraction();
205+
206+
op_vars_map = ShrinkGCVars(op_vars_map, vars, places, memory_fraction);
211207

212208
for (auto &pair : op_vars_map) {
213209
auto *op = pair.first;
@@ -239,8 +235,7 @@ std::unique_ptr<ir::Graph> EagerDeletionPass::ApplyImpl(
239235
eager_deletion_op->AddOutput(dummy_leaf);
240236
}
241237

242-
VLOG(10) << "FLAGS_memory_fraction_of_eager_deletion = "
243-
<< FLAGS_memory_fraction_of_eager_deletion;
238+
VLOG(10) << "FLAGS_memory_fraction_of_eager_deletion = " << memory_fraction;
244239
VLOG(10) << "Create " << op_vars_map.size() << " EagerDeletionOpHandle(s)";
245240

246241
auto while_op_eager_deletion_pass =

paddle/fluid/framework/executor_gc_helper.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ std::unordered_map<OperatorBase *, std::vector<std::string>> GetUnusedVars(
9393
const BlockDesc &block,
9494
const std::vector<std::unique_ptr<OperatorBase>> &ops,
9595
const std::vector<std::string> &skip_var_list) {
96-
UseGarbageCollectorGFlags();
9796
std::unordered_set<std::string> skip_vars(skip_var_list.begin(),
9897
skip_var_list.end());
9998

paddle/fluid/framework/garbage_collector.cc

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "paddle/fluid/platform/cuda_device_guard.h"
2323
#endif
2424
#include "gflags/gflags.h"
25+
#include "glog/logging.h"
2526
#include "paddle/fluid/framework/garbage_collector.h"
2627

2728
namespace paddle {
@@ -36,6 +37,12 @@ DEFINE_bool(fast_eager_deletion_mode, true,
3637
"Fast eager deletion mode. If enabled, memory would release "
3738
"immediately without waiting GPU kernel ends.");
3839

40+
DEFINE_double(memory_fraction_of_eager_deletion, 1.0,
41+
"Fraction of eager deletion. If less than 1.0, all variables in "
42+
"the program would be sorted according to its memory size, and "
43+
"only the FLAGS_memory_fraction_of_eager_deletion of the largest "
44+
"variables would be deleted.");
45+
3946
GarbageCollector::GarbageCollector(const platform::Place &place,
4047
size_t max_memory_size)
4148
: max_memory_size_((std::max)(max_memory_size, static_cast<size_t>(1))) {
@@ -101,8 +108,6 @@ void StreamGarbageCollector::ClearCallback(
101108
}
102109
#endif
103110

104-
void UseGarbageCollectorGFlags() {}
105-
106111
int64_t GetEagerDeletionThreshold() {
107112
return FLAGS_eager_delete_tensor_gb < 0
108113
? -1
@@ -111,5 +116,16 @@ int64_t GetEagerDeletionThreshold() {
111116
}
112117

113118
bool IsFastEagerDeletionModeEnabled() { return FLAGS_fast_eager_deletion_mode; }
119+
120+
void SetEagerDeletionMode(double threshold, double fraction, bool fast_mode) {
121+
FLAGS_eager_delete_tensor_gb = threshold;
122+
FLAGS_memory_fraction_of_eager_deletion = fraction;
123+
FLAGS_fast_eager_deletion_mode = fast_mode;
124+
}
125+
126+
double GetEagerDeletionMemoryFraction() {
127+
return FLAGS_memory_fraction_of_eager_deletion;
128+
}
129+
114130
} // namespace framework
115131
} // namespace paddle

paddle/fluid/framework/garbage_collector.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <memory>
2020
#include <mutex> // NOLINT
2121
#include <utility>
22+
#include "gflags/gflags.h"
2223
#include "paddle/fluid/platform/device_context.h"
2324

2425
namespace paddle {
@@ -130,7 +131,9 @@ void GarbageCollector::Add(Container &&objs, Callback &&callback) {
130131
int64_t GetEagerDeletionThreshold();
131132
bool IsFastEagerDeletionModeEnabled();
132133

133-
extern void UseGarbageCollectorGFlags();
134+
void SetEagerDeletionMode(double threshold, double fraction, bool fast_mode);
135+
136+
double GetEagerDeletionMemoryFraction();
134137

135138
} // namespace framework
136139
} // namespace paddle

paddle/fluid/operators/batch_norm_op.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,7 @@ std::unique_ptr<framework::OpDesc> BatchNormGradMaker::Apply() const {
567567
op->SetInput(framework::GradVarName("Y"), OutputGrad("Y"));
568568

569569
op->SetInput("Scale", Input("Scale"));
570+
op->SetInput("Bias", Input("Bias"));
570571
op->SetInput("SavedMean", Output("SavedMean"));
571572
op->SetInput("SavedVariance", Output("SavedVariance"));
572573

paddle/fluid/operators/concat_op.cc

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,28 @@ class ConcatOpGrad : public framework::OperatorWithKernel {
152152
DECLARE_NO_NEED_BUFFER_VARS_INFERENCE(ConcatOpGradNoNeedBufferVarInference,
153153
"X");
154154

155+
class ConcatGradOpDescMaker : public framework::SingleGradOpDescMaker {
156+
public:
157+
using framework::SingleGradOpDescMaker::SingleGradOpDescMaker;
158+
159+
protected:
160+
std::unique_ptr<framework::OpDesc> Apply() const override {
161+
std::unique_ptr<framework::OpDesc> op(new framework::OpDesc());
162+
op->SetType("concat_grad");
163+
op->SetInput("X", Input("X"));
164+
op->SetInput(framework::GradVarName("Out"), OutputGrad("Out"));
165+
op->SetOutput(framework::GradVarName("X"), InputGrad("X", false));
166+
op->SetAttrMap(Attrs());
167+
return op;
168+
}
169+
};
170+
155171
} // namespace operators
156172
} // namespace paddle
157173

158174
namespace ops = paddle::operators;
159175
REGISTER_OPERATOR(concat, ops::ConcatOp, ops::ConcatOpMaker,
160-
paddle::framework::DefaultGradOpDescMaker<
161-
false> /* set false to disable empty grad */);
176+
ops::ConcatGradOpDescMaker);
162177
REGISTER_OPERATOR(concat_grad, ops::ConcatOpGrad,
163178
ops::ConcatOpGradNoNeedBufferVarInference);
164179
REGISTER_OP_CPU_KERNEL(

paddle/fluid/pybind/pybind.cc

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,6 @@ DEFINE_bool(reader_queue_speed_test_mode, false,
7676
"If set true, the queue.pop will only get data from queue but not "
7777
"remove the data from queue for speed testing");
7878

79-
DECLARE_double(eager_delete_tensor_gb);
80-
DECLARE_bool(fast_eager_deletion_mode);
81-
DECLARE_double(memory_fraction_of_eager_deletion);
82-
8379
// disable auto conversion to list in Python
8480
PYBIND11_MAKE_OPAQUE(paddle::framework::LoDTensorArray);
8581

@@ -144,7 +140,6 @@ PYBIND11_MODULE(core, m) {
144140
paddle::platform::CpuTotalPhysicalMemory();
145141

146142
paddle::memory::allocation::UseAllocatorStrategyGFlag();
147-
paddle::framework::UseGarbageCollectorGFlags();
148143

149144
m.doc() = "C++ core of PaddlePaddle";
150145

@@ -163,12 +158,7 @@ PYBIND11_MODULE(core, m) {
163158
// NOTE(zjl): ctest would load environment variables at the beginning even
164159
// though we have not `import paddle.fluid as fluid`. So we add this API
165160
// to enable eager deletion mode in unittest.
166-
m.def("_set_eager_deletion_mode",
167-
[](double threshold, double fraction, bool fast_mode) {
168-
FLAGS_eager_delete_tensor_gb = threshold;
169-
FLAGS_memory_fraction_of_eager_deletion = fraction;
170-
FLAGS_fast_eager_deletion_mode = fast_mode;
171-
});
161+
m.def("_set_eager_deletion_mode", &paddle::framework::SetEagerDeletionMode);
172162

173163
m.add_object("_cleanup",
174164
py::capsule([]() { ScopePool::Instance().Clear(); }));

python/paddle/fluid/tests/unittests/test_eager_deletion_mnist.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import os
1616
import unittest
17+
import paddle.fluid as fluid
1718

1819
fluid.core._set_eager_deletion_mode(0.0, 1.0, True)
1920

python/paddle/fluid/tests/unittests/test_eager_deletion_transformer.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import os
1616
import unittest
17+
import paddle.fluid as fluid
1718

1819
fluid.core._set_eager_deletion_mode(0.0, 1.0, True)
1920

0 commit comments

Comments
 (0)