Skip to content

Commit b7ebaf7

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into fix_prelu
2 parents 2ab928d + 9f28925 commit b7ebaf7

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

+1477
-940
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,3 @@ cmake_install.cmake
2828
paddle/.timestamp
2929
python/paddlepaddle.egg-info/
3030
paddle/pybind/pybind.h
31-
python/paddle/v2/framework/tests/tmp/*

cmake/external/openblas.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ IF(NOT ${CBLAS_FOUND})
9898
ENDIF()
9999
INSTALL(CODE "execute_process(
100100
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CBLAS_INSTALL_DIR}/lib
101-
destination ${CMAKE_INSTALL_PREFIX}/${TMP_INSTALL_DIR}
101+
${CMAKE_INSTALL_PREFIX}/${TMP_INSTALL_DIR}
102102
)"
103103
)
104104
INSTALL(CODE "MESSAGE(STATUS \"Installing: \"

doc/design/evaluator.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
## Evaluator Design
2+
3+
### The Problem
4+
5+
During training or serving, we provide the evaluation function to measure the model performance, e.g., accuracy, precision. In the operator based framework design, the data go through the network pipeline batch by batch. As a result, inside the operator, we only can calculate one minibatch metrics. We need to provide a mechanism to calculate the metrics for each N pass/batch the user wanted.
6+
7+
### Evaluator Design
8+
Currently, every operation is expressed in the graph. we divide the evaluator process into three steps.
9+
10+
1. Initialize the metric state and add it into the block.
11+
12+
2. Calculate the statistic of the metric state in every mini-batch. The single operator is only responsible for calculating necessary statistics for one mini-batch. For example, accuracy operator only calculate a minibatch data if run once.
13+
14+
15+
3. Merge the mini-batch statistics to form the evaluation result for multiple mini-batches. When it comes to distributed training/Multi-GPU training, aggregate the value from different devices.
16+
17+
### Implementation
18+
This design is shown in python API.
19+
Each metric operator need to caculate the metric statistic and return the batch aware states, Python side responsible for accumulate the states for each pass.
20+
21+
22+
```python
23+
class Evaluator(object):
24+
"""
25+
Evaluator Base class.
26+
"""
27+
def __init__(self, name, **kwargs):
28+
"""
29+
Different evaluator may has different metric states. E.g, Accuracy need two variables, total and right sample counts.
30+
Auc need four variables, `true_positives`,
31+
`true_negatives`, `false_positives` and `false_negatives`. So every evaluator should create its needed variables and append to main_program
32+
33+
The initialization of Evaluator should be responsible for:
34+
create metric states and append to the main_program
35+
"""
36+
pass
37+
38+
def _update_ops(self, input, label, **kwargs)
39+
"""
40+
Add mini-batch evaluator caculate operators to the main_program.
41+
Add increment operator to accumulate the metric states.
42+
"""
43+
44+
45+
def reset(self, executor, reset_program=None):
46+
"""
47+
Reset metric states at the begin of each pass/user specified batch number.
48+
Execute the reset_program to reset the states.
49+
"""
50+
51+
52+
def eval(self, executor, eval_program=None):
53+
"""
54+
Merge the mini-batch statistics to form the evaluation result for multiple mini-batches.
55+
Execute the eval_program and return the result.
56+
"""
57+
return eval_result
58+
```

paddle/capi/Matrix.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ paddle_error paddle_matrix_get_shape(paddle_matrix mat,
121121

122122
paddle_matrix paddle_matrix_create_sparse(
123123
uint64_t height, uint64_t width, uint64_t nnz, bool isBinary, bool useGpu) {
124+
#ifndef PADDLE_MOBILE_INFERENCE
124125
auto ptr = new paddle::capi::CMatrix();
125126
ptr->mat = paddle::Matrix::createSparseMatrix(
126127
height,
@@ -131,6 +132,9 @@ paddle_matrix paddle_matrix_create_sparse(
131132
false,
132133
useGpu);
133134
return ptr;
135+
#else
136+
return nullptr;
137+
#endif
134138
}
135139

136140
paddle_error paddle_matrix_sparse_copy_from(paddle_matrix mat,
@@ -140,6 +144,7 @@ paddle_error paddle_matrix_sparse_copy_from(paddle_matrix mat,
140144
uint64_t colSize,
141145
float* valueArray,
142146
uint64_t valueSize) {
147+
#ifndef PADDLE_MOBILE_INFERENCE
143148
if (mat == nullptr) return kPD_NULLPTR;
144149
auto ptr = cast(mat);
145150
if (rowArray == nullptr || colArray == nullptr ||
@@ -160,4 +165,7 @@ paddle_error paddle_matrix_sparse_copy_from(paddle_matrix mat,
160165
} else {
161166
return kPD_NOT_SUPPORTED;
162167
}
168+
#else
169+
return kPD_NOT_SUPPORTED;
170+
#endif
163171
}

paddle/capi/matrix.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ PD_API paddle_matrix paddle_matrix_create(uint64_t height,
4848
* @param isBinary is binary (either 1 or 0 in matrix) or not.
4949
* @param useGpu is using GPU or not.
5050
* @return paddle_matrix.
51+
* @note Mobile inference does not support this interface.
5152
*/
5253
PD_API paddle_matrix paddle_matrix_create_sparse(
5354
uint64_t height, uint64_t width, uint64_t nnz, bool isBinary, bool useGpu);
@@ -129,6 +130,7 @@ PD_API paddle_error paddle_matrix_get_shape(paddle_matrix mat,
129130
* NULL if the matrix is binary.
130131
* @param [in] valueSize length of value array. Zero if the matrix is binary.
131132
* @return paddle_error
133+
* @note Mobile inference does not support this interface.
132134
*/
133135
PD_API paddle_error paddle_matrix_sparse_copy_from(paddle_matrix mat,
134136
int* rowArray,

paddle/cuda/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ if(WITH_GPU)
2727
set_source_files_properties(${CUDA_CXX_SOURCES}
2828
PROPERTIES COMPILE_FLAGS "-D__NVCC__")
2929
else()
30+
if (NOT MOBILE_INFERENCE)
3031
set(CUDA_CXX_SOURCES src/hl_warpctc_wrap.cc)
32+
endif()
3133
endif()
3234

3335
set(CUDA_CU_SOURCES

paddle/framework/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ py_proto_compile(framework_py_proto SRCS framework.proto)
3838
add_custom_target(framework_py_proto_init ALL COMMAND ${CMAKE_COMMAND} -E touch __init__.py)
3939
add_dependencies(framework_py_proto framework_py_proto_init)
4040
add_custom_command(TARGET framework_py_proto POST_BUILD
41-
COMMAND ${CMAKE_COMMAND} -E make_directory ${PADDLE_SOURCE_DIR}/python/paddle/v2/framework/proto
42-
COMMAND cp *.py ${PADDLE_SOURCE_DIR}/python/paddle/v2/framework/proto/
43-
COMMENT "Copy generated python proto into directory paddle/v2/framework/proto."
41+
COMMAND ${CMAKE_COMMAND} -E make_directory ${PADDLE_SOURCE_DIR}/python/paddle/v2/fluid/proto
42+
COMMAND cp *.py ${PADDLE_SOURCE_DIR}/python/paddle/v2/fluid/proto/
43+
COMMENT "Copy generated python proto into directory paddle/v2/fluid/proto."
4444
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
4545

4646
cc_library(backward SRCS backward.cc DEPS net_op)

paddle/gserver/CMakeLists.txt

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,49 @@ if(MOBILE_INFERENCE)
8585
gradientmachines/GradientMachineMode.cpp
8686
gradientmachines/MultiGradientMachine.cpp)
8787

88-
# Remove useless layers
88+
# Remove layers that used in training
8989
list(REMOVE_ITEM GSERVER_SOURCES
90-
layers/RecurrentLayerGroup.cpp)
90+
layers/RecurrentLayerGroup.cpp
91+
layers/CostLayer.cpp
92+
layers/MultiBoxLossLayer.cpp
93+
layers/WarpCTCLayer.cpp
94+
layers/CTCLayer.cpp
95+
layers/LinearChainCTC.cpp
96+
layers/PrintLayer.cpp)
97+
list(REMOVE_ITEM GSERVER_SOURCES
98+
layers/OuterProdLayer.cpp
99+
layers/SumToOneNormLayer.cpp
100+
layers/ConvShiftLayer.cpp
101+
layers/InterpolationLayer.cpp
102+
layers/AgentLayer.cpp
103+
layers/DotMulOperator.cpp
104+
layers/GruStepLayer.cpp
105+
layers/LstmStepLayer.cpp
106+
layers/ConvexCombinationLayer.cpp
107+
layers/Conv3DLayer.cpp
108+
layers/DeConv3DLayer.cpp
109+
layers/CropLayer.cpp
110+
layers/CrossEntropyOverBeam.cpp
111+
layers/DataNormLayer.cpp
112+
layers/FeatureMapExpandLayer.cpp
113+
layers/HierarchicalSigmoidLayer.cpp
114+
layers/MultinomialSampler.cpp
115+
layers/NCELayer.cpp
116+
layers/KmaxSeqScoreLayer.cpp
117+
layers/MDLstmLayer.cpp
118+
layers/MultiplexLayer.cpp
119+
layers/PadLayer.cpp
120+
layers/Pool3DLayer.cpp
121+
layers/ResizeLayer.cpp
122+
layers/RotateLayer.cpp
123+
layers/RowConvLayer.cpp
124+
layers/RowL2NormLayer.cpp
125+
layers/SamplingIdLayer.cpp
126+
layers/ScaleShiftLayer.cpp
127+
layers/SelectiveFullyConnectedLayer.cpp
128+
layers/SpatialPyramidPoolLayer.cpp
129+
layers/BilinearInterpLayer.cpp
130+
layers/ClipLayer.cpp)
91131
endif()
92132

93133
if(WITH_GPU)

paddle/gserver/gradientmachines/NeuralNetwork.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ limitations under the License. */
1616

1717
#include "NeuralNetwork.h"
1818
#include "hl_gpu.h"
19-
#include "paddle/gserver/layers/AgentLayer.h"
2019
#include "paddle/utils/CustomStackTrace.h"
2120
#include "paddle/utils/Logging.h"
2221
#include "paddle/utils/Stat.h"
@@ -28,6 +27,7 @@ limitations under the License. */
2827
#ifndef PADDLE_MOBILE_INFERENCE
2928
#include "MultiNetwork.h"
3029
#include "RecurrentGradientMachine.h"
30+
#include "paddle/gserver/layers/AgentLayer.h"
3131
#endif
3232

3333
namespace paddle {
@@ -192,9 +192,11 @@ void NeuralNetwork::init(const ModelConfig& config,
192192
void NeuralNetwork::connect(LayerPtr agentLayer,
193193
LayerPtr realLayer,
194194
int height) {
195+
#ifndef PADDLE_MOBILE_INFERENCE
195196
AgentLayer* agent = dynamic_cast<AgentLayer*>(agentLayer.get());
196197
CHECK_NOTNULL(agent);
197198
agent->setRealLayer(realLayer, height);
199+
#endif
198200
}
199201

200202
void NeuralNetwork::connect(std::string agentLayerName,

paddle/gserver/layers/Layer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ ClassRegistrar<Layer, LayerConfig> Layer::registrar_;
9898
LayerPtr Layer::create(const LayerConfig& config) {
9999
std::string type = config.type();
100100

101+
#ifndef PADDLE_MOBILE_INFERENCE
101102
// NOTE: As following types have illegal character '-',
102103
// they can not use REGISTER_LAYER to registrar.
103104
// Besides, to fit with old training models,
@@ -106,7 +107,6 @@ LayerPtr Layer::create(const LayerConfig& config) {
106107
return LayerPtr(new MultiClassCrossEntropy(config));
107108
else if (type == "rank-cost")
108109
return LayerPtr(new RankingCost(config));
109-
#ifndef PADDLE_MOBILE_INFERENCE
110110
else if (type == "auc-validation")
111111
return LayerPtr(new AucValidation(config));
112112
else if (type == "pnpair-validation")

0 commit comments

Comments
 (0)