Skip to content

Commit 7c09d19

Browse files
committed
Merge branch 'develop' into anakin_bug
2 parents 3373535 + c108376 commit 7c09d19

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2251
-362
lines changed

CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,11 @@ include(external/snappy) # download snappy
204204
include(external/snappystream)
205205
include(external/threadpool)
206206

207+
set(WITH_ANAKIN OFF CACHE STRING "Disable Anakin first, will add it later." FORCE)
207208
if(WITH_GPU)
208209
include(cuda)
209210
include(tensorrt)
210211
include(external/anakin)
211-
else()
212-
set(WITH_ANAKIN OFF CACHE STRING "Anakin is valid only when GPU is set." FORCE)
213212
endif()
214213

215214
include(cudnn) # set cudnn libraries, must before configure

doc/fluid/new_docs/advanced_usage/deploy/native_infer.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Paddle 预测 API
44
为了更简单方便的预测部署,Fluid 提供了一套高层 API
55
用来隐藏底层不同的优化实现。
66

7-
`预测库相关代码 <https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/contrib/inference>`__
7+
`预测库相关代码 <https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/inference/api>`__
88
包括
99

1010
- 头文件 ``paddle_inference_api.h`` 定义了所有的接口
@@ -104,5 +104,5 @@ engine
104104
------------
105105

