Skip to content

Commit e9cc328

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into fix-3736
2 parents 6bef079 + c2edd2d commit e9cc328

74 files changed

Lines changed: 7561 additions & 401 deletions

File tree

Some content is hidden

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

cmake/external/mkldnn.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ ExternalProject_Add(
5151
${EXTERNAL_PROJECT_LOG_ARGS}
5252
DEPENDS ${MKLDNN_DEPENDS}
5353
GIT_REPOSITORY "https://github.com/01org/mkl-dnn.git"
54-
GIT_TAG "v0.9"
54+
GIT_TAG "v0.10"
5555
PREFIX ${MKLDNN_SOURCES_DIR}
5656
UPDATE_COMMAND ""
5757
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${MKLDNN_INSTALL_DIR}

cmake/external/mklml.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ INCLUDE(ExternalProject)
2828

2929
SET(MKLML_PROJECT "extern_mklml")
3030
SET(MKLML_VER "mklml_lnx_2018.0.20170720")
31-
SET(MKLML_URL "https://github.com/01org/mkl-dnn/releases/download/v0.9/${MKLML_VER}.tgz")
31+
SET(MKLML_URL "https://github.com/01org/mkl-dnn/releases/download/v0.10/${MKLML_VER}.tgz")
3232
SET(MKLML_SOURCE_DIR "${THIRD_PARTY_PATH}/mklml")
3333
SET(MKLML_DOWNLOAD_DIR "${MKLML_SOURCE_DIR}/src/${MKLML_PROJECT}")
3434
SET(MKLML_DST_DIR "mklml")
@@ -54,7 +54,8 @@ ExternalProject_Add(
5454
${EXTERNAL_PROJECT_LOG_ARGS}
5555
PREFIX ${MKLML_SOURCE_DIR}
5656
DOWNLOAD_DIR ${MKLML_DOWNLOAD_DIR}
57-
DOWNLOAD_COMMAND wget --no-check-certificate -qO- ${MKLML_URL} | tar xz -C ${MKLML_DOWNLOAD_DIR}
57+
DOWNLOAD_COMMAND wget --no-check-certificate ${MKLML_URL} -c -q -O ${MKLML_VER}.tgz
58+
&& tar zxf ${MKLML_VER}.tgz
5859
DOWNLOAD_NO_PROGRESS 1
5960
UPDATE_COMMAND ""
6061
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${MKLML_INSTALL_ROOT}

doc/api/v2/config/layer.rst

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,9 +419,14 @@ multi_binary_label_cross_entropy_cost
419419
.. autoclass:: paddle.v2.layer.multi_binary_label_cross_entropy_cost
420420
:noindex:
421421

422-
huber_cost
423-
----------
424-
.. autoclass:: paddle.v2.layer.huber_cost
422+
huber_regression_cost
423+
-------------------------
424+
.. autoclass:: paddle.v2.layer.huber_regression_cost
425+
:noindex:
426+
427+
huber_classification_cost
428+
-------------------------
429+
.. autoclass:: paddle.v2.layer.huber_classification_cost
425430
:noindex:
426431

427432
lambda_cost

doc/getstarted/build_and_install/index_cn.rst

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
安装流程
77
++++++++
88

9-
PaddlePaddle提供数个预编译的二进制来进行安装,包括Docker镜像,ubuntu的deb安装包等。我们推荐使用Docker镜像来部署环境,同时欢迎贡献更多的安装包
9+
PaddlePaddle提供Docker镜像来部署环境
1010

1111
.. toctree::
1212
:maxdepth: 1
1313

1414
docker_install_cn.rst
15-
ubuntu_install_cn.rst
16-
1715

1816

1917
编译流程

doc/getstarted/build_and_install/index_en.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@ Install PaddlePaddle
88
:maxdepth: 1
99

1010
docker_install_en.rst
11-
ubuntu_install_en.rst
1211

1312
Build from Source
1413
-----------------
1514

1615
.. warning::
1716

18-
Please use :code:`deb` package or :code:`docker` image to install paddle. The building guide is used for hacking or contributing PaddlePaddle source code.
17+
Please use :code:`docker` image to install paddle. The building guide is used for hacking or contributing PaddlePaddle source code.
1918

2019
.. toctree::
2120
:maxdepth: 1

doc/getstarted/build_and_install/ubuntu_install_cn.rst

Lines changed: 0 additions & 71 deletions
This file was deleted.

doc/getstarted/build_and_install/ubuntu_install_en.rst

Lines changed: 0 additions & 25 deletions
This file was deleted.

doc/howto/dev/new_op_cn.md

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
- [定义ProtoMaker类](#定义ProtoMaker类)
66
- [定义Operator类](#定义Operator类)
77
- [定义OpKernel类](#定义OpKernel类)
8-
- [注册类](#注册类)
8+
- [注册Operator](#注册Operator)
99
- [编译](#编译)
1010
- [绑定Python](#绑定Python)
1111
- [实现单元测试](#实现单元测试)
1212
- [前向Operator单测](#前向Operator单测)
1313
- [反向Operator单测](#反向Operator单测)
14+
- [编译和执行](#编译和执行)
1415

1516

1617
## 概念简介
@@ -22,19 +23,17 @@
2223
- `framework::OperatorWithKernel`:继承自OperatorBase,Op有计算函数,称作有Kernel。
2324
- `class OpProtoAndCheckerMaker`:描述该Op的输入、输出、属性、注释,主要用于Python API接口生成
2425

25-
依据是否包含kernel,将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorBase`,后者继承自`OperatorWithKernel`。本教程主要介绍带Kernel的Op如何写,简单总结如下
26+
依据是否包含kernel,将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorBase`,后者继承自`OperatorWithKernel`。本教程主要介绍带Kernel的Op如何写,简单总结Op需要包含的内容如下
2627

27-
Forward Op需要包含:
28-
29-
- OpProtoMake定义
30-
- Op定义
31-
- Kernel实现
28+
29+
内容 | 定义位置
30+
-------------- | :----------------------
31+
OpProtoMake定义 | `.cc`文件,Backward Op不需要定义OpProtoMake
32+
Op定义 | `.cc`文件
33+
Kernel实现 | CPU、GPU共享Kernel在`.h`文件,否则,CPU可以在`.cc`文件,GPU可在`.cu`文件。
34+
注册Op | Op注册在`.cc`文件;Kernel注册CPU在`.cc`文件,GPU在`.cu`文件
35+
3236

33-
与之对应的Backward Op包含:
34-
35-
- Op定义
36-
- Kernel实现
37-
3837
下面以矩阵乘操作,即[MulOp](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc)为例来介绍如何写带Kernel的Operator。
3938

4039

@@ -137,8 +136,9 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs,
137136
```
138137
139138
还需要重写`InferShape`接口。`InferShape`为const函数,不能修改Op的成员变量,参数为`const framework::InferShapeContext &ctx`,通过该参数可获取到输入输出以及属性。它的功能是:
140-
- 1). 做检查, 尽早报错:检查输入数据维度、类型等是否合法
141-
- 2). 设置输出Tensor的形状
139+
140+
- 1). 做检查, 尽早报错:检查输入数据维度、类型等是否合法。
141+
- 2). 设置输出Tensor的形状。
142142
143143
通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中,和要讲到的注册函数一起放在`.cc`中
144144
@@ -172,7 +172,7 @@ class MulKernel : public framework::OpKernel {
172172

173173
到此前向Op实现完成,需要在`.cc`文件中注册该op和kernel。反向Op类的定义和Kernel定义与前向Op类似,这里不再重复。但注意,反向Op没有`ProtoMaker`
174174

175-
### 4. 注册类
175+
### 4. 注册Operator
176176

177177
`.cc`文件中注册前向、反向Op类,注册CPU Kernel。
178178

@@ -297,4 +297,28 @@ class TestMulOp(unittest.TestCase):
297297
- 调用`create_op("mul")`创建反向Op对应的前向Op。
298298
- 定义输入`inputs`
299299
- 调用`compare_grad`函数对比CPU、GPU计算结果。
300-
- 调用`check_grad`检查梯度稳定性。
300+
- 调用`check_grad`检查梯度稳定性,这里采用数值法检测梯度正确性。
301+
- 第一个参数`op` : 前向op。
302+
- 第二个参数`inputs` : 输入词典,词典的Key和`ProtoMaker`定义保持一致。
303+
- 第三个参数`set(["X", "Y"])` : 指定对输入变量`X``Y`做梯度检测。
304+
- 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out`
305+
306+
307+
### 编译和执行
308+
309+
单测完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)里添加编译:
310+
311+
```
312+
py_test(test_mul_op SRCS test_mul_op.py)
313+
```
314+
315+
编译时需要打开`WITH_TESTING`, 即 `cmake paddle_dir -DWITH_TESTING=ON`,编译成功之后执行单测命令为:
316+
317+
```
318+
make test ARGS="-R test_mul_op -V"
319+
```
320+
或者:
321+
322+
```
323+
ctest -R test_mul_op
324+
```

paddle/cuda/include/hl_cnn.h

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,96 @@ extern void hl_avgpool_backward(const int frameCnt,
173173
real* backGrad,
174174
const int outStride);
175175

176+
extern void hl_maxpool3D_forward(const int frameCnt,
177+
const real* inputData,
178+
const int channels,
179+
const int depth,
180+
const int height,
181+
const int width,
182+
const int pooledD,
183+
const int pooledH,
184+
const int pooledW,
185+
const int sizeZ,
186+
const int sizeY,
187+
const int sizeX,
188+
const int strideD,
189+
const int strideH,
190+
const int strideW,
191+
const int paddingD,
192+
const int paddingH,
193+
const int paddingW,
194+
real* tgtData,
195+
real* maxPoolIdxData,
196+
const int tgtStride);
197+
198+
extern void hl_maxpool3D_backward(const int frameCnt,
199+
const real* outGrad,
200+
const int channels,
201+
const int depth,
202+
const int height,
203+
const int width,
204+
const int pooledD,
205+
const int pooledH,
206+
const int pooledW,
207+
const int sizeZ,
208+
const int sizeY,
209+
const int sizeX,
210+
const int strideD,
211+
const int strideH,
212+
const int strideW,
213+
const int paddingD,
214+
const int paddingH,
215+
const int paddingW,
216+
real scaleA,
217+
real scaleB,
218+
real* targetGrad,
219+
real* maxPoolIdxData,
220+
const int outStride);
221+
222+
extern void hl_avgpool3D_forward(const int frameCnt,
223+
const real* inputData,
224+
const int channels,
225+
const int depth,
226+
const int height,
227+
const int width,
228+
const int pooledD,
229+
const int pooledH,
230+
const int pooledW,
231+
const int sizeZ,
232+
const int sizeY,
233+
const int sizeX,
234+
const int strideD,
235+
const int strideH,
236+
const int strideW,
237+
const int paddingD,
238+
const int paddingH,
239+
const int paddingW,
240+
real* tgtData,
241+
const int tgtStride);
242+
243+
extern void hl_avgpool3D_backward(const int frameCnt,
244+
const real* outGrad,
245+
const int channels,
246+
const int depth,
247+
const int height,
248+
const int width,
249+
const int pooledD,
250+
const int pooledH,
251+
const int pooledW,
252+
const int sizeZ,
253+
const int sizeY,
254+
const int sizeX,
255+
const int strideD,
256+
const int strideH,
257+
const int strideW,
258+
int paddingD,
259+
int paddingH,
260+
int paddingW,
261+
real scaleA,
262+
real scaleB,
263+
real* backGrad,
264+
const int outStride);
265+
176266
/**
177267
* @brief Bilinear interpolation forward.
178268
*
@@ -275,4 +365,4 @@ extern void hl_maxout_backward(real* inGrad,
275365
size_t featLen,
276366
size_t groups);
277367

278-
#endif /* HL_CNN_H_ */
368+
#endif // HL_CNN_H_

0 commit comments

Comments
 (0)