106106
- `inference
107-
demos <https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/contrib/inference/demo>`__
108-
- `复杂单线程/多线程例子 <https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/contrib/inference/test_paddle_inference_api_impl.cc>`__
107+
demos <https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/inference/api/demo_ci>`__
108+
- `复杂单线程/多线程例子 <https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/api/api_impl_tester.cc>`__

paddle/fluid/API.spec

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ paddle.fluid.Program.create_block ArgSpec(args=['self', 'parent_idx'], varargs=N
66
paddle.fluid.Program.current_block ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
77
paddle.fluid.Program.get_desc ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
88
paddle.fluid.Program.global_block ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
9-
paddle.fluid.Program.inference_optimize ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
9+
paddle.fluid.Program.inference_optimize ArgSpec(args=['self', 'export_for_deployment'], varargs=None, keywords=None, defaults=(True,))
1010
paddle.fluid.Program.list_vars ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
1111
paddle.fluid.Program.optimized_guard ArgSpec(args=[], varargs='args', keywords='kwds', defaults=None)
1212
paddle.fluid.Program.parse_from_string ArgSpec(args=['binary_str'], varargs=None, keywords=None, defaults=None)
@@ -18,6 +18,9 @@ paddle.fluid.Operator.all_attrs ArgSpec(args=['self'], varargs=None, keywords=No
1818
paddle.fluid.Operator.attr ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
1919
paddle.fluid.Operator.attr_type ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
2020
paddle.fluid.Operator.block_attr ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
21+
paddle.fluid.Operator.block_attr_id ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
22+
paddle.fluid.Operator.blocks_attr ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
23+
paddle.fluid.Operator.blocks_attr_ids ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
2124
paddle.fluid.Operator.has_attr ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
2225
paddle.fluid.Operator.has_kernel ArgSpec(args=['self', 'op_type'], varargs=None, keywords=None, defaults=None)
2326
paddle.fluid.Operator.input ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
@@ -52,7 +55,7 @@ paddle.fluid.Inferencer.__init__ ArgSpec(args=['self', 'infer_func', 'param_path
5255
paddle.fluid.Inferencer.infer ArgSpec(args=['self', 'inputs', 'return_numpy'], varargs=None, keywords=None, defaults=(True,))
5356
paddle.fluid.DistributeTranspiler.__init__ ArgSpec(args=['self', 'config'], varargs=None, keywords=None, defaults=(None,))
5457
paddle.fluid.DistributeTranspiler.get_pserver_program ArgSpec(args=['self', 'endpoint'], varargs=None, keywords=None, defaults=None)
55-
paddle.fluid.DistributeTranspiler.get_startup_program ArgSpec(args=['self', 'endpoint', 'pserver_program'], varargs=None, keywords=None, defaults=None)
58+
paddle.fluid.DistributeTranspiler.get_startup_program ArgSpec(args=['self', 'endpoint', 'pserver_program', 'startup_program'], varargs=None, keywords=None, defaults=(None,))
5659
paddle.fluid.DistributeTranspiler.get_trainer_program ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
5760
paddle.fluid.DistributeTranspiler.transpile ArgSpec(args=['self', 'trainer_id', 'program', 'pservers', 'trainers', 'sync_mode'], varargs=None, keywords=None, defaults=(None, '127.0.0.1:6174', 1, True))
5861
paddle.fluid.InferenceTranspiler.__init__
@@ -74,7 +77,7 @@ paddle.fluid.io.save_persistables ArgSpec(args=['executor', 'dirname', 'main_pro
7477
paddle.fluid.io.load_vars ArgSpec(args=['executor', 'dirname', 'main_program', 'vars', 'predicate', 'filename'], varargs=None, keywords=None, defaults=(None, None, None, None))
7578
paddle.fluid.io.load_params ArgSpec(args=['executor', 'dirname', 'main_program', 'filename'], varargs=None, keywords=None, defaults=(None, None))
7679
paddle.fluid.io.load_persistables ArgSpec(args=['executor', 'dirname', 'main_program', 'filename'], varargs=None, keywords=None, defaults=(None, None))
77-
paddle.fluid.io.save_inference_model ArgSpec(args=['dirname', 'feeded_var_names', 'target_vars', 'executor', 'main_program', 'model_filename', 'params_filename'], varargs=None, keywords=None, defaults=(None, None, None))
80+
paddle.fluid.io.save_inference_model ArgSpec(args=['dirname', 'feeded_var_names', 'target_vars', 'executor', 'main_program', 'model_filename', 'params_filename', 'export_for_deployment'], varargs=None, keywords=None, defaults=(None, None, None, True))
7881
paddle.fluid.io.load_inference_model ArgSpec(args=['dirname', 'executor', 'model_filename', 'params_filename'], varargs=None, keywords=None, defaults=(None, None))
7982
paddle.fluid.io.get_inference_program ArgSpec(args=['target_vars', 'main_program'], varargs=None, keywords=None, defaults=(None,))
8083
paddle.fluid.initializer.ConstantInitializer.__init__ ArgSpec(args=['self', 'value', 'force_cpu'], varargs=None, keywords=None, defaults=(0.0, False))
@@ -156,6 +159,8 @@ paddle.fluid.layers.relu ArgSpec(args=['x'], varargs=None, keywords=None, defaul
156159
paddle.fluid.layers.log ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
157160
paddle.fluid.layers.crop ArgSpec(args=['x', 'shape', 'offsets', 'name'], varargs=None, keywords=None, defaults=(None, None, None))
158161
paddle.fluid.layers.rank_loss ArgSpec(args=['label', 'left', 'right', 'name'], varargs=None, keywords=None, defaults=(None,))
162+
paddle.fluid.layers.prelu ArgSpec(args=['x', 'mode', 'param_attr', 'name'], varargs=None, keywords=None, defaults=(None, None))
163+
paddle.fluid.layers.flatten ArgSpec(args=['x', 'axis', 'name'], varargs=None, keywords=None, defaults=(1, None))
159164
paddle.fluid.layers.data ArgSpec(args=['name', 'shape', 'append_batch_size', 'dtype', 'lod_level', 'type', 'stop_gradient'], varargs=None, keywords=None, defaults=(True, 'float32', 0, VarType.LOD_TENSOR, True))
160165
paddle.fluid.layers.open_recordio_file ArgSpec(args=['filename', 'shapes', 'lod_levels', 'dtypes', 'pass_num', 'for_parallel'], varargs=None, keywords=None, defaults=(1, True))
161166
paddle.fluid.layers.open_files ArgSpec(args=['filenames', 'shapes', 'lod_levels', 'dtypes', 'thread_num', 'buffer_size', 'pass_num', 'is_test'], varargs=None, keywords=None, defaults=(None, None, 1, None))
@@ -324,7 +329,7 @@ paddle.fluid.contrib.BeamSearchDecoder.update_array ArgSpec(args=['self', 'array
324329
paddle.fluid.contrib.memory_usage ArgSpec(args=['program', 'batch_size'], varargs=None, keywords=None, defaults=None)
325330
paddle.fluid.transpiler.DistributeTranspiler.__init__ ArgSpec(args=['self', 'config'], varargs=None, keywords=None, defaults=(None,))
326331
paddle.fluid.transpiler.DistributeTranspiler.get_pserver_program ArgSpec(args=['self', 'endpoint'], varargs=None, keywords=None, defaults=None)
327-
paddle.fluid.transpiler.DistributeTranspiler.get_startup_program ArgSpec(args=['self', 'endpoint', 'pserver_program'], varargs=None, keywords=None, defaults=None)
332+
paddle.fluid.transpiler.DistributeTranspiler.get_startup_program ArgSpec(args=['self', 'endpoint', 'pserver_program', 'startup_program'], varargs=None, keywords=None, defaults=(None,))
328333
paddle.fluid.transpiler.DistributeTranspiler.get_trainer_program ArgSpec(args=['self'], varargs=None, keywords=None, defaults=None)
329334
paddle.fluid.transpiler.DistributeTranspiler.transpile ArgSpec(args=['self', 'trainer_id', 'program', 'pservers', 'trainers', 'sync_mode'], varargs=None, keywords=None, defaults=(None, '127.0.0.1:6174', 1, True))
330335
paddle.fluid.transpiler.InferenceTranspiler.__init__

paddle/fluid/framework/details/exception_holder.h

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#pragma once
1616

17+
#include "glog/logging.h"
1718
#include "paddle/fluid/platform/enforce.h"
1819

1920
namespace paddle {
@@ -22,55 +23,66 @@ namespace details {
2223

2324
class ExceptionHolder {
2425
public:
25-
void Catch(const platform::EnforceNotMet& exp) {
26-
std::lock_guard<std::mutex> lock(mu_);
27-
exception_.reset(new platform::EnforceNotMet(exp));
28-
type_ = kEnforceNotMet;
29-
}
30-
31-
void Catch(const platform::EOFException& exp) {
32-
std::lock_guard<std::mutex> lock(mu_);
33-
// EOFException will not cover up existing EnforceNotMet.
34-
if (exception_.get() == nullptr) {
35-
exception_.reset(new platform::EOFException(exp));
36-
type_ = kEOF;
26+
void Catch(std::exception_ptr eptr) {
27+
try {
28+
std::rethrow_exception(eptr);
29+
} catch (platform::EOFException exp) {
30+
Catch(exp);
31+
} catch (platform::EnforceNotMet exp) {
32+
Catch(exp);
33+
} catch (...) {
34+
LOG(FATAL) << "Unknown exception caught";
3735
}
3836
}
3937

40-
bool ExceptionCatched() const {
38+
bool IsCaught() const {
4139
std::lock_guard<std::mutex> lock(mu_);
4240
return exception_.get() != nullptr;
4341
}
4442

45-
void Throw() {
43+
void ReThrow() {
4644
std::lock_guard<std::mutex> lock(mu_);
4745
switch (type_) {
4846
case kNone:
4947
break;
5048
case kEnforceNotMet: {
5149
auto e = *static_cast<platform::EnforceNotMet*>(exception_.get());
5250
throw e;
53-
break;
5451
}
5552
case kEOF: {
5653
auto e = *static_cast<platform::EOFException*>(exception_.get());
5754
throw e;
58-
break;
5955
}
60-
default:
61-
LOG(FATAL) << "Unknown exception.";
6256
}
63-
exception_.reset();
64-
type_ = kNone;
57+
ClearImpl();
6558
}
6659

6760
void Clear() {
6861
std::lock_guard<std::mutex> lock(mu_);
62+
ClearImpl();
63+
}
64+
65+
private:
66+
void ClearImpl() {
6967
exception_.reset();
7068
type_ = kNone;
7169
}
7270

73-
private:
71+
void Catch(const platform::EnforceNotMet& exp) {
72+
std::lock_guard<std::mutex> lock(mu_);
73+
exception_.reset(new platform::EnforceNotMet(exp));
74+
type_ = kEnforceNotMet;
75+
}
76+
77+
void Catch(const platform::EOFException& exp) {
78+
std::lock_guard<std::mutex> lock(mu_);
79+
// EOFException will not cover up existing EnforceNotMet.
80+
if (exception_.get() == nullptr) {
81+
exception_.reset(new platform::EOFException(exp));
82+
type_ = kEOF;
83+
}
84+
}
85+
7486
enum ExceptionType { kNone, kEnforceNotMet, kEOF };
7587
ExceptionType type_{kNone};
7688

paddle/fluid/framework/details/threaded_ssa_graph_executor.cc

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ FeedFetchList ThreadedSSAGraphExecutor::Run(
107107
auto cur_ready_vars = ready_vars.PopAll(1, &timeout);
108108

109109
if (timeout) {
110-
if (exception_holder_.ExceptionCatched()) {
110+
if (exception_holder_.IsCaught()) {
111111
for (auto &run_op_future : run_op_futures_) {
112112
run_op_future.wait();
113113
}
114-
exception_holder_.Throw();
114+
exception_holder_.ReThrow();
115115
} else {
116116
continue;
117117
}
@@ -220,12 +220,8 @@ void ThreadedSSAGraphExecutor::RunOp(
220220
running_ops_--;
221221
ready_var_q->Extend(op->Outputs());
222222
VLOG(10) << op << " " << op->Name() << "Signal posted";
223-
} catch (platform::EOFException ex) {
224-
exception_holder_.Catch(ex);
225-
} catch (platform::EnforceNotMet ex) {
226-
exception_holder_.Catch(ex);
227223
} catch (...) {
228-
LOG(FATAL) << "Unknown exception catched";
224+
exception_holder_.Catch(std::current_exception());
229225
}
230226
};
231227
if (pool_) {

paddle/fluid/framework/ir/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ cc_library(graph SRCS graph.cc DEPS node)
33
cc_library(graph_helper SRCS graph_helper.cc DEPS graph)
44
cc_library(pass SRCS pass.cc DEPS graph node graph_helper)
55
cc_library(graph_viz_pass SRCS graph_viz_pass.cc DEPS graph pass graph_helper)
6+
cc_library(graph_traits SRCS graph_traits.cc DEPS graph)
7+
cc_library(graph_pattern_detecter SRCS graph_pattern_detecter.cc DEPS graph graph_helper graph_traits)
68

79
cc_test(pass_test SRCS pass_test.cc DEPS graph pass graph_helper)
810
cc_test(graph_test SRCS graph_test.cc DEPS graph graph_helper op_registry)
911
cc_test(graph_helper_test SRCS graph_helper_test.cc DEPS graph graph_helper op_registry)
12+
cc_test(test_graph_pattern_detecter SRCS graph_pattern_detecter_tester.cc DEPS graph_pattern_detecter)

paddle/fluid/framework/ir/graph.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,38 @@ namespace paddle {
2828
namespace framework {
2929
namespace ir {
3030

31+
/*
32+
* The graph is a Directed Acyclic Single Static Assignment Graph.
33+
*
34+
* In more detail, the following properties must hold:
35+
*
36+
* The graph shouldn't contain cycle. Each node is a black-box to the graph
37+
* so the node itself could be a loop operator.
38+
*
39+
* Each Variable-type node has only one input (thus single static assignment).
40+
*
41+
* The output/input of operator is variable and the output/input of variable
42+
* is operator.
43+
*
44+
* The following data harzards in Program are addressed in the Graph:
45+
*
46+
* Write-After-Read
47+
* a = op1(x)
48+
* x = op2(b)
49+
* A control-dependency connection is created bettwen op1 and op2 such that
50+
* op1->op2, so as to ensure correct order.
51+
*
52+
* Write-After-Write
53+
* x = op1(a)
54+
* x = op2(b)
55+
* A control-dependency connection is created between op1 and op2 such that
56+
* op1->op2, so as to ensure correct order.
57+
*
58+
* Other properties currently hold, but is not enforced yet:
59+
*
60+
* Variable-type node (not control dep) with the same variable name share
61+
* the same underlying VarDesc.
62+
*/
3163
class Graph {
3264
public:
3365
explicit Graph(const ProgramDesc &program);

0 commit comments

Comments
 (0)