From ff3ec3c438e9c68b663fc42b4362a5b780e5f741 Mon Sep 17 00:00:00 2001 From: Zhuoyuan <chenzhuoyuan07@gmail.com> Date: Mon, 28 Aug 2017 11:37:15 -0700 Subject: [PATCH 01/72] switch_op.h --- paddle/operators/switch_op.h | 143 +++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 paddle/operators/switch_op.h diff --git a/paddle/operators/switch_op.h b/paddle/operators/switch_op.h new file mode 100644 index 0000000000..f72726bce1 --- /dev/null +++ b/paddle/operators/switch_op.h @@ -0,0 +1,143 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once +#include "glog/logging.h" +#include "paddle/framework/eigen.h" +#include "paddle/framework/operator.h" +#include "paddle/framework/ddim.h" +#include "paddle/operators/gather.h" + +namespace paddle { +namespace operators { + +using namespace paddle::framework; + +template <typename Place, typename T> +class CondOp final : public OperatorBase { +public: + void Init() override; + + /** + * InferShape must be called before Run. + */ + virtual void InferShape(const std::shared_ptr<Scope>& scope) const override { + scope_t = scope.NewScope(); + scope_f = scope.NewScope(); + net_op_t->InferShape(scope_t); + net_op_f->InferShape(scope_f); + tensor_t = new Tensor(); + tensor_f = new Tensor(); + { // True branch + for (auto& input : net_op_t->Inputs()) { + auto var_name = input.second; + if (!scope_t.FindVar(var_name) { + scope_t.NewVar(var_name)->GetMutable<Tensor>(); + } + } + } + { // False branch + for (auto& input : net_op_f->Inputs()) { + auto var_name = input.second; + if (!scope_f.FindVar(var_name) { + scope_f.NewVar(var_name)->GetMutable<Tensor>(); + } + } + } + } + + virtual void Run(const std::shared_ptr<Scope>& scope, + const platform::DeviceContext& dev_ctx) const override { + auto* cond = context.Input<Tensor>("Cond"); + // Step 1: get the index + true_index.clear(); + false_index.clear(); + for(int i = 0; i < cond->dims()[0]; ++i) { + if (cond->data<bool>()[i]) + true_index.push_back(i); + else: + false_index.push_back(i); + } + framework::DDim dim_ = paddle::framework::make_ddim({0}); + dim_[0] = true_index.size(); + tensor_t->Resize(dim_); + // set value + for (int i = 0; i < dim_[0]; ++i) + tensor_t->mutable_data<int>()[i] = true_index[i]; + dim_[0] = false_index.size(); + tensor_f->Resize(dim_); + // set value + for (int i = 0; i < dim_[0]; ++i) + tensor_f->mutable_data<int>()[i] = false_index[i]; + + // Step 2: collect data by calling gather + { // True branch + for (auto& input : net_op_t->Inputs()) { + auto var_name = input.second; + // find Tensor + Tensor* Tensor_parent = scope.FindVar(var_name)->GetMutable<Tensor>(); + Tensor* Tensor_child = scope_t.FindVar(var_name)->GetMutable<Tensor>(); + Gather<T>(dev_ctx.GetPlace(), tensor_parent, tensor_t, tensor_child); + } + + } + } + +private: + Scope* scope_t; + Scope* scope_f; + + // subnet_t + std::unique_ptr<framework::OperatorBase> net_op_t; + // NetOp* net_op_t; + // subnet_f + std::unique_ptr<framework::OperatorBase> net_op_f; + // NetOp* net_op_f; + + // T_index + vector<int> true_index; + Tensor* tensor_t; + // F_index + vector<int> false_index; + Tensor* tensor_f; +}; + +class CondOpMaker : public OpProtoAndCheckerMaker { +public: + IfElseOpMaker(OpProto *proto, OpAttrChecker *op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("Cond", "The condition, which is a bool vector"); + AddAttr<std::string>("subnet_t", "The subnet network to be called when Cond[i] == true"); + AddAttr<std::string>("subnet_f", "The subnet network to be called when Cond[i] == false"); + AddOutput("Out", "The output of if-else op"); + AddComment(R"DOC( +Sample dependent Cond Operator: +The equation is: Out[i] = subnet_t[i], if Cond[i] == true +Out[i] = subnet_t[i], if Cond[i] == false +)DOC"); + } +}; + +class CondGradientOp final : public OperatorBase { +public: + void Init() override; + + virtual void InferShape(const std::shared_ptr<Scope>& scope) const override; + + virtual void Run(const std::shared_ptr<Scope>& scope, + const platform::DeviceContext& dev_ctx) const override; +}; + +} // namespace operators +} // namespace paddle From f075141b9144b6fdb91ccc2af9216601d70568c5 Mon Sep 17 00:00:00 2001 From: Zhuoyuan <chenzhuoyuan07@gmail.com> Date: Mon, 28 Aug 2017 11:37:49 -0700 Subject: [PATCH 02/72] switch_op.cc --- paddle/operators/switch_op.cc | 120 ++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 paddle/operators/switch_op.cc diff --git a/paddle/operators/switch_op.cc b/paddle/operators/switch_op.cc new file mode 100644 index 0000000000..09574a89a3 --- /dev/null +++ b/paddle/operators/switch_op.cc @@ -0,0 +1,120 @@ +#include "paddle/operators/switch_op.h" + +namespace paddle { +namespace operators { + +// namespace if_else{ + + +void CondOp::Init() override { +} + +void InferShape(const std::shared_ptr<Scope>& scope) const override { + subnet_t = GetAttr<std::string>("subnet_t"); + subnet_f = GetAttr<std::string>("subnet_f"); + + // Create two Nets + // I use the same style as Recurrent_op, but does it create the net? + // can be called like + Variable* net_t = scope.FindVar(subnet_t); + Variable* net_f = scope.FindVar(subnet_f); + + net_op_t = scope.FindVar(net_t)->GetMutable<NetOp>(); + net_op_f = scope.FindVar(net_f)->GetMutable<NetOp>(); + + // Create two scopes + scope_t = scope.NewScope(); + scope_f = scope.NewScope(); + + // check cond of size (batch_size), type bool + net_op_t->InferShape(scope_t); + net_op_f->InferShape(scope_f); + + // check net_op_t and net_op_f of exactly same shape? +} + +void IfElseOp::Run(const std::shared_ptr<Scope>& scope, + const platform::DeviceContext& dev_ctx) const { + /* step 1: create two subnets and scopes, supposed done in Infershape() */ + + /* step 2: get true and false index */ + cond = Input(name.cond); + // get condition tensor + auto cond_tensor = scope.get<Tensor>(cond); + // tensor to cpu, whatever device it used to be in + cond_cpu.CopyFrom(cond_tensor, platform::CPUPlace()); + + size_t batch_size = cond_cpu.dims()[0]; + + // keep index of true and false to slice, clear them first before each batch + true_index.clear(); + false_index.clear(); + + // get a DDim type variable dims, check dimension + auto dims = input0.dims(); + for(int i=0; i<dims; i++) { + if (cond_cpu->data[i]) + true_index.push_back(i); + else + false_index.push_back(i); + } + + // turn true_index and false_index to tensors + Tensor* true_index_tensor = new Tensor(true_index); + Tensor* false_index_tensor = new Tensor(false_index); + + /* Step 3: Gather */ + { // True Scope + // Create new stuff + for (auto& input : net_op_t->inputs_) { + scope_t.NewVar(input); + if (input.type() != PARAMETER) { // gather and slice required + // Get Tensor and gather + Tensor* input_gather_ = scope_t.FindVar(input)->GetMutable<Tensor>(); + Tensor* input_full_ = scope.FindVar(input)->GetMutable<Tensor>(); + input_gather_ = Gather(input_full_, true_index_tensor); + } + } + + for (auto& output : net_op->outputs_) { + scope_t.NewVar(output); + } + + net_op_t.Run(); + } + + { // False Scope + // Create new stuff + for (auto& input : net_op_f->inputs_) { + scope_f.NewVar(input); + if (input.type() != PARAMETER) { // gather and slice required + // Get Tensor and gather + Tensor* input_gather_ = scope_f.FindVar(input)->GetMutable<Tensor>(); + Tensor* input_full_ = scope.FindVar(input)->GetMutable<Tensor>(); + input_gather_ = Gather(input_full_, false_index_tensor); + } + } + + for (auto& output : net_op->outputs_) { + scope_t.NewVar(output); + } + + net_op_f.Run(); + } + + /* Merge Output Together by scatter update */ + for (auto& ouput : outputs_) { + Tensor* output_t = scope_t->FindVar(output)->GetMutable<Tensor>(); + Tensor* output_f = scope_f->FindVar(output)->GetMutable<Tensor>(); + Tensor* output_tensor = scope->FindVar(output)->GetMutable<Tensor>(); + Scatter(output_t, output_tensor, true_index_tensor); + Scatter(output_f, output_tensor, false_index_tensor); + } +} + +} // namespace operators +} // namespace paddle + +REGISTER_OP(ifelse_op, + paddle::operators::IfElseOp, + paddle::operators::RecurrentAlgorithmProtoAndCheckerMaker); From 95b41bec3ea3ff6d95463b2564ae981b9d688fca Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Tue, 29 Aug 2017 11:44:29 -0700 Subject: [PATCH 03/72] Add LoD Tensor design doc --- paddle/framework/lod_tensor.md | 122 +++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 paddle/framework/lod_tensor.md diff --git a/paddle/framework/lod_tensor.md b/paddle/framework/lod_tensor.md new file mode 100644 index 0000000000..a9a1a113d1 --- /dev/null +++ b/paddle/framework/lod_tensor.md @@ -0,0 +1,122 @@ +# LoD (Level-of-Detail) Tensor + +PaddlePaddle's RNN doesn't require that all instances have the same length. To do so, we introduce an extension to Tensor, namely, LoD Tensor. + +## Challenge of Variable-length Inputs + +People usually represent a mini-batch by a Tensor. For example, a mini-batch of 32 images, each of size 32x32, is a 10x32x32 Tensor. So a transformation, T, of all images can be a matrix multiplication of the 32x32xO-dimensional tensor T and the 10x32x32 Tensor. + +Another example is that each mini-batch contains 32 sentences, where each word is a D-dimensional one-hot vector. If all sentences have the same length L, we can represent this mini-batch by a 32xLxD tensor. However, in most cases, sentences have variable lengths, and we will need an index data structure to record these variable lengths. + +## LoD as a Solution + +### Mini-Batch of variable-length sentenses + +Let's imagine a mini-batch of 3 variable lengths sentences, containing 3, 1, and 2 words respectively. We can represent it by a (3+1+2)xD tensor plus some index information: + +``` + 3 +3 1 2 +||| | || +``` + +Each `|` represents a D-dimensional word vectors. The number 3 on top indicate 3 sentences, and numbers 3, 1, and 2 on the second level represent the number of words in each sentence. + +### Mini-Batch of variable-length videos + +This approach generalizes to the case where elements are not words, but higher dimensional objects, like images. Suppose that a mini-batch contains videos of the same frame size 640x480. If a mini-batch contains 3 videos of 3, 1, and 2 frames respectively. The underlying tensor is of size (3+1+2)x640x480. The index information illustrates as: + +``` + 3 +3 1 2 +口口口 口 口口 +``` + +where each `口` represents an image. + +### Mini-Batch of fixed-size images + +Let's get back to a typical example, image classification, where each mini-batch has M fixed-sized images. The LoD Tensor representation is + +``` + M +1 1 1 1 1 +口口口口 ... 口 +``` + +The many 1's on the second level seem duplicated. For this particular case of 2 levels and the second level always have length 1, we can ignore the LoD index. + +### Design and summarization + +In summary, as long as that the essential elements (words or images) have the same size, we can represent mini-batches by a LoD Tensor: + +- The underlying tensor has size LxD1xD2x..., where D1xD2... is the size of the essential elements, and +- the first dimension size L has an additon property -- a LoD index as a nested vector: + + ```c++ + typedef std::vector<std::vector> > LoD; + ``` + +- The LoD index can is not necessary when there are only two levels and all elements of the second level have length 1. + +## Slicing of LoD Tensor + +Consider that we have a network with three levels of RNN: the top level one handles articles, the second level one handles sentences, and the basic level one handles words. This network requires that mini-batches represented by 4 level LoD Tensor, for example, + +``` + 3 +3 1 2 +3 2 4 1 2 3 +||| || |||| | || ||| +``` + +To allow each level of RNN to handle its input, we define **the slicing of a LoD Tensor is defined as getting the j-th sequence on level i, or the <i,j>-slice** + +For example, the <2,1>-slice of above slice is + +``` +2 +|| +``` + +and the <1,2>-slice of above example is + +``` +2 +2 3 +|| ||| +``` + +Let's go on slicing this slice. Its <1,1>-slice is + +``` +3 +||| +``` + +### The General Slicing Algorithm + +The algorithm, with over-simplified data structure, is defined as + +```c++ +typedef vector<vector<int> > LoD; + +struct LoDTensor { + LoD lod_; + float* tensor_; +}; + +LoDTensor Slice(const LoDTensor& lodt, int level, int sequence) { + +} +``` + +### Slicing the Top Level + +Please be aware that an RNN operator only slices the top level of a LoD Tensor to get the step inputs. + +```c++ +LoDTensor Slice(const LoDTensor& lodt, int sequence) { + +} +``` From f6457e650192bfb1f5ac886585c17d2557f7f604 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Tue, 29 Aug 2017 11:44:41 -0700 Subject: [PATCH 04/72] Add LoD Tensor design doc --- paddle/framework/lod_tensor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/framework/lod_tensor.md b/paddle/framework/lod_tensor.md index a9a1a113d1..8dfe3ee823 100644 --- a/paddle/framework/lod_tensor.md +++ b/paddle/framework/lod_tensor.md @@ -1,4 +1,4 @@ -# LoD (Level-of-Detail) Tensor +# Design Doc: LoD (Level-of-Detail) Tensor PaddlePaddle's RNN doesn't require that all instances have the same length. To do so, we introduce an extension to Tensor, namely, LoD Tensor. From ca9be82f6c45691b6661a4be54a05a369f579295 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 30 Aug 2017 13:05:33 +0800 Subject: [PATCH 05/72] add how to use eigen cn doc --- doc/howto/dev/new_op_cn.md | 7 +- doc/howto/dev/use_eigen_cn.md | 140 ++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 doc/howto/dev/use_eigen_cn.md diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index ebd2cf3ff0..55c99fa7af 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -169,6 +169,8 @@ class MulKernel : public framework::OpKernel { `MulKernel`需要重写`Compute`接口,该接口参数为`const framework::ExecutionContext& context`, `ExecutionContext`相比`InferShapeContext`增加了设备类型,同样可获取到输入输出和属性参数,`Compute`函数里写具体实现时。 注意,不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。`MulOp`的CPU、GPU实现共享同一个`Kernel`,`OpKernel`不共享的例子可以参考[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 + +为了使得`OpKernel`的计算过程书写较为简单,CPU、GPU的代码可以复用,我们通常借助Eigen unsupported Tensor模块来实现。关于在paddle中如何使用Eigen库,请参考对应的使用[文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md) 到此前向Op实现完成,需要在`.cc`文件中注册该op和kernel。反向Op类的定义和Kernel定义与前向Op类似,这里不再重复。但注意,反向Op没有`ProtoMaker`。 @@ -188,9 +190,12 @@ REGISTER_OP_CPU_KERNEL(mul_grad, - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 -在 `.cu`文件中注册GPU Kernel。 +在 `.cu`文件中注册GPU Kernel。请注意,如果GPU Kernel的实现是基于Eigen unsupported模块,那么在 `.cu`的最前面请加上宏定义 `#define EIGEN_USE_GPU` ```c++ +// if use Eigen unsupported module before include head files +#define EIGEN_USE_GPU + namespace ops = paddle::operators; REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel<paddle::platform::GPUPlace, float>); REGISTER_OP_GPU_KERNEL(mul_grad, diff --git a/doc/howto/dev/use_eigen_cn.md b/doc/howto/dev/use_eigen_cn.md new file mode 100644 index 0000000000..d22ff4799c --- /dev/null +++ b/doc/howto/dev/use_eigen_cn.md @@ -0,0 +1,140 @@ +## 在Paddle中如何使用Eigen + +神经网络本质上是一个计算图,计算需要的数据存放在`Tensor`中,而计算过程是由`Operartor`来描述的。在执行时,`Operator`调用对应`OpKernel`中的`Compute`接口,实现对`Tensor`的操作。 + + +### Eigen Tensor模块 + +Eigen Tensor模块对element-wise计算提供了强大的支持,并且书写一份代码,可以同时在CPU、GPU执行。但Eigen Tensor是一个正在开发中的模块,因此可能测试不够完备,文档较少。 + +关于Eigen Tensor模块的详细介绍请参考[文档](https://github.com/RLovelett/eigen/blob/master/unsupported/Eigen/CXX11/src/Tensor/README.md) + + +### paddle::framework::Tensor + +Paddle Tensor定义在framework目录下,其主要接口如下: + +``` +class Tensor { + public: + /*! Return a pointer to mutable memory block. */ + template <typename T> + inline T* data(); + + /** + * @brief Return a pointer to mutable memory block. + * @note If not exist, then allocation. + */ + template <typename T> + inline T* mutable_data(platform::Place place); + + /** + * @brief Return a pointer to mutable memory block. + * + * @param[in] dims The dimensions of the memory block. + * @param[in] place The place of the memory block. + * + * @note If not exist, then allocation. + */ + template <typename T> + inline T* mutable_data(DDim dims, platform::Place place); + + /*! Resize the dimensions of the memory block. */ + inline Tensor& Resize(const DDim& dims); + + /*! Return the dimensions of the memory block. */ + inline const DDim& dims() const; + + private: + /*! holds the memory block if allocated. */ + std::shared_ptr<Placeholder> holder_; + + /*! points to dimensions of memory block. */ + DDim dim_; +}; +``` + +`Placeholder`的作用的延迟分配内存,即我们可以先定义一个Tensor,然后使用Resize接口设置Tensor的大小,最后再调用mutable_data接口分配实际的内存。 + +``` +paddle::framework::Tensor t; +paddle::platform::CPUPlace place; +// set size first +t.Resize({2, 3}); +// allocate memory on CPU later +t.mutable_data(place); +``` + +下面以AddOp为例说明Tensor的使用过程: + +- InferShape + +在运行神经网络计算图时,我们先调用每个`Operator`的`InferShape`接口,根据输入Tensor的大小来设置输出Tensor的大小,`Resize`接口会被调用。 + +``` +void InferShape(const framework::InferShapeContext &ctx) const override { + PADDLE_ENFORCE_EQ(ctx.Input<Tensor>("X")->dims(), + ctx.Input<Tensor>("Y")->dims(), + "Two input of Add Op's dimension must be same."); + ctx.Output<Tensor>("Out")->Resize(ctx.Input<Tensor>("X")->dims()); +} +``` + + +- Run + +`Operator`的`Run`接口最终会调用对应`OpKernel`的`Compute`接口,在这时真正的分配内存,`mutable_data`接口会被调用。 + +``` +void Compute(const framework::ExecutionContext& context) const override { + auto* input0 = context.Input<Tensor>("X"); + auto* input1 = context.Input<Tensor>("Y"); + auto* output = context.Output<Tensor>("Out"); + + output->mutable_data<T>(context.GetPlace()); + + auto X = EigenVector<T>::Flatten(*input0); + auto Y = EigenVector<T>::Flatten(*input1); + auto Z = EigenVector<T>::Flatten(*output); + + auto place = context.GetEigenDevice<Place>(); + + Z.device(place) = X + Y; +} +``` + + +### paddle::framework::Tensor到EigenTensor的转换 + +如上一小节所示,在具体的计算中,我们需要先把输入Tensor和输出Tensor转换为Eigen支持的格式。我们在[eigen.h](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/eigen.h)中提供了一些全局函数用来实现paddle::framework::Tensor到EigenTensor/EigenMatrix/EigenVector/EigenScalar的转换。 + +以EigenTensor为例,做一个介绍 + +``` +Tensor t; +float* p = t.mutable_data<float>(make_ddim({1, 2, 3}), platform::CPUPlace()); +for (int i = 0; i < 1 * 2 * 3; i++) { + p[i] = static_cast<float>(i); +} + +EigenTensor<float, 3>::Type et = EigenTensor<float, 3>::From(t); +``` + +From是EigenTensor模板struct提供的一个接口,可以实现从paddle::framework::Tensor到对EigenTensor的转换。由于Tensor的rank是模板参数,因此在转换时需要显示的指定。 + +需要额外注意的是,EigenVector<T>::From方法是把paddle中的一维Tensor转为Eigen的一维Tensor,在这里用EigenVector来表示;而EigenVector<T>::Flatten方法是把paddle中的一个Tensor进行reshape操作,压扁成为Eigen的一维Tensor,类型仍然为EigenVector。 + +更多的转换方法请参考eigen_test.cc中的[单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/eigen_test.cc)。 + + + +### 实现计算 + +当需要完成计算时,我们需要等式左边的EigenTensor调用device接口: + +``` +auto place = context.GetEigenDevice<Place>(); +Z.device(place) = X + Y; +``` + +由于Eigen Tensor模块的文档较少,我们可以参考TensorFlow的[kernels](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels)模块下的相关`OpKernel`的计算代码。 From 1dfc5d87ff4b4f40272e387d598a1bec5477d127 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 30 Aug 2017 17:06:16 +0800 Subject: [PATCH 06/72] add more details --- doc/howto/dev/use_eigen_cn.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/howto/dev/use_eigen_cn.md b/doc/howto/dev/use_eigen_cn.md index d22ff4799c..49a726959a 100644 --- a/doc/howto/dev/use_eigen_cn.md +++ b/doc/howto/dev/use_eigen_cn.md @@ -120,7 +120,7 @@ for (int i = 0; i < 1 * 2 * 3; i++) { EigenTensor<float, 3>::Type et = EigenTensor<float, 3>::From(t); ``` -From是EigenTensor模板struct提供的一个接口,可以实现从paddle::framework::Tensor到对EigenTensor的转换。由于Tensor的rank是模板参数,因此在转换时需要显示的指定。 +From是EigenTensor模板提供的一个接口,可以实现从paddle::framework::Tensor到对EigenTensor的转换。由于Tensor的rank是模板参数,因此在转换时需要显示的指定。 需要额外注意的是,EigenVector<T>::From方法是把paddle中的一维Tensor转为Eigen的一维Tensor,在这里用EigenVector来表示;而EigenVector<T>::Flatten方法是把paddle中的一个Tensor进行reshape操作,压扁成为Eigen的一维Tensor,类型仍然为EigenVector。 @@ -130,11 +130,16 @@ From是EigenTensor模板struct提供的一个接口,可以实现从paddle::fra ### 实现计算 -当需要完成计算时,我们需要等式左边的EigenTensor调用device接口: +当需要完成计算时,我们需要等式左边的EigenTensor调用device接口。在这里需要注意的是,这里的EigenTensor之间的运算只是改变了原有Tensor中的数据,而不会改变原有Tensor的shape信息。 ``` +auto X = EigenVector<T>::Flatten(*input0); +auto Y = EigenVector<T>::Flatten(*input1); +auto Z = EigenVector<T>::Flatten(*output); auto place = context.GetEigenDevice<Place>(); Z.device(place) = X + Y; ``` +在这段代码中,input0/input1/output可以是任意维度的Tensor。我们调用了EigenVector的Flatten接口,把任意维度的Tensor转为了一维的EigenVector。而在计算结束之后,input0/input1/output的原有shape信息不变。如果想改变原有Tensor的shape信息,可以调用Resize接口进行改变。 + 由于Eigen Tensor模块的文档较少,我们可以参考TensorFlow的[kernels](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/kernels)模块下的相关`OpKernel`的计算代码。 From c20a01d67d928442a0b8fb187277906ddd54ea04 Mon Sep 17 00:00:00 2001 From: dangqingqing <dangqingqing@baidu.com> Date: Thu, 31 Aug 2017 11:26:59 +0800 Subject: [PATCH 07/72] Add cuDNN Wrapper. --- paddle/platform/CMakeLists.txt | 1 + paddle/platform/cudnn_helper.cc | 15 +++ paddle/platform/cudnn_helper.h | 215 ++++++++++++++++++++++++++++++++ paddle/platform/macros.h | 23 ++++ 4 files changed, 254 insertions(+) create mode 100644 paddle/platform/cudnn_helper.cc create mode 100644 paddle/platform/cudnn_helper.h create mode 100644 paddle/platform/macros.h diff --git a/paddle/platform/CMakeLists.txt b/paddle/platform/CMakeLists.txt index 120eb1e4af..ef722e984c 100644 --- a/paddle/platform/CMakeLists.txt +++ b/paddle/platform/CMakeLists.txt @@ -22,3 +22,4 @@ ENDIF() cc_library(device_context SRCS device_context.cc DEPS memory buddy_allocator system_allocator memory_block meta_data meta_cache place eigen3 ${GPU_CTX_DEPS}) nv_test(device_context_test SRCS device_context_test.cc DEPS device_context gpu_info) +nv_test(cudnn_helper SRCS cudnn_helper.cc) diff --git a/paddle/platform/cudnn_helper.cc b/paddle/platform/cudnn_helper.cc new file mode 100644 index 0000000000..764285e2ba --- /dev/null +++ b/paddle/platform/cudnn_helper.cc @@ -0,0 +1,15 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "paddle/platform/cudnn_helper.h" diff --git a/paddle/platform/cudnn_helper.h b/paddle/platform/cudnn_helper.h new file mode 100644 index 0000000000..91047236a2 --- /dev/null +++ b/paddle/platform/cudnn_helper.h @@ -0,0 +1,215 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once + +#include <cudnn.h> +#include "paddle/platform/dynload/cudnn.h" +#include "paddle/platform/enforce.h" +#include "paddle/platform/macros.h" + +namespace paddle { +namespace platform { + +enum class DataLayout { + kNHWC, + kNCHW, + kNCHW_VECT_C, +}; + +enum class PoolingMode { + kMaximum, + kAverage, +}; + +template <typename T> +class CudnnDataType; + +template <> +class CudnnDataType<float> { + public: + static const cudnnDataType_t type = CUDNN_DATA_FLOAT; + typedef const float ScalingParamType; + static ScalingParamType* kOne() { + static ScalingParamType v = 1.0; + return &v; + } + static const ScalingParamType* kZero() { + static ScalingParamType v = 0.0; + return &v; + } +}; + +template <> +class CudnnDataType<double> { + public: + static const cudnnDataType_t type = CUDNN_DATA_DOUBLE; + typedef const double ScalingParamType; + static ScalingParamType* kOne() { + static ScalingParamType v = 1.0; + return &v; + } + static ScalingParamType* kZero() { + static ScalingParamType v = 0.0; + return &v; + } +}; + +inline cudnnTensorFormat_t GetCudnnTensorFormat(const DataLayout& order) { + switch (order) { + case DataLayout::kNHWC: + return CUDNN_TENSOR_NHWC; + case DataLayout::kNCHW: + return CUDNN_TENSOR_NCHW; + default: + PADDLE_THROW("Unknown cudnn equivalent for order"); + } + return CUDNN_TENSOR_NCHW; +} + +class ScopedTensorDescriptor { + public: + ScopedTensorDescriptor() { + PADDLE_ENFORCE(dynload::cudnnCreateTensorDescriptor(&desc_)); + } + ~ScopedTensorDescriptor() { + PADDLE_ENFORCE(dynload::cudnnDestroyTensorDescriptor(desc_)); + } + + inline cudnnTensorDescriptor_t descriptor(const cudnnTensorFormat_t format, + const cudnnDataType_t type, + const std::vector<int>& dims) { + // the format is not used now, but it maybe useful feature + std::vector<int> strides(dims.size()); + strides[dims.size() - 1] = 1; + for (int i = dims.size() - 1; i >= 0; i++) { + strides[i] = dims[i + 1] * strides[i]; + } + PADDLE_ENFORCE(cudnnSetTensorNdDescriptor(desc_, type, dims.size(), + dims.data(), strides.data())); + return desc_; + } + + template <typename T> + inline cudnnTensorDescriptor_t descriptor(const DataLayout& order, + const std::vector<int>& dims) { + return descriptor(GetCudnnTensorFormat(order), CudnnDataType<T>::type, + dims); + } + + private: + cudnnTensorDescriptor_t desc_; + DISABLE_COPY_AND_ASSIGN(ScopedTensorDescriptor); +}; + +class ScopedFilterDescriptor { + public: + ScopedFilterDescriptor() { + PADDLE_ENFORCE(dynload::cudnnCreateFilterDescriptor(&desc_)); + } + ~ScopedFilterDescriptor() { + PADDLE_ENFORCE(dynload::cudnnDestroyFilterDescriptor(desc_)); + } + + inline cudnnFilterDescriptor_t descriptor(const cudnnTensorFormat_t format, + const cudnnDataType_t type, + const std::vector<int>& kernel) { + // filter layout: output input spatial_dim_y spatial_dim_x + PADDLE_ENFORCE(cudnnSetFilterNdDescriptor(desc_, type, format, + kernel.size(), kernel.data())); + return desc_; + } + + template <typename T> + inline cudnnFilterDescriptor_t descriptor(const DataLayout& order, + const std::vector<int>& kernel) { + return descriptor(GetCudnnTensorFormat(order), CudnnDataType<T>::type, + kernel); + } + + private: + cudnnFilterDescriptor_t desc_; + DISABLE_COPY_AND_ASSIGN(ScopedFilterDescriptor); +}; + +class ScopedConvolutionDescriptor { + public: + ScopedConvolutionDescriptor() { + PADDLE_ENFORCE(dynload::cudnnCreateConvolutionDescriptor(&desc_)); + } + ~ScopedConvolutionDescriptor() { + PADDLE_ENFORCE(dynload::cudnnDestroyConvolutionDescriptor(desc_)); + } + + inline cudnnConvolutionDescriptor_t descriptor( + cudnnDataType_t type, const std::vector<int>& pads, + const std::vector<int>& strides, const std::vector<int>& dilations) { + PADDLE_ENFORCE_EQ(pads.size(), strides.size()); + PADDLE_ENFORCE_EQ(pads.size(), dilations.size()); + PADDLE_ENFORCE(cudnnSetConvolutionNdDescriptor( + desc_, pads.size(), pads.data(), strides.data(), dilations.data(), + CUDNN_CROSS_CORRELATION, type)); + } + + template <typename T> + inline cudnnConvolutionDescriptor_t descriptor( + const std::vector<int>& pads, const std::vector<int>& strides, + const std::vector<int>& dilations) { + return descriptor(CudnnDataType<T>::type, pads, strides, dilations); + } + + private: + cudnnConvolutionDescriptor_t desc_; + DISABLE_COPY_AND_ASSIGN(ScopedConvolutionDescriptor); +}; + +class ScopedPoolingDescriptor { + public: + ScopedPoolingDescriptor() { + PADDLE_ENFORCE(dynload::cudnnCreatePoolingDescriptor(&desc_)); + } + ~ScopedPoolingDescriptor() { + PADDLE_ENFORCE(dynload::cudnnDestroyPoolingDescriptor(desc_)); + } + + inline cudnnPoolingDescriptor_t descriptor(const PoolingMode& mode, + cudnnDataType_t type, + const std::vector<int>& kernel, + const std::vector<int>& pads, + const std::vector<int>& strides) { + PADDLE_ENFORCE_EQ(kernel.size(), pads.size()); + PADDLE_ENFORCE_EQ(kernel.size(), strides.size()); + PADDLE_ENFORCE(cudnnSetPoolingNdDescriptor( + desc_, (mode == PoolingMode::kMaximum + ? CUDNN_POOLING_MAX + : CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING), + CUDNN_PROPAGATE_NAN, // Always propagate nans. + kernel.size(), kernel.data(), pads.data(), strides.data())); + } + + template <typename T> + inline cudnnPoolingDescriptor_t descriptor(const PoolingMode& mode, + const std::vector<int>& kernel, + const std::vector<int>& pads, + const std::vector<int>& strides) { + return descriptor(mode, CudnnDataType<T>::type, kernel, pads, strides); + } + + private: + cudnnPoolingDescriptor_t desc_; + DISABLE_COPY_AND_ASSIGN(ScopedPoolingDescriptor); +}; + +} // namespace platform +} // namespace paddle diff --git a/paddle/platform/macros.h b/paddle/platform/macros.h new file mode 100644 index 0000000000..4a04a38c0c --- /dev/null +++ b/paddle/platform/macros.h @@ -0,0 +1,23 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once + +// Disable the copy and assignment operator for a class. +#ifndef DISABLE_COPY_AND_ASSIGN +#define DISABLE_COPY_AND_ASSIGN(classname) \ + private: \ + classname(const classname&) = delete; \ + classname& operator=(const classname&) = delete +#endif From f03811b06fc099486824cc8baaee3bacbc687523 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Thu, 31 Aug 2017 16:33:56 +0800 Subject: [PATCH 08/72] init refine LODTensor --- paddle/framework/lod_tensor.cc | 41 +++++++---- paddle/framework/lod_tensor.h | 104 ++++++++-------------------- paddle/framework/lod_tensor_test.cc | 84 ++++++++++++---------- 3 files changed, 102 insertions(+), 127 deletions(-) diff --git a/paddle/framework/lod_tensor.cc b/paddle/framework/lod_tensor.cc index 2b17890774..71eac4a10b 100644 --- a/paddle/framework/lod_tensor.cc +++ b/paddle/framework/lod_tensor.cc @@ -19,25 +19,24 @@ namespace paddle { namespace framework { -LODTensor::LOD LODTensor::LOD::SliceLevels(size_t level_begin, - size_t level_end) const { +LOD SliceLevels(const LOD& in, size_t level_begin, size_t level_end) { LOD new_lod; new_lod.reserve(level_end - level_begin); for (size_t i = level_begin; i < level_end; i++) { - new_lod.emplace_back(at(i)); + new_lod.emplace_back(in.at(i)); } return new_lod; } -LODTensor::LOD LODTensor::LOD::SliceInLevel(size_t level, size_t elem_begin, - size_t elem_end) const { +LOD SliceInLevel(const LOD& in, size_t level, size_t elem_begin, + size_t elem_end) { // slice the lod. LOD new_lod; - new_lod.reserve(size() - level); - auto start = this->at(level)[elem_begin]; - auto end = this->at(level)[elem_end]; + new_lod.reserve(in.size() - level); + auto start = in.at(level)[elem_begin]; + auto end = in.at(level)[elem_end]; - for (auto it = this->begin() + level; it != this->end(); it++) { + for (auto it = in.begin() + level; it != in.end(); it++) { auto it_begin = std::find(it->begin(), it->end(), start); auto it_end = std::find(it_begin, it->end(), end); PADDLE_ENFORCE(it_begin != it->end(), "error in parsing lod info"); @@ -49,11 +48,11 @@ LODTensor::LOD LODTensor::LOD::SliceInLevel(size_t level, size_t elem_begin, [start](int v) { return v - start; }); PADDLE_ENFORCE_EQ(new_lod.back().front(), 0, "error in slice LOD"); } - PADDLE_ENFORCE_LE(new_lod.size(), this->size()); + PADDLE_ENFORCE_LE(new_lod.size(), in.size()); return new_lod; } -bool operator==(const LODTensor::LOD& a, const LODTensor::LOD& b) { +bool operator==(const LOD& a, const LOD& b) { if (a.size() != b.size()) { return false; } @@ -70,9 +69,27 @@ bool operator==(const LODTensor::LOD& a, const LODTensor::LOD& b) { } } } - return true; } +void LODTensor::SliceLevels(size_t level_begin, size_t level_end) { + auto new_lod = framework::SliceLevels(lod_, level_begin, level_end); + lod_ = new_lod; +} + +void LODTensor::SliceInLevel(size_t level, size_t elem_begin, size_t elem_end) { + PADDLE_ENFORCE(level < NumLevels(), "level [%d] out of range [%d]", level, + NumLevels()); + PADDLE_ENFORCE(elem_begin < NumElements(level), + "element begin [%d] out of range [%d]", elem_begin, + NumElements(level)); + PADDLE_ENFORCE(elem_end < NumElements(level) + 1, + "element end [%d] out of range [%d]", elem_end, + NumElements(level)); + + auto new_lod = framework::SliceInLevel(lod_, level, elem_begin, elem_end); + lod_ = new_lod; +} + } // namespace framework } // namespace paddle diff --git a/paddle/framework/lod_tensor.h b/paddle/framework/lod_tensor.h index 9e27aec38d..7a9aebf50a 100644 --- a/paddle/framework/lod_tensor.h +++ b/paddle/framework/lod_tensor.h @@ -15,7 +15,7 @@ #pragma once #include <memory> -#if !defined(PADDLE_ONLY_CPU) +#ifndef PADDLE_ONLY_CPU #include <thrust/device_vector.h> #include <thrust/host_vector.h> #endif @@ -27,33 +27,31 @@ namespace paddle { namespace framework { +#ifdef PADDLE_ONLY_CPU +template <typename T> +using Vector = std::vector<T>; +#else +template <typename T> +using Vector = thrust::host_vector<T>; +#endif + +using LOD = std::vector<Vector<size_t>>; + +LOD SliceLevels(const LOD& in, size_t level_begin, size_t level_end); + +LOD SliceInLevel(const LOD& in, size_t level, size_t elem_begin, + size_t elem_end); + +bool operator==(const LOD& a, const LOD& b); + /* * LODTensor (Level of details Tensor) * see https://en.wikipedia.org/wiki/Level_of_details for reference. */ -class LODTensor : public Tensor { +struct LODTensor { public: -// Level save offsets of each unit. -#ifdef PADDLE_ONLY_CPU - template <typename T> - using Vector = std::vector<T>; -#else - template <typename T> - using Vector = thrust::host_vector<T>; -#endif - // LoD stores offsets of each level of units, the largest units level first, - // then the smaller units level. Each Level stores the offsets of units in - // Tesor. - class LOD : public std::vector<Vector<size_t>> { - public: - LOD SliceLevels(size_t level_begin, size_t level_end) const; - LOD SliceInLevel(size_t level, size_t elem_begin, size_t elem_end) const; - }; - LODTensor() {} - explicit LODTensor(const LOD &lod) : lod_(lod) {} - - virtual Tensor *Clone() const { return new LODTensor(lod_); } + LODTensor(const LOD& lod, Tensor* t) : lod_(lod), tensor_(t) {} /* * Get a element from LOD. @@ -79,71 +77,23 @@ class LODTensor : public Tensor { PADDLE_ENFORCE(level < NumLevels(), "level [%d] out of range [%d]", level, NumLevels()); // the last offset is the end of last element - return lod_[level].size() - 1; + return (lod_)[level].size() - 1; } /* - * Slice of levels[level_begin:level_end], with tensor shared. + * Slice of levels[level_begin:level_end] */ - template <typename T> - LODTensor SliceLevels(size_t level_begin, size_t level_end) const; + void SliceLevels(size_t level_begin, size_t level_end); /* - * Slice of elements of a level, [elem_begin: elem_end], with tensor shared. + * Slice of elements of a level, [elem_begin: elem_end] * @note: low performance in slice lod_. */ - template <typename T> - LODTensor SliceInLevel(size_t level, size_t elem_begin, - size_t elem_end) const; - - /* - * Copy other's lod_'s content, free to mutate. - */ - void CopyLOD(const LODTensor &other) { lod_ = other.lod_; } - /* - * Determine whether LODTensor has a valid LOD info. - */ - const LOD &lod() const { return lod_; } - LOD *mutable_lod() { return &lod_; } - - virtual ~LODTensor() {} + void SliceInLevel(size_t level, size_t elem_begin, size_t elem_end); - private: + public: LOD lod_; + Tensor* tensor_; // not owned }; - -bool operator==(const LODTensor::LOD &a, const LODTensor::LOD &b); - -template <typename T> -LODTensor LODTensor::SliceLevels(size_t level_begin, size_t level_end) const { - auto new_lod = lod_.SliceLevels(level_begin, level_end); - // slice levels just need to update LOD info, each level will contains the - // whole tensor_, so no need to modify tensor_. - LODTensor new_tensor(new_lod); - new_tensor.ShareDataWith<T>(*this); - return new_tensor; -} - -template <typename T> -LODTensor LODTensor::SliceInLevel(size_t level, size_t elem_begin, - size_t elem_end) const { - PADDLE_ENFORCE(level < NumLevels(), "level [%d] out of range [%d]", level, - NumLevels()); - PADDLE_ENFORCE(elem_begin < NumElements(level), - "element begin [%d] out of range [%d]", elem_begin, - NumElements(level)); - PADDLE_ENFORCE(elem_end < NumElements(level) + 1, - "element end [%d] out of range [%d]", elem_end, - NumElements(level)); - - auto new_lod = lod_.SliceInLevel(level, elem_begin, elem_end); - - // slice elements just need to update LOD info, because offsets are not - // changed, so the original tensor_ can be reused. - LODTensor new_tensor(new_lod); - new_tensor.ShareDataWith<T>(*this); - return new_tensor; -} - } // namespace framework } // namespace paddle diff --git a/paddle/framework/lod_tensor_test.cc b/paddle/framework/lod_tensor_test.cc index 2881136ced..b75d86b5b4 100644 --- a/paddle/framework/lod_tensor_test.cc +++ b/paddle/framework/lod_tensor_test.cc @@ -21,16 +21,34 @@ namespace paddle { namespace framework { +// TEST(LODTensor, test) { +// LOD lod; +// lod.push_back(std::vector<size_t>{0, 10, 20}); +// lod.push_back(std::vector<size_t>{0, 5, 10, 15, 20}); +// lod.push_back(std::vector<size_t>{0, 2, 5, 7, 10, 12, 15, 17, 20}); + +// ASSERT_EQ(lod.size(), 3UL); + +// Tensor tensor; +// tensor.Resize({20 /*batch size*/, 128 /*dim*/}); +// // malloc memory +// platform::CPUPlace place; +// tensor.mutable_data<float>(place); + +// LODTensor lod_tensor(lod, &tensor); + +// ASSERT_EQ(lod_tensor.NumLevels(), 3UL); +// } + class LODTensorTester : public ::testing::Test { public: virtual void SetUp() override { - lod_tensor.reset(new LODTensor); // tensor's batch_size: 30 // 3 levels // 0 10 20 // 0 5 10 15 20 // 0 2 5 7 10 12 15 20 - LODTensor::LOD lod; + LOD lod; lod.push_back(std::vector<size_t>{0, 10, 20}); lod.push_back(std::vector<size_t>{0, 5, 10, 15, 20}); lod.push_back(std::vector<size_t>{0, 2, 5, 7, 10, 12, 15, 17, 20}); @@ -41,75 +59,65 @@ class LODTensorTester : public ::testing::Test { // malloc memory tensor.mutable_data<float>(place); - lod_tensor.reset(new LODTensor(lod)); - lod_tensor->Resize({20 /*batch size*/, 128 /*dim*/}); - - lod_tensor->ShareDataWith<float>(tensor); - // lod_tensor->ShareDataWith<Tensor>(tensor); + lod_tensor.lod_ = lod; + lod_tensor.tensor_ = &tensor; } protected: - std::unique_ptr<LODTensor> lod_tensor; platform::CPUPlace place; Tensor tensor; + LODTensor lod_tensor; }; -TEST_F(LODTensorTester, NumLevels) { ASSERT_EQ(lod_tensor->NumLevels(), 3UL); } +TEST_F(LODTensorTester, NumLevels) { ASSERT_EQ(lod_tensor.NumLevels(), 3UL); } TEST_F(LODTensorTester, NumElements) { - ASSERT_EQ(lod_tensor->NumElements(0), 2UL); - ASSERT_EQ(lod_tensor->NumElements(1), 4UL); - ASSERT_EQ(lod_tensor->NumElements(2), 8UL); + ASSERT_EQ(lod_tensor.NumElements(0), 2UL); + ASSERT_EQ(lod_tensor.NumElements(1), 4UL); + ASSERT_EQ(lod_tensor.NumElements(2), 8UL); } TEST_F(LODTensorTester, SliceLevels) { // slice 1 level for (size_t level = 0; level < 3UL; ++level) { - auto new_lod_tensor = lod_tensor->SliceLevels<float>(level, level + 1); + LODTensor new_lod_tensor = lod_tensor; + new_lod_tensor.SliceLevels(level, level + 1); ASSERT_EQ(new_lod_tensor.NumLevels(), 1UL); - ASSERT_EQ(new_lod_tensor.NumElements(0UL), lod_tensor->NumElements(level)); - // ASSERT_EQ(new_lod_tensor, *lod_tensor); + ASSERT_EQ(new_lod_tensor.NumElements(0), lod_tensor.NumElements(level)); + ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), + lod_tensor.tensor_->data<float>()); } // slice 2 level for (size_t level = 0; level < 2UL; ++level) { - auto new_lod_tensor = lod_tensor->SliceLevels<float>(level, level + 2); + LODTensor new_lod_tensor = lod_tensor; + new_lod_tensor.SliceLevels(level, level + 2); ASSERT_EQ(new_lod_tensor.NumLevels(), 2UL); - ASSERT_EQ(new_lod_tensor.NumElements(0), lod_tensor->NumElements(level)); - ASSERT_EQ(new_lod_tensor.NumElements(1), - lod_tensor->NumElements(level + 1)); - ASSERT_EQ(new_lod_tensor.data<float>(), lod_tensor->data<float>()); + ASSERT_EQ(new_lod_tensor.NumElements(0), lod_tensor.NumElements(level)); + ASSERT_EQ(new_lod_tensor.NumElements(1), lod_tensor.NumElements(level + 1)); + ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), + lod_tensor.tensor_->data<float>()); } } TEST_F(LODTensorTester, SliceInLevel) { size_t level = 0; - auto new_lod_tensor = lod_tensor->SliceInLevel<float>(level, 0, 2); + LODTensor new_lod_tensor = lod_tensor; + new_lod_tensor.SliceInLevel(level, 0, 2); EXPECT_EQ(new_lod_tensor.NumLevels(), 3UL); EXPECT_EQ(new_lod_tensor.NumElements(0), 2UL); EXPECT_EQ(new_lod_tensor.NumElements(1), 4UL); EXPECT_EQ(new_lod_tensor.NumElements(2), 8UL); - ASSERT_EQ(new_lod_tensor.data<float>(), lod_tensor->data<float>()); + ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), + lod_tensor.tensor_->data<float>()); level = 1; - new_lod_tensor = lod_tensor->SliceInLevel<float>(level, 0, 2); + new_lod_tensor = lod_tensor; + new_lod_tensor.SliceInLevel(level, 0, 2); ASSERT_EQ(new_lod_tensor.NumLevels(), 2UL); ASSERT_EQ(new_lod_tensor.NumElements(0), 2UL); ASSERT_EQ(new_lod_tensor.NumElements(1), 4UL); - ASSERT_EQ(new_lod_tensor.data<float>(), lod_tensor->data<float>()); -} - -TEST_F(LODTensorTester, ShareLOD) { - LODTensor new_lod_tensor; - new_lod_tensor.CopyLOD(*lod_tensor); - ASSERT_EQ(new_lod_tensor.lod(), lod_tensor->lod()); -} - -TEST_F(LODTensorTester, CopyLOD) { - LODTensor new_lod_tensor; - new_lod_tensor.CopyLOD(*lod_tensor); - bool equals = std::equal(lod_tensor->lod().begin(), lod_tensor->lod().end(), - new_lod_tensor.lod().begin()); - ASSERT_TRUE(equals); + ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), + lod_tensor.tensor_->data<float>()); } } // namespace framework From 039784426641162686cfaae556a5f325dcf6fda4 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Thu, 31 Aug 2017 16:34:50 +0800 Subject: [PATCH 09/72] remove unused codes --- paddle/framework/lod_tensor_test.cc | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/paddle/framework/lod_tensor_test.cc b/paddle/framework/lod_tensor_test.cc index b75d86b5b4..30c8925ad0 100644 --- a/paddle/framework/lod_tensor_test.cc +++ b/paddle/framework/lod_tensor_test.cc @@ -21,25 +21,6 @@ namespace paddle { namespace framework { -// TEST(LODTensor, test) { -// LOD lod; -// lod.push_back(std::vector<size_t>{0, 10, 20}); -// lod.push_back(std::vector<size_t>{0, 5, 10, 15, 20}); -// lod.push_back(std::vector<size_t>{0, 2, 5, 7, 10, 12, 15, 17, 20}); - -// ASSERT_EQ(lod.size(), 3UL); - -// Tensor tensor; -// tensor.Resize({20 /*batch size*/, 128 /*dim*/}); -// // malloc memory -// platform::CPUPlace place; -// tensor.mutable_data<float>(place); - -// LODTensor lod_tensor(lod, &tensor); - -// ASSERT_EQ(lod_tensor.NumLevels(), 3UL); -// } - class LODTensorTester : public ::testing::Test { public: virtual void SetUp() override { From 835572afe70e3c0a0f11ff2f40a53b899b7adda6 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Thu, 31 Aug 2017 16:51:02 +0800 Subject: [PATCH 10/72] make LODTensor class instead struct --- paddle/framework/lod_tensor.h | 12 ++++++++++-- paddle/framework/lod_tensor_test.cc | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/paddle/framework/lod_tensor.h b/paddle/framework/lod_tensor.h index 7a9aebf50a..9e6b6b4aca 100644 --- a/paddle/framework/lod_tensor.h +++ b/paddle/framework/lod_tensor.h @@ -48,11 +48,19 @@ bool operator==(const LOD& a, const LOD& b); * LODTensor (Level of details Tensor) * see https://en.wikipedia.org/wiki/Level_of_details for reference. */ -struct LODTensor { +class LODTensor { public: LODTensor() {} LODTensor(const LOD& lod, Tensor* t) : lod_(lod), tensor_(t) {} + void set_lod(const LOD& lod) { lod_ = lod; } + + void set_tensor(Tensor* tensor) { tensor_ = tensor; } + + Tensor& tensor() { return *tensor_; } + + LOD lod() { return lod_; } + /* * Get a element from LOD. */ @@ -91,7 +99,7 @@ struct LODTensor { */ void SliceInLevel(size_t level, size_t elem_begin, size_t elem_end); - public: + private: LOD lod_; Tensor* tensor_; // not owned }; diff --git a/paddle/framework/lod_tensor_test.cc b/paddle/framework/lod_tensor_test.cc index 30c8925ad0..9a351605ed 100644 --- a/paddle/framework/lod_tensor_test.cc +++ b/paddle/framework/lod_tensor_test.cc @@ -40,8 +40,8 @@ class LODTensorTester : public ::testing::Test { // malloc memory tensor.mutable_data<float>(place); - lod_tensor.lod_ = lod; - lod_tensor.tensor_ = &tensor; + lod_tensor.set_lod(lod); + lod_tensor.set_tensor(&tensor); } protected: @@ -65,8 +65,8 @@ TEST_F(LODTensorTester, SliceLevels) { new_lod_tensor.SliceLevels(level, level + 1); ASSERT_EQ(new_lod_tensor.NumLevels(), 1UL); ASSERT_EQ(new_lod_tensor.NumElements(0), lod_tensor.NumElements(level)); - ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), - lod_tensor.tensor_->data<float>()); + ASSERT_EQ(new_lod_tensor.tensor().data<float>(), + lod_tensor.tensor().data<float>()); } // slice 2 level for (size_t level = 0; level < 2UL; ++level) { @@ -75,8 +75,8 @@ TEST_F(LODTensorTester, SliceLevels) { ASSERT_EQ(new_lod_tensor.NumLevels(), 2UL); ASSERT_EQ(new_lod_tensor.NumElements(0), lod_tensor.NumElements(level)); ASSERT_EQ(new_lod_tensor.NumElements(1), lod_tensor.NumElements(level + 1)); - ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), - lod_tensor.tensor_->data<float>()); + ASSERT_EQ(new_lod_tensor.tensor().data<float>(), + lod_tensor.tensor().data<float>()); } } @@ -88,8 +88,8 @@ TEST_F(LODTensorTester, SliceInLevel) { EXPECT_EQ(new_lod_tensor.NumElements(0), 2UL); EXPECT_EQ(new_lod_tensor.NumElements(1), 4UL); EXPECT_EQ(new_lod_tensor.NumElements(2), 8UL); - ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), - lod_tensor.tensor_->data<float>()); + ASSERT_EQ(new_lod_tensor.tensor().data<float>(), + lod_tensor.tensor().data<float>()); level = 1; new_lod_tensor = lod_tensor; @@ -97,8 +97,8 @@ TEST_F(LODTensorTester, SliceInLevel) { ASSERT_EQ(new_lod_tensor.NumLevels(), 2UL); ASSERT_EQ(new_lod_tensor.NumElements(0), 2UL); ASSERT_EQ(new_lod_tensor.NumElements(1), 4UL); - ASSERT_EQ(new_lod_tensor.tensor_->data<float>(), - lod_tensor.tensor_->data<float>()); + ASSERT_EQ(new_lod_tensor.tensor().data<float>(), + lod_tensor.tensor().data<float>()); } } // namespace framework From 207132226c39c864a0808428cb8593bafafc4407 Mon Sep 17 00:00:00 2001 From: dangqingqing <dangqingqing@baidu.com> Date: Thu, 31 Aug 2017 20:49:33 +0800 Subject: [PATCH 11/72] Add unit testing for cuDNN wrapper. --- paddle/platform/CMakeLists.txt | 4 +- paddle/platform/cudnn_helper.h | 41 +++++---- paddle/platform/cudnn_helper_test.cc | 121 +++++++++++++++++++++++++ paddle/platform/dynload/CMakeLists.txt | 2 +- paddle/platform/dynload/cudnn.h | 8 ++ 5 files changed, 157 insertions(+), 19 deletions(-) create mode 100644 paddle/platform/cudnn_helper_test.cc diff --git a/paddle/platform/CMakeLists.txt b/paddle/platform/CMakeLists.txt index ef722e984c..9a3ad8eb64 100644 --- a/paddle/platform/CMakeLists.txt +++ b/paddle/platform/CMakeLists.txt @@ -22,4 +22,6 @@ ENDIF() cc_library(device_context SRCS device_context.cc DEPS memory buddy_allocator system_allocator memory_block meta_data meta_cache place eigen3 ${GPU_CTX_DEPS}) nv_test(device_context_test SRCS device_context_test.cc DEPS device_context gpu_info) -nv_test(cudnn_helper SRCS cudnn_helper.cc) + +nv_library(cudnn_helper SRCS cudnn_helper.cc DEPS dynload_cuda) +nv_test(cudnn_helper_test SRCS cudnn_helper_test.cc DEPS dynload_cuda) diff --git a/paddle/platform/cudnn_helper.h b/paddle/platform/cudnn_helper.h index 91047236a2..6a43f49cfc 100644 --- a/paddle/platform/cudnn_helper.h +++ b/paddle/platform/cudnn_helper.h @@ -14,7 +14,9 @@ limitations under the License. */ #pragma once +#ifndef PADDLE_ONLY_CPU #include <cudnn.h> +#include "glog/logging.h" #include "paddle/platform/dynload/cudnn.h" #include "paddle/platform/enforce.h" #include "paddle/platform/macros.h" @@ -93,11 +95,11 @@ class ScopedTensorDescriptor { // the format is not used now, but it maybe useful feature std::vector<int> strides(dims.size()); strides[dims.size() - 1] = 1; - for (int i = dims.size() - 1; i >= 0; i++) { - strides[i] = dims[i + 1] * strides[i]; + for (int i = dims.size() - 2; i >= 0; i--) { + strides[i] = dims[i + 1] * strides[i + 1]; } - PADDLE_ENFORCE(cudnnSetTensorNdDescriptor(desc_, type, dims.size(), - dims.data(), strides.data())); + PADDLE_ENFORCE(dynload::cudnnSetTensorNdDescriptor( + desc_, type, dims.size(), dims.data(), strides.data())); return desc_; } @@ -126,8 +128,8 @@ class ScopedFilterDescriptor { const cudnnDataType_t type, const std::vector<int>& kernel) { // filter layout: output input spatial_dim_y spatial_dim_x - PADDLE_ENFORCE(cudnnSetFilterNdDescriptor(desc_, type, format, - kernel.size(), kernel.data())); + PADDLE_ENFORCE(dynload::cudnnSetFilterNdDescriptor( + desc_, type, format, kernel.size(), kernel.data())); return desc_; } @@ -157,9 +159,21 @@ class ScopedConvolutionDescriptor { const std::vector<int>& strides, const std::vector<int>& dilations) { PADDLE_ENFORCE_EQ(pads.size(), strides.size()); PADDLE_ENFORCE_EQ(pads.size(), dilations.size()); - PADDLE_ENFORCE(cudnnSetConvolutionNdDescriptor( + +#if CUDNN_VERSION < 6000 + // cudnn v5 does not support dilation conv, the argument is called upscale + // instead of dilations and it is must be one. + for (size_t i = 0; i < dilations.size(); ++i) { + PADDLE_ENFORCE_EQ( + dilations[i], 1, + "Dilations conv is not supported in this cuDNN version"); + } +#endif + + PADDLE_ENFORCE(dynload::cudnnSetConvolutionNdDescriptor( desc_, pads.size(), pads.data(), strides.data(), dilations.data(), CUDNN_CROSS_CORRELATION, type)); + return desc_; } template <typename T> @@ -184,26 +198,18 @@ class ScopedPoolingDescriptor { } inline cudnnPoolingDescriptor_t descriptor(const PoolingMode& mode, - cudnnDataType_t type, const std::vector<int>& kernel, const std::vector<int>& pads, const std::vector<int>& strides) { PADDLE_ENFORCE_EQ(kernel.size(), pads.size()); PADDLE_ENFORCE_EQ(kernel.size(), strides.size()); - PADDLE_ENFORCE(cudnnSetPoolingNdDescriptor( + PADDLE_ENFORCE(dynload::cudnnSetPoolingNdDescriptor( desc_, (mode == PoolingMode::kMaximum ? CUDNN_POOLING_MAX : CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING), CUDNN_PROPAGATE_NAN, // Always propagate nans. kernel.size(), kernel.data(), pads.data(), strides.data())); - } - - template <typename T> - inline cudnnPoolingDescriptor_t descriptor(const PoolingMode& mode, - const std::vector<int>& kernel, - const std::vector<int>& pads, - const std::vector<int>& strides) { - return descriptor(mode, CudnnDataType<T>::type, kernel, pads, strides); + return desc_; } private: @@ -213,3 +219,4 @@ class ScopedPoolingDescriptor { } // namespace platform } // namespace paddle +#endif diff --git a/paddle/platform/cudnn_helper_test.cc b/paddle/platform/cudnn_helper_test.cc new file mode 100644 index 0000000000..729f2f8a10 --- /dev/null +++ b/paddle/platform/cudnn_helper_test.cc @@ -0,0 +1,121 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "paddle/platform/cudnn_helper.h" +#include "glog/logging.h" +#include "gtest/gtest.h" + +TEST(CudnnHelper, ScopedTensorDescriptor) { + using paddle::platform::ScopedTensorDescriptor; + using paddle::platform::DataLayout; + + ScopedTensorDescriptor tensor_desc; + std::vector<int> shape = {2, 4, 6, 6}; + auto desc = tensor_desc.descriptor<float>(DataLayout::kNCHW, shape); + + cudnnDataType_t type; + int nd; + std::vector<int> dims(4); + std::vector<int> strides(4); + paddle::platform::dynload::cudnnGetTensorNdDescriptor( + desc, 4, &type, &nd, dims.data(), strides.data()); + + EXPECT_EQ(nd, 4); + for (size_t i = 0; i < dims.size(); ++i) { + EXPECT_EQ(dims[i], shape[i]); + } + EXPECT_EQ(strides[3], 1); + EXPECT_EQ(strides[2], 6); + EXPECT_EQ(strides[1], 36); + EXPECT_EQ(strides[0], 144); +} + +TEST(CudnnHelper, ScopedFilterDescriptor) { + using paddle::platform::ScopedFilterDescriptor; + using paddle::platform::DataLayout; + + ScopedFilterDescriptor filter_desc; + std::vector<int> shape = {2, 3, 3}; + auto desc = filter_desc.descriptor<float>(DataLayout::kNCHW, shape); + + cudnnDataType_t type; + int nd; + cudnnTensorFormat_t format; + std::vector<int> kernel(3); + paddle::platform::dynload::cudnnGetFilterNdDescriptor(desc, 3, &type, &format, + &nd, kernel.data()); + + EXPECT_EQ(GetCudnnTensorFormat(DataLayout::kNCHW), format); + EXPECT_EQ(nd, 3); + for (size_t i = 0; i < shape.size(); ++i) { + EXPECT_EQ(kernel[i], shape[i]); + } +} + +TEST(CudnnHelper, ScopedConvolutionDescriptor) { + using paddle::platform::ScopedConvolutionDescriptor; + + ScopedConvolutionDescriptor conv_desc; + std::vector<int> src_pads = {2, 2, 2}; + std::vector<int> src_strides = {1, 1, 1}; + std::vector<int> src_dilations = {1, 1, 1}; + auto desc = conv_desc.descriptor<float>(src_pads, src_strides, src_dilations); + + cudnnDataType_t type; + cudnnConvolutionMode_t mode; + int nd; + std::vector<int> pads(3); + std::vector<int> strides(3); + std::vector<int> dilations(3); + paddle::platform::dynload::cudnnGetConvolutionNdDescriptor( + desc, 3, &nd, pads.data(), strides.data(), dilations.data(), &mode, + &type); + + EXPECT_EQ(nd, 3); + for (size_t i = 0; i < src_pads.size(); ++i) { + EXPECT_EQ(pads[i], src_pads[i]); + EXPECT_EQ(strides[i], src_strides[i]); + EXPECT_EQ(dilations[i], src_dilations[i]); + } + EXPECT_EQ(mode, CUDNN_CROSS_CORRELATION); +} + +TEST(CudnnHelper, ScopedPoolingDescriptor) { + using paddle::platform::ScopedPoolingDescriptor; + using paddle::platform::PoolingMode; + + ScopedPoolingDescriptor pool_desc; + std::vector<int> src_kernel = {2, 2, 5}; + std::vector<int> src_pads = {1, 1, 2}; + std::vector<int> src_strides = {2, 2, 3}; + auto desc = pool_desc.descriptor(PoolingMode::kMaximum, src_kernel, src_pads, + src_strides); + + cudnnPoolingMode_t mode; + cudnnNanPropagation_t nan_t = CUDNN_PROPAGATE_NAN; + int nd; + std::vector<int> kernel(3); + std::vector<int> pads(3); + std::vector<int> strides(3); + paddle::platform::dynload::cudnnGetPoolingNdDescriptor( + desc, 3, &mode, &nan_t, &nd, kernel.data(), pads.data(), strides.data()); + + EXPECT_EQ(nd, 3); + for (size_t i = 0; i < src_pads.size(); ++i) { + EXPECT_EQ(kernel[i], src_kernel[i]); + EXPECT_EQ(pads[i], src_pads[i]); + EXPECT_EQ(strides[i], src_strides[i]); + } + EXPECT_EQ(mode, CUDNN_POOLING_MAX); +} diff --git a/paddle/platform/dynload/CMakeLists.txt b/paddle/platform/dynload/CMakeLists.txt index d205ead845..ceb66f84b6 100644 --- a/paddle/platform/dynload/CMakeLists.txt +++ b/paddle/platform/dynload/CMakeLists.txt @@ -1,2 +1,2 @@ cc_library(dynamic_loader SRCS dynamic_loader.cc DEPS glog gflags) -nv_library(dynload_cuda SRCS cublas.cc cudnn.cc curand.cc) +nv_library(dynload_cuda SRCS cublas.cc cudnn.cc curand.cc DEPS dynamic_loader) diff --git a/paddle/platform/dynload/cudnn.h b/paddle/platform/dynload/cudnn.h index ef0dd85b08..0120625b7c 100644 --- a/paddle/platform/dynload/cudnn.h +++ b/paddle/platform/dynload/cudnn.h @@ -62,19 +62,27 @@ extern void* cudnn_dso_handle; #define CUDNN_DNN_ROUTINE_EACH(__macro) \ __macro(cudnnSetTensor4dDescriptor); \ __macro(cudnnSetTensor4dDescriptorEx); \ + __macro(cudnnSetTensorNdDescriptor); \ + __macro(cudnnGetTensorNdDescriptor); \ __macro(cudnnGetConvolutionNdForwardOutputDim); \ __macro(cudnnGetConvolutionForwardAlgorithm); \ __macro(cudnnCreateTensorDescriptor); \ __macro(cudnnDestroyTensorDescriptor); \ __macro(cudnnCreateFilterDescriptor); \ __macro(cudnnSetFilter4dDescriptor); \ + __macro(cudnnSetFilterNdDescriptor); \ + __macro(cudnnGetFilterNdDescriptor); \ __macro(cudnnSetPooling2dDescriptor); \ + __macro(cudnnSetPoolingNdDescriptor); \ + __macro(cudnnGetPoolingNdDescriptor); \ __macro(cudnnDestroyFilterDescriptor); \ __macro(cudnnCreateConvolutionDescriptor); \ __macro(cudnnCreatePoolingDescriptor); \ __macro(cudnnDestroyPoolingDescriptor); \ __macro(cudnnSetConvolution2dDescriptor); \ __macro(cudnnDestroyConvolutionDescriptor); \ + __macro(cudnnSetConvolutionNdDescriptor); \ + __macro(cudnnGetConvolutionNdDescriptor); \ __macro(cudnnCreate); \ __macro(cudnnDestroy); \ __macro(cudnnSetStream); \ From ed72af48cecb1462b14c2105e9451052fa583cde Mon Sep 17 00:00:00 2001 From: Xinghai Sun <sunxinghai1216@gmail.com> Date: Fri, 1 Sep 2017 19:01:12 +0800 Subject: [PATCH 12/72] Add cos_sim op. --- paddle/operators/CMakeLists.txt | 2 +- paddle/operators/cos_sim_op.cc | 91 ++++++++++++++++++ paddle/operators/cos_sim_op.cu | 22 +++++ paddle/operators/cos_sim_op.h | 93 +++++++++++++++++++ paddle/pybind/pybind.cc | 1 + .../paddle/v2/framework/tests/CMakeLists.txt | 1 + .../v2/framework/tests/gradient_checker.py | 21 +++-- .../paddle/v2/framework/tests/op_test_util.py | 8 +- .../v2/framework/tests/test_cos_sim_op.py | 40 ++++++++ 9 files changed, 267 insertions(+), 12 deletions(-) create mode 100644 paddle/operators/cos_sim_op.cc create mode 100644 paddle/operators/cos_sim_op.cu create mode 100644 paddle/operators/cos_sim_op.h create mode 100644 python/paddle/v2/framework/tests/test_cos_sim_op.py diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index e5efcccb0e..25dbd236e6 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -56,7 +56,7 @@ list(REMOVE_ITEM GENERAL_OPS op_library(net_op SRCS net_op.cc) op_library(minus_op SRCS minus_op.cc minus_op.cu DEPS scale_op) op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) -op_library(recurrent_op SRCS recurrent_op.cc rnn/recurrent_op_utils.cc +op_library(recurrent_op SRCS recurrent_op.cc rnn/recurrent_op_utils.cc DEPS framework_proto tensor operator net_op) op_library(scale_op SRCS scale_op.cc scale_op.cu DEPS net_op) diff --git a/paddle/operators/cos_sim_op.cc b/paddle/operators/cos_sim_op.cc new file mode 100644 index 0000000000..21a616522b --- /dev/null +++ b/paddle/operators/cos_sim_op.cc @@ -0,0 +1,91 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ + +#include "paddle/operators/cos_sim_op.h" + +namespace paddle { +namespace operators { + +using framework::Tensor; + +class CosSimOp : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + protected: + void InferShape(const framework::InferShapeContext &ctx) const override { + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) should not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) should not be null."); + PADDLE_ENFORCE_EQ(ctx.Input<Tensor>("X")->dims(), + ctx.Input<Tensor>("Y")->dims(), + "Dimensions of Input(X) and Input(Y) must be the same."); + + auto dims = ctx.Input<Tensor>("X")->dims(); + ctx.Output<Tensor>("Out")->Resize({dims[0], 1}); + } +}; + +class CosSimOpMaker : public framework::OpProtoAndCheckerMaker { + public: + CosSimOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("X", "The first input of cos_sim op."); + AddInput("Y", "The second input of cos_sim op."); + AddOutput("Out", "The output of cos_sim op."); + AddComment(R"DOC( +Cosine Similarity Operator. + +The equation is: Out = X^T * Y / (sqrt(X^T * X) * sqrt(Y^T * Y)) +)DOC"); + } +}; + +class CosSimOpGrad : public framework::OperatorWithKernel { + public: + using framework::OperatorWithKernel::OperatorWithKernel; + + protected: + void InferShape(const framework::InferShapeContext &ctx) const override { + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) should not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) should not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar(framework::GradVarName("Out")), + "Input(Out@GRAD) should not be null."); + + auto x_dims = ctx.Input<Tensor>("X")->dims(); + auto y_dims = ctx.Input<Tensor>("Y")->dims(); + auto out_dims = ctx.Input<Tensor>(framework::GradVarName("Out"))->dims(); + PADDLE_ENFORCE_EQ(x_dims, y_dims, + "Dimensions of Input(X) and Input(Y) must be the same."); + PADDLE_ENFORCE_EQ(out_dims[0], x_dims[0], + "1st dimension of Out@GRAD must equal to Input(X)"); + PADDLE_ENFORCE_EQ(out_dims[1], 1, + "1st dimension of Out@GRAD must equal to Input(X)"); + + auto *x_grad = ctx.Output<Tensor>(framework::GradVarName("X")); + auto *y_grad = ctx.Output<Tensor>(framework::GradVarName("Y")); + x_grad->Resize(x_dims); + y_grad->Resize(y_dims); + } +}; + +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; +REGISTER_OP(cos_sim, ops::CosSimOp, ops::CosSimOpMaker, cos_sim_grad, + ops::CosSimOpGrad); +REGISTER_OP_CPU_KERNEL(cos_sim, + ops::CosSimKernel<paddle::platform::CPUPlace, float>); +REGISTER_OP_CPU_KERNEL( + cos_sim_grad, ops::CosSimGradKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/cos_sim_op.cu b/paddle/operators/cos_sim_op.cu new file mode 100644 index 0000000000..0cb8fd26de --- /dev/null +++ b/paddle/operators/cos_sim_op.cu @@ -0,0 +1,22 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ + +#define EIGEN_USE_GPU +#include "paddle/operators/cos_sim_op.h" + +namespace ops = paddle::operators; +REGISTER_OP_GPU_KERNEL(cos_sim, + ops::CosSimKernel<paddle::platform::GPUPlace, float>); +REGISTER_OP_GPU_KERNEL( + cos_sim_grad, ops::CosSimGradKernel<paddle::platform::GPUPlace, float>); diff --git a/paddle/operators/cos_sim_op.h b/paddle/operators/cos_sim_op.h new file mode 100644 index 0000000000..5247087cc1 --- /dev/null +++ b/paddle/operators/cos_sim_op.h @@ -0,0 +1,93 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ + +#pragma once +#include "paddle/framework/eigen.h" +#include "paddle/framework/op_registry.h" + +namespace paddle { +namespace operators { + +using Tensor = framework::Tensor; +template <typename T, int MajorType = Eigen::RowMajor, + typename IndexType = Eigen::DenseIndex> +using EigenMatrix = framework::EigenMatrix<T, MajorType, IndexType>; + +template <typename Place, typename T> +class CosSimKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& context) const override { + auto* x = context.Input<Tensor>("X"); + auto* y = context.Input<Tensor>("Y"); + auto* z = context.Output<Tensor>("Out"); + + z->mutable_data<T>(context.GetPlace()); + + auto dims = x->dims(); + int size = static_cast<int>(framework::product(dims)); + auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); + auto X = EigenMatrix<T>::From(*x, new_dims); + auto Y = EigenMatrix<T>::From(*y, new_dims); + auto Z = EigenMatrix<T>::From(*z, new_dims); + + auto XY = (X * Y).sum(Eigen::array<int, 1>({1})); + auto XX = (X * X).sum(Eigen::array<int, 1>({1})); + auto YY = (Y * Y).sum(Eigen::array<int, 1>({1})); + auto place = context.GetEigenDevice<Place>(); + Z.device(place) = XY / XX.sqrt() / YY.sqrt(); + } +}; + +template <typename Place, typename T> +class CosSimGradKernel : public framework::OpKernel { + public: + void Compute(const framework::ExecutionContext& context) const override { + auto* x = context.Input<Tensor>("X"); + auto* y = context.Input<Tensor>("Y"); + auto* z = context.Input<Tensor>("Out"); + auto* grad_x = context.Output<Tensor>(framework::GradVarName("X")); + auto* grad_y = context.Output<Tensor>(framework::GradVarName("Y")); + auto* grad_z = context.Input<Tensor>(framework::GradVarName("Out")); + + grad_x->mutable_data<T>(context.GetPlace()); + grad_y->mutable_data<T>(context.GetPlace()); + + auto dims = x->dims(); + int size = static_cast<int>(framework::product(dims)); + auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); + auto X = EigenMatrix<T>::From(*x, new_dims); + auto Y = EigenMatrix<T>::From(*y, new_dims); + auto Z = EigenMatrix<T>::From(*z); + auto dX = EigenMatrix<T>::From(*grad_x, new_dims); + auto dY = EigenMatrix<T>::From(*grad_y, new_dims); + auto dZ = EigenMatrix<T>::From(*grad_z); + + auto XX = (X * X).sum(Eigen::array<int, 1>({1})); + auto YY = (Y * Y).sum(Eigen::array<int, 1>({1})); + Eigen::DSizes<int, 2> bcast(1, dims[1]); + auto denominator_bcast = (XX.sqrt() * YY.sqrt()).broadcast(bcast); + auto Z_bcast = Z.broadcast(bcast); + auto dZ_bcast = dZ.broadcast(bcast); + auto place = context.GetEigenDevice<Place>(); + dX.device(place) = + dZ_bcast * (Y / denominator_bcast - Z_bcast * X / XX.broadcast(bcast)); + dY.device(place) = + dZ_bcast * (X / denominator_bcast - Z_bcast * Y / YY.broadcast(bcast)); + // dX.device(place) = X; + // Y.device(place) = Y; + } +}; + +} // namespace operators +} // namespace paddle diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 3bc150ccb7..a8ec35dfad 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -46,6 +46,7 @@ USE_OP(lookup_table); USE_OP(scale); USE_OP_ITSELF(identity); USE_OP(minus); +USE_OP(cos_sim); USE_CPU_ONLY_OP(gather); USE_CPU_ONLY_OP(scatter); diff --git a/python/paddle/v2/framework/tests/CMakeLists.txt b/python/paddle/v2/framework/tests/CMakeLists.txt index 661ebd8964..e0f77d7973 100644 --- a/python/paddle/v2/framework/tests/CMakeLists.txt +++ b/python/paddle/v2/framework/tests/CMakeLists.txt @@ -4,6 +4,7 @@ py_test(test_scope SRCS test_scope.py) py_test(test_tensor SRCS test_tensor.py) py_test(test_mul_op SRCS test_mul_op.py) +py_test(test_cos_sim_op SRCS test_cos_sim_op.py) py_test(test_mean_op SRCS test_mean_op.py) diff --git a/python/paddle/v2/framework/tests/gradient_checker.py b/python/paddle/v2/framework/tests/gradient_checker.py index 518f828bac..bf01ea4876 100644 --- a/python/paddle/v2/framework/tests/gradient_checker.py +++ b/python/paddle/v2/framework/tests/gradient_checker.py @@ -36,13 +36,13 @@ def get_numeric_gradient(op, in_place=False): """ Get Numeric Gradient for an operator's input. - - :param op: C++ operator instance, could be an network - :param input_values: The input variables. Should be an dictionary, key is + + :param op: C++ operator instance, could be an network + :param input_values: The input variables. Should be an dictionary, key is variable name. Value is numpy array. - :param output_name: The final output variable name. + :param output_name: The final output variable name. :param input_to_check: The input variable need to get gradient. - :param delta: The perturbation value for numeric gradient method. The + :param delta: The perturbation value for numeric gradient method. The smaller delta is, the more accurate result will get. But if that delta is too small, it could occur numerical stability problem. :param local_scope: The local scope used for get_numeric_gradient. @@ -229,9 +229,9 @@ class GradientChecker(unittest.TestCase): """Use relative error for the comparison. :param numeric_grads: the numerical graidents. - :type numeric_grads: a list of numpy.array + :type numeric_grads: a list of numpy.array :param analytic_grads: the analytical graidents. - :type analytic_grads: a list of numpy.array + :type analytic_grads: a list of numpy.array :param name: the names of gradients, used to print for debug. :type names: a list of string :param msg_prefix: string info, used to print for debug. @@ -304,6 +304,13 @@ class GradientChecker(unittest.TestCase): # get analytical gradients according to different device analytic_grads = self.__get_gradient(forward_op, backward_op, input_vars, check_names, place) + #print(numeric_grads[0], numeric_grads[0].shape) + print("dim0: ", numeric_grads[0], numeric_grads[0].shape) + print("dim0: ", analytic_grads[0], analytic_grads[0].shape) + print("---------------------") + print("dim1: ", numeric_grads[1], numeric_grads[1].shape) + print("dim1: ", analytic_grads[1], analytic_grads[1].shape) + assert False self.__assert_is_close(numeric_grads, analytic_grads, check_names, max_relative_error, "Gradient Check On %s" % str(place)) diff --git a/python/paddle/v2/framework/tests/op_test_util.py b/python/paddle/v2/framework/tests/op_test_util.py index 3bc05a0fec..a4899355b5 100644 --- a/python/paddle/v2/framework/tests/op_test_util.py +++ b/python/paddle/v2/framework/tests/op_test_util.py @@ -6,13 +6,13 @@ from paddle.v2.framework.op import Operator class OpTestMeta(type): """ Operator Test ClassMeta. - - It injects `test_all` method into user's OperatorTest class, to make Python + + It injects `test_all` method into user's OperatorTest class, to make Python unittest module run that method. - + The `test_all` read what value is stored in `self`. It use self's values to create and run a operator, and check whether that op is OK or not. - + See `test_add_two_op` for example usage. """ diff --git a/python/paddle/v2/framework/tests/test_cos_sim_op.py b/python/paddle/v2/framework/tests/test_cos_sim_op.py new file mode 100644 index 0000000000..f3b04d25f2 --- /dev/null +++ b/python/paddle/v2/framework/tests/test_cos_sim_op.py @@ -0,0 +1,40 @@ +import unittest +import numpy as np +from gradient_checker import GradientChecker, create_op +from op_test_util import OpTestMeta + + +class TestCosSimOp(unittest.TestCase): + __metaclass__ = OpTestMeta + + def setUp(self): + self.type = "cos_sim" + self.inputs = { + 'X': np.random.random((32, 84)).astype("float32"), + 'Y': np.random.random((32, 84)).astype("float32") + } + expect = (self.inputs['X'] * self.inputs['Y']).sum(axis=1) / \ + np.linalg.norm(self.inputs['X'], axis=1) / \ + np.linalg.norm(self.inputs['Y'], axis=1) + expect = np.expand_dims(expect, 1) + self.outputs = {'Out': expect} + + +class CosSimGradOpTest(GradientChecker): + def test_cos_sim(self): + op = create_op("cos_sim") + #inputs = { + #'X': np.random.random((2, 2)).astype("float32"), + #'Y': np.random.random((2, 2)).astype("float32") + #} + inputs = { + 'X': np.array([[0.9, 0.6], [1.9, 1.6]]).astype("float32"), + 'Y': np.array([[0.7, 0.8], [1.7, 1.8]]).astype("float32") + } + print(inputs) + self.check_grad( + op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) + + +if __name__ == '__main__': + unittest.main() From 9d2909be2abcb9b8728f7c4de7437c07a1254b8b Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Fri, 1 Sep 2017 19:27:52 +0800 Subject: [PATCH 13/72] rename add_op to add_two_op --- paddle/framework/CMakeLists.txt | 2 +- paddle/operators/{add_op.cc => add_two_op.cc} | 2 +- paddle/operators/{add_op.cu => add_two_op.cu} | 2 +- paddle/operators/{add_op.h => add_two_op.h} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename paddle/operators/{add_op.cc => add_two_op.cc} (98%) rename paddle/operators/{add_op.cu => add_two_op.cu} (95%) rename paddle/operators/{add_op.h => add_two_op.h} (100%) diff --git a/paddle/framework/CMakeLists.txt b/paddle/framework/CMakeLists.txt index c0838d9b75..e138517b6b 100644 --- a/paddle/framework/CMakeLists.txt +++ b/paddle/framework/CMakeLists.txt @@ -25,7 +25,7 @@ cc_test(operator_test SRCS operator_test.cc DEPS operator op_registry) cc_library(grad_op_builder SRCS grad_op_builder.cc DEPS operator) cc_library(op_registry SRCS op_registry.cc DEPS grad_op_builder) cc_test(op_registry_test SRCS op_registry_test.cc DEPS op_registry) -cc_test(grad_op_builder_test SRCS grad_op_builder_test.cc DEPS grad_op_builder op_registry add_op) +cc_test(grad_op_builder_test SRCS grad_op_builder_test.cc DEPS grad_op_builder op_registry add_two_op) py_proto_compile(framework_py_proto SRCS framework.proto) # Generate an empty __init__.py to make framework_py_proto as a valid python module. diff --git a/paddle/operators/add_op.cc b/paddle/operators/add_two_op.cc similarity index 98% rename from paddle/operators/add_op.cc rename to paddle/operators/add_two_op.cc index 8ab748ed71..bc99e306e0 100644 --- a/paddle/operators/add_op.cc +++ b/paddle/operators/add_two_op.cc @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/operators/add_op.h" +#include "paddle/operators/add_two_op.h" namespace paddle { namespace operators { diff --git a/paddle/operators/add_op.cu b/paddle/operators/add_two_op.cu similarity index 95% rename from paddle/operators/add_op.cu rename to paddle/operators/add_two_op.cu index cec5f558cb..acc03b2c8b 100644 --- a/paddle/operators/add_op.cu +++ b/paddle/operators/add_two_op.cu @@ -14,7 +14,7 @@ #define EIGEN_USE_GPU #include "paddle/framework/op_registry.h" -#include "paddle/operators/add_op.h" +#include "paddle/operators/add_two_op.h" namespace ops = paddle::operators; REGISTER_OP_GPU_KERNEL(add_two, diff --git a/paddle/operators/add_op.h b/paddle/operators/add_two_op.h similarity index 100% rename from paddle/operators/add_op.h rename to paddle/operators/add_two_op.h From ba1aa60700db8cf8abb4b7efbf6c67774f12c3c7 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Fri, 1 Sep 2017 21:48:38 +0800 Subject: [PATCH 14/72] fix the problem that long message will be truncated. --- paddle/gserver/layers/PrintLayer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/paddle/gserver/layers/PrintLayer.cpp b/paddle/gserver/layers/PrintLayer.cpp index 0a1e17b9aa..e83ae34bbe 100644 --- a/paddle/gserver/layers/PrintLayer.cpp +++ b/paddle/gserver/layers/PrintLayer.cpp @@ -48,7 +48,16 @@ public: << inputLayers_.size() << ") at " << getName(); } s << format.substr(pos); - LOG(INFO) << s.str(); + + const std::string delimiter("\n"); + std::string content = s.str(); + std::string::size_type foundPos = 0; + std::string::size_type prevPos = 0; + while ((foundPos = content.find(delimiter, prevPos)) != std::string::npos) { + LOG(INFO) << content.substr(prevPos, foundPos - prevPos); + prevPos = foundPos + delimiter.size(); + } + LOG(INFO) << content.substr(prevPos); } void backward(const UpdateCallback& callback) override {} From 91215bcef907baffdf52bb7894a0a33d0253c16f Mon Sep 17 00:00:00 2001 From: Xinghai Sun <sunxinghai1216@gmail.com> Date: Sat, 2 Sep 2017 17:25:30 +0800 Subject: [PATCH 15/72] Fix a bug causing wrong gradient results in cos_sim op. --- paddle/operators/cos_sim_op.cc | 32 ++++++++++---- paddle/operators/cos_sim_op.h | 34 +++++++++------ .../v2/framework/tests/gradient_checker.py | 7 ---- .../v2/framework/tests/test_cos_sim_op.py | 42 ++++++++++++------- 4 files changed, 71 insertions(+), 44 deletions(-) diff --git a/paddle/operators/cos_sim_op.cc b/paddle/operators/cos_sim_op.cc index 21a616522b..3760d0b161 100644 --- a/paddle/operators/cos_sim_op.cc +++ b/paddle/operators/cos_sim_op.cc @@ -25,14 +25,16 @@ class CosSimOp : public framework::OperatorWithKernel { protected: void InferShape(const framework::InferShapeContext &ctx) const override { - PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) should not be null."); - PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) should not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) must not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) must not be null."); PADDLE_ENFORCE_EQ(ctx.Input<Tensor>("X")->dims(), ctx.Input<Tensor>("Y")->dims(), "Dimensions of Input(X) and Input(Y) must be the same."); auto dims = ctx.Input<Tensor>("X")->dims(); ctx.Output<Tensor>("Out")->Resize({dims[0], 1}); + ctx.Output<Tensor>("XNorm")->Resize({dims[0], 1}); + ctx.Output<Tensor>("YNorm")->Resize({dims[0], 1}); } }; @@ -43,6 +45,9 @@ class CosSimOpMaker : public framework::OpProtoAndCheckerMaker { AddInput("X", "The first input of cos_sim op."); AddInput("Y", "The second input of cos_sim op."); AddOutput("Out", "The output of cos_sim op."); + AddOutput("XNorm", "Row norm of the first input.").AsIntermediate(); + AddOutput("YNorm", "Row norm of the second input.").AsIntermediate(); + AddComment(R"DOC( Cosine Similarity Operator. @@ -57,20 +62,31 @@ class CosSimOpGrad : public framework::OperatorWithKernel { protected: void InferShape(const framework::InferShapeContext &ctx) const override { - PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) should not be null."); - PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) should not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("X"), "Input(X) must not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("Y"), "Input(Y) must not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("XNorm"), + "Input(XNorm) must not be null."); + PADDLE_ENFORCE_NOT_NULL(ctx.InputVar("YNorm"), + "Input(YNorm) must not be null."); PADDLE_ENFORCE_NOT_NULL(ctx.InputVar(framework::GradVarName("Out")), - "Input(Out@GRAD) should not be null."); + "Input(Out@GRAD) must not be null."); auto x_dims = ctx.Input<Tensor>("X")->dims(); auto y_dims = ctx.Input<Tensor>("Y")->dims(); + auto xnorm_dims = ctx.Input<Tensor>("XNorm")->dims(); + auto ynorm_dims = ctx.Input<Tensor>("YNorm")->dims(); auto out_dims = ctx.Input<Tensor>(framework::GradVarName("Out"))->dims(); PADDLE_ENFORCE_EQ(x_dims, y_dims, "Dimensions of Input(X) and Input(Y) must be the same."); + PADDLE_ENFORCE_EQ(xnorm_dims[0], x_dims[0], + "1st dimension of XNorm must equal that of Input(X)."); + PADDLE_ENFORCE_EQ(xnorm_dims[1], 1, "2st dimension of XNorm must be one."); + PADDLE_ENFORCE_EQ(ynorm_dims[0], y_dims[0], + "1st dimension of YNorm must equal that of Input(Y)."); + PADDLE_ENFORCE_EQ(ynorm_dims[1], 1, "2st dimension of YNorm must be one."); PADDLE_ENFORCE_EQ(out_dims[0], x_dims[0], - "1st dimension of Out@GRAD must equal to Input(X)"); - PADDLE_ENFORCE_EQ(out_dims[1], 1, - "1st dimension of Out@GRAD must equal to Input(X)"); + "1st dimension of Out@GRAD must equal that of Input(X)"); + PADDLE_ENFORCE_EQ(out_dims[1], 1, "1st dimension of Out@GRAD must be one."); auto *x_grad = ctx.Output<Tensor>(framework::GradVarName("X")); auto *y_grad = ctx.Output<Tensor>(framework::GradVarName("Y")); diff --git a/paddle/operators/cos_sim_op.h b/paddle/operators/cos_sim_op.h index 5247087cc1..69d35d8bc2 100644 --- a/paddle/operators/cos_sim_op.h +++ b/paddle/operators/cos_sim_op.h @@ -31,21 +31,27 @@ class CosSimKernel : public framework::OpKernel { auto* x = context.Input<Tensor>("X"); auto* y = context.Input<Tensor>("Y"); auto* z = context.Output<Tensor>("Out"); + auto* x_norm = context.Output<Tensor>("XNorm"); + auto* y_norm = context.Output<Tensor>("YNorm"); z->mutable_data<T>(context.GetPlace()); + x_norm->mutable_data<T>(context.GetPlace()); + y_norm->mutable_data<T>(context.GetPlace()); auto dims = x->dims(); int size = static_cast<int>(framework::product(dims)); auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); auto X = EigenMatrix<T>::From(*x, new_dims); auto Y = EigenMatrix<T>::From(*y, new_dims); - auto Z = EigenMatrix<T>::From(*z, new_dims); + auto Z = EigenMatrix<T>::From(*z); + auto XNorm = EigenMatrix<T>::From(*x_norm); + auto YNorm = EigenMatrix<T>::From(*y_norm); - auto XY = (X * Y).sum(Eigen::array<int, 1>({1})); - auto XX = (X * X).sum(Eigen::array<int, 1>({1})); - auto YY = (Y * Y).sum(Eigen::array<int, 1>({1})); auto place = context.GetEigenDevice<Place>(); - Z.device(place) = XY / XX.sqrt() / YY.sqrt(); + auto XY = (X * Y).sum(Eigen::array<int, 1>({1})); + XNorm.device(place) = (X * X).sum(Eigen::array<int, 1>({1})).sqrt(); + YNorm.device(place) = (Y * Y).sum(Eigen::array<int, 1>({1})).sqrt(); + Z.device(place) = XY / XNorm / YNorm; } }; @@ -56,6 +62,8 @@ class CosSimGradKernel : public framework::OpKernel { auto* x = context.Input<Tensor>("X"); auto* y = context.Input<Tensor>("Y"); auto* z = context.Input<Tensor>("Out"); + auto* x_norm = context.Input<Tensor>("XNorm"); + auto* y_norm = context.Input<Tensor>("YNorm"); auto* grad_x = context.Output<Tensor>(framework::GradVarName("X")); auto* grad_y = context.Output<Tensor>(framework::GradVarName("Y")); auto* grad_z = context.Input<Tensor>(framework::GradVarName("Out")); @@ -69,23 +77,23 @@ class CosSimGradKernel : public framework::OpKernel { auto X = EigenMatrix<T>::From(*x, new_dims); auto Y = EigenMatrix<T>::From(*y, new_dims); auto Z = EigenMatrix<T>::From(*z); + auto X_norm = EigenMatrix<T>::From(*x_norm); + auto Y_norm = EigenMatrix<T>::From(*y_norm); auto dX = EigenMatrix<T>::From(*grad_x, new_dims); auto dY = EigenMatrix<T>::From(*grad_y, new_dims); auto dZ = EigenMatrix<T>::From(*grad_z); - auto XX = (X * X).sum(Eigen::array<int, 1>({1})); - auto YY = (Y * Y).sum(Eigen::array<int, 1>({1})); - Eigen::DSizes<int, 2> bcast(1, dims[1]); - auto denominator_bcast = (XX.sqrt() * YY.sqrt()).broadcast(bcast); + Eigen::DSizes<int, 2> bcast(1, new_dims[1]); auto Z_bcast = Z.broadcast(bcast); auto dZ_bcast = dZ.broadcast(bcast); auto place = context.GetEigenDevice<Place>(); + auto X_snorm_bcast = X_norm.square().eval().broadcast(bcast); + auto Y_snorm_bcast = Y_norm.square().eval().broadcast(bcast); + auto norm_prod_bcast = (X_norm * Y_norm).eval().broadcast(bcast); dX.device(place) = - dZ_bcast * (Y / denominator_bcast - Z_bcast * X / XX.broadcast(bcast)); + dZ_bcast * (Y / norm_prod_bcast - Z_bcast * X / X_snorm_bcast); dY.device(place) = - dZ_bcast * (X / denominator_bcast - Z_bcast * Y / YY.broadcast(bcast)); - // dX.device(place) = X; - // Y.device(place) = Y; + dZ_bcast * (X / norm_prod_bcast - Z_bcast * Y / Y_snorm_bcast); } }; diff --git a/python/paddle/v2/framework/tests/gradient_checker.py b/python/paddle/v2/framework/tests/gradient_checker.py index bf01ea4876..409b3caf33 100644 --- a/python/paddle/v2/framework/tests/gradient_checker.py +++ b/python/paddle/v2/framework/tests/gradient_checker.py @@ -304,13 +304,6 @@ class GradientChecker(unittest.TestCase): # get analytical gradients according to different device analytic_grads = self.__get_gradient(forward_op, backward_op, input_vars, check_names, place) - #print(numeric_grads[0], numeric_grads[0].shape) - print("dim0: ", numeric_grads[0], numeric_grads[0].shape) - print("dim0: ", analytic_grads[0], analytic_grads[0].shape) - print("---------------------") - print("dim1: ", numeric_grads[1], numeric_grads[1].shape) - print("dim1: ", analytic_grads[1], analytic_grads[1].shape) - assert False self.__assert_is_close(numeric_grads, analytic_grads, check_names, max_relative_error, "Gradient Check On %s" % str(place)) diff --git a/python/paddle/v2/framework/tests/test_cos_sim_op.py b/python/paddle/v2/framework/tests/test_cos_sim_op.py index f3b04d25f2..a19be47f76 100644 --- a/python/paddle/v2/framework/tests/test_cos_sim_op.py +++ b/python/paddle/v2/framework/tests/test_cos_sim_op.py @@ -10,30 +10,40 @@ class TestCosSimOp(unittest.TestCase): def setUp(self): self.type = "cos_sim" self.inputs = { - 'X': np.random.random((32, 84)).astype("float32"), - 'Y': np.random.random((32, 84)).astype("float32") + 'X': np.random.random((32, 64)).astype("float32"), + 'Y': np.random.random((32, 64)).astype("float32") + } + expect_x_norm = np.linalg.norm(self.inputs['X'], axis=1) + expect_y_norm = np.linalg.norm(self.inputs['Y'], axis=1) + expect_out = (self.inputs['X'] * self.inputs['Y']).sum(axis=1) / \ + expect_x_norm / expect_y_norm + self.outputs = { + 'XNorm': np.expand_dims(expect_x_norm, 1), + 'YNorm': np.expand_dims(expect_y_norm, 1), + 'Out': np.expand_dims(expect_out, 1) } - expect = (self.inputs['X'] * self.inputs['Y']).sum(axis=1) / \ - np.linalg.norm(self.inputs['X'], axis=1) / \ - np.linalg.norm(self.inputs['Y'], axis=1) - expect = np.expand_dims(expect, 1) - self.outputs = {'Out': expect} class CosSimGradOpTest(GradientChecker): - def test_cos_sim(self): + def test_cos_sim_2d(self): + op = create_op("cos_sim") + inputs = { + 'X': np.random.random((10, 5)).astype("float32"), + 'Y': np.random.random((10, 5)).astype("float32") + } + self.compare_grad(op, inputs) + self.check_grad( + op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.05) + + def test_cos_sim_3d(self): op = create_op("cos_sim") - #inputs = { - #'X': np.random.random((2, 2)).astype("float32"), - #'Y': np.random.random((2, 2)).astype("float32") - #} inputs = { - 'X': np.array([[0.9, 0.6], [1.9, 1.6]]).astype("float32"), - 'Y': np.array([[0.7, 0.8], [1.7, 1.8]]).astype("float32") + 'X': np.random.random((10, 5, 2)).astype("float32"), + 'Y': np.random.random((10, 5, 2)).astype("float32") } - print(inputs) + self.compare_grad(op, inputs) self.check_grad( - op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) + op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.05) if __name__ == '__main__': From 6fcdc91638c226209aae1244c9dcaf6882378dca Mon Sep 17 00:00:00 2001 From: qiaolongfei <qiaolongfei@baidu.com> Date: Sat, 2 Sep 2017 13:30:58 -0700 Subject: [PATCH 16/72] add op() to InferShapeContext --- paddle/framework/operator.h | 5 +++++ paddle/framework/operator_test.cc | 12 ++++++------ paddle/operators/gaussian_random_op.cc | 6 +++--- paddle/operators/mul_op.cc | 4 ++-- paddle/operators/scale_op.h | 2 +- paddle/operators/sgd_op.h | 2 +- paddle/operators/uniform_random_op.cc | 6 +++--- 7 files changed, 21 insertions(+), 16 deletions(-) diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 8397570d26..9874a7c295 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -229,6 +229,10 @@ class InferShapeContext { InferShapeContext(const OperatorBase& op, const Scope& scope) : op_(op), scope_(scope) {} + const OperatorBase& op() const { return op_; } + + const Scope& scope() const { return scope_; } + size_t InputSize(const std::string& name) const { return op_.Inputs(name).size(); } @@ -312,6 +316,7 @@ class InferShapeContext { return res; } + private: const OperatorBase& op_; const Scope& scope_; }; diff --git a/paddle/framework/operator_test.cc b/paddle/framework/operator_test.cc index 1d7efb7b94..f7c9e6b196 100644 --- a/paddle/framework/operator_test.cc +++ b/paddle/framework/operator_test.cc @@ -122,10 +122,10 @@ class CPUKernelTest : public OpKernel { public: void Compute(const ExecutionContext& ctx) const { std::cout << "this is cpu kernel" << std::endl; - std::cout << ctx.op_.DebugString() << std::endl; + std::cout << ctx.op().DebugString() << std::endl; cpu_kernel_run_num++; - ASSERT_EQ(ctx.op_.Input("x"), "IN1"); - ASSERT_EQ(ctx.op_.Output("y"), "OUT1"); + ASSERT_EQ(ctx.op().Input("x"), "IN1"); + ASSERT_EQ(ctx.op().Output("y"), "OUT1"); } }; @@ -148,7 +148,7 @@ class OpKernelTestMultiInputsProtoAndCheckerMaker class CPUKernalMultiInputsTest : public OpKernel { public: void Compute(const ExecutionContext& ctx) const { - auto xs = ctx.op_.Inputs("xs"); + auto xs = ctx.op().Inputs("xs"); ASSERT_EQ(xs.size(), 3UL); ASSERT_EQ(xs[0], "x0"); ASSERT_EQ(xs[1], "x1"); @@ -172,10 +172,10 @@ class CPUKernalMultiInputsTest : public OpKernel { auto outTensor0 = ctx.MultiOutput<Tensor>("ys"); ASSERT_EQ(outTensor0.size(), 2U); - auto k = ctx.op_.Input("k"); + auto k = ctx.op().Input("k"); ASSERT_EQ(k, "k0"); - auto ys = ctx.op_.Outputs("ys"); + auto ys = ctx.op().Outputs("ys"); ASSERT_EQ(ys.size(), 2UL); ASSERT_EQ(ys[0], "y0"); ASSERT_EQ(ys[1], "y1"); diff --git a/paddle/operators/gaussian_random_op.cc b/paddle/operators/gaussian_random_op.cc index a85363ad81..9eb976fed1 100644 --- a/paddle/operators/gaussian_random_op.cc +++ b/paddle/operators/gaussian_random_op.cc @@ -19,13 +19,13 @@ template <typename T> class CPUGaussianRandomKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - float mean = context.op_.GetAttr<float>("mean"); - float std = context.op_.GetAttr<float>("std"); + float mean = context.op().GetAttr<float>("mean"); + float std = context.op().GetAttr<float>("std"); auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); unsigned int seed = - static_cast<unsigned int>(context.op_.GetAttr<int>("seed")); + static_cast<unsigned int>(context.op().GetAttr<int>("seed")); std::minstd_rand engine; if (seed == 0) { seed = std::random_device()(); diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index 173cc3850c..5b8b5f6c11 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -29,10 +29,10 @@ class MulOp : public framework::OperatorWithKernel { auto dim1 = ctx.Input<Tensor>("Y")->dims(); PADDLE_ENFORCE_EQ(dim0.size(), 2, "input X(%s) should be a tensor with 2 dims, a matrix", - ctx.op_.Input("X")); + ctx.op().Input("X")); PADDLE_ENFORCE_EQ(dim1.size(), 2, "input Y(%s) should be a tensor with 2 dims, a matrix", - ctx.op_.Input("Y")); + ctx.op().Input("Y")); PADDLE_ENFORCE_EQ( dim0[1], dim1[0], "First matrix's width must be equal with second matrix's height."); diff --git a/paddle/operators/scale_op.h b/paddle/operators/scale_op.h index aea64f1b04..760b26f5e9 100644 --- a/paddle/operators/scale_op.h +++ b/paddle/operators/scale_op.h @@ -27,7 +27,7 @@ class ScaleKernel : public framework::OpKernel { auto* in = context.Input<framework::Tensor>("X"); tensor->mutable_data<T>(in->place()); - auto scale = static_cast<T>(context.op_.GetAttr<AttrType>("scale")); + auto scale = static_cast<T>(context.op().GetAttr<AttrType>("scale")); auto eigen_out = framework::EigenVector<T>::Flatten(*tensor); auto eigen_in = framework::EigenVector<T>::Flatten(*in); diff --git a/paddle/operators/sgd_op.h b/paddle/operators/sgd_op.h index a0b5000ffb..b54a7864b0 100644 --- a/paddle/operators/sgd_op.h +++ b/paddle/operators/sgd_op.h @@ -31,7 +31,7 @@ class SGDOpKernel : public framework::OpKernel { auto param = ctx.Input<Tensor>("param"); auto grad = ctx.Input<Tensor>("grad"); auto param_out = ctx.Output<Tensor>("param_out"); - float lr = ctx.op_.GetAttr<float>("learning_rate"); + float lr = ctx.op().GetAttr<float>("learning_rate"); param_out->mutable_data<T>(ctx.GetPlace()); diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index 29491137e6..dbff2a1365 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -27,15 +27,15 @@ class CPUUniformRandomKernel : public framework::OpKernel { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); unsigned int seed = - static_cast<unsigned int>(context.op_.GetAttr<int>("seed")); + static_cast<unsigned int>(context.op().GetAttr<int>("seed")); std::minstd_rand engine; if (seed == 0) { seed = std::random_device()(); } engine.seed(seed); std::uniform_real_distribution<T> dist( - static_cast<T>(context.op_.GetAttr<float>("min")), - static_cast<T>(context.op_.GetAttr<float>("max"))); + static_cast<T>(context.op().GetAttr<float>("min")), + static_cast<T>(context.op().GetAttr<float>("max"))); ssize_t size = framework::product(tensor->dims()); for (ssize_t i = 0; i < size; ++i) { data[i] = dist(engine); From 848c317aa84aea797654a3f0ee7a2db0fb0e8d09 Mon Sep 17 00:00:00 2001 From: qiaolongfei <qiaolongfei@baidu.com> Date: Sat, 2 Sep 2017 14:13:05 -0700 Subject: [PATCH 17/72] update gpu code --- paddle/operators/gaussian_random_op.cu | 6 +++--- paddle/operators/uniform_random_op.cu | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/paddle/operators/gaussian_random_op.cu b/paddle/operators/gaussian_random_op.cu index 018a4bfcb2..9769fbcd2b 100644 --- a/paddle/operators/gaussian_random_op.cu +++ b/paddle/operators/gaussian_random_op.cu @@ -43,13 +43,13 @@ class GPUGaussianRandomKernel : public framework::OpKernel { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); unsigned int seed = - static_cast<unsigned int>(context.op_.GetAttr<int>("seed")); + static_cast<unsigned int>(context.op().GetAttr<int>("seed")); if (seed == 0) { std::random_device rd; seed = rd(); } - T mean = static_cast<T>(context.op_.GetAttr<float>("mean")); - T std = static_cast<T>(context.op_.GetAttr<float>("std")); + T mean = static_cast<T>(context.op().GetAttr<float>("mean")); + T std = static_cast<T>(context.op().GetAttr<float>("std")); thrust::counting_iterator<unsigned int> index_sequence_begin(0); ssize_t N = framework::product(tensor->dims()); thrust::transform(index_sequence_begin, index_sequence_begin + N, diff --git a/paddle/operators/uniform_random_op.cu b/paddle/operators/uniform_random_op.cu index 1d6709934c..fc8397f134 100644 --- a/paddle/operators/uniform_random_op.cu +++ b/paddle/operators/uniform_random_op.cu @@ -46,13 +46,13 @@ class GPUUniformRandomKernel : public framework::OpKernel { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); unsigned int seed = - static_cast<unsigned int>(context.op_.GetAttr<int>("seed")); + static_cast<unsigned int>(context.op().GetAttr<int>("seed")); if (seed == 0) { std::random_device rd; seed = rd(); } - T min = static_cast<T>(context.op_.GetAttr<float>("min")); - T max = static_cast<T>(context.op_.GetAttr<float>("max")); + T min = static_cast<T>(context.op().GetAttr<float>("min")); + T max = static_cast<T>(context.op().GetAttr<float>("max")); thrust::counting_iterator<unsigned int> index_sequence_begin(0); ssize_t N = framework::product(tensor->dims()); thrust::transform(index_sequence_begin, index_sequence_begin + N, From 79b1f33a021a3d943d55734bc5692a57ca346a79 Mon Sep 17 00:00:00 2001 From: fengjiayi <fengjiayi@baidu.com> Date: Sat, 2 Sep 2017 15:51:50 -0700 Subject: [PATCH 18/72] Remove `grad_op_type` in REGISTER_OP --- doc/howto/dev/new_op_cn.md | 4 ++-- paddle/framework/backward.md | 2 +- paddle/framework/backward_test.cc | 12 +++++------- paddle/framework/grad_op_builder_test.cc | 4 ++-- paddle/framework/op_registry.h | 25 ++++++++++-------------- paddle/operators/add_op.cc | 2 +- paddle/operators/cross_entropy_op.cc | 3 +-- paddle/operators/gather_op.cc | 3 +-- paddle/operators/lookup_table_op.cc | 2 +- paddle/operators/mean_op.cc | 2 +- paddle/operators/minus_op.cc | 3 +-- paddle/operators/mul_op.cc | 2 +- paddle/operators/rowwise_add_op.cc | 2 +- paddle/operators/scale_op.cc | 2 +- paddle/operators/scatter_op.cc | 3 +-- paddle/operators/sigmoid_op.cc | 3 +-- paddle/operators/softmax_op.cc | 3 +-- 17 files changed, 32 insertions(+), 45 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 7f8da2da5a..ec79b7f42b 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -178,13 +178,13 @@ class MulKernel : public framework::OpKernel { ```c++ namespace ops = paddle::operators; -REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); +REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, ops::MulOpGrad); REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mul_grad, ops::MulGradKernel<paddle::platform::CPUPlace, float>); ``` - - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`, + - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,并且注册`ops::MulOpGrad`为其反向Op。 - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 diff --git a/paddle/framework/backward.md b/paddle/framework/backward.md index 8aa6728a95..9500c92a26 100644 --- a/paddle/framework/backward.md +++ b/paddle/framework/backward.md @@ -18,7 +18,7 @@ A backward network is built up with several backward operators. Backward operato For example, we have got a `mul_op`, and we can register it's information and corresponding backward operator by the following macro: ```cpp -REGISTER_OP(mul, MulOp, MulOpMaker, mul_grad, MulOpGrad); +REGISTER_OP(mul, MulOp, MulOpMaker, MulOpGrad); ``` `mul` is the operator's type. `MulOp` and `MulOpMaker` are the operator class and the operator maker class respectively. diff --git a/paddle/framework/backward_test.cc b/paddle/framework/backward_test.cc index f100c4d054..f4d99f55b5 100644 --- a/paddle/framework/backward_test.cc +++ b/paddle/framework/backward_test.cc @@ -148,16 +148,14 @@ class AddOpMaker : public OpProtoAndCheckerMaker { namespace f = paddle::framework; namespace ops = paddle::operators; using EnforceNotMet = paddle::platform::EnforceNotMet; -REGISTER_OP(rowwise_add, f::NOP, f::RowWiseAddOpMaker, rowwise_add_grad, - f::NOP); -REGISTER_OP(mul, f::NOP, f::MulOpMaker, mul_grad, f::NOP); -REGISTER_OP(sigmoid, f::NOP, f::SigmoidOpMaker, sigmoid_grad, f::NOP); +REGISTER_OP(rowwise_add, f::NOP, f::RowWiseAddOpMaker, f::NOP); +REGISTER_OP(mul, f::NOP, f::MulOpMaker, f::NOP); +REGISTER_OP(sigmoid, f::NOP, f::SigmoidOpMaker, f::NOP); REGISTER_OP_WITHOUT_GRADIENT(nograd, f::NOP, f::NoGradOpMaker); REGISTER_OP_WITHOUT_GRADIENT(fill_zeros_like, f::NOP, f::FillZeroOpMaker); -REGISTER_OP(add, f::NOP, f::AddOpMaker, add_grad, f::NOP); +REGISTER_OP(add, f::NOP, f::AddOpMaker, f::NOP); REGISTER_OP_WITHOUT_GRADIENT(fc, f::FcOp, f::FcOpMaker); -REGISTER_OP(many_output_op, f::NOP, f::ManyOutputOpMaker, many_output_op_grad, - f::NOP); +REGISTER_OP(many_output_op, f::NOP, f::ManyOutputOpMaker, f::NOP); TEST(Backward, simple_op_grad) { auto fwd = f::OpRegistry::CreateOp( diff --git a/paddle/framework/grad_op_builder_test.cc b/paddle/framework/grad_op_builder_test.cc index 902c2655e9..8a817a3e13 100644 --- a/paddle/framework/grad_op_builder_test.cc +++ b/paddle/framework/grad_op_builder_test.cc @@ -54,8 +54,8 @@ TEST(GradOpBuilder, AddTwo) { EXPECT_EQ(grad_add_op->Output(f::GradVarName("Y")), f::GradVarName("y")); } -REGISTER_OP(mult_io, f::NOP, f::MutiInOutOpMaker, mult_io_grad, f::NOP); -REGISTER_OP(io_ignored, f::NOP, f::IOIgnoredOpMaker, io_ignored_grad, f::NOP); +REGISTER_OP(mult_io, f::NOP, f::MutiInOutOpMaker, f::NOP); +REGISTER_OP(io_ignored, f::NOP, f::IOIgnoredOpMaker, f::NOP); TEST(GradOpBuilder, MutiInOut) { std::shared_ptr<f::OperatorBase> test_op(f::OpRegistry::CreateOp( diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index 2d09cde41e..64c7f23ab6 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -33,8 +33,7 @@ namespace framework { class OpRegistry { public: template <typename OpType, typename ProtoMakerType, typename GradOpType> - static void RegisterOp(const std::string& op_type, - const std::string& grad_op_type) { + static void RegisterOp(const std::string& op_type) { PADDLE_ENFORCE(!OpInfoMap::Instance().Has(op_type), "'%s' is registered more than once.", op_type); OpInfo op_info; @@ -43,9 +42,9 @@ class OpRegistry { const VariableNameMap& outputs, const AttributeMap& attrs) { return new OpType(type, inputs, outputs, attrs); }; - op_info.grad_op_type_ = grad_op_type; if (std::type_index(typeid(ProtoMakerType)) != std::type_index(typeid(NOPMaker))) { + op_info.grad_op_type_ = op_type + "_grad"; op_info.proto_ = new OpProto; op_info.checker_ = new OpAttrChecker; auto maker = ProtoMakerType(op_info.proto_, op_info.checker_); @@ -55,15 +54,14 @@ class OpRegistry { op_info.proto_->IsInitialized(), "Fail to initialize %s's OpProto, because %s is not initialized", op_type, op_info.proto_->InitializationErrorString()); + // register gradient op + RegisterOp<GradOpType, NOPMaker, NOP>(op_info.grad_op_type_); } else { + op_info.grad_op_type_ = ""; op_info.proto_ = nullptr; op_info.checker_ = nullptr; } OpInfoMap::Instance().Insert(op_type, op_info); - // register gradient op - if (!grad_op_type.empty()) { - RegisterOp<GradOpType, NOPMaker, NOP>(grad_op_type, ""); - } } static std::unique_ptr<OperatorBase> CreateOp(const std::string& type, @@ -92,10 +90,8 @@ class Registrar { template <typename OpType, typename ProtoMakerType, typename GradOpType> class OpRegistrar : public Registrar { public: - explicit OpRegistrar(const char* op_type) { OpRegistrar(op_type, ""); } - OpRegistrar(const char* op_type, const char* grad_op_type) { - OpRegistry::RegisterOp<OpType, ProtoMakerType, GradOpType>(op_type, - grad_op_type); + explicit OpRegistrar(const char* op_type) { + OpRegistry::RegisterOp<OpType, ProtoMakerType, GradOpType>(op_type); } }; @@ -121,8 +117,7 @@ class OpKernelRegistrar : public Registrar { /** * Macro to register Operator. */ -#define REGISTER_OP(op_type, op_class, op_maker_class, grad_op_type, \ - grad_op_class) \ +#define REGISTER_OP(op_type, op_class, op_maker_class, grad_op_class) \ STATIC_ASSERT_GLOBAL_NAMESPACE( \ __reg_op__##op_type, "REGISTER_OP must be called in global namespace"); \ class _OpClass_##op_type##_ : public op_class { \ @@ -137,14 +132,14 @@ class OpKernelRegistrar : public Registrar { }; \ static ::paddle::framework::OpRegistrar< \ _OpClass_##op_type##_, op_maker_class, _OpGradClass_##op_type##_> \ - __op_registrar_##op_type##__(#op_type, #grad_op_type); \ + __op_registrar_##op_type##__(#op_type); \ int TouchOpRegistrar_##op_type() { \ __op_registrar_##op_type##__.Touch(); \ return 0; \ } #define REGISTER_OP_WITHOUT_GRADIENT(op_type, op_class, op_maker_class) \ - REGISTER_OP(op_type, op_class, op_maker_class, , ::paddle::framework::NOP) + REGISTER_OP(op_type, op_class, op_maker_class, ::paddle::framework::NOP) /** * Macro to register OperatorKernel. diff --git a/paddle/operators/add_op.cc b/paddle/operators/add_op.cc index 8ab748ed71..6384d8c8ce 100644 --- a/paddle/operators/add_op.cc +++ b/paddle/operators/add_op.cc @@ -57,7 +57,7 @@ class AddOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(add_two, ops::AddOp, ops::AddOpMaker, add_two_grad, ops::AddOpGrad); +REGISTER_OP(add_two, ops::AddOp, ops::AddOpMaker, ops::AddOpGrad); REGISTER_OP_CPU_KERNEL(add_two, ops::AddKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/cross_entropy_op.cc b/paddle/operators/cross_entropy_op.cc index ab1e1c101a..ac76326262 100644 --- a/paddle/operators/cross_entropy_op.cc +++ b/paddle/operators/cross_entropy_op.cc @@ -67,8 +67,7 @@ OnehotCrossEntropy Operator. namespace ops = paddle::operators; REGISTER_OP(onehot_cross_entropy, ops::OnehotCrossEntropyOp, - ops::OnehotCrossEntropyOpMaker, onehot_cross_entropy_grad, - ops::OnehotCrossEntropyGradientOp); + ops::OnehotCrossEntropyOpMaker, ops::OnehotCrossEntropyGradientOp); REGISTER_OP_CPU_KERNEL(onehot_cross_entropy, ops::OnehotCrossEntropyOpKernel<float>); REGISTER_OP_CPU_KERNEL(onehot_cross_entropy_grad, diff --git a/paddle/operators/gather_op.cc b/paddle/operators/gather_op.cc index 123bed296c..07fa704824 100644 --- a/paddle/operators/gather_op.cc +++ b/paddle/operators/gather_op.cc @@ -63,8 +63,7 @@ Out = X[Index] } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(gather, ops::GatherOp, ops::GatherOpMaker, gather_grad, - ops::GatherGradOp); +REGISTER_OP(gather, ops::GatherOp, ops::GatherOpMaker, ops::GatherGradOp); REGISTER_OP_CPU_KERNEL(gather, ops::GatherOpKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/lookup_table_op.cc b/paddle/operators/lookup_table_op.cc index 94d40890a7..c3108ba8ec 100644 --- a/paddle/operators/lookup_table_op.cc +++ b/paddle/operators/lookup_table_op.cc @@ -66,7 +66,7 @@ class LookupTableOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(lookup_table, ops::LookupTableOp, ops::LookupTableOpMaker, - lookup_table_grad, ops::LookupTableOpGrad); + ops::LookupTableOpGrad); REGISTER_OP_CPU_KERNEL(lookup_table, ops::LookupTableKernel<float>); REGISTER_OP_CPU_KERNEL(lookup_table_grad, ops::LookupTableGradKernel<float>); diff --git a/paddle/operators/mean_op.cc b/paddle/operators/mean_op.cc index d3d0e55a67..e66e0abb25 100644 --- a/paddle/operators/mean_op.cc +++ b/paddle/operators/mean_op.cc @@ -54,7 +54,7 @@ class MeanGradOp : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(mean, ops::MeanOp, ops::MeanOpMaker, mean_grad, ops::MeanGradOp); +REGISTER_OP(mean, ops::MeanOp, ops::MeanOpMaker, ops::MeanGradOp); REGISTER_OP_CPU_KERNEL(mean, ops::MeanKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mean_grad, diff --git a/paddle/operators/minus_op.cc b/paddle/operators/minus_op.cc index 1eee9644ba..b4afebcd97 100644 --- a/paddle/operators/minus_op.cc +++ b/paddle/operators/minus_op.cc @@ -81,7 +81,6 @@ class MinusGradOp : public NetOp { USE_OP(scale); USE_OP_ITSELF(identity); namespace ops = paddle::operators; -REGISTER_OP(minus, ops::MinusOp, ops::MinusOpMaker, minus_grad, - ops::MinusGradOp<float>); +REGISTER_OP(minus, ops::MinusOp, ops::MinusOpMaker, ops::MinusGradOp<float>); REGISTER_OP_CPU_KERNEL(minus, ops::MinusKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index 173cc3850c..559d19e6bd 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -84,7 +84,7 @@ class MulOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); +REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, ops::MulOpGrad); REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mul_grad, ops::MulGradKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/rowwise_add_op.cc b/paddle/operators/rowwise_add_op.cc index 6825dce332..63de91254f 100644 --- a/paddle/operators/rowwise_add_op.cc +++ b/paddle/operators/rowwise_add_op.cc @@ -74,7 +74,7 @@ class RowwiseAddGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(rowwise_add, ops::RowwiseAddOp, ops::RowwiseAddOpMaker, - rowwise_add_grad, ops::RowwiseAddGradOp); + ops::RowwiseAddGradOp); REGISTER_OP_CPU_KERNEL( rowwise_add, ops::RowwiseAddKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/scale_op.cc b/paddle/operators/scale_op.cc index 8e96a74c94..4e039688d4 100644 --- a/paddle/operators/scale_op.cc +++ b/paddle/operators/scale_op.cc @@ -97,7 +97,7 @@ class IdentityOp : public NetOp { namespace ops = paddle::operators; -REGISTER_OP(scale, ops::ScaleOp, ops::ScaleOpMaker<float>, scale_grad, +REGISTER_OP(scale, ops::ScaleOp, ops::ScaleOpMaker<float>, ops::ScaleGradOp<float>); REGISTER_OP_CPU_KERNEL(scale, ops::ScaleKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/scatter_op.cc b/paddle/operators/scatter_op.cc index f901edefa2..35c185ad80 100644 --- a/paddle/operators/scatter_op.cc +++ b/paddle/operators/scatter_op.cc @@ -77,8 +77,7 @@ Out[Index] = Ref[Index] + Updates } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(scatter, ops::ScatterOp, ops::ScatterOpMaker, scatter_grad, - ops::ScatterGradOp); +REGISTER_OP(scatter, ops::ScatterOp, ops::ScatterOpMaker, ops::ScatterGradOp); REGISTER_OP_CPU_KERNEL(scatter, ops::ScatterOpKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/sigmoid_op.cc b/paddle/operators/sigmoid_op.cc index 761c6de8d4..f35b702384 100644 --- a/paddle/operators/sigmoid_op.cc +++ b/paddle/operators/sigmoid_op.cc @@ -53,8 +53,7 @@ class SigmoidOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(sigmoid, ops::SigmoidOp, ops::SigmoidOpMaker, sigmoid_grad, - ops::SigmoidOpGrad); +REGISTER_OP(sigmoid, ops::SigmoidOp, ops::SigmoidOpMaker, ops::SigmoidOpGrad); REGISTER_OP_CPU_KERNEL(sigmoid, ops::SigmoidKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/softmax_op.cc b/paddle/operators/softmax_op.cc index 40c51a64c4..471bb288fb 100644 --- a/paddle/operators/softmax_op.cc +++ b/paddle/operators/softmax_op.cc @@ -62,8 +62,7 @@ class SoftmaxOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; -REGISTER_OP(softmax, ops::SoftmaxOp, ops::SoftmaxOpMaker, softmax_grad, - ops::SoftmaxOpGrad); +REGISTER_OP(softmax, ops::SoftmaxOp, ops::SoftmaxOpMaker, ops::SoftmaxOpGrad); REGISTER_OP_CPU_KERNEL(softmax, ops::SoftmaxKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( From fff380b54e1d8da774e0c183ad206ffbac5f9b4b Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:03:45 -0700 Subject: [PATCH 19/72] Add layers and operators design doc --- doc/design/layers_operators.md | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 doc/design/layers_operators.md diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md new file mode 100644 index 0000000000..4cb590c85f --- /dev/null +++ b/doc/design/layers_operators.md @@ -0,0 +1,71 @@ +In a DL system, we can compose one or more fine grained operators into a coarse grained one. For example, the FC layer can be composed of a multiplication operator and an add operator. + +Historically, some fine grained operations are known as operators, and some coarse level ones are known as layers. But we need a well-defined separation. + +In general, operators are those very fine grained operations, e.g., mul and add. In the implementation, we can write them as C++ functions: + +```c++ +template <typename T> T add(T x, T y) { return x + y; } +template <typename T> T mul(T x, T y) { return x * y; } +``` + +Then we can wrap them into operators which are C++ classes and can be created from Python bindings by name. A C macro can do this. For example, the following macro invocation + +```c++ +#define MAKE_FUNCTION_OPERATOR(mul); +``` + +generates + +```c++ +class mulOp : public OperatorBase {...}; +REGISTER_OP(mulOp, "mul"); +``` + +so that in Python we can create operator mul by: + +```python +X1 = Var() +X2 = Var() +Y = Var() +paddle.cpp.create_operator("mul", input=[X1, X2], output=Y) +``` + +Also, at the same time, we can compose a coarse level C++ operator class by composing functions `mul` and `add`: + +```c++ +class FCOp : public OperatorBase { + public: + void Run(...) { + add(mul(Input("X"), Input("W")), Input("b"); + } +}; +REGISTER_OP(FCOp, "fc"); +``` + +We need to support such composition in Python as well. To do so, we need a higher level Python wrapping of operator creation than `paddle.cpp.create_operator`. This higher level operator API should be compatible with the layer API. + +Let's explain using an example. Suppose that we are going to compose the FC using mul and add in Python, we'd like to have Python functions `mul` and `add` defined in module `operator`: + +```python +def mul(X1, X2): + O = Var + paddle.cpp.create_operator("mul", input={X1, Y1], output=O) + return O + +def add(X1, X2): + O = Var + paddle.cpp.create_operator("add", input={X1, X2], output=O) + return O +``` + +so that we can define + +```python +def layer.fc(X): + W = Var() + b = Var() + return operator.add(operator.mul(X, W), b) +``` + +We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. This is how we differentiate layer and operators in PaddlePaddle. From 6aef11baac1ff09b0fc69dd801ba1fe508374c31 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:05:37 -0700 Subject: [PATCH 20/72] Add title --- doc/design/layers_operators.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md index 4cb590c85f..83169260c8 100644 --- a/doc/design/layers_operators.md +++ b/doc/design/layers_operators.md @@ -1,3 +1,5 @@ +# Design Doc: Layers and Operators + In a DL system, we can compose one or more fine grained operators into a coarse grained one. For example, the FC layer can be composed of a multiplication operator and an add operator. Historically, some fine grained operations are known as operators, and some coarse level ones are known as layers. But we need a well-defined separation. From 887275efad3e9e7184b17ee6a141196756d8fc07 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:12:24 -0700 Subject: [PATCH 21/72] Add a table --- doc/design/layers_operators.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md index 83169260c8..ee9e890e5c 100644 --- a/doc/design/layers_operators.md +++ b/doc/design/layers_operators.md @@ -50,12 +50,12 @@ We need to support such composition in Python as well. To do so, we need a high Let's explain using an example. Suppose that we are going to compose the FC using mul and add in Python, we'd like to have Python functions `mul` and `add` defined in module `operator`: ```python -def mul(X1, X2): +def operator.mul(X1, X2): O = Var paddle.cpp.create_operator("mul", input={X1, Y1], output=O) return O -def add(X1, X2): +def operator.add(X1, X2): O = Var paddle.cpp.create_operator("add", input={X1, X2], output=O) return O @@ -70,4 +70,14 @@ def layer.fc(X): return operator.add(operator.mul(X, W), b) ``` -We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. This is how we differentiate layer and operators in PaddlePaddle. +We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. So we have the following concepts in above illustrative example: + +| C++ functions/functors | mul | add | | | +| C++ operator class | mulOp | addOp | FCOp | | +| Python binding | operator.mul | operator.add | operator.fc | | +| Python function | | | | layer.fc | + +This is how we differentiate layer and operators in PaddlePaddle: + +- those defined in C++ and have a lightweighted Python wrapper in module `operators` are operators; whereas +- those who don't have C++ implementations but a Python implementation that compose C++ operators are known as layers. From 7159062873bc097e9a9951eb009e5f625b23b4a9 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:13:37 -0700 Subject: [PATCH 22/72] Add table header --- doc/design/layers_operators.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md index ee9e890e5c..cda99888be 100644 --- a/doc/design/layers_operators.md +++ b/doc/design/layers_operators.md @@ -72,6 +72,8 @@ def layer.fc(X): We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. So we have the following concepts in above illustrative example: +| implementation | mul | add | fc | fc | +--------------------------------------------------------------------------------- | C++ functions/functors | mul | add | | | | C++ operator class | mulOp | addOp | FCOp | | | Python binding | operator.mul | operator.add | operator.fc | | From 90a442825c42740173ecf5ee3e64c24756bcfd56 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:14:51 -0700 Subject: [PATCH 23/72] Change table to verbatim --- doc/design/layers_operators.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md index cda99888be..131effbccf 100644 --- a/doc/design/layers_operators.md +++ b/doc/design/layers_operators.md @@ -72,12 +72,12 @@ def layer.fc(X): We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. So we have the following concepts in above illustrative example: -| implementation | mul | add | fc | fc | ---------------------------------------------------------------------------------- +``` | C++ functions/functors | mul | add | | | | C++ operator class | mulOp | addOp | FCOp | | | Python binding | operator.mul | operator.add | operator.fc | | | Python function | | | | layer.fc | +``` This is how we differentiate layer and operators in PaddlePaddle: From 1f713f6822b96ccaff5684e547dac32590047d85 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:25:05 -0700 Subject: [PATCH 24/72] in response to comments from Jia-Yi --- doc/design/layers_operators.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/design/layers_operators.md b/doc/design/layers_operators.md index 131effbccf..e4f8d303e8 100644 --- a/doc/design/layers_operators.md +++ b/doc/design/layers_operators.md @@ -1,4 +1,4 @@ -# Design Doc: Layers and Operators +# Design Doc: Functions, Operators, and Layers In a DL system, we can compose one or more fine grained operators into a coarse grained one. For example, the FC layer can be composed of a multiplication operator and an add operator. @@ -20,8 +20,8 @@ Then we can wrap them into operators which are C++ classes and can be created fr generates ```c++ -class mulOp : public OperatorBase {...}; -REGISTER_OP(mulOp, "mul"); +template <typename T> class mulOp : public OperatorBase {...}; +REGISTER_OP(mulOp<float32>, "mul"); ``` so that in Python we can create operator mul by: @@ -36,12 +36,13 @@ paddle.cpp.create_operator("mul", input=[X1, X2], output=Y) Also, at the same time, we can compose a coarse level C++ operator class by composing functions `mul` and `add`: ```c++ +template <typename T> class FCOp : public OperatorBase { public: void Run(...) { - add(mul(Input("X"), Input("W")), Input("b"); + add(mul(Input<T>("X"), Input<T>("W")), Input<T>("b"); } -}; +};d REGISTER_OP(FCOp, "fc"); ``` From 305aebc005c4083ee3733688fc1ed23b5e1a8232 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:26:44 -0700 Subject: [PATCH 25/72] Rename file according to title --- doc/design/{layers_operators.md => functions_operators_layers.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/design/{layers_operators.md => functions_operators_layers.md} (100%) diff --git a/doc/design/layers_operators.md b/doc/design/functions_operators_layers.md similarity index 100% rename from doc/design/layers_operators.md rename to doc/design/functions_operators_layers.md From 2b3904a6a8c568f8bf20155f8f87a33c9f4e67b9 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Sat, 2 Sep 2017 17:34:10 -0700 Subject: [PATCH 26/72] Explain auto code generation --- doc/design/functions_operators_layers.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/doc/design/functions_operators_layers.md b/doc/design/functions_operators_layers.md index e4f8d303e8..7a2e8fd0ac 100644 --- a/doc/design/functions_operators_layers.md +++ b/doc/design/functions_operators_layers.md @@ -42,7 +42,7 @@ class FCOp : public OperatorBase { void Run(...) { add(mul(Input<T>("X"), Input<T>("W")), Input<T>("b"); } -};d +}; REGISTER_OP(FCOp, "fc"); ``` @@ -52,17 +52,17 @@ Let's explain using an example. Suppose that we are going to compose the FC usi ```python def operator.mul(X1, X2): - O = Var + O = Var() paddle.cpp.create_operator("mul", input={X1, Y1], output=O) return O def operator.add(X1, X2): - O = Var + O = Var() paddle.cpp.create_operator("add", input={X1, X2], output=O) return O ``` -so that we can define +Above code snippets are automatically generated. Given them, users can define ```python def layer.fc(X): @@ -71,6 +71,19 @@ def layer.fc(X): return operator.add(operator.mul(X, W), b) ``` +If we don't have `operator.mul` and `operator.add`, the definiton of `layer.fc` would be complicated: + +```python +def layer.fc(X): + W = Var() + b = Var() + O1 = Var() + paddle.cpp.create_operator("mul", input=[X, W], output=O1) + O2 = Var() + paddle.cpp.create_operator("add", input=[O1, b], output=O2) + return O2 +``` + We'd like to have Python bindings to operators in package `paddle.operator`, and Python compositions of operators in package `paddle.layer`. So we have the following concepts in above illustrative example: ``` From d156dfa93bd39beeb3f79422ae60e3ebdc5ac1c8 Mon Sep 17 00:00:00 2001 From: zchen0211 <chenzhuoyuan07@gmail.com> Date: Sun, 3 Sep 2017 00:42:10 +0000 Subject: [PATCH 27/72] if else design doc --- doc/design/if_else_op.md | 54 +++++++++++++ paddle/operators/switch_op.cc | 120 ---------------------------- paddle/operators/switch_op.h | 143 ---------------------------------- 3 files changed, 54 insertions(+), 263 deletions(-) create mode 100644 doc/design/if_else_op.md delete mode 100644 paddle/operators/switch_op.cc delete mode 100644 paddle/operators/switch_op.h diff --git a/doc/design/if_else_op.md b/doc/design/if_else_op.md new file mode 100644 index 0000000000..79bb543de1 --- /dev/null +++ b/doc/design/if_else_op.md @@ -0,0 +1,54 @@ +In an if_op, only inputs with condition satisfied will be run. The op could have multiple inputs and multiple outputs. +We should have the following design: + +```python +# A 1-d bool vector +cond = Var() +# create an op +if = pd.if_op() + +with if.true_block() as block: + x1 = if.input(x1) + x2 = if.input(x2) + y = pd.add(x1, x2) + y2 = pd.fc(x1) # contains (w,b) + if.output(y) + if.output(y2) + +o1, o2 = if(cond) +``` + +In an if_op, only inputs with condition satisfied will be run. +We should have the following design: +```python +# A 1-d bool vector +cond = Var() +# create an op +if = pd.if_op() + +with if.true_block() as block: + x1 = if.input(x1) + x2 = if.input(x2) + y = pd.add(x1, x2) + y2 = pd.fc(x1) # contains (w,b) + if.output(y, name="y") + if.output(y2, name="y2") + +with if.false_block() as block: + x1 = if.input(x1) + x2 = if.input(x2) + y = pd.fc(x2) + y2 = pd.softmax(x1) + if.output(y, name="y") + if.output(y2, name="y2") + +o1, o2 = if(cond) +``` + +Some questions: + 1. how to know which inputs will be selected by condition? + e.g. True_block(): + y = pd.fc(x) + # we will have x, w, b all as inputs + # but only x will be selected by cond, how can the block know? + diff --git a/paddle/operators/switch_op.cc b/paddle/operators/switch_op.cc deleted file mode 100644 index 09574a89a3..0000000000 --- a/paddle/operators/switch_op.cc +++ /dev/null @@ -1,120 +0,0 @@ -#include "paddle/operators/switch_op.h" - -namespace paddle { -namespace operators { - -// namespace if_else{ - - -void CondOp::Init() override { -} - -void InferShape(const std::shared_ptr<Scope>& scope) const override { - subnet_t = GetAttr<std::string>("subnet_t"); - subnet_f = GetAttr<std::string>("subnet_f"); - - // Create two Nets - // I use the same style as Recurrent_op, but does it create the net? - // can be called like - Variable* net_t = scope.FindVar(subnet_t); - Variable* net_f = scope.FindVar(subnet_f); - - net_op_t = scope.FindVar(net_t)->GetMutable<NetOp>(); - net_op_f = scope.FindVar(net_f)->GetMutable<NetOp>(); - - // Create two scopes - scope_t = scope.NewScope(); - scope_f = scope.NewScope(); - - // check cond of size (batch_size), type bool - net_op_t->InferShape(scope_t); - net_op_f->InferShape(scope_f); - - // check net_op_t and net_op_f of exactly same shape? -} - -void IfElseOp::Run(const std::shared_ptr<Scope>& scope, - const platform::DeviceContext& dev_ctx) const { - /* step 1: create two subnets and scopes, supposed done in Infershape() */ - - /* step 2: get true and false index */ - cond = Input(name.cond); - // get condition tensor - auto cond_tensor = scope.get<Tensor>(cond); - // tensor to cpu, whatever device it used to be in - cond_cpu.CopyFrom(cond_tensor, platform::CPUPlace()); - - size_t batch_size = cond_cpu.dims()[0]; - - // keep index of true and false to slice, clear them first before each batch - true_index.clear(); - false_index.clear(); - - // get a DDim type variable dims, check dimension - auto dims = input0.dims(); - for(int i=0; i<dims; i++) { - if (cond_cpu->data[i]) - true_index.push_back(i); - else - false_index.push_back(i); - } - - // turn true_index and false_index to tensors - Tensor* true_index_tensor = new Tensor(true_index); - Tensor* false_index_tensor = new Tensor(false_index); - - /* Step 3: Gather */ - { // True Scope - // Create new stuff - for (auto& input : net_op_t->inputs_) { - scope_t.NewVar(input); - if (input.type() != PARAMETER) { // gather and slice required - // Get Tensor and gather - Tensor* input_gather_ = scope_t.FindVar(input)->GetMutable<Tensor>(); - Tensor* input_full_ = scope.FindVar(input)->GetMutable<Tensor>(); - input_gather_ = Gather(input_full_, true_index_tensor); - } - } - - for (auto& output : net_op->outputs_) { - scope_t.NewVar(output); - } - - net_op_t.Run(); - } - - { // False Scope - // Create new stuff - for (auto& input : net_op_f->inputs_) { - scope_f.NewVar(input); - if (input.type() != PARAMETER) { // gather and slice required - // Get Tensor and gather - Tensor* input_gather_ = scope_f.FindVar(input)->GetMutable<Tensor>(); - Tensor* input_full_ = scope.FindVar(input)->GetMutable<Tensor>(); - input_gather_ = Gather(input_full_, false_index_tensor); - } - } - - for (auto& output : net_op->outputs_) { - scope_t.NewVar(output); - } - - net_op_f.Run(); - } - - /* Merge Output Together by scatter update */ - for (auto& ouput : outputs_) { - Tensor* output_t = scope_t->FindVar(output)->GetMutable<Tensor>(); - Tensor* output_f = scope_f->FindVar(output)->GetMutable<Tensor>(); - Tensor* output_tensor = scope->FindVar(output)->GetMutable<Tensor>(); - Scatter(output_t, output_tensor, true_index_tensor); - Scatter(output_f, output_tensor, false_index_tensor); - } -} - -} // namespace operators -} // namespace paddle - -REGISTER_OP(ifelse_op, - paddle::operators::IfElseOp, - paddle::operators::RecurrentAlgorithmProtoAndCheckerMaker); diff --git a/paddle/operators/switch_op.h b/paddle/operators/switch_op.h deleted file mode 100644 index f72726bce1..0000000000 --- a/paddle/operators/switch_op.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. */ - -#pragma once -#include "glog/logging.h" -#include "paddle/framework/eigen.h" -#include "paddle/framework/operator.h" -#include "paddle/framework/ddim.h" -#include "paddle/operators/gather.h" - -namespace paddle { -namespace operators { - -using namespace paddle::framework; - -template <typename Place, typename T> -class CondOp final : public OperatorBase { -public: - void Init() override; - - /** - * InferShape must be called before Run. - */ - virtual void InferShape(const std::shared_ptr<Scope>& scope) const override { - scope_t = scope.NewScope(); - scope_f = scope.NewScope(); - net_op_t->InferShape(scope_t); - net_op_f->InferShape(scope_f); - tensor_t = new Tensor(); - tensor_f = new Tensor(); - { // True branch - for (auto& input : net_op_t->Inputs()) { - auto var_name = input.second; - if (!scope_t.FindVar(var_name) { - scope_t.NewVar(var_name)->GetMutable<Tensor>(); - } - } - } - { // False branch - for (auto& input : net_op_f->Inputs()) { - auto var_name = input.second; - if (!scope_f.FindVar(var_name) { - scope_f.NewVar(var_name)->GetMutable<Tensor>(); - } - } - } - } - - virtual void Run(const std::shared_ptr<Scope>& scope, - const platform::DeviceContext& dev_ctx) const override { - auto* cond = context.Input<Tensor>("Cond"); - // Step 1: get the index - true_index.clear(); - false_index.clear(); - for(int i = 0; i < cond->dims()[0]; ++i) { - if (cond->data<bool>()[i]) - true_index.push_back(i); - else: - false_index.push_back(i); - } - framework::DDim dim_ = paddle::framework::make_ddim({0}); - dim_[0] = true_index.size(); - tensor_t->Resize(dim_); - // set value - for (int i = 0; i < dim_[0]; ++i) - tensor_t->mutable_data<int>()[i] = true_index[i]; - dim_[0] = false_index.size(); - tensor_f->Resize(dim_); - // set value - for (int i = 0; i < dim_[0]; ++i) - tensor_f->mutable_data<int>()[i] = false_index[i]; - - // Step 2: collect data by calling gather - { // True branch - for (auto& input : net_op_t->Inputs()) { - auto var_name = input.second; - // find Tensor - Tensor* Tensor_parent = scope.FindVar(var_name)->GetMutable<Tensor>(); - Tensor* Tensor_child = scope_t.FindVar(var_name)->GetMutable<Tensor>(); - Gather<T>(dev_ctx.GetPlace(), tensor_parent, tensor_t, tensor_child); - } - - } - } - -private: - Scope* scope_t; - Scope* scope_f; - - // subnet_t - std::unique_ptr<framework::OperatorBase> net_op_t; - // NetOp* net_op_t; - // subnet_f - std::unique_ptr<framework::OperatorBase> net_op_f; - // NetOp* net_op_f; - - // T_index - vector<int> true_index; - Tensor* tensor_t; - // F_index - vector<int> false_index; - Tensor* tensor_f; -}; - -class CondOpMaker : public OpProtoAndCheckerMaker { -public: - IfElseOpMaker(OpProto *proto, OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("Cond", "The condition, which is a bool vector"); - AddAttr<std::string>("subnet_t", "The subnet network to be called when Cond[i] == true"); - AddAttr<std::string>("subnet_f", "The subnet network to be called when Cond[i] == false"); - AddOutput("Out", "The output of if-else op"); - AddComment(R"DOC( -Sample dependent Cond Operator: -The equation is: Out[i] = subnet_t[i], if Cond[i] == true -Out[i] = subnet_t[i], if Cond[i] == false -)DOC"); - } -}; - -class CondGradientOp final : public OperatorBase { -public: - void Init() override; - - virtual void InferShape(const std::shared_ptr<Scope>& scope) const override; - - virtual void Run(const std::shared_ptr<Scope>& scope, - const platform::DeviceContext& dev_ctx) const override; -}; - -} // namespace operators -} // namespace paddle From e39a2c9f22610385b1ed680c6e015e10e9bef241 Mon Sep 17 00:00:00 2001 From: Zhuoyuan <chenzhuoyuan07@gmail.com> Date: Sat, 2 Sep 2017 17:43:30 -0700 Subject: [PATCH 28/72] update if else --- doc/design/if_else_op.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/design/if_else_op.md b/doc/design/if_else_op.md index 79bb543de1..cd66bfabf2 100644 --- a/doc/design/if_else_op.md +++ b/doc/design/if_else_op.md @@ -47,8 +47,9 @@ o1, o2 = if(cond) Some questions: 1. how to know which inputs will be selected by condition? - e.g. True_block(): + ```python + True_block(): y = pd.fc(x) # we will have x, w, b all as inputs # but only x will be selected by cond, how can the block know? - +``` From fd8df0806dd07af4fed9ae40ffe5ec571639d2c4 Mon Sep 17 00:00:00 2001 From: Yu Yang <yuyang18@baidu.com> Date: Sat, 2 Sep 2017 20:37:48 -0700 Subject: [PATCH 29/72] Make operator Input/Output can return nullptr --- paddle/framework/operator.cc | 32 +++++++++++++++-------- paddle/framework/operator.h | 50 ++++++++++++++++++++---------------- 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index 7abbde610f..4d32795884 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -33,12 +33,18 @@ ExecutionContext::GetEigenDevice<platform::GPUPlace, Eigen::GpuDevice>() const { } #endif -const std::string& OperatorBase::Input(const std::string& name) const { +std::string OperatorBase::Input(const std::string& name) const { auto& ins = Inputs(name); - PADDLE_ENFORCE_EQ(ins.size(), 1UL, - "Op %s input %s should contain only one variable", type_, - name); - return ins[0]; + switch (ins.size()) { + case 0: + return kEmptyVarName; + case 1: + return ins[0]; + default: + PADDLE_THROW("Op %s input %s should contain only one variable", type_, + name); + return ""; + } } const std::vector<std::string>& OperatorBase::Inputs( @@ -49,12 +55,18 @@ const std::vector<std::string>& OperatorBase::Inputs( return it->second; } -const std::string& OperatorBase::Output(const std::string& name) const { +std::string OperatorBase::Output(const std::string& name) const { auto& outs = Outputs(name); - PADDLE_ENFORCE_EQ(outs.size(), 1UL, - "Op %s output %s should contain only one variable", type_, - name); - return outs[0]; + switch (outs.size()) { + case 0: + return kEmptyVarName; + case 1: + return outs[0]; + default: + PADDLE_THROW("Op %s output %s should contain only one variable", type_, + name); + return ""; + } } const std::vector<std::string>& OperatorBase::Outputs( diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 8397570d26..7759473ef3 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -95,12 +95,12 @@ class OperatorBase { const VariableNameMap& Inputs() const { return inputs_; } const VariableNameMap& Outputs() const { return outputs_; } //! Get a input with argument's name described in `op_proto` - const std::string& Input(const std::string& name) const; + std::string Input(const std::string& name) const; //! Get a input which has multiple variables. const std::vector<std::string>& Inputs(const std::string& name) const; //! Get a output with argument's name described in `op_proto` - const std::string& Output(const std::string& name) const; + std::string Output(const std::string& name) const; //! Get an output which has multiple variables. //! TODO add a vector_view to prevent memory copy. const std::vector<std::string>& Outputs(const std::string& name) const; @@ -238,11 +238,21 @@ class InferShapeContext { } const Variable* InputVar(const std::string& name) const { - return scope_.FindVar(op_.Input(name)); + auto ipt = op_.Input(name); + if (ipt == kEmptyVarName) { + return nullptr; + } else { + return scope_.FindVar(ipt); + } } Variable* OutputVar(const std::string& name) const { - return scope_.FindVar(op_.Output(name)); + auto opt = op_.Output(name); + if (opt == kEmptyVarName) { + return nullptr; + } else { + return scope_.FindVar(opt); + } } const std::vector<const Variable*> MultiInputVar( @@ -250,9 +260,11 @@ class InferShapeContext { auto names = op_.Inputs(name); std::vector<const Variable*> res; res.reserve(names.size()); - std::transform( - names.begin(), names.end(), std::back_inserter(res), - [this](const std::string& name) { return scope_.FindVar(name); }); + std::transform(names.begin(), names.end(), std::back_inserter(res), + [this](const std::string& name) { + return name != kEmptyVarName ? scope_.FindVar(name) + : nullptr; + }); return res; } @@ -260,24 +272,24 @@ class InferShapeContext { auto names = op_.Outputs(name); std::vector<const Variable*> res; res.reserve(names.size()); - std::transform( - names.begin(), names.end(), std::back_inserter(res), - [this](const std::string& name) { return scope_.FindVar(name); }); + std::transform(names.begin(), names.end(), std::back_inserter(res), + [this](const std::string& name) { + return name != kEmptyVarName ? scope_.FindVar(name) + : nullptr; + }); return res; } template <typename T> const T* Input(const std::string& name) const { auto* var = InputVar(name); - PADDLE_ENFORCE_NOT_NULL(var, "Input(%s) should not be nullptr", name); - return &var->Get<T>(); + return var == nullptr ? nullptr : &var->Get<T>(); } template <typename T> T* Output(const std::string& name) const { auto var = OutputVar(name); - PADDLE_ENFORCE_NOT_NULL(var, "Output(%s) should not be nullptr", name); - return var->GetMutable<T>(); + return var == nullptr ? nullptr : var->GetMutable<T>(); } template <typename T> @@ -288,10 +300,7 @@ class InferShapeContext { std::transform(names.begin(), names.end(), std::back_inserter(res), [&](const std::string& sub_name) { auto var = scope_.FindVar(sub_name); - PADDLE_ENFORCE_NOT_NULL( - var, "MultiInput(%s:%s) should not be nullptr", name, - sub_name); - return &var->Get<T>(); + return var == nullptr ? nullptr : &var->Get<T>(); }); return res; } @@ -304,10 +313,7 @@ class InferShapeContext { std::transform(names.begin(), names.end(), std::back_inserter(res), [&](const std::string& sub_name) { auto var = scope_.FindVar(sub_name); - PADDLE_ENFORCE_NOT_NULL( - var, "MultiOutput(%s:%s) should not be nullptr.", name, - sub_name); - return var->GetMutable<T>(); + return var == nullptr ? nullptr : var->GetMutable<T>(); }); return res; } From 879866cc565ed5e2fe76e92bcb2268c6916f7ffd Mon Sep 17 00:00:00 2001 From: Zhuo Zhang <lispc@qq.com> Date: Sun, 3 Sep 2017 15:57:14 +0800 Subject: [PATCH 30/72] add PyDataProvider2.InputType pretty print function --- python/paddle/trainer/PyDataProvider2.py | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/python/paddle/trainer/PyDataProvider2.py b/python/paddle/trainer/PyDataProvider2.py index 7e305e2cd9..033c71cf8f 100644 --- a/python/paddle/trainer/PyDataProvider2.py +++ b/python/paddle/trainer/PyDataProvider2.py @@ -27,6 +27,14 @@ class SequenceType(object): SEQUENCE = 1 SUB_SEQUENCE = 2 + @classmethod + def tostring(cls, value): + for k in cls.__dict__: + if not k.startswith('__'): + if getattr(cls, k) == value: + return cls.__name__ + '.' + k + return 'INVALID(' + str(value) + ')' + # TODO(yuyang18): Add string data type here. class DataType(object): @@ -35,6 +43,14 @@ class DataType(object): SparseValue = 2 Index = 3 + @classmethod + def tostring(cls, value): + for k in cls.__dict__: + if not k.startswith('__'): + if getattr(cls, k) == value: + return cls.__name__ + '.' + k + return 'INVALID(' + str(value) + ')' + class CacheType(object): NO_CACHE = 0 # No cache at all @@ -69,6 +85,25 @@ class InputType(object): self.seq_type = seq_type self.type = tp + def __repr__(self): + """ + Return a human readable representation like 'InputType(dim=25921, seq_type=SequenceType.NO_SEQUENCE, type=DataType.Dense)' + """ + repr_str = type(self).__name__ + repr_str += '(' + serialize_func_map = { + 'dim': repr, + 'seq_type': SequenceType.tostring, + 'type': DataType.tostring + } + for idx, k in enumerate(self.__slots__): + if idx != 0: + repr_str += ', ' + repr_str += ( + k + '=' + serialize_func_map.get(k, repr)(getattr(self, k))) + repr_str += ')' + return repr_str + def dense_slot(dim, seq_type=SequenceType.NO_SEQUENCE): """ From d7a1e40e10bbe9778916c61755ae04592ebb19b7 Mon Sep 17 00:00:00 2001 From: Yu Yang <yuyang18@baidu.com> Date: Sun, 3 Sep 2017 11:02:47 -0700 Subject: [PATCH 31/72] Simple Implementation --- paddle/framework/operator.cc | 28 ++++++++-------------------- paddle/framework/operator.h | 20 ++++++-------------- 2 files changed, 14 insertions(+), 34 deletions(-) diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index 4d32795884..68fb469b56 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -35,16 +35,10 @@ ExecutionContext::GetEigenDevice<platform::GPUPlace, Eigen::GpuDevice>() const { std::string OperatorBase::Input(const std::string& name) const { auto& ins = Inputs(name); - switch (ins.size()) { - case 0: - return kEmptyVarName; - case 1: - return ins[0]; - default: - PADDLE_THROW("Op %s input %s should contain only one variable", type_, - name); - return ""; - } + PADDLE_ENFORCE_LE(ins.size(), 1UL, + "Op %s input %s should contain only one variable", type_, + name); + return ins.empty() ? kEmptyVarName : ins[0]; } const std::vector<std::string>& OperatorBase::Inputs( @@ -57,16 +51,10 @@ const std::vector<std::string>& OperatorBase::Inputs( std::string OperatorBase::Output(const std::string& name) const { auto& outs = Outputs(name); - switch (outs.size()) { - case 0: - return kEmptyVarName; - case 1: - return outs[0]; - default: - PADDLE_THROW("Op %s output %s should contain only one variable", type_, - name); - return ""; - } + PADDLE_ENFORCE_LE(outs.size(), 1UL, + "Op %s output %s should contain only one variable", type_, + name); + return outs.empty() ? kEmptyVarName : outs[0]; } const std::vector<std::string>& OperatorBase::Outputs( diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 7759473ef3..60ca8b279e 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -239,20 +239,12 @@ class InferShapeContext { const Variable* InputVar(const std::string& name) const { auto ipt = op_.Input(name); - if (ipt == kEmptyVarName) { - return nullptr; - } else { - return scope_.FindVar(ipt); - } + return ipt == kEmptyVarName ? nullptr : scope_.FindVar(ipt); } Variable* OutputVar(const std::string& name) const { auto opt = op_.Output(name); - if (opt == kEmptyVarName) { - return nullptr; - } else { - return scope_.FindVar(opt); - } + return opt == kEmptyVarName ? nullptr : scope_.FindVar(opt); } const std::vector<const Variable*> MultiInputVar( @@ -262,8 +254,8 @@ class InferShapeContext { res.reserve(names.size()); std::transform(names.begin(), names.end(), std::back_inserter(res), [this](const std::string& name) { - return name != kEmptyVarName ? scope_.FindVar(name) - : nullptr; + return name == kEmptyVarName ? nullptr + : scope_.FindVar(name); }); return res; } @@ -274,8 +266,8 @@ class InferShapeContext { res.reserve(names.size()); std::transform(names.begin(), names.end(), std::back_inserter(res), [this](const std::string& name) { - return name != kEmptyVarName ? scope_.FindVar(name) - : nullptr; + return name == kEmptyVarName ? nullptr + : scope_.FindVar(name); }); return res; } From 32244b528b75889d4bee4b5291c9d85f40978700 Mon Sep 17 00:00:00 2001 From: zchen0211 <chenzhuoyuan07@gmail.com> Date: Sun, 3 Sep 2017 11:11:40 -0700 Subject: [PATCH 32/72] if else modified --- doc/design/if_else_op.md | 98 +++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/doc/design/if_else_op.md b/doc/design/if_else_op.md index 79bb543de1..2e2fbe99ad 100644 --- a/doc/design/if_else_op.md +++ b/doc/design/if_else_op.md @@ -1,54 +1,60 @@ -In an if_op, only inputs with condition satisfied will be run. The op could have multiple inputs and multiple outputs. -We should have the following design: +IfOp should have only one branch. An IfOp operator takes a `cond` variable whose value must be a vector of N boolean elements. Its return value has M (M<=N) instances, each corresponds to a true element in `cond`. ```python -# A 1-d bool vector -cond = Var() -# create an op -if = pd.if_op() - -with if.true_block() as block: - x1 = if.input(x1) - x2 = if.input(x2) - y = pd.add(x1, x2) - y2 = pd.fc(x1) # contains (w,b) - if.output(y) - if.output(y2) - -o1, o2 = if(cond) +import paddle as pd + +x = var() +y = var() +cond = var() + +b = pd.create_ifop_builder(inputs=[x], output_num=1) +with b.true_block(): + x = b.inputs(0) + z = operator.add(x, y) + b.set_output(0, operator.softmax(z)) + +out = b(cond) ``` -In an if_op, only inputs with condition satisfied will be run. -We should have the following design: +If we want the output still has N instances, we can use IfElseOp with a default value, whose minibatch size must be N: + ```python -# A 1-d bool vector -cond = Var() -# create an op -if = pd.if_op() - -with if.true_block() as block: - x1 = if.input(x1) - x2 = if.input(x2) - y = pd.add(x1, x2) - y2 = pd.fc(x1) # contains (w,b) - if.output(y, name="y") - if.output(y2, name="y2") - -with if.false_block() as block: - x1 = if.input(x1) - x2 = if.input(x2) - y = pd.fc(x2) - y2 = pd.softmax(x1) - if.output(y, name="y") - if.output(y2, name="y2") - -o1, o2 = if(cond) +import paddle as pd + +x = var() +y = var() +cond = var() +default_value = var() +b = pd.create_ifelseop_builder(inputs=[x], output_num=1) +with b.true_block(): + x = b.inputs(0) + z = operator.add(x, y) + b.set_output(0, operator.softmax(z)) + +with b.false_block(): + x = b.inputs(0) + z = layer.fc(x) + b.set_output(0, operator.softmax(z)) + +out = b(cond) ``` -Some questions: - 1. how to know which inputs will be selected by condition? - e.g. True_block(): - y = pd.fc(x) - # we will have x, w, b all as inputs - # but only x will be selected by cond, how can the block know? +If only true_block is set in an IfElseOp, we can have a default value for false as: +```python +import paddle as pd + +x = var() +y = var() +cond = var() +default_value = var() +b = pd.create_ifelseop_builder(inputs=[x], output_num=1, default_value) + +with b.true_block(): + x = b.inputs(0) + z = operator.add(x, y) + b.set_output(0, operator.softmax(z)) + +out = b(cond) +``` +where default_value is a list of vars for `cond` == False. From d323831a0bee005a5f58d13d2691eaa338cc6d38 Mon Sep 17 00:00:00 2001 From: qiaolongfei <qiaolongfei@baidu.com> Date: Sun, 3 Sep 2017 12:13:22 -0700 Subject: [PATCH 33/72] add GetAttr to InferShapeContext --- paddle/framework/operator.h | 5 +++++ paddle/operators/gaussian_random_op.cc | 7 +++---- paddle/operators/gaussian_random_op.cu | 7 +++---- paddle/operators/scale_op.h | 2 +- paddle/operators/sgd_op.h | 2 +- paddle/operators/uniform_random_op.cc | 7 +++---- paddle/operators/uniform_random_op.cu | 7 +++---- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 9874a7c295..29fa3ffd87 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -233,6 +233,11 @@ class InferShapeContext { const Scope& scope() const { return scope_; } + template <typename T> + inline const T& GetAttr(const std::string& name) const { + return op_.GetAttr<T>(name); + } + size_t InputSize(const std::string& name) const { return op_.Inputs(name).size(); } diff --git a/paddle/operators/gaussian_random_op.cc b/paddle/operators/gaussian_random_op.cc index 9eb976fed1..056447901d 100644 --- a/paddle/operators/gaussian_random_op.cc +++ b/paddle/operators/gaussian_random_op.cc @@ -19,13 +19,12 @@ template <typename T> class CPUGaussianRandomKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - float mean = context.op().GetAttr<float>("mean"); - float std = context.op().GetAttr<float>("std"); + float mean = context.GetAttr<float>("mean"); + float std = context.GetAttr<float>("std"); auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); - unsigned int seed = - static_cast<unsigned int>(context.op().GetAttr<int>("seed")); + unsigned int seed = static_cast<unsigned int>(context.GetAttr<int>("seed")); std::minstd_rand engine; if (seed == 0) { seed = std::random_device()(); diff --git a/paddle/operators/gaussian_random_op.cu b/paddle/operators/gaussian_random_op.cu index 9769fbcd2b..833a82bbf2 100644 --- a/paddle/operators/gaussian_random_op.cu +++ b/paddle/operators/gaussian_random_op.cu @@ -42,14 +42,13 @@ class GPUGaussianRandomKernel : public framework::OpKernel { void Compute(const framework::ExecutionContext& context) const override { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); - unsigned int seed = - static_cast<unsigned int>(context.op().GetAttr<int>("seed")); + unsigned int seed = static_cast<unsigned int>(context.GetAttr<int>("seed")); if (seed == 0) { std::random_device rd; seed = rd(); } - T mean = static_cast<T>(context.op().GetAttr<float>("mean")); - T std = static_cast<T>(context.op().GetAttr<float>("std")); + T mean = static_cast<T>(context.GetAttr<float>("mean")); + T std = static_cast<T>(context.GetAttr<float>("std")); thrust::counting_iterator<unsigned int> index_sequence_begin(0); ssize_t N = framework::product(tensor->dims()); thrust::transform(index_sequence_begin, index_sequence_begin + N, diff --git a/paddle/operators/scale_op.h b/paddle/operators/scale_op.h index 760b26f5e9..65fb77eefa 100644 --- a/paddle/operators/scale_op.h +++ b/paddle/operators/scale_op.h @@ -27,7 +27,7 @@ class ScaleKernel : public framework::OpKernel { auto* in = context.Input<framework::Tensor>("X"); tensor->mutable_data<T>(in->place()); - auto scale = static_cast<T>(context.op().GetAttr<AttrType>("scale")); + auto scale = static_cast<T>(context.GetAttr<AttrType>("scale")); auto eigen_out = framework::EigenVector<T>::Flatten(*tensor); auto eigen_in = framework::EigenVector<T>::Flatten(*in); diff --git a/paddle/operators/sgd_op.h b/paddle/operators/sgd_op.h index b54a7864b0..8422b622ee 100644 --- a/paddle/operators/sgd_op.h +++ b/paddle/operators/sgd_op.h @@ -31,7 +31,7 @@ class SGDOpKernel : public framework::OpKernel { auto param = ctx.Input<Tensor>("param"); auto grad = ctx.Input<Tensor>("grad"); auto param_out = ctx.Output<Tensor>("param_out"); - float lr = ctx.op().GetAttr<float>("learning_rate"); + float lr = ctx.GetAttr<float>("learning_rate"); param_out->mutable_data<T>(ctx.GetPlace()); diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index dbff2a1365..2d943c4508 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -26,16 +26,15 @@ class CPUUniformRandomKernel : public framework::OpKernel { void Compute(const framework::ExecutionContext& context) const override { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); - unsigned int seed = - static_cast<unsigned int>(context.op().GetAttr<int>("seed")); + unsigned int seed = static_cast<unsigned int>(context.GetAttr<int>("seed")); std::minstd_rand engine; if (seed == 0) { seed = std::random_device()(); } engine.seed(seed); std::uniform_real_distribution<T> dist( - static_cast<T>(context.op().GetAttr<float>("min")), - static_cast<T>(context.op().GetAttr<float>("max"))); + static_cast<T>(context.GetAttr<float>("min")), + static_cast<T>(context.GetAttr<float>("max"))); ssize_t size = framework::product(tensor->dims()); for (ssize_t i = 0; i < size; ++i) { data[i] = dist(engine); diff --git a/paddle/operators/uniform_random_op.cu b/paddle/operators/uniform_random_op.cu index fc8397f134..df993c0779 100644 --- a/paddle/operators/uniform_random_op.cu +++ b/paddle/operators/uniform_random_op.cu @@ -45,14 +45,13 @@ class GPUUniformRandomKernel : public framework::OpKernel { void Compute(const framework::ExecutionContext& context) const override { auto* tensor = context.Output<framework::Tensor>("Out"); T* data = tensor->mutable_data<T>(context.GetPlace()); - unsigned int seed = - static_cast<unsigned int>(context.op().GetAttr<int>("seed")); + unsigned int seed = static_cast<unsigned int>(context.GetAttr<int>("seed")); if (seed == 0) { std::random_device rd; seed = rd(); } - T min = static_cast<T>(context.op().GetAttr<float>("min")); - T max = static_cast<T>(context.op().GetAttr<float>("max")); + T min = static_cast<T>(context.GetAttr<float>("min")); + T max = static_cast<T>(context.GetAttr<float>("max")); thrust::counting_iterator<unsigned int> index_sequence_begin(0); ssize_t N = framework::product(tensor->dims()); thrust::transform(index_sequence_begin, index_sequence_begin + N, From 7d5bdbbfee3e0c5a4dba3057c6dfb028dbf28ab8 Mon Sep 17 00:00:00 2001 From: Yu Yang <yuyang18@baidu.com> Date: Sun, 3 Sep 2017 12:28:18 -0700 Subject: [PATCH 34/72] Add GenerateTemporaryNames/CheckAllInputOutputSet --- paddle/framework/op_info.h | 14 ++++++++++-- paddle/framework/operator.cc | 41 +++++++++++++++++++++++++++--------- paddle/framework/operator.h | 4 ++++ 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/paddle/framework/op_info.h b/paddle/framework/op_info.h index 94245c6c44..b98d8f23a1 100644 --- a/paddle/framework/op_info.h +++ b/paddle/framework/op_info.h @@ -80,9 +80,19 @@ class OpInfoMap { } const OpInfo& Get(const std::string& type) const { + auto op_info_ptr = GetNullable(type); + PADDLE_ENFORCE_NOT_NULL(op_info_ptr, "Operator %s has not been registered", + type); + return *op_info_ptr; + } + + const OpInfo* GetNullable(const std::string& type) const { auto it = map_.find(type); - PADDLE_ENFORCE(it != map_.end(), "Operator %s are not found", type); - return it->second; + if (it == map_.end()) { + return nullptr; + } else { + return &it->second; + } } template <typename Callback> diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index 68fb469b56..88a872deaa 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -119,16 +119,8 @@ OperatorBase::OperatorBase(const std::string& type, const VariableNameMap& outputs, const AttributeMap& attrs) : type_(type), inputs_(inputs), outputs_(outputs), attrs_(attrs) { - static std::atomic<size_t> gUniqId(0UL); - for (auto& output : outputs_) { - for (auto& output_name : output.second) { - if (output_name == kTempVarName) { - output_name += type_; - output_name += "@"; - output_name += std::to_string(gUniqId.fetch_add(1)); - } - } - } + GenerateTemporaryNames(); + CheckAllInputOutputSet(); } std::vector<std::string> OperatorBase::OutputVars(bool has_intermediate) const { @@ -156,6 +148,35 @@ std::vector<std::string> OperatorBase::OutputVars(bool has_intermediate) const { return ret_val; } +void OperatorBase::CheckAllInputOutputSet() const { + auto& info_map = OpInfoMap::Instance(); + auto* op_info = info_map.GetNullable(Type()); + if (op_info == nullptr) return; + + for (auto& in : op_info->Proto().inputs()) { + PADDLE_ENFORCE(inputs_.find(in.name()) != inputs_.end(), + "input %s is not set", in.name()); + } + + for (auto& out : op_info->Proto().outputs()) { + PADDLE_ENFORCE(outputs_.find(out.name()) != outputs_.end(), + "output %s is not set", out.name()); + } +} + +void OperatorBase::GenerateTemporaryNames() { + static std::atomic<size_t> gUniqId(0UL); + for (auto& output : outputs_) { + for (auto& output_name : output.second) { + if (output_name == kTempVarName) { + output_name += type_; + output_name += "@"; + output_name += std::to_string(gUniqId.fetch_add(1)); + } + } + } +} + void OpProtoAndCheckerMaker::Validate() { validated_ = true; CheckNoDuplicatedInOutAttrs(); diff --git a/paddle/framework/operator.h b/paddle/framework/operator.h index 60ca8b279e..590e335fdc 100644 --- a/paddle/framework/operator.h +++ b/paddle/framework/operator.h @@ -127,6 +127,10 @@ class OperatorBase { // IG (Inputs Gradients) VariableNameMap outputs_; AttributeMap attrs_; + + private: + void GenerateTemporaryNames(); + void CheckAllInputOutputSet() const; }; // Macro for define a clone method. From 13b43279dc543a6fcbeca3899e8c3fbbbda227c1 Mon Sep 17 00:00:00 2001 From: Yu Yang <yuyang18@baidu.com> Date: Sun, 3 Sep 2017 14:47:53 -0700 Subject: [PATCH 35/72] Fix CI Test --- paddle/framework/backward_test.cc | 6 +++--- paddle/framework/operator.cc | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/paddle/framework/backward_test.cc b/paddle/framework/backward_test.cc index f100c4d054..ad8003420d 100644 --- a/paddle/framework/backward_test.cc +++ b/paddle/framework/backward_test.cc @@ -127,8 +127,8 @@ class FillZeroOpMaker : public OpProtoAndCheckerMaker { public: FillZeroOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("x", "x"); - AddOutput("out", "out"); + AddInput("Src", "x"); + AddOutput("Dst", "out"); AddComment(""); } }; @@ -138,7 +138,7 @@ class AddOpMaker : public OpProtoAndCheckerMaker { AddOpMaker(OpProto *proto, OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { AddInput("X", "x").AsDuplicable(); - AddOutput("Y", "y"); + AddOutput("Out", "out"); AddComment(""); } }; diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index 88a872deaa..790cfc4746 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -151,16 +151,16 @@ std::vector<std::string> OperatorBase::OutputVars(bool has_intermediate) const { void OperatorBase::CheckAllInputOutputSet() const { auto& info_map = OpInfoMap::Instance(); auto* op_info = info_map.GetNullable(Type()); - if (op_info == nullptr) return; + if (op_info == nullptr || op_info->proto_ == nullptr) return; for (auto& in : op_info->Proto().inputs()) { PADDLE_ENFORCE(inputs_.find(in.name()) != inputs_.end(), - "input %s is not set", in.name()); + "Type %s's input %s is not set", Type(), in.name()); } for (auto& out : op_info->Proto().outputs()) { PADDLE_ENFORCE(outputs_.find(out.name()) != outputs_.end(), - "output %s is not set", out.name()); + "Type %s's output %s is not set", Type(), out.name()); } } From e0c27a96ebdc45c72f5c148e14b5acfd3c13bdf5 Mon Sep 17 00:00:00 2001 From: zchen0211 <chenzhuoyuan07@gmail.com> Date: Sun, 3 Sep 2017 21:56:14 +0000 Subject: [PATCH 36/72] if else slight modify --- doc/design/if_else_op.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/design/if_else_op.md b/doc/design/if_else_op.md index daba92248e..7370c2a24f 100644 --- a/doc/design/if_else_op.md +++ b/doc/design/if_else_op.md @@ -7,7 +7,7 @@ x = var() y = var() cond = var() -b = pd.create_ifop_builder(inputs=[x], output_num=1) +b = pd.create_ifop(inputs=[x], output_num=1) with b.true_block(): x = b.inputs(0) z = operator.add(x, y) @@ -25,7 +25,7 @@ x = var() y = var() cond = var() default_value = var() -b = pd.create_ifelseop_builder(inputs=[x], output_num=1) +b = pd.create_ifelseop(inputs=[x], output_num=1) with b.true_block(): x = b.inputs(0) z = operator.add(x, y) @@ -47,7 +47,7 @@ x = var() y = var() cond = var() default_value = var() -b = pd.create_ifelseop_builder(inputs=[x], output_num=1, default_value) +b = pd.create_ifelseop(inputs=[x], output_num=1, default_value) with b.true_block(): x = b.inputs(0) From 8c048aa0996f57c7a94d83c0bd043fa40fb3ab9f Mon Sep 17 00:00:00 2001 From: dangqingqing <dangqingqing@baidu.com> Date: Mon, 4 Sep 2017 11:15:45 +0800 Subject: [PATCH 37/72] Remove cudnn_helper.cc --- paddle/platform/CMakeLists.txt | 1 - paddle/platform/cudnn_helper.cc | 15 --------------- paddle/platform/cudnn_helper.h | 22 ---------------------- paddle/platform/cudnn_helper_test.cc | 3 +-- 4 files changed, 1 insertion(+), 40 deletions(-) delete mode 100644 paddle/platform/cudnn_helper.cc diff --git a/paddle/platform/CMakeLists.txt b/paddle/platform/CMakeLists.txt index 9a3ad8eb64..17bdac8749 100644 --- a/paddle/platform/CMakeLists.txt +++ b/paddle/platform/CMakeLists.txt @@ -23,5 +23,4 @@ cc_library(device_context SRCS device_context.cc DEPS memory buddy_allocator system_allocator memory_block meta_data meta_cache place eigen3 ${GPU_CTX_DEPS}) nv_test(device_context_test SRCS device_context_test.cc DEPS device_context gpu_info) -nv_library(cudnn_helper SRCS cudnn_helper.cc DEPS dynload_cuda) nv_test(cudnn_helper_test SRCS cudnn_helper_test.cc DEPS dynload_cuda) diff --git a/paddle/platform/cudnn_helper.cc b/paddle/platform/cudnn_helper.cc deleted file mode 100644 index 764285e2ba..0000000000 --- a/paddle/platform/cudnn_helper.cc +++ /dev/null @@ -1,15 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. */ - -#include "paddle/platform/cudnn_helper.h" diff --git a/paddle/platform/cudnn_helper.h b/paddle/platform/cudnn_helper.h index 6a43f49cfc..24ddf3441c 100644 --- a/paddle/platform/cudnn_helper.h +++ b/paddle/platform/cudnn_helper.h @@ -14,9 +14,6 @@ limitations under the License. */ #pragma once -#ifndef PADDLE_ONLY_CPU -#include <cudnn.h> -#include "glog/logging.h" #include "paddle/platform/dynload/cudnn.h" #include "paddle/platform/enforce.h" #include "paddle/platform/macros.h" @@ -42,30 +39,12 @@ template <> class CudnnDataType<float> { public: static const cudnnDataType_t type = CUDNN_DATA_FLOAT; - typedef const float ScalingParamType; - static ScalingParamType* kOne() { - static ScalingParamType v = 1.0; - return &v; - } - static const ScalingParamType* kZero() { - static ScalingParamType v = 0.0; - return &v; - } }; template <> class CudnnDataType<double> { public: static const cudnnDataType_t type = CUDNN_DATA_DOUBLE; - typedef const double ScalingParamType; - static ScalingParamType* kOne() { - static ScalingParamType v = 1.0; - return &v; - } - static ScalingParamType* kZero() { - static ScalingParamType v = 0.0; - return &v; - } }; inline cudnnTensorFormat_t GetCudnnTensorFormat(const DataLayout& order) { @@ -219,4 +198,3 @@ class ScopedPoolingDescriptor { } // namespace platform } // namespace paddle -#endif diff --git a/paddle/platform/cudnn_helper_test.cc b/paddle/platform/cudnn_helper_test.cc index 729f2f8a10..6bd85ae1ca 100644 --- a/paddle/platform/cudnn_helper_test.cc +++ b/paddle/platform/cudnn_helper_test.cc @@ -13,8 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ #include "paddle/platform/cudnn_helper.h" -#include "glog/logging.h" -#include "gtest/gtest.h" +#include <gtest/gtest.h> TEST(CudnnHelper, ScopedTensorDescriptor) { using paddle::platform::ScopedTensorDescriptor; From faa4da4835e0622387e2ab1f6481875c5243c5c9 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 13:02:27 +0800 Subject: [PATCH 38/72] fix ctc edit distance in v2 API. --- .../gserver/evaluators/CTCErrorEvaluator.cpp | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp index 132119015f..8e2dc020cd 100644 --- a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp +++ b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp @@ -26,6 +26,7 @@ private: int numTimes_, numClasses_, numSequences_, blank_; real deletions_, insertions_, substitutions_; int seqClassficationError_; + mutable std::unordered_map<std::string, real> evalResults_; std::vector<int> path2String(const std::vector<int>& path) { std::vector<int> str; @@ -183,6 +184,18 @@ private: return stringAlignment(gtStr, recogStr); } + void storeLocalValues() const { + evalResults_["error"] = numSequences_ ? totalScore_ / numSequences_ : 0; + evalResults_["deletion_error"] = + numSequences_ ? deletions_ / numSequences_ : 0; + evalResults_["insertion_error"] = + numSequences_ ? insertions_ / numSequences_ : 0; + evalResults_["substitution_error"] = + numSequences_ ? substitutions_ / numSequences_ : 0; + evalResults_["sequence_error"] = + (real)seqClassficationError_ / numSequences_; + } + public: CTCErrorEvaluator() : numTimes_(0), @@ -245,16 +258,12 @@ public: } virtual void printStats(std::ostream& os) const { - os << config_.name() << "=" - << (numSequences_ ? totalScore_ / numSequences_ : 0); - os << " deletions error" - << "=" << (numSequences_ ? deletions_ / numSequences_ : 0); - os << " insertions error" - << "=" << (numSequences_ ? insertions_ / numSequences_ : 0); - os << " substitutions error" - << "=" << (numSequences_ ? substitutions_ / numSequences_ : 0); - os << " sequences error" - << "=" << (real)seqClassficationError_ / numSequences_; + storeLocalValues(); + os << config_.name() << "=" << evalResults_["error"]; + os << " deletions error = " << evalResults_["deletion_error"]; + os << " insertions error = " << evalResults_["insertion_error"]; + os << " substitution error = " << evalResults_["substitution_error"]; + os << " sequence error = " << evalResults_["sequence_error"]; } virtual void distributeEval(ParameterClient2* client) { @@ -272,6 +281,33 @@ public: seqClassficationError_ = (int)buf[4]; numSequences_ = (int)buf[5]; } + + void getNames(std::vector<std::string>* names) { + storeLocalValues(); + names->reserve(names->size() + evalResults_.size()); + for (auto it = evalResults_.begin(); it != evalResults_.end(); ++it) { + names->push_back(config_.name() + "." + it->first); + } + } + + real getValue(const std::string& name, Error* err) const { + storeLocalValues(); + + const std::string delimiter("."); + std::string::size_type foundPos = name.find(delimiter, 0); + CHECK(foundPos != std::string::npos); + + auto it = evalResults_.find( + name.substr(foundPos + delimiter.size(), name.length())); + if (it == evalResults_.end()) { + *err = Error("Evaluator does not have the key %s", name.c_str()); + return 0.0f; + } + + return it->second; + } + + std::string getTypeImpl() const { return "ctc_edit_distance"; } }; REGISTER_EVALUATOR(ctc_edit_distance, CTCErrorEvaluator); From a60128aeb235c3e53b6785537bf3f67502ca079d Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Mon, 4 Sep 2017 14:11:43 +0800 Subject: [PATCH 39/72] move identity_op from scale_op.cc to be a single file --- paddle/operators/CMakeLists.txt | 2 ++ paddle/operators/identity_op.cc | 54 +++++++++++++++++++++++++++++++++ paddle/operators/scale_op.cc | 31 +------------------ 3 files changed, 57 insertions(+), 30 deletions(-) create mode 100644 paddle/operators/identity_op.cc diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index e5efcccb0e..d85c3d575a 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -48,12 +48,14 @@ add_subdirectory(math) list(REMOVE_ITEM GENERAL_OPS net_op + identity_op minus_op mul_op recurrent_op scale_op) op_library(net_op SRCS net_op.cc) +op_library(identity_op SRCS identity_op.cc DEPS scale_op) op_library(minus_op SRCS minus_op.cc minus_op.cu DEPS scale_op) op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) op_library(recurrent_op SRCS recurrent_op.cc rnn/recurrent_op_utils.cc diff --git a/paddle/operators/identity_op.cc b/paddle/operators/identity_op.cc new file mode 100644 index 0000000000..be956bf3b3 --- /dev/null +++ b/paddle/operators/identity_op.cc @@ -0,0 +1,54 @@ +/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ + +#include "paddle/operators/net_op.h" +#include "paddle/operators/scale_op.h" + +namespace paddle { +namespace operators { + +// identity is a alias of scale op. This is also a example for creating a alias +// operator. +template <typename AttrType> +class IdentityOpMaker : public framework::OpProtoAndCheckerMaker { + public: + IdentityOpMaker(framework::OpProto *proto, + framework::OpAttrChecker *op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("X", "input tensor of identity op"); + AddOutput("Out", "output tensor of identity op"); + AddComment("identity operator. Just a alias of scale op which scale = 1.0"); + } +}; + +template <typename AttrType> +class IdentityOp : public NetOp { + public: + IdentityOp(const std::string &type, const framework::VariableNameMap &inputs, + const framework::VariableNameMap &outputs, + const framework::AttributeMap &attrs) + : NetOp(type, inputs, outputs, attrs) { + AppendOp(framework::OpRegistry::CreateOp( + "scale", {{"X", {Input("X")}}}, {{"Out", {Output("Out")}}}, + {{"scale", static_cast<AttrType>(1)}})); + } +}; + +} // namespace operators +} // namespace paddle + +namespace ops = paddle::operators; + +REGISTER_OP_WITHOUT_GRADIENT(identity, ops::IdentityOp<float>, + ops::IdentityOpMaker<float>); diff --git a/paddle/operators/scale_op.cc b/paddle/operators/scale_op.cc index 4e039688d4..57696d2ee6 100644 --- a/paddle/operators/scale_op.cc +++ b/paddle/operators/scale_op.cc @@ -48,7 +48,7 @@ The equation is: Out = scale*X } }; -// Identity Op's gradient is identity op, too. +// Scale Op's gradient is scale op, too. // Grad(Out=scale(X)) => Grad(X) = scale(Grad(Out)) template <typename AttrType> class ScaleGradOp : public NetOp { @@ -65,33 +65,6 @@ class ScaleGradOp : public NetOp { } }; -// identity is a alias of scale op. This is also a example for creating a alias -// operator. -template <typename AttrType> -class IdentityOpMaker : public framework::OpProtoAndCheckerMaker { - public: - IdentityOpMaker(framework::OpProto *proto, - framework::OpAttrChecker *op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X", "input tensor of identity op"); - AddOutput("Out", "output tensor of identity op"); - AddComment("identity operator. Just a alias of scale op which scale = 1.0"); - } -}; - -template <typename AttrType> -class IdentityOp : public NetOp { - public: - IdentityOp(const std::string &type, const framework::VariableNameMap &inputs, - const framework::VariableNameMap &outputs, - const framework::AttributeMap &attrs) - : NetOp(type, inputs, outputs, attrs) { - AppendOp(framework::OpRegistry::CreateOp( - "scale", {{"X", {Input("X")}}}, {{"Out", {Output("Out")}}}, - {{"scale", static_cast<AttrType>(1)}})); - } -}; - } // namespace operators } // namespace paddle @@ -101,5 +74,3 @@ REGISTER_OP(scale, ops::ScaleOp, ops::ScaleOpMaker<float>, ops::ScaleGradOp<float>); REGISTER_OP_CPU_KERNEL(scale, ops::ScaleKernel<paddle::platform::CPUPlace, float>); -REGISTER_OP_WITHOUT_GRADIENT(identity, ops::IdentityOp<float>, - ops::IdentityOpMaker<float>); From fb49bc2c99c5deb0d7ebc9507410b8e60b0bb27c Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 14:15:50 +0800 Subject: [PATCH 40/72] rename mse_cost into square_error_cost. --- .../paddle/trainer_config_helpers/layers.py | 29 +++++++++++-------- .../test_cost_layers_with_weight.protostr | 8 ++--- .../configs/test_cost_layers_with_weight.py | 2 +- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/python/paddle/trainer_config_helpers/layers.py b/python/paddle/trainer_config_helpers/layers.py index 2bd274fad2..47ac601e67 100644 --- a/python/paddle/trainer_config_helpers/layers.py +++ b/python/paddle/trainer_config_helpers/layers.py @@ -53,7 +53,7 @@ __all__ = [ 'cos_sim', 'hsigmoid', 'conv_projection', - 'mse_cost', + 'square_error_cost', 'regression_cost', 'classification_cost', 'LayerOutput', @@ -4238,13 +4238,18 @@ def __cost_input__(input, label, weight=None): @wrap_name_default() @layer_support() -def mse_cost(input, label, weight=None, name=None, coeff=1.0, layer_attr=None): +def square_error_cost(input, + label, + weight=None, + name=None, + coeff=1.0, + layer_attr=None): """ - mean squared error cost: + sum of square error cost: .. math:: - \\frac{1}{N}\sum_{i=1}^N(t_i-y_i)^2 + cost = \\sum_{i=1}^N(t_i-y_i)^2 :param name: layer name. :type name: basestring @@ -4273,7 +4278,7 @@ def mse_cost(input, label, weight=None, name=None, coeff=1.0, layer_attr=None): return LayerOutput(name, LayerType.COST, parents=parents, size=1) -regression_cost = mse_cost +regression_cost = square_error_cost @wrap_name_default("cost") @@ -5798,9 +5803,9 @@ def huber_regression_cost(input, coeff=1.0, layer_attr=None): """ - In statistics, the Huber loss is a loss function used in robust regression, - that is less sensitive to outliers in data than the squared error loss. - Given a prediction f(x), a label y and :math:`\delta`, the loss function + In statistics, the Huber loss is a loss function used in robust regression, + that is less sensitive to outliers in data than the squared error loss. + Given a prediction f(x), a label y and :math:`\delta`, the loss function is defined as: .. math: @@ -5848,13 +5853,13 @@ def huber_classification_cost(input, coeff=1.0, layer_attr=None): """ - For classification purposes, a variant of the Huber loss called modified Huber - is sometimes used. Given a prediction f(x) (a real-valued classifier score) and - a true binary class label :math:`y\in \left \{-1, 1 \right \}`, the modified Huber + For classification purposes, a variant of the Huber loss called modified Huber + is sometimes used. Given a prediction f(x) (a real-valued classifier score) and + a true binary class label :math:`y\in \left \{-1, 1 \right \}`, the modified Huber loss is defined as: .. math: - loss = \max \left ( 0, 1-yf(x) \right )^2, yf(x)\geq 1 + loss = \max \left ( 0, 1-yf(x) \right )^2, yf(x)\geq 1 loss = -4yf(x), \text{otherwise} The example usage is: diff --git a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_cost_layers_with_weight.protostr b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_cost_layers_with_weight.protostr index 96fb1d4ebd..cec8a73db6 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_cost_layers_with_weight.protostr +++ b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_cost_layers_with_weight.protostr @@ -45,7 +45,7 @@ layers { coeff: 1.0 } layers { - name: "__mse_cost_0__" + name: "__square_error_cost_0__" type: "square_error" size: 1 active_type: "" @@ -130,7 +130,7 @@ input_layer_names: "label" input_layer_names: "weight" input_layer_names: "multi_class_label" output_layer_names: "__cost_0__" -output_layer_names: "__mse_cost_0__" +output_layer_names: "__square_error_cost_0__" output_layer_names: "__nce_layer_0__" evaluators { name: "classification_error_evaluator" @@ -146,7 +146,7 @@ sub_models { layer_names: "weight" layer_names: "__fc_layer_0__" layer_names: "__cost_0__" - layer_names: "__mse_cost_0__" + layer_names: "__square_error_cost_0__" layer_names: "multi_class_label" layer_names: "__nce_layer_0__" input_layer_names: "input" @@ -154,7 +154,7 @@ sub_models { input_layer_names: "weight" input_layer_names: "multi_class_label" output_layer_names: "__cost_0__" - output_layer_names: "__mse_cost_0__" + output_layer_names: "__square_error_cost_0__" output_layer_names: "__nce_layer_0__" evaluator_names: "classification_error_evaluator" is_recurrent_layer_group: false diff --git a/python/paddle/trainer_config_helpers/tests/configs/test_cost_layers_with_weight.py b/python/paddle/trainer_config_helpers/tests/configs/test_cost_layers_with_weight.py index c369062930..caa6aaa943 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/test_cost_layers_with_weight.py +++ b/python/paddle/trainer_config_helpers/tests/configs/test_cost_layers_with_weight.py @@ -10,7 +10,7 @@ fc = fc_layer(input=data, size=10, act=SoftmaxActivation()) outputs( classification_cost( input=fc, label=lbl, weight=wt), - mse_cost( + square_error_cost( input=fc, label=lbl, weight=wt), nce_layer( input=fc, From c2c5df29110c69f3cf64e627c78ce7897e487025 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 14:56:13 +0800 Subject: [PATCH 41/72] update doc. --- doc/api/v2/config/layer.rst | 4 ++-- doc/getstarted/basic_usage/index_en.rst | 2 +- doc/getstarted/concepts/src/train.py | 2 +- doc/getstarted/concepts/use_concepts_cn.rst | 4 ++-- doc/howto/usage/k8s/k8s_distributed_cn.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/api/v2/config/layer.rst b/doc/api/v2/config/layer.rst index 1329b77bb4..c94627a728 100644 --- a/doc/api/v2/config/layer.rst +++ b/doc/api/v2/config/layer.rst @@ -434,9 +434,9 @@ lambda_cost .. autoclass:: paddle.v2.layer.lambda_cost :noindex: -mse_cost +square_error_cost -------- -.. autoclass:: paddle.v2.layer.mse_cost +.. autoclass:: paddle.v2.layer.square_error_cost :noindex: rank_cost diff --git a/doc/getstarted/basic_usage/index_en.rst b/doc/getstarted/basic_usage/index_en.rst index 6775da20c2..2cc438ebbe 100644 --- a/doc/getstarted/basic_usage/index_en.rst +++ b/doc/getstarted/basic_usage/index_en.rst @@ -49,7 +49,7 @@ To recover this relationship between ``X`` and ``Y``, we use a neural network wi x = data_layer(name='x', size=1) y = data_layer(name='y', size=1) y_predict = fc_layer(input=x, param_attr=ParamAttr(name='w'), size=1, act=LinearActivation(), bias_attr=ParamAttr(name='b')) - cost = mse_cost(input=y_predict, label=y) + cost = square_error_cost(input=y_predict, label=y) outputs(cost) Some of the most fundamental usages of PaddlePaddle are demonstrated: diff --git a/doc/getstarted/concepts/src/train.py b/doc/getstarted/concepts/src/train.py index 7e604f23de..8aceb23406 100644 --- a/doc/getstarted/concepts/src/train.py +++ b/doc/getstarted/concepts/src/train.py @@ -8,7 +8,7 @@ paddle.init(use_gpu=False) x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(2)) y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear()) y = paddle.layer.data(name='y', type=paddle.data_type.dense_vector(1)) -cost = paddle.layer.mse_cost(input=y_predict, label=y) +cost = paddle.layer.square_error_cost(input=y_predict, label=y) # create parameters parameters = paddle.parameters.create(cost) diff --git a/doc/getstarted/concepts/use_concepts_cn.rst b/doc/getstarted/concepts/use_concepts_cn.rst index f15b11bd78..25bf7ff1d0 100644 --- a/doc/getstarted/concepts/use_concepts_cn.rst +++ b/doc/getstarted/concepts/use_concepts_cn.rst @@ -81,7 +81,7 @@ PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和 .. code-block:: bash y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear()) - cost = paddle.layer.mse_cost(input=y_predict, label=y) + cost = paddle.layer.square_error_cost(input=y_predict, label=y) 其中,x与y为之前描述的输入层;而y_predict是接收x作为输入,接上一个全连接层;cost接收y_predict与y作为输入,接上均方误差层。 @@ -147,4 +147,4 @@ PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和 .. literalinclude:: src/train.py :linenos: -有关线性回归的实际应用,可以参考PaddlePaddle book的 `第一章节 <http://book.paddlepaddle.org/index.html>`_。 \ No newline at end of file +有关线性回归的实际应用,可以参考PaddlePaddle book的 `第一章节 <http://book.paddlepaddle.org/index.html>`_。 diff --git a/doc/howto/usage/k8s/k8s_distributed_cn.md b/doc/howto/usage/k8s/k8s_distributed_cn.md index 3121b3f59d..a9bebf0955 100644 --- a/doc/howto/usage/k8s/k8s_distributed_cn.md +++ b/doc/howto/usage/k8s/k8s_distributed_cn.md @@ -213,7 +213,7 @@ I1116 09:10:17.123440 50 Util.cpp:130] Calling runInitFunctions I1116 09:10:17.123764 50 Util.cpp:143] Call runInitFunctions done. [WARNING 2016-11-16 09:10:17,227 default_decorators.py:40] please use keyword arguments in paddle config. [INFO 2016-11-16 09:10:17,239 networks.py:1282] The input order is [movie_id, title, genres, user_id, gender, age, occupation, rating] -[INFO 2016-11-16 09:10:17,239 networks.py:1289] The output order is [__mse_cost_0__] +[INFO 2016-11-16 09:10:17,239 networks.py:1289] The output order is [__square_error_cost_0__] I1116 09:10:17.392917 50 Trainer.cpp:170] trainer mode: Normal I1116 09:10:17.613910 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process I1116 09:10:17.680917 50 PyDataProvider2.cpp:257] loading dataprovider dataprovider::process From 0b478e991c95f838da41bfcbf11f1e2b80ac17eb Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 15:12:56 +0800 Subject: [PATCH 42/72] follow comments. --- paddle/gserver/evaluators/CTCErrorEvaluator.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp index 8e2dc020cd..928c77a088 100644 --- a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp +++ b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp @@ -14,6 +14,7 @@ limitations under the License. */ #include "Evaluator.h" #include "paddle/gserver/gradientmachines/NeuralNetwork.h" +#include "paddle/utils/StringUtil.h" namespace paddle { @@ -259,7 +260,7 @@ public: virtual void printStats(std::ostream& os) const { storeLocalValues(); - os << config_.name() << "=" << evalResults_["error"]; + os << config_.name() << " error = " << evalResults_["error"]; os << " deletions error = " << evalResults_["deletion_error"]; os << " insertions error = " << evalResults_["insertion_error"]; os << " substitution error = " << evalResults_["substitution_error"]; @@ -293,12 +294,10 @@ public: real getValue(const std::string& name, Error* err) const { storeLocalValues(); - const std::string delimiter("."); - std::string::size_type foundPos = name.find(delimiter, 0); - CHECK(foundPos != std::string::npos); + std::vector<std::string> buffers; + paddle::str::split(name, '.', &buffers); + auto it = evalResults_.find(buffers[buffers.size() - 1]); - auto it = evalResults_.find( - name.substr(foundPos + delimiter.size(), name.length())); if (it == evalResults_.end()) { *err = Error("Evaluator does not have the key %s", name.c_str()); return 0.0f; @@ -307,7 +306,11 @@ public: return it->second; } - std::string getTypeImpl() const { return "ctc_edit_distance"; } + std::string getType(const std::string& name, Error* err) const { + getValue(name, err); + if (!err->isOK()) return ""; + return "ctc_edit_distance"; + } }; REGISTER_EVALUATOR(ctc_edit_distance, CTCErrorEvaluator); From 5b93ac7778754943914b3f9511208e55a3526f64 Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Mon, 4 Sep 2017 15:49:33 +0800 Subject: [PATCH 43/72] package a new USE_NO_KERNEL_OP for USE_OP_ITSELF --- doc/howto/dev/new_op_cn.md | 6 ++++++ paddle/framework/backward.cc | 2 +- paddle/framework/op_registry.h | 2 ++ paddle/operators/minus_op.cc | 2 +- paddle/operators/recurrent_op.cc | 2 +- paddle/pybind/pybind.cc | 4 ++-- python/paddle/v2/framework/op.py | 2 +- 7 files changed, 14 insertions(+), 6 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index ec79b7f42b..dfcbce9037 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -227,6 +227,12 @@ make mul_op USE_CPU_ONLY_OP(gather); ``` + 如果OP不带Kernel,则使用`USE_NO_KENREL_OP`: + + ``` + USE_NO_KENREL_OP(recurrent); + ``` + 使用`USE_OP`告知编译器需要链接该Op的目标文件,具体解释参考[代码注释](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h#L81)。 diff --git a/paddle/framework/backward.cc b/paddle/framework/backward.cc index 6b4c612cd8..c5d4662215 100644 --- a/paddle/framework/backward.cc +++ b/paddle/framework/backward.cc @@ -182,7 +182,7 @@ static std::unique_ptr<OperatorBase> BackwardRecursive( }); // process recurrent gradient op as a special operator. - if (forwardOp.Type() == "recurrent_op") { + if (forwardOp.Type() == "recurrent") { // NOTE clean up cycle call somewhere (RNN's stepnet constains itself), or // this will result in infinite loop. const auto& rnnop = diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index 64c7f23ab6..27f1927aed 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -194,6 +194,8 @@ class OpKernelRegistrar : public Registrar { USE_OP_DEVICE_KERNEL(op_type, GPU) #endif +#define USE_NO_KERNEL_OP(op_type) USE_OP_ITSELF(op_type); + #define USE_CPU_ONLY_OP(op_type) \ USE_OP_ITSELF(op_type); \ USE_OP_DEVICE_KERNEL(op_type, CPU); diff --git a/paddle/operators/minus_op.cc b/paddle/operators/minus_op.cc index b4afebcd97..138cdbd563 100644 --- a/paddle/operators/minus_op.cc +++ b/paddle/operators/minus_op.cc @@ -79,7 +79,7 @@ class MinusGradOp : public NetOp { } // namespace paddle USE_OP(scale); -USE_OP_ITSELF(identity); +USE_NO_KERNEL_OP(identity); namespace ops = paddle::operators; REGISTER_OP(minus, ops::MinusOp, ops::MinusOpMaker, ops::MinusGradOp<float>); REGISTER_OP_CPU_KERNEL(minus, diff --git a/paddle/operators/recurrent_op.cc b/paddle/operators/recurrent_op.cc index 16bd249cb3..e826703c60 100644 --- a/paddle/operators/recurrent_op.cc +++ b/paddle/operators/recurrent_op.cc @@ -235,5 +235,5 @@ RecurrentGradientOp::RecurrentGradientOp( } // namespace paddle REGISTER_OP_WITHOUT_GRADIENT( - recurrent_op, paddle::operators::RecurrentOp, + recurrent, paddle::operators::RecurrentOp, paddle::operators::RecurrentAlgorithmProtoAndCheckerMaker); diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 3bc150ccb7..6896422617 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -39,12 +39,12 @@ USE_OP(sigmoid); USE_OP(softmax); USE_OP(rowwise_add); USE_OP(fill_zeros_like); -USE_OP_ITSELF(recurrent_op); +USE_NO_KERNEL_OP(recurrent); USE_OP(gaussian_random); USE_OP(uniform_random); USE_OP(lookup_table); USE_OP(scale); -USE_OP_ITSELF(identity); +USE_NO_KERNEL_OP(identity); USE_OP(minus); USE_CPU_ONLY_OP(gather); USE_CPU_ONLY_OP(scatter); diff --git a/python/paddle/v2/framework/op.py b/python/paddle/v2/framework/op.py index 6ac656321e..e7e932f6fe 100644 --- a/python/paddle/v2/framework/op.py +++ b/python/paddle/v2/framework/op.py @@ -179,7 +179,7 @@ class OperatorFactory(object): class __RecurrentOp__(object): __proto__ = None - type = 'recurrent_op' + type = 'recurrent' def __init__(self): # cache recurrent_op's proto From 10eacac9a700c02909f2c714280d66246db954b1 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 16:01:40 +0800 Subject: [PATCH 44/72] follow comments and fix unittest. --- doc/getstarted/basic_usage/index_cn.rst | 4 ++-- doc/getstarted/concepts/use_concepts_cn.rst | 2 +- python/paddle/v2/tests/test_layer.py | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/getstarted/basic_usage/index_cn.rst b/doc/getstarted/basic_usage/index_cn.rst index 428f58830e..b473944fc7 100644 --- a/doc/getstarted/basic_usage/index_cn.rst +++ b/doc/getstarted/basic_usage/index_cn.rst @@ -55,7 +55,7 @@ PaddlePaddle是源于百度的一个深度学习平台。这份简短的介绍 # 线性计算网络层: ȳ = wx + b ȳ = fc_layer(input=x, param_attr=ParamAttr(name='w'), size=1, act=LinearActivation(), bias_attr=ParamAttr(name='b')) # 计算误差函数,即 ȳ 和真实 y 之间的距离 - cost = mse_cost(input= ȳ, label=y) + cost = square_error_cost(input= ȳ, label=y) outputs(cost) @@ -69,7 +69,7 @@ PaddlePaddle是源于百度的一个深度学习平台。这份简短的介绍 - **数据层**:数据层 `data_layer` 是神经网络的入口,它读入数据并将它们传输到接下来的网络层。这里数据层有两个,分别对应于变量 `x` 和 `y`。 - **全连接层**:全连接层 `fc_layer` 是基础的计算单元,这里利用它建模变量之间的线性关系。计算单元是神经网络的核心,PaddlePaddle支持大量的计算单元和任意深度的网络连接,从而可以拟合任意的函数来学习复杂的数据关系。 - - **回归误差代价层**:回归误差代价层 `mse_cost` 是众多误差代价函数层的一种,它们在训练过程作为网络的出口,用来计算模型的误差,是模型参数优化的目标函数。 + - **回归误差代价层**:回归误差代价层 `square_error_cost` 是众多误差代价函数层的一种,它们在训练过程作为网络的出口,用来计算模型的误差,是模型参数优化的目标函数。 定义了网络结构并保存为 `trainer_config.py` 之后,运行以下训练命令: diff --git a/doc/getstarted/concepts/use_concepts_cn.rst b/doc/getstarted/concepts/use_concepts_cn.rst index 25bf7ff1d0..c243083794 100644 --- a/doc/getstarted/concepts/use_concepts_cn.rst +++ b/doc/getstarted/concepts/use_concepts_cn.rst @@ -83,7 +83,7 @@ PaddlePaddle支持不同类型的输入数据,主要包括四种类型,和 y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear()) cost = paddle.layer.square_error_cost(input=y_predict, label=y) -其中,x与y为之前描述的输入层;而y_predict是接收x作为输入,接上一个全连接层;cost接收y_predict与y作为输入,接上均方误差层。 +其中,x与y为之前描述的输入层;而y_predict是接收x作为输入,接上一个全连接层;cost接收y_predict与y作为输入,接上平方误差层。 最后一层cost中记录了神经网络的所有拓扑结构,通过组合不同的layer,我们即可完成神经网络的搭建。 diff --git a/python/paddle/v2/tests/test_layer.py b/python/paddle/v2/tests/test_layer.py index 783a0ca85d..de932ad715 100644 --- a/python/paddle/v2/tests/test_layer.py +++ b/python/paddle/v2/tests/test_layer.py @@ -134,8 +134,9 @@ class CostLayerTest(unittest.TestCase): cost3 = layer.cross_entropy_cost(input=inference, label=label) cost4 = layer.cross_entropy_with_selfnorm_cost( input=inference, label=label) - cost5 = layer.mse_cost(input=inference, label=label) - cost6 = layer.mse_cost(input=inference, label=label, weight=weight) + cost5 = layer.square_error_cost(input=inference, label=label) + cost6 = layer.square_error_cost( + input=inference, label=label, weight=weight) cost7 = layer.multi_binary_label_cross_entropy_cost( input=inference, label=label) cost8 = layer.rank_cost(left=score, right=score, label=score) From 740c8ba12a29418eefeb22a843bebb1781f300fe Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Mon, 4 Sep 2017 16:40:23 +0800 Subject: [PATCH 45/72] remove scatter_op.cu/gather_op.cu as they support only_cpu now --- paddle/operators/CMakeLists.txt | 24 ++++++++++++++++-------- paddle/operators/gather_op.cu | 20 -------------------- paddle/operators/scatter_op.cu | 20 -------------------- 3 files changed, 16 insertions(+), 48 deletions(-) delete mode 100644 paddle/operators/gather_op.cu delete mode 100644 paddle/operators/scatter_op.cu diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index d85c3d575a..90185101c4 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -46,15 +46,20 @@ endfunction() add_subdirectory(math) -list(REMOVE_ITEM GENERAL_OPS - net_op - identity_op - minus_op - mul_op - recurrent_op - scale_op) +set(ONLYCPU_OPS + net_op + gather_op + scatter_op) +foreach(src ${ONLYCPU_OPS}) + op_library(${src} SRCS ${src}.cc) +endforeach() -op_library(net_op SRCS net_op.cc) +set(DEPS_OPS + identity_op + minus_op + mul_op + recurrent_op + scale_op) op_library(identity_op SRCS identity_op.cc DEPS scale_op) op_library(minus_op SRCS minus_op.cc minus_op.cu DEPS scale_op) op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) @@ -62,6 +67,9 @@ op_library(recurrent_op SRCS recurrent_op.cc rnn/recurrent_op_utils.cc DEPS framework_proto tensor operator net_op) op_library(scale_op SRCS scale_op.cc scale_op.cu DEPS net_op) +list(REMOVE_ITEM GENERAL_OPS + ${ONLYCPU_OPS} + ${DEPS_OPS}) foreach(src ${GENERAL_OPS}) op_library(${src} SRCS ${src}.cc ${src}.cu) endforeach() diff --git a/paddle/operators/gather_op.cu b/paddle/operators/gather_op.cu deleted file mode 100644 index 3f04a7b3f8..0000000000 --- a/paddle/operators/gather_op.cu +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. */ - -#define EIGEN_USE_GPU -#include "paddle/operators/gather_op.h" - -namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(gather, - ops::GatherOpKernel<paddle::platform::GPUPlace, float>); diff --git a/paddle/operators/scatter_op.cu b/paddle/operators/scatter_op.cu deleted file mode 100644 index 6716b47883..0000000000 --- a/paddle/operators/scatter_op.cu +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. */ - -#define EIGEN_USE_GPU -#include "paddle/operators/scatter_op.h" - -namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(scatter, - ops::ScatterOpKernel<paddle::platform::GPUPlace, float>); From a523bea8e585bd63f4167e012a05b03ad435b574 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 20:40:33 +0800 Subject: [PATCH 46/72] fix getType. --- paddle/gserver/evaluators/CTCErrorEvaluator.cpp | 8 +++++--- paddle/gserver/evaluators/ChunkEvaluator.cpp | 8 +++++++- paddle/gserver/evaluators/Evaluator.h | 13 ++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp index 928c77a088..92087fa32b 100644 --- a/paddle/gserver/evaluators/CTCErrorEvaluator.cpp +++ b/paddle/gserver/evaluators/CTCErrorEvaluator.cpp @@ -21,7 +21,7 @@ namespace paddle { /** * calculate sequence-to-sequence edit distance */ -class CTCErrorEvaluator : public NotGetableEvaluator { +class CTCErrorEvaluator : public Evaluator { private: MatrixPtr outActivations_; int numTimes_, numClasses_, numSequences_, blank_; @@ -307,8 +307,10 @@ public: } std::string getType(const std::string& name, Error* err) const { - getValue(name, err); - if (!err->isOK()) return ""; + this->getValue(name, err); + if (!err->isOK()) { + return ""; + } return "ctc_edit_distance"; } }; diff --git a/paddle/gserver/evaluators/ChunkEvaluator.cpp b/paddle/gserver/evaluators/ChunkEvaluator.cpp index 1658282f3a..a2ab15eede 100644 --- a/paddle/gserver/evaluators/ChunkEvaluator.cpp +++ b/paddle/gserver/evaluators/ChunkEvaluator.cpp @@ -268,7 +268,13 @@ public: } // get type of evaluator - std::string getTypeImpl() const { return "chunk"; } + std::string getType(const std::string& name, Error* err) const { + this->getValue(name, err); + if (!err->isOK()) { + return ""; + } + return "chunk"; + } private: void storeLocalValues() const { diff --git a/paddle/gserver/evaluators/Evaluator.h b/paddle/gserver/evaluators/Evaluator.h index b114500e2b..90203553e0 100644 --- a/paddle/gserver/evaluators/Evaluator.h +++ b/paddle/gserver/evaluators/Evaluator.h @@ -211,6 +211,7 @@ public: *err = Error("Not implemented"); return .0f; } + std::string getType(const std::string& name, Error* err) const { *err = Error("Not implemented"); return ""; @@ -331,6 +332,7 @@ private: protected: std::string getTypeImpl() const; }; + /** * @brief precision, recall and f1 score Evaluator * \f[ @@ -358,6 +360,12 @@ public: virtual void distributeEval(ParameterClient2* client); + void getNames(std::vector<std::string>* names); + + real getValue(const std::string& name, Error* err) const; + + std::string getType(const std::string& name, Error* err) const; + struct StatsInfo { /// numbers of true positives double TP; @@ -428,11 +436,6 @@ private: mutable std::unordered_map<std::string, real> values_; void storeLocalValues() const; - // Evaluator interface -public: - void getNames(std::vector<std::string>* names); - real getValue(const std::string& name, Error* err) const; - std::string getType(const std::string& name, Error* err) const; }; /* From 7c785426e4f15c7ef3a6659e1d32385ed5e48273 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Mon, 4 Sep 2017 22:04:08 +0800 Subject: [PATCH 47/72] add missing protostr for sub_nested_seq_layer. --- ..._layers.protostr => test_sub_nested_seq_select_layer.protostr} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename python/paddle/trainer_config_helpers/tests/configs/protostr/{test_seq_select_layers.protostr => test_sub_nested_seq_select_layer.protostr} (100%) diff --git a/python/paddle/trainer_config_helpers/tests/configs/protostr/test_seq_select_layers.protostr b/python/paddle/trainer_config_helpers/tests/configs/protostr/test_sub_nested_seq_select_layer.protostr similarity index 100% rename from python/paddle/trainer_config_helpers/tests/configs/protostr/test_seq_select_layers.protostr rename to python/paddle/trainer_config_helpers/tests/configs/protostr/test_sub_nested_seq_select_layer.protostr From 447033296d927dd0b0c1240e2ecccaa667eb0fe8 Mon Sep 17 00:00:00 2001 From: dangqingqing <dangqingqing@baidu.com> Date: Mon, 4 Sep 2017 22:29:34 +0800 Subject: [PATCH 48/72] Make some operator correctly handle gradients for multi inputs. --- paddle/operators/mul_op.cc | 4 +-- paddle/operators/mul_op.h | 36 ++++++++++--------- paddle/operators/rowwise_add_op.cc | 6 ++-- paddle/operators/rowwise_add_op.h | 24 +++++++------ paddle/operators/scatter_op.cc | 4 +-- paddle/operators/scatter_op.h | 10 +++--- .../v2/framework/tests/gradient_checker.py | 25 +++++++++++-- .../paddle/v2/framework/tests/test_mul_op.py | 3 +- 8 files changed, 72 insertions(+), 40 deletions(-) diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index 8d0f59745f..603dc7f4bd 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -75,8 +75,8 @@ class MulOpGrad : public framework::OperatorWithKernel { PADDLE_ENFORCE(y_dims[1] == out_dims[1], "Out@GRAD M X N must equal to Y dims 1, N "); - x_grad->Resize(x_dims); - y_grad->Resize(y_dims); + if (x_grad) x_grad->Resize(x_dims); + if (y_grad) y_grad->Resize(y_dims); } }; diff --git a/paddle/operators/mul_op.h b/paddle/operators/mul_op.h index 8facc02814..66ed2f81c7 100644 --- a/paddle/operators/mul_op.h +++ b/paddle/operators/mul_op.h @@ -31,13 +31,13 @@ template <typename Place, typename T> class MulKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto* X = context.Input<Tensor>("X"); - auto* Y = context.Input<Tensor>("Y"); - auto* Z = context.Output<Tensor>("Out"); - Z->mutable_data<T>(context.GetPlace()); + auto* x = context.Input<Tensor>("X"); + auto* y = context.Input<Tensor>("Y"); + auto* z = context.Output<Tensor>("Out"); + z->mutable_data<T>(context.GetPlace()); auto* device_context = const_cast<platform::DeviceContext*>(context.device_context_); - math::matmul<Place, T>(*X, false, *Y, false, 1, Z, 0, device_context); + math::matmul<Place, T>(*x, false, *y, false, 1, z, 0, device_context); } }; @@ -45,20 +45,24 @@ template <typename Place, typename T> class MulGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& ctx) const override { - auto* X = ctx.Input<Tensor>("X"); - auto* Y = ctx.Input<Tensor>("Y"); - auto* dOut = ctx.Input<Tensor>(framework::GradVarName("Out")); + auto* x = ctx.Input<Tensor>("X"); + auto* y = ctx.Input<Tensor>("Y"); + auto* dout = ctx.Input<Tensor>(framework::GradVarName("Out")); - auto* dX = ctx.Output<Tensor>(framework::GradVarName("X")); - auto* dY = ctx.Output<Tensor>(framework::GradVarName("Y")); - dX->mutable_data<T>(ctx.GetPlace()); - dY->mutable_data<T>(ctx.GetPlace()); + auto* dx = ctx.Output<Tensor>(framework::GradVarName("X")); + auto* dy = ctx.Output<Tensor>(framework::GradVarName("Y")); auto* device_context = const_cast<platform::DeviceContext*>(ctx.device_context_); - // dX = dOut * Y'. dX: M x K, dOut : M x N, Y : K x N - math::matmul<Place, T>(*dOut, false, *Y, true, 1, dX, 0, device_context); - // dY = X' * dOut. dY: K x N, dOut : M x N, X : M x K - math::matmul<Place, T>(*X, true, *dOut, false, 1, dY, 0, device_context); + if (dx) { + // dx = dout * y'. dx: M x K, dout : M x N, y : K x N + dx->mutable_data<T>(ctx.GetPlace()); + math::matmul<Place, T>(*dout, false, *y, true, 1, dx, 0, device_context); + } + if (dy) { + dy->mutable_data<T>(ctx.GetPlace()); + // dy = x' * dout. dy K x N, dout : M x N, x : M x K + math::matmul<Place, T>(*x, true, *dout, false, 1, dy, 0, device_context); + } } }; diff --git a/paddle/operators/rowwise_add_op.cc b/paddle/operators/rowwise_add_op.cc index 63de91254f..a9dfba3e95 100644 --- a/paddle/operators/rowwise_add_op.cc +++ b/paddle/operators/rowwise_add_op.cc @@ -64,8 +64,10 @@ class RowwiseAddGradOp : public framework::OperatorWithKernel { auto dims0 = ctx.Input<Tensor>("X")->dims(); auto dims1 = ctx.Input<Tensor>("b")->dims(); PADDLE_ENFORCE_EQ(1, dims1.size(), "b dims should be 1") - ctx.Output<Tensor>(framework::GradVarName("X"))->Resize(dims0); - ctx.Output<Tensor>(framework::GradVarName("b"))->Resize(dims1); + auto *dx = ctx.Output<Tensor>(framework::GradVarName("X")); + auto *db = ctx.Output<Tensor>(framework::GradVarName("b")); + if (dx) dx->Resize(dims0); + if (db) db->Resize(dims1); } }; diff --git a/paddle/operators/rowwise_add_op.h b/paddle/operators/rowwise_add_op.h index 1cbd8bb31a..4e926d9f29 100644 --- a/paddle/operators/rowwise_add_op.h +++ b/paddle/operators/rowwise_add_op.h @@ -51,20 +51,24 @@ template <typename Place, typename T> class RowwiseAddGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto* dOut = context.Input<Tensor>(framework::GradVarName("Out")); - auto* dX = context.Output<Tensor>(framework::GradVarName("X")); + auto* dout = context.Input<Tensor>(framework::GradVarName("Out")); + auto* dx = context.Output<Tensor>(framework::GradVarName("X")); auto* db = context.Output<Tensor>(framework::GradVarName("b")); - dX->mutable_data<T>(context.GetPlace()); - db->mutable_data<T>(context.GetPlace()); - auto OutGrad = EigenMatrix<T>::From(*dOut); + auto out_grad = EigenMatrix<T>::From(*dout); auto place = context.GetEigenDevice<Place>(); - EigenMatrix<T>::From(*dX).device(place) = OutGrad; + if (dx) { + dx->mutable_data<T>(context.GetPlace()); + EigenMatrix<T>::From(*dx).device(place) = out_grad; + } - // https://eigen.tuxfamily.org/dox/unsupported/TensorBase_8h_source.html - // colwise add - Eigen::array<int, 1> dims{{0}}; /* dimension to reduce */ - EigenVector<T>::Flatten(*db).device(place) = OutGrad.sum(dims); + if (db) { + db->mutable_data<T>(context.GetPlace()); + // https://eigen.tuxfamily.org/dox/unsupported/TensorBase_8h_source.html + // colwise add + Eigen::array<int, 1> dims{{0}}; /* dimension to reduce */ + EigenVector<T>::Flatten(*db).device(place) = out_grad.sum(dims); + } } }; } // namespace operators diff --git a/paddle/operators/scatter_op.cc b/paddle/operators/scatter_op.cc index 35c185ad80..9b5068f07c 100644 --- a/paddle/operators/scatter_op.cc +++ b/paddle/operators/scatter_op.cc @@ -50,8 +50,8 @@ class ScatterGradOp : public framework::OperatorWithKernel { auto *dRef = ctx.Output<Tensor>(framework::GradVarName("Ref")); auto *Ref = ctx.Input<Tensor>("Ref"); - dRef->Resize(Ref->dims()); - dUpdates->Resize(Updates->dims()); + if (dRef) dRef->Resize(Ref->dims()); + if (dUpdates) dUpdates->Resize(Updates->dims()); } }; diff --git a/paddle/operators/scatter_op.h b/paddle/operators/scatter_op.h index e9595638a8..7551480211 100644 --- a/paddle/operators/scatter_op.h +++ b/paddle/operators/scatter_op.h @@ -49,10 +49,12 @@ class ScatterGradientOpKernel : public framework::OpKernel { auto *dOut = ctx.Input<Tensor>(framework::GradVarName("Out")); // In place gradient: dRef = dO - dRef->ShareDataWith<T>(*dOut); - dUpdates->mutable_data<T>(ctx.GetPlace()); - // Gradient by Gather: dUpdates += dO[Index] - Gather<T>(ctx.GetPlace(), dOut, Index, dUpdates); + if (dRef) dRef->ShareDataWith<T>(*dOut); + if (dUpdates) { + dUpdates->mutable_data<T>(ctx.GetPlace()); + // Gradient by Gather: dUpdates += dO[Index] + Gather<T>(ctx.GetPlace(), dOut, Index, dUpdates); + } } }; diff --git a/python/paddle/v2/framework/tests/gradient_checker.py b/python/paddle/v2/framework/tests/gradient_checker.py index 518f828bac..82ab7ad39b 100644 --- a/python/paddle/v2/framework/tests/gradient_checker.py +++ b/python/paddle/v2/framework/tests/gradient_checker.py @@ -286,6 +286,9 @@ class GradientChecker(unittest.TestCase): for no_grad in no_grad_set: if no_grad not in in_names: raise ValueError("no_grad should be in in_names") + if name in inputs_to_check: + raise ValueError("no_grad should not be in inputs_to_check") + backward_op = core.Operator.backward(forward_op, no_grad_set) places = [core.CPUPlace()] @@ -301,9 +304,25 @@ class GradientChecker(unittest.TestCase): check_names = [grad_var_name(name) for name in inputs_to_check] for place in places: - # get analytical gradients according to different device - analytic_grads = self.__get_gradient(forward_op, backward_op, - input_vars, check_names, place) + # analytic_grads = self.__get_gradient(forward_op, backward_op, + # input_vars, check_names, place) + # In fact, the above two lines can be used to replace following + # codes. But most of the gradient operators need to handle the case + # where one of more of the gradient of the input is not needed. + # We change the unit test framework to explicitly test whether + # the operator correctly handles this through follow codes. + # In addtion, if all the inputs have no gradients, the NOP operator + # will be returned by core.Operator.backward(). The following codes + # do not test this case. + analytic_grads = [] + for name in inputs_to_check: + no_grads = [name for name in no_grad_set] + no_grads.extend(filter(lambda x: x != name, inputs_to_check)) + backward_op = core.Operator.backward(forward_op, set(no_grads)) + # get analytical gradients according to different device + analytic_grads.extend( + self.__get_gradient(forward_op, backward_op, input_vars, + [grad_var_name(name)], place)) self.__assert_is_close(numeric_grads, analytic_grads, check_names, max_relative_error, "Gradient Check On %s" % str(place)) diff --git a/python/paddle/v2/framework/tests/test_mul_op.py b/python/paddle/v2/framework/tests/test_mul_op.py index ee0d81a64e..81371b1d11 100644 --- a/python/paddle/v2/framework/tests/test_mul_op.py +++ b/python/paddle/v2/framework/tests/test_mul_op.py @@ -16,13 +16,14 @@ class TestMulOp(unittest.TestCase): self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} -class MulGradOpTest(GradientChecker): +class TestMulGradOp(GradientChecker): def test_mul(self): op = create_op("mul") inputs = { 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } + self.compare_grad(op, inputs) # mul op will enlarge the relative error self.check_grad( op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) From 9a3c69c268d65c340ed5d0ae9aee1a90ca50ee84 Mon Sep 17 00:00:00 2001 From: fengjiayi <fengjiayi@baidu.com> Date: Mon, 4 Sep 2017 10:45:11 -0700 Subject: [PATCH 49/72] Revert "Remove `grad_op_type` in `REGISTER_OP`" --- doc/howto/dev/new_op_cn.md | 4 ++-- paddle/framework/backward.md | 2 +- paddle/framework/backward_test.cc | 12 +++++++----- paddle/framework/grad_op_builder_test.cc | 4 ++-- paddle/framework/op_registry.h | 25 ++++++++++++++---------- paddle/operators/add_op.cc | 2 +- paddle/operators/cross_entropy_op.cc | 3 ++- paddle/operators/gather_op.cc | 3 ++- paddle/operators/lookup_table_op.cc | 2 +- paddle/operators/mean_op.cc | 2 +- paddle/operators/minus_op.cc | 3 ++- paddle/operators/mul_op.cc | 2 +- paddle/operators/rowwise_add_op.cc | 2 +- paddle/operators/scale_op.cc | 2 +- paddle/operators/scatter_op.cc | 3 ++- paddle/operators/sigmoid_op.cc | 3 ++- paddle/operators/softmax_op.cc | 3 ++- 17 files changed, 45 insertions(+), 32 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index ec79b7f42b..7f8da2da5a 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -178,13 +178,13 @@ class MulKernel : public framework::OpKernel { ```c++ namespace ops = paddle::operators; -REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, ops::MulOpGrad); +REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mul_grad, ops::MulGradKernel<paddle::platform::CPUPlace, float>); ``` - - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,并且注册`ops::MulOpGrad`为其反向Op。 + - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`, - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 diff --git a/paddle/framework/backward.md b/paddle/framework/backward.md index 9500c92a26..8aa6728a95 100644 --- a/paddle/framework/backward.md +++ b/paddle/framework/backward.md @@ -18,7 +18,7 @@ A backward network is built up with several backward operators. Backward operato For example, we have got a `mul_op`, and we can register it's information and corresponding backward operator by the following macro: ```cpp -REGISTER_OP(mul, MulOp, MulOpMaker, MulOpGrad); +REGISTER_OP(mul, MulOp, MulOpMaker, mul_grad, MulOpGrad); ``` `mul` is the operator's type. `MulOp` and `MulOpMaker` are the operator class and the operator maker class respectively. diff --git a/paddle/framework/backward_test.cc b/paddle/framework/backward_test.cc index bf8b11e5f5..ad8003420d 100644 --- a/paddle/framework/backward_test.cc +++ b/paddle/framework/backward_test.cc @@ -148,14 +148,16 @@ class AddOpMaker : public OpProtoAndCheckerMaker { namespace f = paddle::framework; namespace ops = paddle::operators; using EnforceNotMet = paddle::platform::EnforceNotMet; -REGISTER_OP(rowwise_add, f::NOP, f::RowWiseAddOpMaker, f::NOP); -REGISTER_OP(mul, f::NOP, f::MulOpMaker, f::NOP); -REGISTER_OP(sigmoid, f::NOP, f::SigmoidOpMaker, f::NOP); +REGISTER_OP(rowwise_add, f::NOP, f::RowWiseAddOpMaker, rowwise_add_grad, + f::NOP); +REGISTER_OP(mul, f::NOP, f::MulOpMaker, mul_grad, f::NOP); +REGISTER_OP(sigmoid, f::NOP, f::SigmoidOpMaker, sigmoid_grad, f::NOP); REGISTER_OP_WITHOUT_GRADIENT(nograd, f::NOP, f::NoGradOpMaker); REGISTER_OP_WITHOUT_GRADIENT(fill_zeros_like, f::NOP, f::FillZeroOpMaker); -REGISTER_OP(add, f::NOP, f::AddOpMaker, f::NOP); +REGISTER_OP(add, f::NOP, f::AddOpMaker, add_grad, f::NOP); REGISTER_OP_WITHOUT_GRADIENT(fc, f::FcOp, f::FcOpMaker); -REGISTER_OP(many_output_op, f::NOP, f::ManyOutputOpMaker, f::NOP); +REGISTER_OP(many_output_op, f::NOP, f::ManyOutputOpMaker, many_output_op_grad, + f::NOP); TEST(Backward, simple_op_grad) { auto fwd = f::OpRegistry::CreateOp( diff --git a/paddle/framework/grad_op_builder_test.cc b/paddle/framework/grad_op_builder_test.cc index 8a817a3e13..902c2655e9 100644 --- a/paddle/framework/grad_op_builder_test.cc +++ b/paddle/framework/grad_op_builder_test.cc @@ -54,8 +54,8 @@ TEST(GradOpBuilder, AddTwo) { EXPECT_EQ(grad_add_op->Output(f::GradVarName("Y")), f::GradVarName("y")); } -REGISTER_OP(mult_io, f::NOP, f::MutiInOutOpMaker, f::NOP); -REGISTER_OP(io_ignored, f::NOP, f::IOIgnoredOpMaker, f::NOP); +REGISTER_OP(mult_io, f::NOP, f::MutiInOutOpMaker, mult_io_grad, f::NOP); +REGISTER_OP(io_ignored, f::NOP, f::IOIgnoredOpMaker, io_ignored_grad, f::NOP); TEST(GradOpBuilder, MutiInOut) { std::shared_ptr<f::OperatorBase> test_op(f::OpRegistry::CreateOp( diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index 64c7f23ab6..2d09cde41e 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -33,7 +33,8 @@ namespace framework { class OpRegistry { public: template <typename OpType, typename ProtoMakerType, typename GradOpType> - static void RegisterOp(const std::string& op_type) { + static void RegisterOp(const std::string& op_type, + const std::string& grad_op_type) { PADDLE_ENFORCE(!OpInfoMap::Instance().Has(op_type), "'%s' is registered more than once.", op_type); OpInfo op_info; @@ -42,9 +43,9 @@ class OpRegistry { const VariableNameMap& outputs, const AttributeMap& attrs) { return new OpType(type, inputs, outputs, attrs); }; + op_info.grad_op_type_ = grad_op_type; if (std::type_index(typeid(ProtoMakerType)) != std::type_index(typeid(NOPMaker))) { - op_info.grad_op_type_ = op_type + "_grad"; op_info.proto_ = new OpProto; op_info.checker_ = new OpAttrChecker; auto maker = ProtoMakerType(op_info.proto_, op_info.checker_); @@ -54,14 +55,15 @@ class OpRegistry { op_info.proto_->IsInitialized(), "Fail to initialize %s's OpProto, because %s is not initialized", op_type, op_info.proto_->InitializationErrorString()); - // register gradient op - RegisterOp<GradOpType, NOPMaker, NOP>(op_info.grad_op_type_); } else { - op_info.grad_op_type_ = ""; op_info.proto_ = nullptr; op_info.checker_ = nullptr; } OpInfoMap::Instance().Insert(op_type, op_info); + // register gradient op + if (!grad_op_type.empty()) { + RegisterOp<GradOpType, NOPMaker, NOP>(grad_op_type, ""); + } } static std::unique_ptr<OperatorBase> CreateOp(const std::string& type, @@ -90,8 +92,10 @@ class Registrar { template <typename OpType, typename ProtoMakerType, typename GradOpType> class OpRegistrar : public Registrar { public: - explicit OpRegistrar(const char* op_type) { - OpRegistry::RegisterOp<OpType, ProtoMakerType, GradOpType>(op_type); + explicit OpRegistrar(const char* op_type) { OpRegistrar(op_type, ""); } + OpRegistrar(const char* op_type, const char* grad_op_type) { + OpRegistry::RegisterOp<OpType, ProtoMakerType, GradOpType>(op_type, + grad_op_type); } }; @@ -117,7 +121,8 @@ class OpKernelRegistrar : public Registrar { /** * Macro to register Operator. */ -#define REGISTER_OP(op_type, op_class, op_maker_class, grad_op_class) \ +#define REGISTER_OP(op_type, op_class, op_maker_class, grad_op_type, \ + grad_op_class) \ STATIC_ASSERT_GLOBAL_NAMESPACE( \ __reg_op__##op_type, "REGISTER_OP must be called in global namespace"); \ class _OpClass_##op_type##_ : public op_class { \ @@ -132,14 +137,14 @@ class OpKernelRegistrar : public Registrar { }; \ static ::paddle::framework::OpRegistrar< \ _OpClass_##op_type##_, op_maker_class, _OpGradClass_##op_type##_> \ - __op_registrar_##op_type##__(#op_type); \ + __op_registrar_##op_type##__(#op_type, #grad_op_type); \ int TouchOpRegistrar_##op_type() { \ __op_registrar_##op_type##__.Touch(); \ return 0; \ } #define REGISTER_OP_WITHOUT_GRADIENT(op_type, op_class, op_maker_class) \ - REGISTER_OP(op_type, op_class, op_maker_class, ::paddle::framework::NOP) + REGISTER_OP(op_type, op_class, op_maker_class, , ::paddle::framework::NOP) /** * Macro to register OperatorKernel. diff --git a/paddle/operators/add_op.cc b/paddle/operators/add_op.cc index 6384d8c8ce..8ab748ed71 100644 --- a/paddle/operators/add_op.cc +++ b/paddle/operators/add_op.cc @@ -57,7 +57,7 @@ class AddOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(add_two, ops::AddOp, ops::AddOpMaker, ops::AddOpGrad); +REGISTER_OP(add_two, ops::AddOp, ops::AddOpMaker, add_two_grad, ops::AddOpGrad); REGISTER_OP_CPU_KERNEL(add_two, ops::AddKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/cross_entropy_op.cc b/paddle/operators/cross_entropy_op.cc index ac76326262..ab1e1c101a 100644 --- a/paddle/operators/cross_entropy_op.cc +++ b/paddle/operators/cross_entropy_op.cc @@ -67,7 +67,8 @@ OnehotCrossEntropy Operator. namespace ops = paddle::operators; REGISTER_OP(onehot_cross_entropy, ops::OnehotCrossEntropyOp, - ops::OnehotCrossEntropyOpMaker, ops::OnehotCrossEntropyGradientOp); + ops::OnehotCrossEntropyOpMaker, onehot_cross_entropy_grad, + ops::OnehotCrossEntropyGradientOp); REGISTER_OP_CPU_KERNEL(onehot_cross_entropy, ops::OnehotCrossEntropyOpKernel<float>); REGISTER_OP_CPU_KERNEL(onehot_cross_entropy_grad, diff --git a/paddle/operators/gather_op.cc b/paddle/operators/gather_op.cc index 07fa704824..123bed296c 100644 --- a/paddle/operators/gather_op.cc +++ b/paddle/operators/gather_op.cc @@ -63,7 +63,8 @@ Out = X[Index] } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(gather, ops::GatherOp, ops::GatherOpMaker, ops::GatherGradOp); +REGISTER_OP(gather, ops::GatherOp, ops::GatherOpMaker, gather_grad, + ops::GatherGradOp); REGISTER_OP_CPU_KERNEL(gather, ops::GatherOpKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/lookup_table_op.cc b/paddle/operators/lookup_table_op.cc index c3108ba8ec..94d40890a7 100644 --- a/paddle/operators/lookup_table_op.cc +++ b/paddle/operators/lookup_table_op.cc @@ -66,7 +66,7 @@ class LookupTableOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(lookup_table, ops::LookupTableOp, ops::LookupTableOpMaker, - ops::LookupTableOpGrad); + lookup_table_grad, ops::LookupTableOpGrad); REGISTER_OP_CPU_KERNEL(lookup_table, ops::LookupTableKernel<float>); REGISTER_OP_CPU_KERNEL(lookup_table_grad, ops::LookupTableGradKernel<float>); diff --git a/paddle/operators/mean_op.cc b/paddle/operators/mean_op.cc index e66e0abb25..d3d0e55a67 100644 --- a/paddle/operators/mean_op.cc +++ b/paddle/operators/mean_op.cc @@ -54,7 +54,7 @@ class MeanGradOp : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(mean, ops::MeanOp, ops::MeanOpMaker, ops::MeanGradOp); +REGISTER_OP(mean, ops::MeanOp, ops::MeanOpMaker, mean_grad, ops::MeanGradOp); REGISTER_OP_CPU_KERNEL(mean, ops::MeanKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mean_grad, diff --git a/paddle/operators/minus_op.cc b/paddle/operators/minus_op.cc index b4afebcd97..1eee9644ba 100644 --- a/paddle/operators/minus_op.cc +++ b/paddle/operators/minus_op.cc @@ -81,6 +81,7 @@ class MinusGradOp : public NetOp { USE_OP(scale); USE_OP_ITSELF(identity); namespace ops = paddle::operators; -REGISTER_OP(minus, ops::MinusOp, ops::MinusOpMaker, ops::MinusGradOp<float>); +REGISTER_OP(minus, ops::MinusOp, ops::MinusOpMaker, minus_grad, + ops::MinusGradOp<float>); REGISTER_OP_CPU_KERNEL(minus, ops::MinusKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/mul_op.cc b/paddle/operators/mul_op.cc index 8d0f59745f..5b8b5f6c11 100644 --- a/paddle/operators/mul_op.cc +++ b/paddle/operators/mul_op.cc @@ -84,7 +84,7 @@ class MulOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, ops::MulOpGrad); +REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mul_grad, ops::MulGradKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/rowwise_add_op.cc b/paddle/operators/rowwise_add_op.cc index 63de91254f..6825dce332 100644 --- a/paddle/operators/rowwise_add_op.cc +++ b/paddle/operators/rowwise_add_op.cc @@ -74,7 +74,7 @@ class RowwiseAddGradOp : public framework::OperatorWithKernel { namespace ops = paddle::operators; REGISTER_OP(rowwise_add, ops::RowwiseAddOp, ops::RowwiseAddOpMaker, - ops::RowwiseAddGradOp); + rowwise_add_grad, ops::RowwiseAddGradOp); REGISTER_OP_CPU_KERNEL( rowwise_add, ops::RowwiseAddKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/scale_op.cc b/paddle/operators/scale_op.cc index 4e039688d4..8e96a74c94 100644 --- a/paddle/operators/scale_op.cc +++ b/paddle/operators/scale_op.cc @@ -97,7 +97,7 @@ class IdentityOp : public NetOp { namespace ops = paddle::operators; -REGISTER_OP(scale, ops::ScaleOp, ops::ScaleOpMaker<float>, +REGISTER_OP(scale, ops::ScaleOp, ops::ScaleOpMaker<float>, scale_grad, ops::ScaleGradOp<float>); REGISTER_OP_CPU_KERNEL(scale, ops::ScaleKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/scatter_op.cc b/paddle/operators/scatter_op.cc index 35c185ad80..f901edefa2 100644 --- a/paddle/operators/scatter_op.cc +++ b/paddle/operators/scatter_op.cc @@ -77,7 +77,8 @@ Out[Index] = Ref[Index] + Updates } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(scatter, ops::ScatterOp, ops::ScatterOpMaker, ops::ScatterGradOp); +REGISTER_OP(scatter, ops::ScatterOp, ops::ScatterOpMaker, scatter_grad, + ops::ScatterGradOp); REGISTER_OP_CPU_KERNEL(scatter, ops::ScatterOpKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/sigmoid_op.cc b/paddle/operators/sigmoid_op.cc index f35b702384..761c6de8d4 100644 --- a/paddle/operators/sigmoid_op.cc +++ b/paddle/operators/sigmoid_op.cc @@ -53,7 +53,8 @@ class SigmoidOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(sigmoid, ops::SigmoidOp, ops::SigmoidOpMaker, ops::SigmoidOpGrad); +REGISTER_OP(sigmoid, ops::SigmoidOp, ops::SigmoidOpMaker, sigmoid_grad, + ops::SigmoidOpGrad); REGISTER_OP_CPU_KERNEL(sigmoid, ops::SigmoidKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( diff --git a/paddle/operators/softmax_op.cc b/paddle/operators/softmax_op.cc index 471bb288fb..40c51a64c4 100644 --- a/paddle/operators/softmax_op.cc +++ b/paddle/operators/softmax_op.cc @@ -62,7 +62,8 @@ class SoftmaxOpGrad : public framework::OperatorWithKernel { namespace ops = paddle::operators; -REGISTER_OP(softmax, ops::SoftmaxOp, ops::SoftmaxOpMaker, ops::SoftmaxOpGrad); +REGISTER_OP(softmax, ops::SoftmaxOp, ops::SoftmaxOpMaker, softmax_grad, + ops::SoftmaxOpGrad); REGISTER_OP_CPU_KERNEL(softmax, ops::SoftmaxKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL( From bb0a11cd14902971902987e2ed6f7107ae758bef Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Mon, 4 Sep 2017 13:01:18 -0700 Subject: [PATCH 50/72] Add a graph building example --- doc/design/graph.md | 51 ++++++++++++++ .../images/graph_construction_example.bash | 11 +++ .../images/graph_construction_example.dot | 63 ++++++++++++++++++ .../images/graph_construction_example_all.png | Bin 0 -> 60087 bytes ..._construction_example_forward_backward.png | Bin 0 -> 55715 bytes ...raph_construction_example_forward_only.png | Bin 0 -> 32082 bytes 6 files changed, 125 insertions(+) create mode 100644 doc/design/graph.md create mode 100755 doc/design/images/graph_construction_example.bash create mode 100644 doc/design/images/graph_construction_example.dot create mode 100644 doc/design/images/graph_construction_example_all.png create mode 100644 doc/design/images/graph_construction_example_forward_backward.png create mode 100644 doc/design/images/graph_construction_example_forward_only.png diff --git a/doc/design/graph.md b/doc/design/graph.md new file mode 100644 index 0000000000..87f696f90f --- /dev/null +++ b/doc/design/graph.md @@ -0,0 +1,51 @@ +# Design Doc: Computations as Graphs + +A primary goal of the refactorization of PaddlePaddle is a more flexible representation of deep learning computation, in particular, a graph of operators and variables, instead of sequences of layers as before. + +This document explains that the construction of a graph as three steps: + +- construct the forward part +- construct the backward part +- construct the optimization part + +Let us take the problem of image classification as a simple example. The application program that trains the model looks like: + +```python +x = layer.data("images") +l = layer.data("label") +y = layer.fc(x) +cost = layer.mse(y, l) +optimize(cost) +train(cost, reader=mnist.train()) +``` + +### Forward Part + +The first four lines of above program build the forward part of the graph. + + + +In particular, the first line `x = layer.data("images")` creates variable x and a Feed operator that copies a column from the minibatch to x. `y = layer.fc(x)` creates not only the FC operator and output variable y, but also two parameters, W and b. + +In this example, all operators are created as `OpDesc` protobuf messages, and all variables are `VarDesc`. These protobuf messages are saved in a `BlockDesc` protobuf message. + +### Backward Part + +The fifth line `optimize(cost)` calls two functions, `ConstructBackwardGraph` and `ConstructOptimizationGraph`. + +`ConstructBackwardGraph` traverses the forward graph in the `BlockDesc` protobuf message and builds the backward part. + + + +According to the chain rule of gradient computation, `ConstructBackwardGraph` would + +1. create a gradient operator G for each operator F, +1. make all inputs, outputs, and outputs' gradient of F as inputs of G, +1. create gradients for all inputs of F, except for those who don't have gradients, like x and l, and +1. make all these gradients as outputs of G. + +### Optimization Part + +For each parameter, like W and b created by `layer.fc`, marked as double circles in above graphs, `ConstructOptimizationGraph` creates an optimization operator to apply its gradient. Here results in the complete graph: + + diff --git a/doc/design/images/graph_construction_example.bash b/doc/design/images/graph_construction_example.bash new file mode 100755 index 0000000000..35e6997abd --- /dev/null +++ b/doc/design/images/graph_construction_example.bash @@ -0,0 +1,11 @@ +cat ./graph_construction_example.dot | \ + sed 's/color=red/color=red, style=invis/g' | \ + sed 's/color=green/color=green, style=invis/g' | \ + dot -Tpng > graph_construction_example_forward_only.png + +cat ./graph_construction_example.dot | \ + sed 's/color=green/color=green, style=invis/g' | \ + dot -Tpng > graph_construction_example_forward_backward.png + +cat ./graph_construction_example.dot | \ + dot -Tpng > graph_construction_example_all.png diff --git a/doc/design/images/graph_construction_example.dot b/doc/design/images/graph_construction_example.dot new file mode 100644 index 0000000000..b77ddd448e --- /dev/null +++ b/doc/design/images/graph_construction_example.dot @@ -0,0 +1,63 @@ +digraph ImageClassificationGraph { + ///////// The forward part ///////// + FeedX [label="Feed", color=blue, shape=box]; + FeedY [label="Feed", color=blue, shape=box]; + FC [label="FC", color=blue, shape=box]; + MSE [label="MSE", color=blue, shape=box]; + + x [label="x", color=blue, shape=oval]; + l [label="l", color=blue, shape=oval]; + y [label="y", color=blue, shape=oval]; + W [label="W", color=blue, shape=doublecircle]; + b [label="b", color=blue, shape=doublecircle]; + cost [label="cost", color=blue, shape=oval]; + + FeedX -> x -> FC -> y -> MSE -> cost [color=blue]; + FeedY -> l -> FC [color=blue]; + W -> FC [color=blue]; + b -> FC [color=blue]; + l -> MSE [color=blue]; + + ////////// The backward part ///////// + MSE_Grad [label="MSE_grad", color=red, shape=box]; + FC_Grad [label="FC_grad", color=red, shape=box]; + + d_cost [label="d cost", color=red, shape=oval]; + d_y [label="d y", color=red, shape=oval]; + d_b [label="d b", color=red, shape=oval]; + d_W [label="d W", color=red, shape=oval]; + + cost -> MSE_Grad [color=red]; + d_cost -> MSE_Grad [color=red]; + x -> MSE_Grad [color=red]; + l -> MSE_Grad [color=red]; + y -> MSE_Grad -> d_y [color=red]; + + x -> FC_Grad [color=red]; + y -> FC_Grad [color=red]; + d_y -> FC_Grad [color=red]; + W -> FC_Grad -> d_W [color=red]; + b -> FC_Grad -> d_b [color=red]; + + ////////// The optimizaiton part ////////// + + OPT_W [label="SGD", color=green, shape=box]; + OPT_b [label="SGD", color=green, shape=box]; + + d_W -> OPT_W -> W [color=green]; + d_b -> OPT_b -> b [color=green]; + + ////////// Groupings ////////// + + subgraph clusterMSE { + style=invis; + MSE; + MSE_Grad; + } + + subgraph clusterFC { + style=invis; + FC; + FC_Grad; + } +} diff --git a/doc/design/images/graph_construction_example_all.png b/doc/design/images/graph_construction_example_all.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee61f9ef4544da786480f188403742d48a1d9e3 GIT binary patch literal 60087 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 O_@{x<Q7clh4*oBfq<aSd literal 0 HcmV?d00001 diff --git a/doc/design/images/graph_construction_example_forward_backward.png b/doc/design/images/graph_construction_example_forward_backward.png new file mode 100644 index 0000000000000000000000000000000000000000..f01af6d0cb542194d515129488b1159bd180f1b9 GIT binary patch literal 55715 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 literal 0 HcmV?d00001 diff --git a/doc/design/images/graph_construction_example_forward_only.png b/doc/design/images/graph_construction_example_forward_only.png new file mode 100644 index 0000000000000000000000000000000000000000..2a90f9cfb10ece1e8f6b231c63ee8ee8bc37263d GIT binary patch literal 32082 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 literal 0 HcmV?d00001 From 9f3bcd0e4608119cbafce9db7191a74bc8a8bfeb Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Mon, 4 Sep 2017 13:10:05 -0700 Subject: [PATCH 51/72] Update image --- .../images/graph_construction_example.dot | 2 +- .../images/graph_construction_example_all.png | Bin 60087 -> 58932 bytes ..._construction_example_forward_backward.png | Bin 55715 -> 54429 bytes ...raph_construction_example_forward_only.png | Bin 32082 -> 29878 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/design/images/graph_construction_example.dot b/doc/design/images/graph_construction_example.dot index b77ddd448e..86f82fe05a 100644 --- a/doc/design/images/graph_construction_example.dot +++ b/doc/design/images/graph_construction_example.dot @@ -13,7 +13,7 @@ digraph ImageClassificationGraph { cost [label="cost", color=blue, shape=oval]; FeedX -> x -> FC -> y -> MSE -> cost [color=blue]; - FeedY -> l -> FC [color=blue]; + FeedY -> l [color=blue]; W -> FC [color=blue]; b -> FC [color=blue]; l -> MSE [color=blue]; diff --git a/doc/design/images/graph_construction_example_all.png b/doc/design/images/graph_construction_example_all.png index 3ee61f9ef4544da786480f188403742d48a1d9e3..d769d70af759873802144f0dd0ddad21976a22eb 100644 GIT binary patch literal 58932 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 F{{SKxufPBR literal 60087 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 O_@{x<Q7clh4*oBfq<aSd diff --git a/doc/design/images/graph_construction_example_forward_backward.png b/doc/design/images/graph_construction_example_forward_backward.png index f01af6d0cb542194d515129488b1159bd180f1b9..266f49d747f1278a606403f95fe8f9c815f3159e 100644 GIT binary patch literal 54429 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 a`Y)g9=2N@ALobK{2s~Z=T-G@yGywpYgtEf` literal 55715 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 diff --git a/doc/design/images/graph_construction_example_forward_only.png b/doc/design/images/graph_construction_example_forward_only.png index 2a90f9cfb10ece1e8f6b231c63ee8ee8bc37263d..eb1a22da72e1d9aa7abddad1b70e1da995ebda67 100644 GIT binary patch literal 29878 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%0D2#P02r<A&Ql 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 literal 32082 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 From e4494bb4417561ae59e26aec176e766214aa61f7 Mon Sep 17 00:00:00 2001 From: Yi Wang <yiwang01@baidu.com> Date: Mon, 4 Sep 2017 13:12:48 -0700 Subject: [PATCH 52/72] Correct optimziation part --- .../images/graph_construction_example.dot | 2 ++ .../images/graph_construction_example_all.png | Bin 58932 -> 55421 bytes ..._construction_example_forward_backward.png | Bin 54429 -> 47228 bytes ...raph_construction_example_forward_only.png | Bin 29878 -> 29192 bytes 4 files changed, 2 insertions(+) diff --git a/doc/design/images/graph_construction_example.dot b/doc/design/images/graph_construction_example.dot index 86f82fe05a..bedb6de011 100644 --- a/doc/design/images/graph_construction_example.dot +++ b/doc/design/images/graph_construction_example.dot @@ -44,6 +44,8 @@ digraph ImageClassificationGraph { OPT_W [label="SGD", color=green, shape=box]; OPT_b [label="SGD", color=green, shape=box]; + W -> OPT_W [color=green]; + b -> OPT_b [color=green]; d_W -> OPT_W -> W [color=green]; d_b -> OPT_b -> b [color=green]; diff --git a/doc/design/images/graph_construction_example_all.png b/doc/design/images/graph_construction_example_all.png index d769d70af759873802144f0dd0ddad21976a22eb..18d8330b60e12720bb993c8cf588d64ff8db1ea9 100644 GIT binary patch literal 55421 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	FicZNdOu{6!~x|$4e8^R-WH)b|ew`rf%5jbt;cg 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 literal 58932 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 F{{SKxufPBR diff --git a/doc/design/images/graph_construction_example_forward_backward.png b/doc/design/images/graph_construction_example_forward_backward.png index 266f49d747f1278a606403f95fe8f9c815f3159e..61c3a02a04bc8891ab5b921a889829bcce386df8 100644 GIT binary patch literal 47228 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 literal 54429 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 a`Y)g9=2N@ALobK{2s~Z=T-G@yGywpYgtEf` diff --git a/doc/design/images/graph_construction_example_forward_only.png b/doc/design/images/graph_construction_example_forward_only.png index eb1a22da72e1d9aa7abddad1b70e1da995ebda67..14805df11fc09f64d6bc17f5e969f1400d615148 100644 GIT binary patch literal 29192 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.MP>6zif(_&8M5j(hBcVNa)m4U@n*rs)ItiKT90aHTTz{QQhe=b&ZrYV zO6p5-=aiD^`|7l|!c2nE$0zvSYgqd!-xj}gtC6!K7{b?JP6V<$6+RN=AK{PC^qmj{ z2p|1iH8o`a-x-@oj5OYMlK_P7Av^9G1Z!CSsRSufr6}!iPiB(4$1cS2XRC6CFCZE! z@c9qG7>iYe<$^}9L#&(cl4A`9lNLF-PvNby#HF)t>&DB;i-Yn`q^QYNIZ|J`jw;89 z!%*C86Tiv@-uX<6m1TD|kcsy-8=47g_rh&A)Dlt4-|}NlNSX%RU)kR1Rt5gEs^ss! zFWRjp_KT5(p0t+J_%pOS7G476NlZ;_$P1u%E8dXWu0=K5$UEZ1JPk%$axt{aNoVjA zJZPT`C8o%QkOhWZ*Ul!4Rs0QI=_;Dp4+XzFwmkoWfzI(q18I1VXU{Y4RGNEC=A|eG zzpr|xZwB$Q+hei$9XyBh13llTLROaS^8RiZkN9ULRYinA+zjgjZi4htvmj34`%j>a ze#mat&=GVCGH1*kqyj~!@GWgNt*wt(0K&H(Ikv>z0_3TFZ=Lmbx<zh|C))XgK<2I= zNl3k)8{?emAZ7`3Jq+VVEpHPWbIdCYLlSl+QL{{3g7pO0TL;wWbnFX6>WsWiKt@iS z(&&0Yqap?9cI|)F(WdX=exoP89m5{59Qu^j`BcfA#>fQ~j3>20bd*8+jdLzn!l%$@ zDSHLCO0Py=1=9}xTANncN~0p2*-7U<TwANw&B7Hw$}@fcu<Q;2|EBgQ*HMd8M^ofJ zI|7+XKHYX3v0CgrSQ&J{{hT`o>Tn~_bXAHw?_?JCJ_5*tfE+TCgLWM^ivVPawDQ68 zvP{wQu*s6aM7I7d`<mCaBa;kbU3DFsHCr7$0ar;2k(7QwlGK|5Am76-DR;o<^1Qir zTos-q?>nk5k>U*`>*BFxoz822IxeM~;OTSy1@5_FmmMs<rm(}kD%PCHo(!}5hnX?< zoX*?)ZavrTO*kYlTD<mk7+(LG;f4X}Y84=V;bG6cj(S~7Q#{xYI!%l=4jLENDRbLa z068{aGf<29itsRxRMmm+kI!9RGAb6oX#-Gdq7@;B2MbXGk6wS6+DY{Ka*b7$^22&o zhnYE3ME_=K@~CmTqhQIvW;Wj&q$xUW9DyHM9I4|v!^j;VH-<8p=*c(%mAW}Oeq_<W zCpP_kS?$5S4!HP13RrgeecJU9Kr4W^B^{Z4+@QQuWJDN9J%iRLbfXV?fx}p*;r=LB z8Ho$*s92vk-zxwRsH~S9_UD{>O#2SzU6PdB!%WZLL~!#vS9dP|yem;L&3zT1TQ64k zJ;d9wXGnla?<Fwo2Yl@fT!ac;Gqe-R@AXu5bB(tyC?NzoGvx)udUIPjTap0sW@G&c zZ<$TK6e)?Bk{t+`GQ}Ua3+k53eReHVH|XA20J*}}Lk8ERFm?D{prRL--5?le&%1rm z<tnbRwKCfByj|mFiLw<({=J}w8aFzMfS;|ix>hc8tyus!r>Dm}tA)C5-PNwCDLqry zlX31mBfuN8iE5CL_k`fY<ArirO<w!C+#Y?_Kr8RO$4Mk5lXFT_nfL0!@&JKw^UdPy zVZh*PMDLa1zS1t-yb&?665#H6a^2{Bq`wz|?Ov-!IT_P+ce6C=-&e48QXlCKeAMyH zku$l6T~3g@hPh+1tWVaV)4Mn=Smz0!N$knRdz|cK<UKszF4k22U|l|JKh5<&;@o5F z_}O|4zI+_!?X4G3V{hqcofN}to|v~Gge}p~!;kT%?yCvbvwVlh;c(9D8MrC$PU=KW zbH00jq_FqA$wc6p<h+sOn^f7XR0wB_o~z1<$xIQ=<Z10ZBPpFsFJ)d?_9{M@3lkQ4 z^1&2GbcQ)K*C%Zo!k_oBC;m9nvKc*5#PfJ(Q^qO`KDwUId${e+J6xD<H2}Dte9d7x zeVWmNQ|r5p{E61w5lu1kdpMqm6Yp}Dj?mUMRkt($qRH=3;m+|zv+HTKl|b!^KjGl3 z`^mQ|ri>s6uPOSX>(J;SsqK5Ebpx9wreyB%_2t@jA@51iiN`A~F4jA!)gD{tOzZW$ zH=^&&MNIOZ^6bkN2yfkrH_blCbjucUJwLhiKRq^sYn%|7Ew^sPyPt#;C%3A(uy5*< zrC4d9V&Rd{76%dO&?lZ~E|R=8yXX^lEkn$OI;4Dm$)*YCToZiQUxr-@-}bynYd-ih zg)8pi6vGNbkDooMs#{DS9{HTiV=nRFjOuv%0Wh+aAUt1{p-0609$z1<E^vSAeG<j6 zSu>qsCe-|R)8*W}+|V#cNJp^~nGr3Qnjq%pbi2}NO>|=9e7szeK=1BeJ9s!mnb&@y z^mNe^XAfS;MGQr24T|l_*=syE3y6Hln}4B+z`naz)t#IUk*LRuEw<jSDtEu032swo zkYlQ(@pR-H;eL`yQ>xa_RbVJsz9GEdCEc4dnQx^K%@y9w9Mx?G`+GW$1l|hrZ^goq z>q<R18~FwaCmcIm@1v!Cm51Uk=XyQoY{&j2i03YO8BJze=m#;-VL7Ytrnz5^Z;^Sj z5S!Ag2f!cJE_fFnAMf^p_VY8ytCL%tT)F@nF1I~z$A1d&J4O5``F>HppnI;C(iOj= zfczuY)oE7eQPk^hC$Ie&>|pw|oKivRx$P^FSLt6814Vtz(q`zoN^bsk+-kE#!<E|n zQ))t0Jn+JqRpk4ee*b)2(YD(g(M9IA*@!=5&1#$cVin4)J2kEPmC@lF^T96y{heCN zd{o`m&JPR4HF`_~>W^K|y9YuHZB3SHrj0_bZ()~@F4($<PcVjd-9tAeePpl2k%D&p zZv_Dj0Wn8UL{CSzNp_joNU?;+-$VIn3oBNDK)ydZYOEE^o<G)QNIxl;L_wQx^r@BT zq9+3`1)Hy?9Bb^bY$0Op?vM96V237M-Y#ckO^(#4w5tfxMGDjcNf;4&`f$imdmZk0 zFOv>S<BKsmF=pHO*UGCH%mVxno{0?_BbJ#IbE4`j@h9UBdf~PD22J@1^nhfvxlb~Z zu4b;Xr&=-2YE6YL)lI6f|CPzQ=<B)z`>)u$kU#Q$Q}<q!F#0wq{IT9~(`=DBiZP8* z5{st$!Req^LxjlqXKU-;gxnRAqzINPzJ)1^z6u%{wV%-OaFb2Jbx;(ReL7||r^Y(e z5Fm-R*(*p&*{vqdT7#F~sK@~M3f%FWzq@?hZE8%FE$Je>zFa82>c_mqivQ$rn_!oL zjU*Ctb`F4M`U6Y4phVN9*p1<Qzrc+J&4ZrIPi*iV8QAIXG$j@~{X2y%Efz*Q`<k6d zg|Rfq=5aDCz5o@TqJKYnIN%(@?ZWjz**u~t<4PfbJ>7lsdX5pM-9XzyT&SJ=_S<rE zLLm$FIfxL&XFCZV@dHy%Gih1zdfvWHuz8po4x9Mq-T`Is<l7gBQ&~T(drUn4m~uze zDd(hI)<)o?utY*sUSmLTUbjk9&zx3Oy;+hl_By&6`+ejWJM7sMqUUBkj2FJ)Lx;l* z#BYC1Z+~GS(&RI@fY@pC!UK@w$^0E$YdV>c@5uRo7kc=<?G_M6cL{dB!&HBJ9d($= zIJ%v%B|^_&uPXxsO%Z&PpF{6>>hflw8BX;Ff-oFQ;#wwt?N)z*&Ywi-r;W-}oa<7C zm_+Z)>UAc&_Ms0dgD&$5sVUlauKSl&&lJndOIqv`tdlo>ONJ^X47jmmAfM2_*)cJU zxdEQz2kTtK@hdeCM!rTpZVdHOXVe&1#8^A(^Of>{BS~c_j!6wS*hiUtcZf`K*NcrQ z%gnkZmmK?v#<2|2DC&s!bmLE@Tb8`x7(zaZa=6onX=8*g^oQ{@R5yPq#)AthltDBU zUAIhWbbgT7|8UWLGEHk@&N;;WyV7QkA<Jy)&ZgrgJP5jxZ&5~7(~^*<d*`xd#|(@w z&l{D7O$%XqEXz^%U^zo&xS7eG*ZSfuD&^SvXM>ibfPpY8Ev9;f4F~_jnzC{+?x63v zrN0b_zDiRw<pm@R_MHi6siooW5IGYJd4JuKR%9n4Z0ZVpWRV;k1KsC!6sFw=4WK!< z!Z%~K?c=SJg>*0il)CsvD3UHw=_n8V4Q)jR#7*EM`L05SdT3Y_M>Hj4AX|^Jak+&I zK7!Xcp^Y-I!!1gY4_it7IF|>{M<YMFcF?hZq(Q?2Vd144F?%lzmiH@u!`?n0m``Xe zjX|-FP32EZjwN=^C_BZP&0rqtc#fYnJ`<^k;oP%a5rL(6QL!LIG)fz!Yzu9Q?$+C# z-Ylr$)@Z7feFpS14VoSmHLh|}tSLF>_$)g`4TmpRMFJg^=yv}E-n>7)FE6-Zko6tS zpQ>rNjL8jJKEo9#Z2W*ljKp6VHYKB&l3XcLzJ;$0J)l>%&p0;QzOp2F%JWt_95JFw zI#wK|&+)P6sZ6+Ffr?Bsl*rL3OTt7?8=(wKOG1V==p1n_r>hgkZT2?GpYk8gpT#I? zF%QiuojcPR;Xa)Zg?3y-F9@GzIyNZUZe*C+@$KaTn5)&>M5?-fP_8*t)r_-sFCW!) z8``%b+D`6C2d{_Ynz2oo*Ipjr30A%kMgXSRX__C;_vv#utTD>q?Q3qD<I3@~n`~_9 zB6Tq51H>-On-R0eA^I`7I4<D>T96`r)Tuz6`b9KzwqsZ8LNIFfBix^hm*`1%!uHHr zw5`iJug7&LD~>;Z;g`Hk=hyRj+?U@!D{4~1Yf29{C}T8zpB@1zssQkB%bK)au=n*W zAQZKk%|6U|<~9^}oFb^D5zJiYASb*<L~%jpUzVnn5GKX*c;%Rp;gr^ChL~GC9-0AY z<kRQkP?;~*L*d*fPm$yRFzf<wSVwuA^tJ?MmB8!&6v%A~OMZ3EUY5)AG*xn_r;8qN zleLg#lkM86BIc`WpJm)>?y_H$KeAUa1T;Qpw>HLoGXII`$!@sdV+C3Z;%>j&opUqu z>2>Huf#myr(_U~`DYjZe>=;x8Nc3>jx|a{?#})6e683gET(IF^vcv?H#M`Z$H;j#g zmnM#uoRwL>)ELQJ9{-Yuq?^ngLHHpR@{EjGh-m?zrA$jHe3F0Fhh{&rkS6-$U-Wjb z04S!;f&?j6NXO-=`#V$rzCF?N@&0=4>i}Z9zkmQl^%|`o&79jI4(k#iHSufRF_%eM zVqWQ1k?R>3MUjHjE_=SiYQVgSO+>i%COX#JZFv$3e-=~fO|vX#O&Bw!i84rGJymNw zUS#TMD*+N>R7*>BHmwGjR<-GMUvoI^+>%X3fp?>(mqk+e4LfyS>l!&W%{s6~JZPrg zK!+?VWrA72np1F83Xa2-CB#6YxX2Zu`b(u1FRxi0Jy|XDI8F8S3Sj+DF~YrhGj`Lr zkGF`qSB}S&X86Ut8N}x-!-)M*^!_S1iU7q;{fv;5EYp(M)MuloK_u(?bZu=l=;65U zq9(-k2_>}o^BX{BQQ2?n7sodtm~4!U=SR~9y^q1~V%@4}_kP5%dx2-}Z~NaO@-E=8 zTI)&7_qW@UBZLCDd^D@K<yZsN+sz?-8kL`)V!?-=0z2)a2}kEvgHcX|@;ECR(>2$c zS<Zm()GOp(O8b}Rd1VJ){gS`d5&2QGxJB8jIpX42n4#YtR91uGLDG*uD_Ts0gMgR| zk<%#X^39;?nopKlRycJe8%reR>Oq2IJwHD&rtd`icV1`uY(~8(NZrC1-7Wya6~F6R z%%i_3hlJva{oY03UJqLd;tnC`^xqM<ZWE!fZQ;rUex|&d_~TWd%~&)}kfdS+B|GJy zl<?N>$oWa@5OXSYT*(mqESYPNFkkI(YQH-QX#G|3ye`0l74kM%P3)X~Ax<d!!k0q~ zvad^qM37Gz>orJcu+jagP~f;>jLnr7q_s1*NtqNqkC>r&AO)7jQEMv-+O1T%ul>Lr zHyKn?+f%XyvZv;qc3n!p+L#OOvJQOs;aoX@FEnqwq4CJTqA{T{-bRh6UfnHjpDu)S zY4txR#jtm^e0u+QA1V5HH4R3f{245#;|WR_w8sO$Yeb2xWf}NzHq}2Y&W4h#iIl6Q z%<dR5CTmO$pB<s^?Y{rjL~oBw5{EGvRXtnNd2e2APV2DT;(F}3Sb4o%Zceb*$)pVP ze--;m0ssDkD7j`#cb%<h*-R@$&+HC6>Wq~LR<Vf{?ZYF`e$sYW+n0DON9w2@u+Ih@ zdcrBfhPs7Gk@nw2j1|KN!Z}5P^l$u6vmUo7O>TFV9Y7F=NzvQJF(gzCmW++4m@@oU z9+GkqA+%d5UwNNH<M$lpVcnRR!gsjgxoGQ_S$0hLymx44mJ@?Z9@oOUs|CQ5j<n{g zp*?^<0*yniB?vy1q2h+{q(HbQMZ8WsZ(qK731`wzXx}vaIeTyM*tHQ+o30u7)OZKH z+sW`6V{Im68peK0oFI$T9fN?oemNo73RL%xw|#=~vSQd#Il#A$Q=G!`pMP;Sl)buo z8@aBRP`Aq7Ya|lnw{x3!+WjOp?BdqmiC^lzAr{UVJZX8y^5tVIt4s2p`%TXQWz}0Y zEhA(}wB_lq=&;z9i8&MRmGuRKt1}k1Qi3%LBvO(=>yfw|AVYRumWkatuE*miIsshF zzE?K&<_9rbn^0a7R0<NAKr+%WwRjAvVt$<Burq>K&Ay8E?~WD=jr9QrEo|S^M%isf z8W{Dta^sNTwj2?k30xR6Pz6(o^v#1qo_>&fFXOSXF=iP#wOWsz)&>;8caHkJUUKT! zD;8=Ieq6M*5|)94XbcOQsbLo<fpIP*udy5L1B}mg@;((uEiV7ICnD-s3Q+BaQb&Y5 zv2i)V{}Lq3H}*}<)e0#w=t7jylpaHaOHRkPF_jfJcMCK@9=|`lS{K?5_#%yiEmfiM z(tFXCfkwgoe2}=g^JcMXN8M^D9$U^mz3Kb~<+}*e?z>&m9Pd?M%*oF#H0edLPWan6 z%QgjpNB4(y&40NFg{6N1;c$pL#{){g=JHZ;dP`lJz@0pVI_~1zd4h2z*6WaqWgrW? z84=1C1Z2xG%<H2m`QGpS7rS@VZ^|n4-~9RG+UFPPh&g8Ed)MG%qFs>IqGLF>u!WZx z8YaE6%xH@FW8T8hR*=7du@t}EF1JL$RA26s!O1j(aWafyROC58)c>XtLHDS4IjJSv zuDB;|P1hu935(sVP}29xh6(P~SD2UemeHgRg`BfdRNLZk4no8os>DEQpEbS-)DonM z8|M#ahcqDCFU;30QMgZe{0SO_a`k*@DxXQ6S}YRveC$a19P}-65UBd9Y0%vcl1M%% z1)1Lw?qeXfn`woS4j*~JtOCt7pRw=x{5-hMYrUGhzK4FI<A>{c0*SQUpw8dZGOF&K z6qRB<^5mpcqsMszW7i}C@eSvHH@a!jlSABRq_2$+rgJdTXQRp78SC@Z2-JkH(Uh^u z%8lS#M>H#@o+X5Kyw*b<k@3AW_MFwh>=n@Gc(Z6e%%{{GqJ)T>A0s>g7WAxA*?mS& z7Lpf&EU7lRu5yX~tO{M}&wF{PJ`&1%_BBlJcCQ6Jpq#LrzBQnI716ndb>YQHmj87C zA`Sr`{3fUAY3jRs)l>+x$YUX@ePR0T)pD*Wwx$G2(~Ra|&hNMO)fz5Kt^36>7-JeF z^+()(vg#An!39K0pXvwhLWpjg@QI%+#o}O{Z=Z(KM(w0C^@~O$g}0uKhWDK5rWV~6 z@p2(-JXMmO-e{{369fo0GaB?o=O7W01~C3*l!S<@2*?cgr|&>b<an>JbN*VE?j9da zw}V_#fPx-r@mS{pFZs;@dz5^Y7glFY6!xwlQG@Inee6SyxDyu$!k3d5a4`}N*c6Uf z(_6&ne`;JR-<ntZY#)C4PH97|{|m)!o~7g+X5b%bWm=+P%Xc=MAqjLLk|7qS2zpn; zx?0qA%C8K|D6Pua2g9gPAZL!;lWE-FT2`?)CcH3Rp#Q1gD#<x1CKy#tTgvWvm_)K= zQJgE21X;|*xjZY;AG{q0q$1ou?<K$LO<{zKSwmq(#+y%(G9#&37^A)s$FV84`)u-D zca7Fp`@c}c>8g?BlQ#rjT+A5-VNA7rOMVT<n&&Jfe#yL^&?z`_s+rz$SH3Jl-t_|c zOVm42v()L7L@}JT4G#SpP0xFn=q`mJTfZZkY5!0IKYIC#jRlUsG>*?Kk^+C}T6r#g z=o`D?lP#%AnLYF!1*v2_#gwjR2^Dsg#9A@HZ6#|G9!0w%%XcO!_=0E%&f0<m`U6`g z^FzU4<mr_6AJu0b=dpZ*3W!AEb?}VWYquDY@(yjaebrsxQE^0CoT&GfDlukYg<4&& zcucF>&opdRDWu6<nbs!;hGcAYpBfBSQ9n$KVLw8LX_8(qREC_H?7R#x;i$o7BVEo_ zoKFS!gnQt*D(XU~#Z0r$h=n)5&|uVZBcGSDx?ZZa2MPr}BDdg#F3Ff1R09iczyog; z!BIn@1~{4f#rm~~X`Fe>qm7Z<2pwk3xgc9QacI_il2*g}Q&Qyqb;gSEi#~VnG#y>^ zuc;!S@5&V_KX{Q|5d2P!`$??VJhryAzP6)eUHaJ&Mx)2%JJO4!Q!9~NMn4)u^Kr~0 zF86nlxhvIrFo6hD(Q4`Sd+?D}=Rkv8*PuX|rr6L~Ch$R7-pz*$<hlsZ|E?c_^+wZY zUG6|_#0ZCm5op6^CrGxZ@*A8U&KdAd-WvZBJpb+9sr^{@tny>aK7u8POLp-<m`djK z#}=La{rFeVvfKF_6(-E~-QGiO`^nq!^lJ(F>Qu$^gl2CYKW*d?XjY$s&de<nlE-)b zWD1;lde}iE4!NN|(aRH;HTlYb1ehlfGg!p^W%_3XFQ({w*g?>#1%0SQCfNIt%4S^~ zh$|j`5c=KAjRoKmqiNpvg(!A2xdrO|wQCJ7dKJ@^f>JpmzJE4s-MW*z<T^BEi7295 zoqAQa3W5yVI+(jpx*nW}OOaiJc_Aos5$l=4ZPGY`11Qc~Chx(Jt`{!__&+KfY(AVw z^SYgEB`9aeKORPqiZoLOF|zvpo$FowoU%5#yPh+0Zk2fBtR>@u-@dNe2)U?b@qznJ zo*a}bD;wCe?!CljG9enOTXMb~0&c|#DAkz&%w@fUskcJb8Hu6vulaB^g<7cs<z2+G zFg0CU)&VB%iJ5a0{?+b*_X4+L?40E5r<T*(W~&WqVs`^5xDv!r!i+j4n71a3z&R7= zw=I%%WZU|i`Gb|J6B1;!HY)0Nmq~QvAIpel#i+sY%<V8lTZ)Zj&<(-eb3xSIMVKM} z#)Tij4#dcB+o<%1Q05egp*n2{hR+Jh`*6cK)QCK(yWopIA%!jJI~oDO=nk9d2(Ol| zS|J92l8M^EboU?DpH`AqtQNpTPZF%rrU*Eq)pz$jE5A>A8)8P;{^#4&js^@t?J7|E zaKku?H3mJG-}AfiI7wFSql0s|<S$o)(%E9R=H)4UQT8W<m6g|=gozoc%f{O7nZK-8 z=?@T_1!%bX+7Rb^WxIF!3*YV))X<%YwhXmSt2vtx>PHN|d`loRH4ry{$9O97jy= z+K-8VE1&`K?~N@la78%aa?S2xw0F%~uWKe=1xHd`+&(enf9cZf{plgOum#FSb`m;C zlBaM*)Kx(_s#06n?1K(^Y`tj3m?5vmh`sOlSvdB4=$)ccfXki<RWL*!RIFY6Os8QJ z<)v&h{N9z9H{Y$UrH{G4AW+v(Z0@&XGb=)`x^?TH$K62NgL$)4<J%LqmQTtV{C(`d z9lLyORSWz^3%J=k5Pf>B8AJZQah>TzAk@NG{!_IZ0w`@gAMy@P<H_=~2?r*MF@uSx z;uBS}f%1R8I!@DlAHZiLVO46zF%S}BF;7nY0(^gP1C>9~8u1YqGk{XQG!Rk>6Im)v zh!s+m8j+-i<F(`>ONtW-Ts0G^AnkElv79YAm=Nvp#}kZ87*LnKp($`!H(F5-aTXBt z8e<SG4*a-}YZ-x`)KgZ!{@_3SE{cq88nsuIK_Tl6RLL_??9PugoBm1k=66Zr?<|=K z=;t&wQ9WnU;zc%WxW=r>&VU+KCgr;`lg6G~PPmozBO1qN6qRIr#Kgjc_(_wTr_GGi zaoc!ZNrM`SvI%<KBF-0P&fAZB^)*MS%Kv6zb@cl2wrp(c{<`PIYV_@ta+y4u@g;`z z8D4v0ItA^f83F)UzM5|DiL7Z{_ucb!+RIbU7<{zfR+zj_H`)}_1dk1w`TVKOV{ZO2 zWOCRD-4Z5~DJO!ZBB4TCau%HKY|ovWEf=Y{k&!~%5Uh&5E*KZLj#3A8Bl*kk3Wft~ z1^(A(3D(dY9C<wHcg(kwvPA<0IFw`6n9_}xlc&b(Z#AhAlj`MkqjZ+&Yt*3v-(9fu zx^wq&<Su(B&s@K}u0U-Tf!fjX2tx+Z8=OFKxX-}_ZP2+yf!((s9yDJ<Cap8ds`SeT zpE6oXlKvd!Hr~w}s5+)|1*;bsI(LF6OH!-Shc|p*PTe#T+Mm}IAhPq0b9XD%x2aZ( zex=FQx~>bQ9kGX0w#h|yLb6oL>i2_vZZO%??rtAj*jm(8zL()%NM<SiMv)4w&#UST z-vujNXFTSFk81!@Vi~-zT7jlcXiP>fl6zfnp**2d&zWB(c{wgpdpC>BHE*FA%I9hc z-SNu;$StPl{%pXnd>=4{%(NC&mM8<hUs`*3s-4#*{H++szsO>YY5Sg?3GVq|8fi+t zAs5Xe`9S|MXeVvyM9`(sU72mc%Xe8>VUXvS%tW56+(8oBOqPe{9*%g2hwogF=xwh1 zR@`353}G2BjWh~>Obi>7N&Yr_^?^(%frNJL8NERQZGx;&IaP{+1!JY$nGLlL{*w&H zA(g5G)$p<whgV_{6T6fV=h@GjMp@X>X|R5p62(ug4+~zu(<6URDGN9EAUU!+AL|Li zSrM#EW|z7yL%(W<f-44ZLopx8w;cS_Dvp<E#T_X(6(Xlrw#U;Cg9<cC_grI*<ZZnP z$wh%IOSTy70tiTYc{4^nN0}GGrz7l@C|h2rUfboj<X*Wb=E_d|)Pi0G1H5}x8qUIK zP<q1b4Y5n-o5ER?TjVEHTFiZoey7EM?!3fY&y+@nGq#9K&_eag{h$|t%=E7-(sHnh zx*eM}ul`Znbc=Z#&4Dq5!924nKG9U#o%Jyp9Q<L1b(q^|m^(ALC6o_Movc2(^A2$E zt=_70ur1f~KzHP^IB45$`*e^vMc64>K7=>jB6+;LW;mnS2sReA-;6-vUG8?^LaPp- zT{4qiD%qtLy<c<HQBb|pB*ZkoIG`T^#MDrr#J|(PkFt?G%lO#Rr3qK0?owRM2RCpA zwA_X=>-`LglEe_J-bQ-7o@e=a<+)yiLph^SqI5XWDskZzl0P~bGsT+n7@qUIf4${x zsw!8KgDkb!TXs_9{PQ{BPss&K(`D^*_OC^!)arT9XmF6<+#K#LgC=#?YJbiBBwCbN z`edam3uC@jIZ~pF#0I=!V*JREHv`7k|DY~3b%R$FUn*>9Lr$!6sc$%$VRkbLcuBv? zI1~5fYA3@vCp|I-FJ}E~4%kuJHYWLQaEVN5{CuccboG5XlsLNBpmWhFbqe1!3`guY zLk2E@-d$#azv1j+uDOnKwfnI4sJZmb-4?h{x&aSr^Ms{=EsYdwTGLYO4WtGs(I7iS zc(Om0o-{t!V_Td-BhdN+^ksi}Z@eUX&LX&h>^vHDR1e;H+7pLA|KQ=`3-1FP$#;iU z^3<yrOQg!{UFMKQf1G94<149C45Z`o=1b>c`LJ`*^P<MlB6_5e_DBmBG>U?fZxN?N zv~l4$4TBJxT#4dM$x|%&^s9`=gHGDuW!TJgb4PN?fKBlsvej<bW(>%l&Z*R0+S8G) zhnt|=&$z^8<^5#Ua+|eRw}wqa=FgXl$zEsX@(NMF_ca5lN)ZC{hGVTjSV_aqUba1~ z-@oVCUgoI~`o>3r?N@a_H<t`*c^dMU^%-A-#*@d5ORm8WA($Pn&k&&3N$`~1XYD6= znnCjlO&c9nCpVC1Zf`5z-iR#_Q#sWG{7x}wO0juq?%O>+49E8!bzeU6hQ3LPlAl?p zZqt0nO}4v{;|^<Y=^+ByTwJp8bp)N+*nO<UTn==3=qb>rM$*8iB0wwAUe;^9T?=qe zEgRAz@+_^L$!g=@Z0vvc=KPj6q*mp_FnY^=@x=LD{Hb<pq8FgHwL@y)yH9SHmyA-$ z??MjU%e*BgVQ0LKb2;b1kF}1~m9~b@VzQ1KQ|f?a%O-W*C(BZpg8X;e6P!R_{JvQ6 zWh(Wa+OD=^Jm2rhxcI;~Qz}JAukKW5c-^yX3@X@9a2w;cAN@}b$ei#D@K%rB?9%VN zj>e3275`Mq4>x4V2^T-1fZ|Qd=Ss(Mpv%+*{c1bHTPN!$2`T1V3lP)iQx^28#C+Z{ z6DOoO&(bF83AVYM5Z5S6{veelQ~6Q<{PA|li&U4&3B2r~aqpup_ny%Rfg0DOK<RWb zI(nsAA8%H18wCP?e!-hSu$k(_rQK~YG5UXy`VZDmIq*O$jv8W`KP9_!*LD;##$dT~ zm#T(|#Eyka;31h0qZ){e;g2Z>O+dm8q7~u`tR-7}4M)_mJ%9Z1_)|HN1fjCsC_7A& z&$Xg{9&l5EJ3rnu&zHbuFu^khJEx?_l=g=m@XNg=Q8f?wqRbX`i_(@`6toxmOfH+; z>r8sIMHx>O@{z(ew$Vi;UX{E8vws<3CSTQd8t{xn$&`bDz@abndw|&CcRmj^Np2Cw zdZ#=uL+e98OJI#!#K$-Eroh0u>IuPeca;QPMfCx`-#rD;v<O_6@xfdCs-5nqye@nh z90h?50>2^hG{bE&3<e@g3O`b(ePg=rxl#W)Qw&Tb!|xH6oitKi$<~NDcIRxWV0YCu zKRd37xobkpN!#KOq|cBrRQS}x>CF78xYxJstZ#y|Suou(wLl=O$dM2~9+N#j#*>oy z&s%$_?<{j?^`J%u&sc1TxV4A2-Fe*=mrhl{L=w68)h#Ux?CHU*rl#owvXJ~|VsCn~ z-tV95BYq)xB3Hfj9jO-qv4)H(4d^{P|4<PANabBnH@=o83hvp*hD?a7bNg`6v9ASK z@wpT(xKC!~dFL+_N~Rt5+;dOzv?Ex2hzoW`4xFGgU9P{3Co^$SS0DtzL#a06?|!Q5 z&JKjtFWA>*b)JPRAh>CwSBVR_;?PI%+Nwi}>Uf*CvwsJI=XbaYTsulP8c#O?AM<S_ zGuLvE@{J>4pYaG>eo`)4;}qB)B{1_B+aHh7_ki}3MKI140(;E<%a@y0^Y=1xus{rO z^LKo<npVoElD$_s+fT(n8YSZ=o%0T(?;$tK)0FNFBa0`!^?a+p5yR{8lddI)bc01F z0=A9Z&j*9VIgTww3kEiSN30u*M?r9S`@-XG&Pq_b_*y=2b>4F~3$k0V_JknNEL=@L zbRT@>&hgL$<%=3k8r`fL-{0AQ>bkfd_GzAOdr<-G-3~XKF#z_?k2lxzfKI<GR#5E1 z=jVXKn!PcbC+F_#J(j?`vwk=Ui?i1O%ai*A=aPM$u8_&jnxW=UmutbIzcWzO)mi9V z255Gu|9;UBd6D64kQl(fb~MSGAGd7N!aph6+?_DaU$9UO0<V^T&6`_u{z2K@=uj&- z+O|&(+R3=xIdfR280`Ers|N{sfMkF+qXAX5cHomXfR?I`;RlMKUd!`A$X}pmJ+x%& z2?3%M1pT=tzvpCzX=yPDW(gepWoBJXL%<6^j<!=EUo(p@Y=89M#0$d)IS>rbx4vjp zjHv`_4iQo#BNQ0K18!qkH60D&MK-yd##;ALec{xhZak+QfO%uBHPyUG0S0tj2Ew19 zNvFV`42pMIW>2?3fIOK6xc4R8vLN7MbSUu8dyq0aZ~KW5kXxeHz&u!&E^m$T4<cct zog+|!j#i7pZ3LZd!LBOHu_<jq=+I}UVk!xKNm)l*`#oeqM{gD=Eorb~fy$k#G7(kN zT&wNpl~Dv0y{~vPO2@AcUkzFUvDEVJu}0JJJLnS^v^xy>IrVK|Q=)kOl6{QPxl<Km zxkZp2(+x)*io(a8I%lip6I@h-#140G@t~LLanV3M#%Z$-?Z5muVnlCr{a~RNUlJ%w zMSHfJ1F-tx^8)Mky{UQYP{vw}k4B!0R5$VbXaO*S4ytw{FJk5!<W{ih+pwJsa39xb zGg%EPg0j|!0egp9bb{8L<lvP|X&dMfD2_wqkL=Y!p{N;#E`7(*;u=&3ud1Wh0{3b% zMX1!je9iiSHKu;LI_R$r7xSuKm=J!z#H<>u9|9jkNBzNUfxB-&d0t#wDGfN{%hhTH zbJvPNq@s&Pff@?m4dI7oO$if5gb#%rmMc3E7mv55&oO+9f1AISYweYanCc5{$^MJT zvbFnQa<Zs*FdIZv9Z$MdPeqbhdi{6<S0xG0Bh{tB+<Whw%6OnZ;j6KUtIS=kF?Y8$ zh*3pP1ToC5s$VaAe%O<4bg%K*ZfVESmlIfvEl2bHm1SO3GElGOf@4T(5|f&}y~E?Q ztG$`Xv&{II8R;5-z2gBvGRGCaD%c3bu*R2c-4?rsZUKfUPYZlWUis`QD4}zNjErr9 zCbK!+bP{I93dAz~>_Be-X9Zas1+TkbQum=T_3nKZ?2V$R-7X;32|Qm|{zw26*?o8V zCl-0;8g`kN<7Ieirciv_i2rM|N_N|iMBr?{L_?#>1g9$nN{Ig*^xIPGAn;gp(QGW> z5SpVw@7`cTchU8jUEYoolxM75DxI8)-!l|t{(OdSVx9%VQ{+mW^5^FQPG2(+Uk!k$ zwerIVo;kfp?YjWFF&iJ{TA~F}{5K9hFW0<`ybej^At74SMp9v1c$OlsqQ27|cxZEH zzY3N^=AY;@#zNM8l{EJz^3iTa0Z&TPjlz(7VxNpb*B3r!_aN7q`<aXofS@oaUVQlI zKO<#FZi?n2vHRR-&fr(qtHSS>>U30}(hUNrRAwAM{kTAL+WM+1CJW#OH_<p^*tl=D zW%{4QA7#P7+b(o*Z$Po*LRIdxY8h@>0pj~#9MKbf!yYiFiMdBYO4FYCe){#ifdkXb zz9#vOXjvEZUPkkzDWe(Yx{2SZ@`sR+hQ;z4EoCYN4K_d!h-`@H{Z%=F6HdP73WU?H zZ6^)%MYzSfWzF@k!yf{_5l|E}2KGnX$()!(-TPnbP$p5**IK`oNF5QV0bM;5N}4JH z;xAh?X$O5xX-)Xhn>B7qqM>SSa1F|Y45o%xF05g|G`C&3z~$O>`L}F<!p$Hlr+EYs zK=?sVFQMpBwvYySIGof}Iza49LjJ~S)sd4W$pR4mdXsbWW1ewgt*hlny)*vyJqpTF z=`hwVAetm2RCV(-lG2)_B2=8}IS;bjI^~yjE5!i;yiYQ(84gYrWaj?j|0EkUS?DjR zHFJa*Se-kqy%wy+l*oYE#b3}ls4HF+DEi<-OeP4-czib9qiAjsH1NO|Q8y6`V&BhH zN6WX8<i~G*_uJs~5Z_jm1azkCE}#w3WI8@xcRmq_se>SMXif2T@yO*#aa4p83(R#q zh=H(+B3K-Kv-dQ&!l+gY)^om9o9g>+iB;qHZPv5f*8$A^pDB=h&srG->Pz64apOgr zD^XTd4HV)^u+2;QEIp<%VPw=zj*9I#{($?}go;SQeLeV2-vb}OFEd^Rr>FL5p<J-W zKYPXr{`<cGOxMo%aYMD#c-zmUxY>G&qyss|a@`}0Xdj}Iza)Q<c`Kq=E_0^9`z|_D zn_yW0ZRTBZe&YvQS>j8ku;QSfl45@fCRe;J_avJ5wmk*sU*bUn#BTHhpF2QCqup;u z7y|F<7l-eZiC&~O$|X;VUEUHP{cdSKFCM)!bLNnsY0~k8P&|*N+hMQBjU+ZU2OonM zs+=`>sm;+tQ4cP44d^OM0EYtD<=OyDvmtxwHUc)0saHwxaFHYtEco5z)!Nw?rLRGQ zN<x+4>Qhl1%xaN8&*$X3Q9VUBkSP!1WwS+cw?$MR=&0}0y=r9Knv*v}QJ?d7Ovt2p z*StJ9Rn-=`+Z+v7@TWE*)lg{nJZS}pj1L<$|B_qvQ#4bSp<+WSy*0A00he)O2sjxF z(YQL=rySv%>MB|&fK&Q$ly80;2xX^^ruv0$ywJox<Dg=v(Upj(SCC8`LasMCewm8I zwv9&<5YJ<bqdr4dgRIa1QB9y7Xp!7j<y%`;EB>sk+PaRz^>DPKOuEP4pGYI`cSuKo zlSrD7F{{cC*~66Cx-zz!OHDOKCHpA^BL^dmJ&8T|WYoDBP>6B<NR%ca<{~^1X@BN1 zDIIB3AD8PPvRwZ*X&%96=yawck__NFqk({%?ZFj&aqm<J%Mk=7BOd84C|E({IX*r& z!PKnYgYh@t%|2yR$GTGW&G^0;6B^7CwDH7nUZMh<+UNAx<^r&v(t%=Ya!v(*@>!9# z`D?ENHt&TFXq{`ub>p_Gu*o8Dt}zfd`1g#8!WvRXp%YDQ%Jd2mv};%zT-J2B5)p%M zzR{w)k+^7k2MewyA|KFB+sKhd_@H8)JvW4<LoYGrF+*}Pb>6c}Nu3+A;dKn~#+b(e zbU7m4oi`1vL?pd3wailD$&IQuSgi7*Rr~xoSBd@8OxR&;R?!7D<1b@9V|QAb$@WiB z;S!r?bIL5vBG7Kw6zUHSX^dZUwleWHgj(&heVS2aFAuT%H{{7SB3~}8)Q|8BoJokI z?3#Gr4L<^$*tE(xBSqlNv&h{RFarDc`Lj2Wd$))mzP~oDH-k~f0ofx)ob?}Xj&rUT ztAY$@d#cSo8dTCD2XnFeaARgEyu>==K0j`E=5B6;gAuol3Uru^xWt9JGN3)@d;{v_ zM5u)0ymP~VGZm)7MM1`N#sD_ODrs$sUz;-D_jE`a-o@dZ5bL|{WtICXz8dapEIKyW zKa(9`|CSZbg1a%s6fA1|LZ<t&K}kJd26>U@Y*z2M++}MA%R6T;-+qFamn10)kR&@! zWHjF0$h(DU>%S*ecD=&PI@56U${a0&6pqag6)aH`hU|Tjsi#Gq^IGy9TIVp+_p-~c z$*u-xtCfeIl3~1#ro(ICU(sIRXEbU`=;B*`hPWOvSspLW{@yNIWB)Kk?Iv&>(}1^k z=&tMGTa9D>4l;fs>&D~lqiDDWZp1L+wn2Br#pXAE#mg&iGS=RLhUByAO(7}hwg|PJ z6*mTZ1&P<0H3es}@9VvZt2~ypyrT5rKn3|Q+@YrV`wo9Bc`UMht!VRJTF#nMp<qs{ zfUr#n|3kpn_R|xZQ$@4_hPzG70`Jt=7g%v0cr@Ib#8ft9h3i?&^JuzR=W%f*-Ml0E zVo=kUI?&S@PUvDI%tuaFmb!<X8lt@8)_dRM1t<0l5@+ldf278zr+mjdU)z2^!gJ=h zcW<ZrZf;}01cG30xn(y19KA)4lM$C9%VM3SEj<Ak8wo`!h@9uDUpP$1w-x)wSt5Ft z=3IErtoTN~;`^eD)xaqWdtc)Il(PRCm8oWSAPMRiQvU{HDl+LhD0WKm;;CcLTV{ct z7w-*HzVDB{ib3M6B)k*4jt->@)n`w})oJ4c;Pnu(NX}c8W%*3wqJ?lpX`kn!j~-9e zpKflv8UqpkgF}gBYl%QI{`wfa1aqN~#4v_3X4=;t)M!FrFBcY0BrB;d^4}<tVC=pd zB}`oY|Fw4>PEBsn-Ud#T-a}P-0s)bZ^bS%*K!nhxsz?(=si7!Ms-gFe29PcY(n0A6 zND)Cq>C$_LZ^v`a=ed8uojc=9h9Nu2E^D{-?sxs3S31S4E07^Tt13R^ufd2uUM)8@ z6cUP1cgNfKZXOs;pg{MQDyAU(fpxk&qg3hLU4sWV?h?dU`g1E020xfThJQ3XK^U42 zn(Rxp6^`$}&>L@;Iaw~X%T@KhKn;(@FqB)NT_KvB+D8!1XDERi5jkrG-|>}Yl>()7 zs?^>G?xNL<*h5o|lK#3R$2PRSQgv&)`qBBRuek>A74#7S#Zq_^T!XVK{qRP&uwLe- z*d6)Cm*>UNR@+Xy?bK7<(GLhev5V!N9KQ5(LhZb$>E<EUoHI`VED_CHd@2|iJ?^&5 zncG34VA`9N3ZRghIZq1Xa7G1<NTyb4FJ!KNlH9x)<$iGv{k^$rUb@s^>{Y@H*Q0hy zyPC<NdSNO-F~M33^_Q?Eaa{9ymrAx=JlR*-uKl5%8dp3o#Cmtf-FjT_usWCop{G>p zYIP69D5mOm(gzknQ5|W^=)XxW=<t00#>IHev`A02jVu+TR>O<%SbajIkh<8XVhw#6 zrqdpNSym$a-ND?xB<r-p_xR*{N^HAvgK865;xi^;`H#N`UBb-oj<`4M`W&TQDS74W z?RYyCCqR}YdON3kx24#ibJFdY&H&n*pRk4duuod#r%C#^^Bu8IfkNeqm4pUf5kw^0 z+j=}0ZJ@VxzgBCaltLM&dFJwV{=2`T3QWS;4v~al00;i(p+`Nb5tkOOCMtIeS?u_1 zgGPGhGw?WHY@rG|Uj>)ul<<$xq&^rz;`G>C_1Mnd(BO+=yUad?xxu0JPqj6Ui01-S ztt=;p531d+T=9*$E|X-Qg!+JAll)8`nc>?Gj|sk^mkK1qUwm8}5;{MF^G)3><-o0u z9n<f<Fy;7MeZfAM-)!?t^ql9$C*@5}`!qHdJm1hP&TMfEvXkvgXX}a(!XhtLLGWHd z`{%SGWHPx#-V5(n4}bP+c7HBMeU3?lo~&;)aBSeq&ABK)!y!03+H*{+#uU7UM9GZ4 zBaXZ@R#!aO^l*(T?SpXiwn2&I>i(;^?mdS4;p}+Q1Ric2G~{gyh;(GtL7QR#g_-Pj z@04rEZq$x6A_WOQfMps98%gLkZt`;s1l2s!8*$<I(U;!7OOhy-v*B{*GrH!H5AOpw zxpUs$_vI(Of_CR;PdG;EYJVPmeKJKyeT9?12-bCd5QY(<?GrE~%{<xM`r;s=pIW5q zE00iWuaCLbbDAFdIJjQoCc{)>)lJZ0#}QR3>5#I~7uy>klJ<OKWOjWa(}dVcE!{}^ z07S2ztKvDGc`WWP&77;X_da13iKKAs*dRX>gT-?G$oQ6*`Psv|^v=-Kbu_pg5J0Cj z*D*O5$*1gM<@>%)D^smP$v;t$HwBU8Bg7L(Os2pZ;X`pdVwv>Qd5~Y_$0=!ksqv+- z{t?JNcLX81?4m`Xl%dAsy}C0mmPgOlMP+xuBn2Y%=-BG#{y1c(EU3ko$tSbaEWX;> zYG*oX$(zrVhfgfK5Oln@h{XB}A(=kp=YZU^>;0B@GU_IDI76mKGjd&wTnVZLrI*z$ zOtfgc-O_F~LC^}#M%>X_ulXn&sWbD_efDyjtCmieKki7)rxXW@X4kNFp>EsFZzj&3 zMV$OEAyhxMnRrrsocDGt#uwA8-!!wj%)W@sgr;p1*N{vmtMPMTGQqezGP>UbAr#2# zb&>Q#<dR@EI-Ff+H`71<kb@3xh{*~_$8-mU=-fM<jZM9C5E3s^l@e^AFPp2Qtc&Pc zSJmHrU2`;U5?ZEe#Bo7&^zMelu70Iun-AH?>)H&8DTsm?C54us@cUYLrZ?YCO$So* zq$00*8mV|ZWPK%Y(q>5Qw=R9)<&C#=!j%uDwGEEAbh~ps!cRKzn-6r~&%#*tOcT?q zDz{J)e}KwC26x|m6%(9^C`7!<wvD@4j6`aMFFd_?xotgL?%pDcWDoDu-8jeq^0E|~ zCn%Lxf=X9FoikFX_eKN`%UJ~@WsieY-tE@zu~(lM(42&RhISufM2ilch)tV7oJXeI ze%kqrN}xY+V4n_Ox%_5_g!DpMUk7U+?P~4I=o7A2`MMV@9u#oH&w18p&{33tD<x?D zMG_xEUu~zBF}s0aISE2#f9Gn^IM8IT@5(Wyx*Z|><Urj;!5fv;bUIJ1CalcNlSJ}D zcqNdAy63(D#825(`o~>$yy@#&+0Y~P7N&0+>f6*=rR8=xuxEZJb`ty%dE$yKB-{6^ zpY&amEAOw_XgU|2u%$a!{1zJE3o&sj4;ptL^JF>bkL_H~(Bs*j*thqjBe+9oTgMlO zPQnm0l^R;?>TW2P3rUCUQia<sE~`LAY0-_oS6JwY=hL4Y)!5{`KJ4?EoSYrC_~!5< z?8<uL><|lTBSH2{#{flRVI-_Krs^AND)6h?u7O!Dy!lNKJQk{YvWaeY@7)lWP1drN zy5mn?(RTH^9t$q}VQq&clT+2b`)l83wQY^fCw*b*9DuOkHd&QOpbz(N4XZF(Sr4*( zmP(7tIB*Fjn*R~*O|0&zFFvZro2bkzq_3UAIYdnv)UegPbQGMeWj)^Vgs0f#Ha&xh z0-sFqh9_Z6sJtNVi6Dz-`?;VJg$CEy6%I0>1mS|n54Q80=q2NHOFCVgU5Doz=MwCj z@QxxeOWu)Ij~W*MwJRfi4;ny5*=!h#e_I^V!R5Ro{Z?my9yLRLh0yshJCpM)BM(ux zqvw2^ZEPWi4aK}w<%8NV$<4UrFo3MoT4|`+KWr6(QwA7A2#(tDpX}UQ&uI;3s})kG z{19;qgw&ItVQyb%9;3vm0Y`=P&7#j;<lz43M+SK+=tmh~w)Izj%3vR`#e*yfL|isj zqkpb+2=k%|pDippk_#TBME6G1f2Yy%kr}rG=U5vaL(XF)BjlGC?-od$Y$)yuos(<w zD;P`5!`KHX@$!_~gl^J?c(3pBK@VtzeOVYN32<&bs(muX#)_71h-9TRn+>V2<tlz- zz%eX7;U1@#yn3d)>I!b@Xds2xo4&0y9@pnX&Q*Am5lKkZ1DJSd$b{#@;pHUAj>Egx zO%ev%;}L(sJGhL|wF5PiLQx#bCY<D?rlbT2&<A%3DXKp7u<{$c#oT#6Ti>b@L_&s0 zill!vWW@ab_{GOPxpP4d2CvZ|N;*4I4*P}|yhTRyJo!RB4Y_r5891^U(Xv0Ua%f%X zdSr=+Ln4x?BISI<yNEk3iBT>i$&<|^EbCx4=cj$zQhnr<obJ8-)x=HQKgE4K?rIL8 z*as4DI0$mDAId>#t}`lLaBKGWF%r<N@;rn$P@l~h(dhM4>MLuAn@?{aQBk;`KZ>rC zkLSW;r(nW`s!<UM8;aI`qu-KU<}F21y^lC2zmNJ%mQVdn(`jD1^R49%ftyi{;&TTx z4dgUu@zSQ1yk)u~&I#VH1edQfmMf8M9tzf81m_c~an#dooh=IZhw=>{9LzfG`%G5} zy4@3O->v#YO&67*6&Y;hy8dC$5K=WiSEp#XA(s5YkMat9DIAPCwvL_WFl2{);2hf0 zo?Uo`!u4^^3Hn<sYZC9=7_SrmEl)Hb#1J=(p#6q_1bL$A4~w<VhdnU-yka(?I>XYp z(HZ84lWsbB3<mu<0@BexK8B0u%Ayy+_7f46uR#?sOhBQa%|jAAts|fw9T?c9BObtw z<Sn;z<@oAY<FTbF#6fwcF0GT~&h-FesMCu16e;Gl>|~#w|JOnk&KMVJh|YY`Vo#hL zpHyhV^R8d|wM!IR%jkUe@WvjkDfxLK-kuQVFAlSxoTKBqcaG&nDFW08H*h#;h}tB3 zhn4K1c=&4iQ57NNoaB|hdtp-xVcBxUf+WWeR|Kx=<&mz~Sk8{w5cP(z>|s(RjUpaX z2k=ogUwFE62livZ>-!fQTE<CLbpP}~e(><;WN%^(k*<MCm{y-=)SdYNt^wV_qrrXc z{l#$oFd)RgPc?mAU7)*m!HY#JPAb?}eN*9)#EaQt4kjXuzm8-s+U0Y4C=$=30*2J1 zJk<9hJIW-(?U&oiN9XRXz3cPZ-!srG>6nSy<{(}g=B>;9VR*RJbB3Ze!<bzOOI*rU zYKWHL5Yt1v`%w91N{^@L#h@$YJv=-T&sZh$CQV*<$cT#@Jo<82T3F!P#2EiwgD?an zC_(K}H|Ly=0fd;6J%7k;;QSHco%eT>=%0`jgiiXnRZ`y+Nxjc0hi-mU8p(r*f15ge zD}_d436_b9yz`;>$med*ZNr~z`4v}os!9n&C~)I207#&ucR)ia+CL$Q5#6}jicf^U zhsb%~W#kF;bRK#1+;qkC>I*?in7jsLFu+&A@oXMW!y_i6>JKbiYz$sUid~yAb`$}y zHn}*t#|{;uTuL8+i06fB6*9>*u$gU5qSu%+EE+6T2cHXVC_8xr&Q2R{(s4iUm!0_N z9MLqm_Rf0_Ez$9gCxmG}WcS+FDv<^PiSM0so;!o6y{r=Ems6*@JjXkOWrhv)Rc2d| z&VG5;ugj&WX1;I6->n}#2qLg$kH4g{L8?-&CHb0SoKL5F^Omj6#g^5ed)}O~&11Ky z_yN0TbL;jJd(3^jSZ(|2HZl|~iyp4vU4Ai3-bf@L!?jX4Nphy^^P0ywSqa30C5SRD z+m0I<_Xb2q1+3+QJ3L%C;fQ#~BkkwaQJ-k=ki+Vv!SU$CGG>`x1B<T?UGP4q+V}6u zhIumGP9ucvftpS-xH-03KX{*-H=$P{ioL&q1pcHw)Zqfzhi`u^T~^Srm7H|fr|i6p z%ZxmDBG@5VyVEIAdv+w-a<p1wSi+~I(H88fi9^Kw+^XC~nCtyuJGFOs&$WqzZ0-}u z!#0hSI5mvc^QtInIBszqNk}w<HDFkH)WiqT?Tyil>A=}2LU$|?S@+e4G~h%I;-WCz zFbL}wUU(Bvcfq7NT7o)HpR>(Kl`<fhP2lSz)V-4s7N4O<ahkl5Zv9Iy!$~d$+6q?% z$7DR^hLw9I5aTMWTq08qTJ~f`yFT-bjirdwkXYnWFzyI_io?edaanplEprmbPt&fi zZg+GjH<H;AoX?`h?Nal_dT2D@hpx4LFt#x>!xVJbu>GX94$o#KNu?Z2H&L1e@YyoF zEgb0r7$KZVS?>2P5zhdM!@ZHi`EB7thc~w;zQeZG1<5@SF!Q?wOmY1h1~k0My(SsY zI`xtvwoDvOc*J~*Zp}HS{X*fH)BZM7(K2>`{)no6<-+^`HKTd(^~uArLdQcyyqccU zG?L@W1%_ZxZw4|h)z>g{079CXD;iSC`c9a2@Pa)w8y*}RI(c0eHb*G7;%d3LI_2Fr z<@4$I)(<)Z=17LMHYFT6%>vH|lRW(oH;{8&>Ns;~404mDeZe)^*2l^@(7Sax(sFu# zYJ2H9Ps8wgBa7=7=y%l=F|aV7*HA5&W<B+~%F6!dl_NYR8u|TLa!eh;hCize#c1cA zUH7<)lH5A~Xx|2|;VP@#*}V?~w<p>2g`8S><Vf+t`PWp*k_P;r{hS-SL_{;TN~sF7 zc$as=Q|p(79HWY}HxJ%CO=wpI*E2p2w<`!ln84VAQIds>@rcHxiVc26k|pt=ZTjEX zmC7sJV85fPVVgfSRAI;FG8aEmDtsLpCE1Pt13qqEj8V^{v0A(|SBuVaph9%sBj!L% zM#DCNf6BmO63+{mKR7{K@9B!ZHMd>N_4&d2@o7|=_iWViNKu7o0RB{N^wDbTY3^A& zV>iV+JtCDG26MInH~|vmGWy4LvvZCEtm}<v{q%BuE1CB-!hDu*n+(cW2DeF~XXyCC zuvZWV49f)U15k(#S+eI#G>dKiMJowbp?D+Sy{}_elAq!qXK!z1^PF7ky3dgK>;=FY z&9E1{eqxswxExDc#TCIi-KNEfKeP&CL&RUEelNtwW@~hK`s^DF%_7*kQu40XE{Uxq zw`kH8^!~4yrcikmJY^SQjvK1a@EO{i4y12Ly&eZQp=D017*KcA7E`;P;^(73f?NI0 z${P6#S?7I9{zf*6avGCb-898N61H-%x0!ogZ?E@QZk{onPL*aFeazUrxGb>4R4rG` z;#Rm#C2gbjRyk80*f1G-pGg(Mn1<68*Co}#O9KKm+-{C;z2<dVqcy2IGPqh1%Cg2R zF{Bz2Y%6fX##<P~<c_~s2d7SoniJQka9!K1JbjknmD~No)*^RCjZ94B?aQnb%G+yV zbVJ@=xR407d8pzq98Nd5USAIam<ifw{JR(lc;jF<vr>s+hiyMY!S>dtI6Y$Mt1RBl zNnV}lS28ISoaOOWOTu>9>*Vt0CmUuLyP1~ru=`6n2|fJ#hsWJ_Pr{DGd2T`~6#Xq9 zaw1s$=AM!takJD;d4v&P^+rmFeL+ky&h)4mb3n&m&84~ZKAsv+lyu3;tO_s+fh}R% z&Fsx&1WAbkgg4Z^*Gr7F51;Pvun6kV7{<yk+UdFFrj^>vK06$Rn{iOkN5HWx9Ez*B zP6OEjsrZyLNWyZfe(6evN)vsmAqv5`u_nL#H<3*wMT3}^*HBW!fgd=^#?0+B`OS=- zOGGENkM^#bO%XH!a>Pr*R+_t8UGEI6eYD_%0I<eDsu~Xfn>xz!&L=7Y-HjR;-oJ7( z!zkpl9SWAwS+e<r8neSo0}9YrpV&;lApga#u{z@AvBlb8ce0h;Fnic<L>nn~&b7HG z^YH#o8wVFDLf*bPjQ^qkwE-)PyO<Ra{Ra}b2Yjnu^UPP*|7QPS{|>kSGTb%OL`>`N zv=|vMSS!c43SayNxrtl`+ZySZZDHB(wEw;8$y6A^N7S&!Dx^LDA^VO%u`wcc;N8~? z?hXQCt3%gg5E0!dv)wDa2cVE9`)gkv0p7C;OFgY~U$$fM*$B8=GwBMSSPlX0;c__# zK}`UdYkbhMTLDPKpFL(G4QW1}pY1obiqbfhO?fRFm6|sY$@v|xioIK@=vfJ(GcQZF zOToB&-Cg@S(Ri|@Y2vk%zY2Jyd_Ls+ulH(!vhPbf^-WX9HwiE0<rBK0S<5lN#OYiD zt5u)A6j%1!1NKBJDWgayv)3Zq@%BeKVn69(9m$(gt0Gdn!?#SxTDP$D;Q5pXeBQG! zR2>FY=-${S7<~XTQ%4hkUv;P+x2xpJ@W`?C_60OT1iX273*<sqQVWQc08X-2H$?gz zbqcH#Ox3k3;d9_(;?i=#1lpa6I_gS5S`l6nwT~mcEIv?>=BgpJ0mAw$noxV6t)po) zjBH-00R9>a|4I|!mVPd6I{V@p=?84IH+<{nI1marviR=k4(jfT5<_e-y^8#=$UxKF zsheBh4(n;s@G{m+c@;U<EfrJ`X<Uh4Y3jQ+@fjeK4Uv02{7q2a1m}j`gs*NNW#FS~ zdu=~jxyYpew^7~}k6K$i+YvOY8h~!U0CAzN4sGooPZvDV)CvesQI;bq4@&L>uB=6m z9q25t7R9bNQZo_4v<c))lEVNw8bS+y_!IN8`gQe}?tbwZl2q#`iHO~~R$u=_74>QY zu!+Au)4^g4f5HTo@?s6Xx<2PFC{rSrsVX~L%#G$F@wCPii`2^igfd<A`#N@D)>qp8 z-<N>`VFDaCOa;E#0A%WWmE~^z{XkHfkXX01yaPV0!~$3wkJsLzeWL+n7R|Q4b*gcV z429KMU)8vOD0!-loyj|&mpg%-1St-F7L~4m9IAq7jXPxzXQ`z&+o_3_oPjpmdnA{X zK`2jv#N7R_*MRnhplDX?BxY<Kcw9UAu!HG>ob9AOPZ#*TIkHzYgvAZvd$d#Dus<br zVzeE*><yT!6<u7J_4AL7lcm9o?GhfN1e851n1EF~f%jazA(5&Fpqs4%CNBSh)@X%~ zmOu*xz{W0hAg|C|#p_eTvFHNI<rW=Q!fI~XljH~7AqUn}${`l8#y-f(vx;Us;%62` zD4`t?I@*zPowkr&!#yajTYqzT8nny|F5vK4z{EEGHjy7m&!$uy&_9%K#5XfzyH^C_ zL1=xzAOQ?-Of=`UJeaF$=}~WMIZhWm0AhgD+s3fNm;XT9s)4uKn08&UAb8`5S>TSm zLNdI<6piIbR*v%*#)GWVA=<KsHdrM)ksp9QSDb!3Kegz|ke;T<X~VANgOsdg!QU5( zO6m$#*kA-N5AsXC3>JXt8W<nzOW4ik9~J6+a<wO@b93W}GyXHk=z%6*t<9m`Q930k zMtF#_F!)!EL$%@OFske6jle>K&=Nf`bci6FsSXv2F!41wiKidXX9nj}6<IYXib(JW zf&%R=&j$=EN6(bASso22T;+al?^xvC1!(BW(r!$;5M|cuct}|+v$~bCQ$eB&77N|d zMeC`7ErNn600<M>=!pOzd3*I4wRRa8akX~e*Xy^Vuo5o#gqG-t{$o%g9Tmnp>|{RG zS!2}jNMXor%cSC}Yyx@(Y&Xg2jXF0#E!jDnpDuKAMDvpPtpiG~sAj3ij)5EgYiK|k zC99dvL)kH)YMH8@bk*cwlTaE*GCv?Bnl<-cy{%?vUe8qdGv?&-5}<Hz7N&fYxaN+w z!7@cxc7p6dJpmX#Tg4j4okjQA<0;fr!0O;N0i^H5m4VQ8|7hAXOKEy+CyWpZn2Z33 z`#miL1(EQSfFp;nX%OK@qy1d~Ww`eJh$x7J1d;#tm4K!;LODj5MAl<tTCtEdA>=q{ z%=7Kl%-)r!uH6sAqmAk#8(%8P3;)b(GgAf7#zh!zfgMM!kdiGy?Uq_zuZ}644GCg{ zOSrWNpKP??(-nBM53&?>0lt9)F@Jp-ll!pl)daMLEg&<_rZ>MCGk*XCvUUpD)(6QL zn&dG149|JNAxJiY9T91o34}$K-^D&jP$juF<Kjb4SOM7pbqtvFM2(4gP(_8gpy=#v zfpsvG%<n@^S(W|v*S|GUK$XGu%!r|d@0+Z+A3fY%v;j^5OUUXO2e5Z@;E`&wCiRPz z5g7}>;=gik=&)zu5aYWA#6FVXz7LUAFCTb_242XH!>k%{0qn+F(n!>^H*R3{yi$w; zYc4UaBxLmaaaw{+*iB=S9LW;ic-<HJ62QWw3RzFqrvN;nM@-r5wmRj#Yk1j;>hCu4 zXKxNkLuPM{OZ#FHe&b^0?ZH-G5NwW5`wQOr3ne*^rO$dE>0x=e*aYlF!Z7d>v`8Ds z{^MZuVacxBJNd?cv%-Htl`&X1i_wee|NAWRkQD4NnP1X;^EWa3*OL+Su)c}tj^uy* z1`#Y9x9?M;{okzXU&P|P>!1YtMfW@ZRs&$#vE13zm;57CzthwrK?%bH%gvzq|GWmI zu^!A#i^5-C+~3JDjGzQe_E^Ag(r%U~XqH1pqrN7X9{;>pMe$_xq$;p29jJoTxj*<) zfU#sBh=G8E0k)#o8e;TVr)Si%u!O)Sxp_!4HS%)u9AlvqdyE`j9p}Wl+nO1=gnDrv zZ^=s#Jf`A58Gi)kPhOZZocLV<R(8-F4m^z2|M(i9eb(-eJpSFn&`{9AQ29do-$|Xq zpc<ZQzHiKa7s1XB%*r0a^B-*R7WOF)zb<co_hl&dG>std`G2}s8oL<%soKAT;E&b* zjJ1E4gFiDAoQ?fiJispaXUYAuQT^)={n<nRcpiUy3#=c3tNF)Y``0rK_~T0c-*CXE z&nI46GlItgKC?VCvkr6?l~?p+)uDCa=~-UZ_Q%1+gAh=N6N<-ksR@GrSmph30xJA( z8JSx=!F~eXH>)>eq!pgCflshsj=PZ7y>(Pajr}HguZ^cYN2o{gD;rk%EZ%ATgt4*o zzq4g^p>pB58DsT#wzzn<xGyW}8`u6VCf5I!XCPGRpE@9j#pCC8-MRiLCJmC-O`S*o zPaWiqnlZekrBeSCGYy;8&tQH3tF|Di8&BKT)AuXkKkvD4Uv5FTga4_+|M{j0u&NZh V<9`|827QR5uA;46qIf6p{{fk5<`n<{ literal 29878 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%0D2#P02r<A&Ql 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 From 3d9d32a1c1462780ea1a5682a27ce7da090a4b74 Mon Sep 17 00:00:00 2001 From: Yu Yang <yuyang18@baidu.com> Date: Mon, 4 Sep 2017 16:20:27 -0700 Subject: [PATCH 53/72] Invoke check_grad many times for no_grad_set --- .../v2/framework/tests/gradient_checker.py | 23 +++------------- .../paddle/v2/framework/tests/test_mul_op.py | 27 +++++++++++++++---- .../v2/framework/tests/test_rowwise_add_op.py | 16 ++++++++--- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/python/paddle/v2/framework/tests/gradient_checker.py b/python/paddle/v2/framework/tests/gradient_checker.py index 82ab7ad39b..b8d7e4ea43 100644 --- a/python/paddle/v2/framework/tests/gradient_checker.py +++ b/python/paddle/v2/framework/tests/gradient_checker.py @@ -286,7 +286,7 @@ class GradientChecker(unittest.TestCase): for no_grad in no_grad_set: if no_grad not in in_names: raise ValueError("no_grad should be in in_names") - if name in inputs_to_check: + if no_grad in inputs_to_check: raise ValueError("no_grad should not be in inputs_to_check") backward_op = core.Operator.backward(forward_op, no_grad_set) @@ -304,25 +304,8 @@ class GradientChecker(unittest.TestCase): check_names = [grad_var_name(name) for name in inputs_to_check] for place in places: - # analytic_grads = self.__get_gradient(forward_op, backward_op, - # input_vars, check_names, place) - # In fact, the above two lines can be used to replace following - # codes. But most of the gradient operators need to handle the case - # where one of more of the gradient of the input is not needed. - # We change the unit test framework to explicitly test whether - # the operator correctly handles this through follow codes. - # In addtion, if all the inputs have no gradients, the NOP operator - # will be returned by core.Operator.backward(). The following codes - # do not test this case. - analytic_grads = [] - for name in inputs_to_check: - no_grads = [name for name in no_grad_set] - no_grads.extend(filter(lambda x: x != name, inputs_to_check)) - backward_op = core.Operator.backward(forward_op, set(no_grads)) - # get analytical gradients according to different device - analytic_grads.extend( - self.__get_gradient(forward_op, backward_op, input_vars, - [grad_var_name(name)], place)) + analytic_grads = self.__get_gradient(forward_op, backward_op, + input_vars, check_names, place) self.__assert_is_close(numeric_grads, analytic_grads, check_names, max_relative_error, "Gradient Check On %s" % str(place)) diff --git a/python/paddle/v2/framework/tests/test_mul_op.py b/python/paddle/v2/framework/tests/test_mul_op.py index 81371b1d11..92d2b80e87 100644 --- a/python/paddle/v2/framework/tests/test_mul_op.py +++ b/python/paddle/v2/framework/tests/test_mul_op.py @@ -17,16 +17,33 @@ class TestMulOp(unittest.TestCase): class TestMulGradOp(GradientChecker): - def test_mul(self): - op = create_op("mul") - inputs = { + def setUp(self): + self.op = create_op("mul") + self.inputs = { 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } - self.compare_grad(op, inputs) + + def test_normal(self): # mul op will enlarge the relative error self.check_grad( - op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) + self.op, self.inputs, ["X", "Y"], "Out", max_relative_error=0.5) + + def test_ignore_x(self): + self.check_grad( + self.op, + self.inputs, ["Y"], + "Out", + max_relative_error=0.5, + no_grad_set={"X"}) + + def test_ignore_y(self): + self.check_grad( + self.op, + self.inputs, ["X"], + "Out", + max_relative_error=0.5, + no_grad_set={"Y"}) # TODO(dzh,qijun) : mulgrad test case need transpose feature of blas library diff --git a/python/paddle/v2/framework/tests/test_rowwise_add_op.py b/python/paddle/v2/framework/tests/test_rowwise_add_op.py index 45d569da29..403734e71a 100644 --- a/python/paddle/v2/framework/tests/test_rowwise_add_op.py +++ b/python/paddle/v2/framework/tests/test_rowwise_add_op.py @@ -17,13 +17,21 @@ class TestRowwiseAddOp(unittest.TestCase): class RowwiseAddGradOpTest(GradientChecker): - def test_rowwise_add(self): - op = create_op("rowwise_add") - inputs = { + def setUp(self): + self.op = create_op("rowwise_add") + self.inputs = { "X": np.random.uniform(0.1, 1, [5, 10]).astype("float32"), "b": np.random.uniform(0.1, 1, [10]).astype("float32") } - self.check_grad(op, inputs, set(["X", "b"]), "Out") + + def test_normal(self): + self.check_grad(self.op, self.inputs, ["X", "b"], "Out") + + def test_ignore_b(self): + self.check_grad(self.op, self.inputs, ["X"], "Out", no_grad_set={"b"}) + + def test_ignore_x(self): + self.check_grad(self.op, self.inputs, ["b"], "Out", no_grad_set={"X"}) if __name__ == '__main__': From beafabc73e929e3790ba93687917a002ae0f3da0 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Tue, 5 Sep 2017 10:20:43 +0800 Subject: [PATCH 54/72] follow comments --- doc/howto/dev/use_eigen_cn.md | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/doc/howto/dev/use_eigen_cn.md b/doc/howto/dev/use_eigen_cn.md index 49a726959a..1367323b71 100644 --- a/doc/howto/dev/use_eigen_cn.md +++ b/doc/howto/dev/use_eigen_cn.md @@ -7,14 +7,14 @@ Eigen Tensor模块对element-wise计算提供了强大的支持,并且书写一份代码,可以同时在CPU、GPU执行。但Eigen Tensor是一个正在开发中的模块,因此可能测试不够完备,文档较少。 -关于Eigen Tensor模块的详细介绍请参考[文档](https://github.com/RLovelett/eigen/blob/master/unsupported/Eigen/CXX11/src/Tensor/README.md) +关于Eigen Tensor模块的详细介绍请参考[文档1](https://github.com/RLovelett/eigen/blob/master/unsupported/Eigen/CXX11/src/Tensor/README.md) 和[文档2](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md) ### paddle::framework::Tensor Paddle Tensor定义在framework目录下,其主要接口如下: -``` +```cpp class Tensor { public: /*! Return a pointer to mutable memory block. */ @@ -54,9 +54,9 @@ class Tensor { }; ``` -`Placeholder`的作用的延迟分配内存,即我们可以先定义一个Tensor,然后使用Resize接口设置Tensor的大小,最后再调用mutable_data接口分配实际的内存。 +`Placeholder`的作用是延迟分配内存,即我们可以先定义一个Tensor,然后使用Resize接口设置Tensor的大小,最后再调用mutable_data接口分配实际的内存。 -``` +```cpp paddle::framework::Tensor t; paddle::platform::CPUPlace place; // set size first @@ -65,13 +65,14 @@ t.Resize({2, 3}); t.mutable_data(place); ``` +### paddle::framework::Tensor使用样例 下面以AddOp为例说明Tensor的使用过程: - InferShape 在运行神经网络计算图时,我们先调用每个`Operator`的`InferShape`接口,根据输入Tensor的大小来设置输出Tensor的大小,`Resize`接口会被调用。 -``` +```cpp void InferShape(const framework::InferShapeContext &ctx) const override { PADDLE_ENFORCE_EQ(ctx.Input<Tensor>("X")->dims(), ctx.Input<Tensor>("Y")->dims(), @@ -85,7 +86,7 @@ void InferShape(const framework::InferShapeContext &ctx) const override { `Operator`的`Run`接口最终会调用对应`OpKernel`的`Compute`接口,在这时真正的分配内存,`mutable_data`接口会被调用。 -``` +```cpp void Compute(const framework::ExecutionContext& context) const override { auto* input0 = context.Input<Tensor>("X"); auto* input1 = context.Input<Tensor>("Y"); @@ -93,13 +94,13 @@ void Compute(const framework::ExecutionContext& context) const override { output->mutable_data<T>(context.GetPlace()); - auto X = EigenVector<T>::Flatten(*input0); - auto Y = EigenVector<T>::Flatten(*input1); - auto Z = EigenVector<T>::Flatten(*output); + auto x = EigenVector<T>::Flatten(*input0); + auto y = EigenVector<T>::Flatten(*input1); + auto z = EigenVector<T>::Flatten(*output); auto place = context.GetEigenDevice<Place>(); - Z.device(place) = X + Y; + z.device(place) = x + y; } ``` @@ -110,7 +111,7 @@ void Compute(const framework::ExecutionContext& context) const override { 以EigenTensor为例,做一个介绍 -``` +```cpp Tensor t; float* p = t.mutable_data<float>(make_ddim({1, 2, 3}), platform::CPUPlace()); for (int i = 0; i < 1 * 2 * 3; i++) { @@ -122,7 +123,7 @@ EigenTensor<float, 3>::Type et = EigenTensor<float, 3>::From(t); From是EigenTensor模板提供的一个接口,可以实现从paddle::framework::Tensor到对EigenTensor的转换。由于Tensor的rank是模板参数,因此在转换时需要显示的指定。 -需要额外注意的是,EigenVector<T>::From方法是把paddle中的一维Tensor转为Eigen的一维Tensor,在这里用EigenVector来表示;而EigenVector<T>::Flatten方法是把paddle中的一个Tensor进行reshape操作,压扁成为Eigen的一维Tensor,类型仍然为EigenVector。 +在Eigen中,不同rank的Tensor是不同类型,Vector是rank为1的Tensor。需要额外注意的是,EigenVector<T>::From方法是把paddle中的一维Tensor转为Eigen的一维Tensor,在这里用EigenVector来表示;而EigenVector<T>::Flatten方法是把paddle中的一个Tensor进行reshape操作,压扁成为Eigen的一维Tensor,类型仍然为EigenVector。 更多的转换方法请参考eigen_test.cc中的[单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/eigen_test.cc)。 @@ -132,12 +133,12 @@ From是EigenTensor模板提供的一个接口,可以实现从paddle::framework 当需要完成计算时,我们需要等式左边的EigenTensor调用device接口。在这里需要注意的是,这里的EigenTensor之间的运算只是改变了原有Tensor中的数据,而不会改变原有Tensor的shape信息。 -``` -auto X = EigenVector<T>::Flatten(*input0); -auto Y = EigenVector<T>::Flatten(*input1); -auto Z = EigenVector<T>::Flatten(*output); +```cpp +auto x = EigenVector<T>::Flatten(*input0); +auto y = EigenVector<T>::Flatten(*input1); +auto z = EigenVector<T>::Flatten(*output); auto place = context.GetEigenDevice<Place>(); -Z.device(place) = X + Y; +z.device(place) = x + y; ``` 在这段代码中,input0/input1/output可以是任意维度的Tensor。我们调用了EigenVector的Flatten接口,把任意维度的Tensor转为了一维的EigenVector。而在计算结束之后,input0/input1/output的原有shape信息不变。如果想改变原有Tensor的shape信息,可以调用Resize接口进行改变。 From ab55d7933bd7efbdddebbcee237323505d80244a Mon Sep 17 00:00:00 2001 From: dangqingqing <dangqingqing@baidu.com> Date: Tue, 5 Sep 2017 10:36:46 +0800 Subject: [PATCH 55/72] revert scatter_op and other mirror changes. --- doc/howto/dev/new_op_cn.md | 48 ++++++++++++++----- paddle/operators/mul_op.h | 2 +- paddle/operators/scatter_op.cc | 4 +- paddle/operators/scatter_op.h | 10 ++-- .../paddle/v2/framework/tests/test_mul_op.py | 3 ++ .../v2/framework/tests/test_rowwise_add_op.py | 2 +- 6 files changed, 46 insertions(+), 23 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index ec79b7f42b..5c523bf046 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -280,28 +280,50 @@ class TestMulOp(unittest.TestCase): 反向Op单测继承自`GradientChecker`,而`GradientChecker`集成自`unittest.TestCase`,所以反向单测函数需要`test_`开头。 - ``` - class MulGradOpTest(GradientChecker): - def test_mul(self): - op = create_op("mul") - inputs = { +``` +class TestMulGradOp(GradientChecker): + def setUp(self): + self.op = create_op("mul") + self.inputs = { 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } - self.compare_grad(op, inputs) + + def test_cpu_gpu_compare(self): + self.compare_grad(self.op, self.inputs) + + def test_normal(self): # mul op will enlarge the relative error self.check_grad( - op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) - ``` + self.op, self.inputs, ["X", "Y"], "Out", max_relative_error=0.5) + + def test_ignore_x(self): + self.check_grad( + self.op, + self.inputs, ["Y"], + "Out", + max_relative_error=0.5, + no_grad_set={"X"}) + + def test_ignore_y(self): + self.check_grad( + self.op, + self.inputs, ["X"], + "Out", + max_relative_error=0.5, + no_grad_set={"Y"}) +``` + +下面解释一些关键的地方: - 调用`create_op("mul")`创建反向Op对应的前向Op。 - - 定义输入`inputs`。 - 调用`compare_grad`函数对比CPU、GPU计算结果。 - - 调用`check_grad`检查梯度稳定性,这里采用数值法检测梯度正确性。 - - 第一个参数`op` : 前向op。 - - 第二个参数`inputs` : 输入词典,词典的Key和`ProtoMaker`定义保持一致。 - - 第三个参数`set(["X", "Y"])` : 指定对输入变量`X`、`Y`做梯度检测。 + - `test_normal`中调用`check_grad`检查梯度稳定性,这里采用数值法检测梯度正确性。 + - 第一个参数`self.op` : 前向Op。 + - 第二个参数`self.inputs` : 输入词典,词典的Key和`ProtoMaker`定义保持一致。 + - 第三个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 - 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out` + - `test_ignore_x`和`test_ignore_y`分支测试只需要计算一个输入梯度的情况。 ### 编译和执行 diff --git a/paddle/operators/mul_op.h b/paddle/operators/mul_op.h index 66ed2f81c7..05a79e13b3 100644 --- a/paddle/operators/mul_op.h +++ b/paddle/operators/mul_op.h @@ -54,8 +54,8 @@ class MulGradKernel : public framework::OpKernel { auto* device_context = const_cast<platform::DeviceContext*>(ctx.device_context_); if (dx) { - // dx = dout * y'. dx: M x K, dout : M x N, y : K x N dx->mutable_data<T>(ctx.GetPlace()); + // dx = dout * y'. dx: M x K, dout : M x N, y : K x N math::matmul<Place, T>(*dout, false, *y, true, 1, dx, 0, device_context); } if (dy) { diff --git a/paddle/operators/scatter_op.cc b/paddle/operators/scatter_op.cc index 9b5068f07c..35c185ad80 100644 --- a/paddle/operators/scatter_op.cc +++ b/paddle/operators/scatter_op.cc @@ -50,8 +50,8 @@ class ScatterGradOp : public framework::OperatorWithKernel { auto *dRef = ctx.Output<Tensor>(framework::GradVarName("Ref")); auto *Ref = ctx.Input<Tensor>("Ref"); - if (dRef) dRef->Resize(Ref->dims()); - if (dUpdates) dUpdates->Resize(Updates->dims()); + dRef->Resize(Ref->dims()); + dUpdates->Resize(Updates->dims()); } }; diff --git a/paddle/operators/scatter_op.h b/paddle/operators/scatter_op.h index 7551480211..e9595638a8 100644 --- a/paddle/operators/scatter_op.h +++ b/paddle/operators/scatter_op.h @@ -49,12 +49,10 @@ class ScatterGradientOpKernel : public framework::OpKernel { auto *dOut = ctx.Input<Tensor>(framework::GradVarName("Out")); // In place gradient: dRef = dO - if (dRef) dRef->ShareDataWith<T>(*dOut); - if (dUpdates) { - dUpdates->mutable_data<T>(ctx.GetPlace()); - // Gradient by Gather: dUpdates += dO[Index] - Gather<T>(ctx.GetPlace(), dOut, Index, dUpdates); - } + dRef->ShareDataWith<T>(*dOut); + dUpdates->mutable_data<T>(ctx.GetPlace()); + // Gradient by Gather: dUpdates += dO[Index] + Gather<T>(ctx.GetPlace(), dOut, Index, dUpdates); } }; diff --git a/python/paddle/v2/framework/tests/test_mul_op.py b/python/paddle/v2/framework/tests/test_mul_op.py index 92d2b80e87..b58e4266d1 100644 --- a/python/paddle/v2/framework/tests/test_mul_op.py +++ b/python/paddle/v2/framework/tests/test_mul_op.py @@ -24,6 +24,9 @@ class TestMulGradOp(GradientChecker): 'Y': np.random.random((84, 100)).astype("float32") } + def test_cpu_gpu_compare(self): + self.compare_grad(self.op, self.inputs) + def test_normal(self): # mul op will enlarge the relative error self.check_grad( diff --git a/python/paddle/v2/framework/tests/test_rowwise_add_op.py b/python/paddle/v2/framework/tests/test_rowwise_add_op.py index 403734e71a..2ddb85e2e7 100644 --- a/python/paddle/v2/framework/tests/test_rowwise_add_op.py +++ b/python/paddle/v2/framework/tests/test_rowwise_add_op.py @@ -16,7 +16,7 @@ class TestRowwiseAddOp(unittest.TestCase): self.outputs = {'Out': np.add(self.inputs['X'], self.inputs['b'])} -class RowwiseAddGradOpTest(GradientChecker): +class TestRowwiseAddGradOp(GradientChecker): def setUp(self): self.op = create_op("rowwise_add") self.inputs = { From efd40b66cc4bb898fe152337aeda9f65ced33767 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Tue, 5 Sep 2017 14:17:13 +0800 Subject: [PATCH 56/72] update the doc for how to write the operators. --- doc/howto/dev/new_op_cn.md | 141 +++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 77 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 3e71a0a592..6bd54137ba 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -23,19 +23,20 @@ - `framework::OperatorWithKernel`:继承自OperatorBase,Op有计算函数,称作有Kernel。 - `class OpProtoAndCheckerMaker`:描述该Op的输入、输出、属性、注释,主要用于Python API接口生成 -依据是否包含kernel,将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorBase`,后者继承自`OperatorWithKernel`。本教程主要介绍带Kernel的Op如何写,简单总结Op需要包含的内容如下: - - - 内容 | 定义位置 --------------- | :---------------------- -OpProtoMake定义 | `.cc`文件,Backward Op不需要定义OpProtoMake -Op定义 | `.cc`文件 -Kernel实现 | CPU、GPU共享Kernel在`.h`文件,否则,CPU可以在`.cc`文件,GPU可在`.cu`文件。 -注册Op | Op注册在`.cc`文件;Kernel注册CPU在`.cc`文件,GPU在`.cu`文件 - - -下面以矩阵乘操作,即[MulOp](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc)为例来介绍如何写带Kernel的Operator。 +依据是否包含kernel,可以将Op分为两种:包含Kernel的Op和不包含kernel的Op,前者Op的定义继承自`OperatorBase`,后者继承自`OperatorWithKernel`。本教程主要介绍带Kernel的Op如何写,简单总结Op需要包含的内容如下: + + + 内容 | 定义位置 +-------------- | :---------------------- +OpProtoMake定义 | `*_op.cc`文件,Backward Op不需要定义OpProtoMake +Op定义 | `*_op.cc`文件 +Kernel实现 | CPU、GPU共享Kernel在`*_op.h`文件,否则,CPU可以在`*_op.cc`文件,GPU可在`*_op.cu`文件。 +注册Op | Op注册在`*_op.cc`文件;Kernel注册CPU在`*_op.cc`文件,GPU在`*_op.cu`文件 +实现新的op都添加至目录[paddle/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators)下,文件命名以`*_op.h`(如有) 、 `*_op.cc` 、`*_op.cu`(如有)结尾。 + + +下面以矩阵乘操作,即[MulOp](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc)为例来介绍如何写带Kernel的Operator。 ## 实现C++类 @@ -43,8 +44,8 @@ Kernel实现 | CPU、GPU共享Kernel在`.h`文件,否则,CPU可以在` ### 1. 定义ProtoMaker类 矩阵乘的公式:$Out = X * Y$, 可见该计算由两个输入,一个输出组成。首先定义`ProtoMaker`来描述该Op的输入、输出及注释: - -``` + +```cpp class MulOpMaker : public framework::OpProtoAndCheckerMaker { public: MulOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) @@ -59,20 +60,20 @@ The equation is: Out = X * Y } }; ``` - -[`MulOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc#L43)继承自`framework::OpProtoAndCheckerMaker`,构造函数包括2个: + +[`MulOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc#L43)继承自`framework::OpProtoAndCheckerMaker`,构造函数包括2个参数: - `framework::OpProto` : 前者存储Op的输入输出和参数属性,将用于Python API接口的生成。 - `framework::OpAttrChecker` :后者用于检查参数属性的合法性。 - + 构造函数里通过`AddInput`添加输入参数,通过`AddOutput`添加输出参数,通过`AddComment`添加该Op的注释,这些函数会将对应内容添加到`OpProto`中。 -在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,并解释了各自含义,该命名尽可能的规范。 +在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,并解释了各自含义,命名请遵守命名规范。 + - 再举个[`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/scale_op.cc#L37)的例子: - -``` + +```cpp template <typename AttrType> class ScaleOpMaker : public framework::OpProtoAndCheckerMaker { public: @@ -87,17 +88,17 @@ The equation is: Out = scale*X } }; ``` - - 在这个例子里,两处不同: - + + 这个例子有两处不同: + - `AddInput("X","...").NotInGradient()` : 表示`X`这个输入不参与`ScaleOp`对应的梯度Op计算之中。 - `AddAttr<AttrType>("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 - + ### 2. 定义Operator类 -```c++ +```cpp class MulOp : public framework::OperatorWithKernel { public: using framework::OperatorWithKernel::OperatorWithKernel; @@ -121,20 +122,20 @@ class MulOp : public framework::OperatorWithKernel { ``` [`MulOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc#L22)继承自`OperatorWithKernel`。`public`成员: - -```c++ + +```cpp using framework::OperatorWithKernel::OperatorWithKernel; ``` 这句表示使用基类`OperatorWithKernel`的构造函数,也可写成: - -```c++ + +```cpp MulOp(const std::string &type, const framework::VariableNameMap &inputs, const framework::VariableNameMap &outputs, const framework::AttributeMap &attrs) : OperatorWithKernel(type, inputs, outputs, attrs) {} -``` - +``` + 还需要重写`InferShape`接口。`InferShape`为const函数,不能修改Op的成员变量,参数为`const framework::InferShapeContext &ctx`,通过该参数可获取到输入输出以及属性。它的功能是: - 1). 做检查, 尽早报错:检查输入数据维度、类型等是否合法。 @@ -144,7 +145,7 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, ### 3. 定义OpKernel类 -```C++ +```cpp template <typename Place, typename T> class MulKernel : public framework::OpKernel { public: @@ -163,34 +164,34 @@ class MulKernel : public framework::OpKernel { `MulKernel`继承自`framework::OpKernel`,带有模板参数: - `typename Place`: 表示设备类型,不同设备(CPU、GPU)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 - + - `typename T` : 表示数据类型,如`float`, `double`等。 - + `MulKernel`需要重写`Compute`接口,该接口参数为`const framework::ExecutionContext& context`, `ExecutionContext`相比`InferShapeContext`增加了设备类型,同样可获取到输入输出和属性参数,`Compute`函数里写具体实现时。 - -注意,不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。`MulOp`的CPU、GPU实现共享同一个`Kernel`,`OpKernel`不共享的例子可以参考[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 - + +注意,不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。`MulOp`的CPU、GPU实现共享同一个`Kernel`,`OpKernel`不共享的例子可以参考[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 + 到此前向Op实现完成,需要在`.cc`文件中注册该op和kernel。反向Op类的定义和Kernel定义与前向Op类似,这里不再重复。但注意,反向Op没有`ProtoMaker`。 - + ### 4. 注册Operator 在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 -```c++ +```cpp namespace ops = paddle::operators; REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); REGISTER_OP_CPU_KERNEL(mul_grad, ops::MulGradKernel<paddle::platform::CPUPlace, float>); ``` - + - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`, - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 在 `.cu`文件中注册GPU Kernel。 - -```c++ + +```cpp namespace ops = paddle::operators; REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel<paddle::platform::GPUPlace, float>); REGISTER_OP_GPU_KERNEL(mul_grad, @@ -199,56 +200,42 @@ REGISTER_OP_GPU_KERNEL(mul_grad, ### 5. 编译 -在[paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt)文件中添加编译。 - -``` -op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) -``` - -下面命令可以编译: - +无需修改[paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会被自动加入编译。 + +直接执行下面命令可进行编译: + ``` make mul_op ``` ## 绑定Python -- 绑定Python - - 在 [`paddle/pybind/pybind.cc +- 绑定Python + + 在 [`paddle/pybind/pybind.cc `](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/pybind.cc)文件中添加该类: ``` USE_OP(mul); ``` 如果只实现了CPU版本,则使用`USE_CPU_ONLY_OP`: - + ``` USE_CPU_ONLY_OP(gather); ``` - + 如果OP不带Kernel,则使用`USE_NO_KENREL_OP`: - + ``` USE_NO_KENREL_OP(recurrent); ``` - + 使用`USE_OP`告知编译器需要链接该Op的目标文件,具体解释参考[代码注释](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h#L81)。 - - + + - 生成库 - 在 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件添加类到`DEPS`中,使得该Op可以链接到生成的lib库中。 - - ``` - if(WITH_PYTHON) - cc_library(paddle_pybind SHARED - SRCS pybind.cc - DEPS pybind python backward - mul_op - minus_op) - endif(WITH_PYTHON) - ``` + 无需修改 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会被自动被添加链接至生成的lib库中。 ## 实现单元测试 @@ -258,7 +245,7 @@ make mul_op 前向Op单测继承自`unittest.TestCase`,并定义元类`__metaclass__ = OpTestMeta`,具体单测流程在`OpTestMeta`里完成。需在`setUp`函数定义输入输出和属性参数,以及Python对比的输出值。 -``` +```python import unittest import numpy as np from gradient_checker import GradientChecker, create_op @@ -276,17 +263,17 @@ class TestMulOp(unittest.TestCase): self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} ``` 首先需要`import`必要的包,下面详细解释其他值: - + - `self.type = "mul" ` : 定义类型,和注册的类型一致。 - `self.inputs` : 定义输入,类型为Numpy.array,并初始化。 - `self.outputs` : 定义输出,并得到Python结算结果。 - + ### 反向Operator单测 反向Op单测继承自`GradientChecker`,而`GradientChecker`集成自`unittest.TestCase`,所以反向单测函数需要`test_`开头。 - ``` + ```python class MulGradOpTest(GradientChecker): def test_mul(self): op = create_op("mul") @@ -294,7 +281,7 @@ class TestMulOp(unittest.TestCase): 'X': np.random.random((32, 84)).astype("float32"), 'Y': np.random.random((84, 100)).astype("float32") } - self.compare_grad(op, inputs) + self.compare_grad(op, inputs) # mul op will enlarge the relative error self.check_grad( op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.5) @@ -310,7 +297,7 @@ class TestMulOp(unittest.TestCase): - 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out` -### 编译和执行 +### 编译和执行 单测完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)里添加编译: From cdae0c754ec2f218ad06589fe669ebb00fb52e07 Mon Sep 17 00:00:00 2001 From: chengduoZH <zhaochengduo@163.com> Date: Tue, 5 Sep 2017 15:51:47 +0800 Subject: [PATCH 57/72] fix Conv3d, DeConv3d (bias shape) --- paddle/gserver/layers/Conv3DLayer.cpp | 23 +++++++++++++++++------ paddle/gserver/layers/DeConv3DLayer.cpp | 22 ++++++++++++++++------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/paddle/gserver/layers/Conv3DLayer.cpp b/paddle/gserver/layers/Conv3DLayer.cpp index 7cc9937cce..3887aa58b2 100644 --- a/paddle/gserver/layers/Conv3DLayer.cpp +++ b/paddle/gserver/layers/Conv3DLayer.cpp @@ -42,10 +42,10 @@ bool Conv3DLayer::init(const LayerMap &layerMap, if (sharedBiases_) { CHECK_EQ((size_t)numFilters_, biasParameter_->getSize()); biases_ = - std::unique_ptr<Weight>(new Weight(1, numFilters_, biasParameter_)); + std::unique_ptr<Weight>(new Weight(numFilters_, 1, biasParameter_)); } else { biases_ = - std::unique_ptr<Weight>(new Weight(1, getSize(), biasParameter_)); + std::unique_ptr<Weight>(new Weight(getSize(), 1, biasParameter_)); } } return true; @@ -224,20 +224,31 @@ void Conv3DLayer::bpropData(int i) { } void Conv3DLayer::bpropBiases() { + MatrixPtr biases = Matrix::create(biases_->getWGrad()->getData(), + 1, + biases_->getWGrad()->getElementCnt(), + false, + useGpu_); MatrixPtr outGradMat = getOutputGrad(); + if (this->sharedBiases_) { - biases_->getWGrad()->collectSharedBias(*outGradMat, 1.0f); + biases->collectSharedBias(*outGradMat, 1.0f); } else { - biases_->getWGrad()->collectBias(*outGradMat, 1.0f); + biases->collectBias(*outGradMat, 1.0f); } } void Conv3DLayer::addBias() { MatrixPtr outMat = getOutputValue(); + MatrixPtr bias = Matrix::create(biases_->getW()->getData(), + 1, + biases_->getW()->getElementCnt(), + false, + useGpu_); if (this->sharedBiases_) { - outMat->addSharedBias(*(biases_->getW()), 1.0f); + outMat->addSharedBias(*(bias), 1.0f); } else { - outMat->addBias(*(biases_->getW()), 1.0f); + outMat->addBias(*(bias), 1.0f); } } diff --git a/paddle/gserver/layers/DeConv3DLayer.cpp b/paddle/gserver/layers/DeConv3DLayer.cpp index 7d5c772c89..2838980a97 100644 --- a/paddle/gserver/layers/DeConv3DLayer.cpp +++ b/paddle/gserver/layers/DeConv3DLayer.cpp @@ -42,10 +42,10 @@ bool DeConv3DLayer::init(const LayerMap &layerMap, if (sharedBiases_) { CHECK_EQ((size_t)numFilters_, biasParameter_->getSize()); biases_ = - std::unique_ptr<Weight>(new Weight(1, numFilters_, biasParameter_)); + std::unique_ptr<Weight>(new Weight(numFilters_, 1, biasParameter_)); } else { biases_ = - std::unique_ptr<Weight>(new Weight(1, getSize(), biasParameter_)); + std::unique_ptr<Weight>(new Weight(getSize(), 1, biasParameter_)); } } return true; @@ -191,21 +191,31 @@ void DeConv3DLayer::bpropWeights(int i) {} void DeConv3DLayer::bpropData(int i) {} void DeConv3DLayer::bpropBiases() { + MatrixPtr biases = Matrix::create(biases_->getWGrad()->getData(), + 1, + biases_->getWGrad()->getElementCnt(), + false, + useGpu_); const MatrixPtr &outGradMat = getOutputGrad(); if (this->sharedBiases_) { - biases_->getWGrad()->collectSharedBias(*outGradMat, 1.0f); + biases->collectSharedBias(*outGradMat, 1.0f); } else { - biases_->getWGrad()->collectBias(*outGradMat, 1.0f); + biases->collectBias(*outGradMat, 1.0f); } } void DeConv3DLayer::addBias() { MatrixPtr outMat = getOutputValue(); + MatrixPtr bias = Matrix::create(biases_->getW()->getData(), + 1, + biases_->getW()->getElementCnt(), + false, + useGpu_); if (this->sharedBiases_) { - outMat->addSharedBias(*(biases_->getW()), 1.0f); + outMat->addSharedBias(*(bias), 1.0f); } else { - outMat->addBias(*(biases_->getW()), 1.0f); + outMat->addBias(*(bias), 1.0f); } } From b3ff125d5598da6e362f360220eef816cf0d7f42 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Tue, 5 Sep 2017 16:29:57 +0800 Subject: [PATCH 58/72] follow comments. --- doc/howto/dev/new_op_cn.md | 42 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 6bd54137ba..85c222163c 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -28,16 +28,18 @@ 内容 | 定义位置 -------------- | :---------------------- -OpProtoMake定义 | `*_op.cc`文件,Backward Op不需要定义OpProtoMake -Op定义 | `*_op.cc`文件 -Kernel实现 | CPU、GPU共享Kernel在`*_op.h`文件,否则,CPU可以在`*_op.cc`文件,GPU可在`*_op.cu`文件。 -注册Op | Op注册在`*_op.cc`文件;Kernel注册CPU在`*_op.cc`文件,GPU在`*_op.cu`文件 +OpProtoMake定义 | `.cc`文件,Backward Op不需要定义OpProtoMake +Op定义 | `.cc`文件 +Kernel实现 | CPU、GPU共享Kernel在`.h`文件,否则,CPU可以在`.cc`文件,GPU可在`.cu`文件。 +注册Op | Op注册在`.cc`文件;Kernel注册CPU在`.cc`文件,GPU在`.cu`文件 + 实现新的op都添加至目录[paddle/operators](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators)下,文件命名以`*_op.h`(如有) 、 `*_op.cc` 、`*_op.cu`(如有)结尾。 下面以矩阵乘操作,即[MulOp](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc)为例来介绍如何写带Kernel的Operator。 + ## 实现C++类 @@ -200,13 +202,18 @@ REGISTER_OP_GPU_KERNEL(mul_grad, ### 5. 编译 -无需修改[paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会被自动加入编译。 +- 简单**无特殊依赖**的OP无需修改CMakeList.txt文件。[paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt) 会自动将 `paddle/operators` 目录下新增的 `*_op.cc` 文件加入编译。 +- 较为复杂、**有额外依赖** 的operator仍需要修改[paddle/operators/CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/CMakeLists.txt)。如,`mul_op` 依赖 `math_function`,需要在`CMakeLists.txt`中添加如下内容: -直接执行下面命令可进行编译: + ``` + op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) + + ``` -``` -make mul_op -``` +- 运行下面命令可以进行编译: + + ``` + make mul_op + ``` ## 绑定Python @@ -235,13 +242,13 @@ make mul_op - 生成库 - 无需修改 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会被自动被添加链接至生成的lib库中。 + 无需修改 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会自动被添加链接到生成的lib库中。 ## 实现单元测试 单测包括对比前向Op不同设备(CPU、GPU)的实现、对比反向OP不同设备(CPU、GPU)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单测](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 -### 前向Operator单测 +### 前向Operator单元测试 前向Op单测继承自`unittest.TestCase`,并定义元类`__metaclass__ = OpTestMeta`,具体单测流程在`OpTestMeta`里完成。需在`setUp`函数定义输入输出和属性参数,以及Python对比的输出值。 @@ -269,7 +276,7 @@ class TestMulOp(unittest.TestCase): - `self.outputs` : 定义输出,并得到Python结算结果。 -### 反向Operator单测 +### 反向Operator单元测试 反向Op单测继承自`GradientChecker`,而`GradientChecker`集成自`unittest.TestCase`,所以反向单测函数需要`test_`开头。 @@ -297,21 +304,22 @@ class TestMulOp(unittest.TestCase): - 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out` -### 编译和执行 +### 编译和执行单元测试 -单测完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)里添加编译: +单测完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)里添加以下内容将单测加入工程中: ``` py_test(test_mul_op SRCS test_mul_op.py) ``` -编译时需要打开`WITH_TESTING`, 即 `cmake paddle_dir -DWITH_TESTING=ON`,编译成功之后执行单测命令为: +请注意,**不同于Op的编译测试,运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`, 即`cmake paddle_dir -DWITH_TESTING=ON`。编译成功后,执行下面的命令来运行单测: -``` +```bash make test ARGS="-R test_mul_op -V" ``` + 或者: -``` +```bash ctest -R test_mul_op ``` From 020e45f715b1a1cea5dcbee10dacb055b3889523 Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Tue, 5 Sep 2017 16:54:12 +0800 Subject: [PATCH 59/72] follow comments to revert add_two_op to add_op --- paddle/framework/CMakeLists.txt | 2 +- paddle/framework/grad_op_builder_test.cc | 4 ++-- paddle/operators/{add_two_op.cc => add_op.cc} | 7 +++---- paddle/operators/{add_two_op.cu => add_op.cu} | 5 ++--- paddle/operators/{add_two_op.h => add_op.h} | 0 paddle/pybind/pybind.cc | 2 +- python/paddle/v2/framework/tests/test_add_two_op.py | 2 +- python/paddle/v2/framework/tests/test_gradient_checker.py | 2 +- python/paddle/v2/framework/tests/test_net.py | 4 ++-- python/paddle/v2/framework/tests/test_operator.py | 4 ++-- python/paddle/v2/framework/tests/test_recurrent_op.py | 2 +- 11 files changed, 16 insertions(+), 18 deletions(-) rename paddle/operators/{add_two_op.cc => add_op.cc} (88%) rename paddle/operators/{add_two_op.cu => add_op.cu} (82%) rename paddle/operators/{add_two_op.h => add_op.h} (100%) diff --git a/paddle/framework/CMakeLists.txt b/paddle/framework/CMakeLists.txt index e138517b6b..c0838d9b75 100644 --- a/paddle/framework/CMakeLists.txt +++ b/paddle/framework/CMakeLists.txt @@ -25,7 +25,7 @@ cc_test(operator_test SRCS operator_test.cc DEPS operator op_registry) cc_library(grad_op_builder SRCS grad_op_builder.cc DEPS operator) cc_library(op_registry SRCS op_registry.cc DEPS grad_op_builder) cc_test(op_registry_test SRCS op_registry_test.cc DEPS op_registry) -cc_test(grad_op_builder_test SRCS grad_op_builder_test.cc DEPS grad_op_builder op_registry add_two_op) +cc_test(grad_op_builder_test SRCS grad_op_builder_test.cc DEPS grad_op_builder op_registry add_op) py_proto_compile(framework_py_proto SRCS framework.proto) # Generate an empty __init__.py to make framework_py_proto as a valid python module. diff --git a/paddle/framework/grad_op_builder_test.cc b/paddle/framework/grad_op_builder_test.cc index 902c2655e9..9e3ca563c6 100644 --- a/paddle/framework/grad_op_builder_test.cc +++ b/paddle/framework/grad_op_builder_test.cc @@ -3,7 +3,7 @@ #include "paddle/framework/op_registry.h" #include "paddle/framework/operator.h" -USE_OP(add_two); +USE_OP(add); namespace paddle { namespace framework { @@ -41,7 +41,7 @@ namespace f = paddle::framework; TEST(GradOpBuilder, AddTwo) { std::shared_ptr<f::OperatorBase> add_op(f::OpRegistry::CreateOp( - "add_two", {{"X", {"x"}}, {"Y", {"y"}}}, {{"Out", {"out"}}}, {})); + "add", {{"X", {"x"}}, {"Y", {"y"}}}, {{"Out", {"out"}}}, {})); std::shared_ptr<f::OperatorBase> grad_add_op = f::OpRegistry::CreateGradOp(*add_op); EXPECT_EQ(grad_add_op->Inputs().size(), 4UL); diff --git a/paddle/operators/add_two_op.cc b/paddle/operators/add_op.cc similarity index 88% rename from paddle/operators/add_two_op.cc rename to paddle/operators/add_op.cc index bc99e306e0..8dbd47cf0d 100644 --- a/paddle/operators/add_two_op.cc +++ b/paddle/operators/add_op.cc @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -#include "paddle/operators/add_two_op.h" +#include "paddle/operators/add_op.h" namespace paddle { namespace operators { @@ -57,7 +57,6 @@ class AddOpGrad : public framework::OperatorWithKernel { } // namespace paddle namespace ops = paddle::operators; -REGISTER_OP(add_two, ops::AddOp, ops::AddOpMaker, add_two_grad, ops::AddOpGrad); +REGISTER_OP(add, ops::AddOp, ops::AddOpMaker, add_grad, ops::AddOpGrad); -REGISTER_OP_CPU_KERNEL(add_two, - ops::AddKernel<paddle::platform::CPUPlace, float>); +REGISTER_OP_CPU_KERNEL(add, ops::AddKernel<paddle::platform::CPUPlace, float>); diff --git a/paddle/operators/add_two_op.cu b/paddle/operators/add_op.cu similarity index 82% rename from paddle/operators/add_two_op.cu rename to paddle/operators/add_op.cu index acc03b2c8b..fdf2c66c7c 100644 --- a/paddle/operators/add_two_op.cu +++ b/paddle/operators/add_op.cu @@ -14,8 +14,7 @@ #define EIGEN_USE_GPU #include "paddle/framework/op_registry.h" -#include "paddle/operators/add_two_op.h" +#include "paddle/operators/add_op.h" namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(add_two, - ops::AddKernel<paddle::platform::GPUPlace, float>); +REGISTER_OP_GPU_KERNEL(add, ops::AddKernel<paddle::platform::GPUPlace, float>); diff --git a/paddle/operators/add_two_op.h b/paddle/operators/add_op.h similarity index 100% rename from paddle/operators/add_two_op.h rename to paddle/operators/add_op.h diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 6896422617..dba3d8f285 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -30,7 +30,7 @@ limitations under the License. */ namespace py = pybind11; -USE_OP(add_two); +USE_OP(add); USE_OP(onehot_cross_entropy); USE_OP(sgd); USE_OP(mul); diff --git a/python/paddle/v2/framework/tests/test_add_two_op.py b/python/paddle/v2/framework/tests/test_add_two_op.py index 0def484edd..a578e74eca 100644 --- a/python/paddle/v2/framework/tests/test_add_two_op.py +++ b/python/paddle/v2/framework/tests/test_add_two_op.py @@ -11,7 +11,7 @@ class TestAddOp(unittest.TestCase): __metaclass__ = OpTestMeta def setUp(self): - self.type = "add_two" + self.type = "add" self.inputs = { 'X': numpy.random.random((102, 105)).astype("float32"), 'Y': numpy.random.random((102, 105)).astype("float32") diff --git a/python/paddle/v2/framework/tests/test_gradient_checker.py b/python/paddle/v2/framework/tests/test_gradient_checker.py index e0b3151208..857427cdfb 100644 --- a/python/paddle/v2/framework/tests/test_gradient_checker.py +++ b/python/paddle/v2/framework/tests/test_gradient_checker.py @@ -7,7 +7,7 @@ from gradient_checker import get_numeric_gradient class GetNumericGradientTest(unittest.TestCase): def test_add_op(self): - add_op = Operator('add_two', X="X", Y="Y", Out="Z") + add_op = Operator('add', X="X", Y="Y", Out="Z") x = numpy.random.random((10, 1)).astype("float32") y = numpy.random.random((10, 1)).astype("float32") diff --git a/python/paddle/v2/framework/tests/test_net.py b/python/paddle/v2/framework/tests/test_net.py index 9339cf28da..e4b7cd480c 100644 --- a/python/paddle/v2/framework/tests/test_net.py +++ b/python/paddle/v2/framework/tests/test_net.py @@ -15,7 +15,7 @@ def fc(X, W, Y): class TestNet(unittest.TestCase): def test_net_all(self): net = core.Net.create() - op1 = Operator("add_two", X="X", Y="Y", Out="Out") + op1 = Operator("add", X="X", Y="Y", Out="Out") net.append_op(op1) net2 = core.Net.create() @@ -26,7 +26,7 @@ class TestNet(unittest.TestCase): expected = ''' Op(plain_net), inputs:{all[W, X, Y]}, outputs:{all[Out, fc.out, pre_activation]}. - Op(add_two), inputs:{X[X], Y[Y]}, outputs:{Out[Out]}. + Op(add), inputs:{X[X], Y[Y]}, outputs:{Out[Out]}. Op(plain_net), inputs:{all[W, X]}, outputs:{all[fc.out, pre_activation]}. Op(plain_net), inputs:{all[W, X]}, outputs:{all[fc.out, pre_activation]}. Op(mul), inputs:{X[X], Y[W]}, outputs:{Out[pre_activation]}. diff --git a/python/paddle/v2/framework/tests/test_operator.py b/python/paddle/v2/framework/tests/test_operator.py index 1abc4eeb57..040556322d 100644 --- a/python/paddle/v2/framework/tests/test_operator.py +++ b/python/paddle/v2/framework/tests/test_operator.py @@ -193,10 +193,10 @@ class TestOpDescCreationMethod(unittest.TestCase): class TestOpCreations(unittest.TestCase): def test_all(self): - add_op = op.Operator("add_two", X="a", Y="b", Out="z") + add_op = op.Operator("add", X="a", Y="b", Out="z") self.assertIsNotNone(add_op) # Invoke C++ DebugString() - self.assertEqual('Op(add_two), inputs:{X[a], Y[b]}, outputs:{Out[z]}.', + self.assertEqual('Op(add), inputs:{X[a], Y[b]}, outputs:{Out[z]}.', str(add_op)) diff --git a/python/paddle/v2/framework/tests/test_recurrent_op.py b/python/paddle/v2/framework/tests/test_recurrent_op.py index d6000ab9f9..22e680fd78 100644 --- a/python/paddle/v2/framework/tests/test_recurrent_op.py +++ b/python/paddle/v2/framework/tests/test_recurrent_op.py @@ -146,7 +146,7 @@ class TestRecurrentOp(unittest.TestCase): stepnet = core.Net.create() x_fc_op = Operator("mul", X="x@alias", Y="W", Out="Wx") h_fc_op = Operator("mul", X="h@pre", Y="U", Out="Uh") - sum_op = Operator("add_two", X="Wx", Y="Uh", Out="sum") + sum_op = Operator("add", X="Wx", Y="Uh", Out="sum") sig_op = Operator("sigmoid", X="sum", Y="h@alias") for op in [x_fc_op, h_fc_op, sum_op, sig_op]: From e687f3f540d3a403ab376f6c533362a6e6c577ff Mon Sep 17 00:00:00 2001 From: wanghaoshuang <wanghaoshuang@baidu.com> Date: Tue, 5 Sep 2017 17:37:12 +0800 Subject: [PATCH 60/72] Make attribute support for std::vector<std::pair<int, int>> --- paddle/framework/attribute.cc | 12 ++++++++++++ paddle/framework/attribute.h | 3 ++- paddle/framework/framework.proto | 7 +++++++ python/paddle/v2/framework/op.py | 7 ++++++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/paddle/framework/attribute.cc b/paddle/framework/attribute.cc index 9eb07acdff..27132eaa0b 100644 --- a/paddle/framework/attribute.cc +++ b/paddle/framework/attribute.cc @@ -43,6 +43,10 @@ template <> AttrType AttrTypeID<std::vector<std::string>>() { return STRINGS; } +template <> +AttrType AttrTypeID<std::vector<std::pair<int, int>>>() { + return INT_PAIRS; +} Attribute GetAttrValue(const OpDesc::Attr& attr_desc) { switch (attr_desc.type()) { @@ -76,6 +80,14 @@ Attribute GetAttrValue(const OpDesc::Attr& attr_desc) { } return val; } + case paddle::framework::AttrType::INT_PAIRS: { + std::vector<std::pair<int, int>> val(attr_desc.int_pairs_size()); + for (int i = 0; i < attr_desc.int_pairs_size(); ++i) { + val[i].first = attr_desc.int_pairs(i).first(); + val[i].second = attr_desc.int_pairs(i).second(); + } + return val; + } } PADDLE_ENFORCE(false, "Unknown OpDesc::AttrDesc::type !"); return boost::blank(); diff --git a/paddle/framework/attribute.h b/paddle/framework/attribute.h index 08b47cabd4..071879a9d4 100644 --- a/paddle/framework/attribute.h +++ b/paddle/framework/attribute.h @@ -28,7 +28,8 @@ namespace paddle { namespace framework { typedef boost::variant<boost::blank, int, float, std::string, std::vector<int>, - std::vector<float>, std::vector<std::string>> + std::vector<float>, std::vector<std::string>, + std::vector<std::pair<int, int>>> Attribute; typedef std::unordered_map<std::string, Attribute> AttributeMap; diff --git a/paddle/framework/framework.proto b/paddle/framework/framework.proto index ae44a1ffd4..368136a972 100644 --- a/paddle/framework/framework.proto +++ b/paddle/framework/framework.proto @@ -22,8 +22,14 @@ enum AttrType { INTS = 3; FLOATS = 4; STRINGS = 5; + INT_PAIRS = 6; } +message IntPair { + required int32 first = 1; + required int32 second = 2; +}; + // OpDesc describes an instance of a C++ framework::OperatorBase // derived class type. message OpDesc { @@ -37,6 +43,7 @@ message OpDesc { repeated int32 ints = 6; repeated float floats = 7; repeated string strings = 8; + repeated IntPair int_pairs = 9; }; message Var { diff --git a/python/paddle/v2/framework/op.py b/python/paddle/v2/framework/op.py index e7e932f6fe..0349407a85 100644 --- a/python/paddle/v2/framework/op.py +++ b/python/paddle/v2/framework/op.py @@ -94,9 +94,14 @@ class OpDescCreationMethod(object): new_attr.floats.extend(user_defined_attr) elif attr.type == framework_pb2.STRINGS: new_attr.strings.extend(user_defined_attr) + elif attr.type == framework_pb2.INT_PAIRS: + for p in user_defined_attr: + pair = new_attr.pairs.add() + pair.first = p[0] + pair.second = p[1] else: raise NotImplementedError("Not support attribute type " + - attr.type) + str(attr.type)) return op_desc From 2beaf3aa2a966980177ea0a0d309fd7a7a594a1c Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Tue, 5 Sep 2017 18:12:42 +0800 Subject: [PATCH 61/72] auto find .cc or .cu in operator/CMakeLists.txt --- paddle/operators/CMakeLists.txt | 54 +++++++++++++++------------------ 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index 90185101c4..99b8e1967f 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -14,27 +14,31 @@ function(op_library TARGET) cmake_parse_arguments(op_library "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - foreach(src ${op_library_SRCS}) - if (${src} MATCHES ".*\\.cu$") - list(APPEND cu_srcs ${src}) - elseif(${src} MATCHES ".*\\.cc$") - list(APPEND cc_srcs ${src}) - else() - message(FATAL_ERROR "${TARGET} Source file ${src} should only be .cc or .cu") + list(LENGTH op_library_SRCS op_library_SRCS_len) + if (${op_library_SRCS_len} EQUAL 0) + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cc) + list(APPEND cc_srcs ${TARGET}.cc) endif() - endforeach() + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cu) + list(APPEND cu_srcs ${TARGET}.cc) + endif() + else() + foreach(src ${op_library_SRCS}) + if (${src} MATCHES ".*\\.cu$") + list(APPEND cu_srcs ${src}) + elseif(${src} MATCHES ".*\\.cc$") + list(APPEND cc_srcs ${src}) + else() + message(FATAL_ERROR "${TARGET} Source file ${src} should only be .cc or .cu") + endif() + endforeach() + endif() list(LENGTH cc_srcs cc_srcs_len) if (${cc_srcs_len} EQUAL 0) message(FATAL_ERROR "The op library ${TARGET} should contains at least one .cc file") endif() - list(LENGTH cu_srcs cu_srcs_len) - list(LENGTH op_library_DEPS dep_len) - if (${cu_srcs_len} EQUAL 0 AND ${dep_len} EQUAL 0) - message(WARNING "The op library ${TARGET} not support GPU!") - endif() - if (WITH_GPU) nv_library(${TARGET} SRCS ${cc_srcs} ${cu_srcs} DEPS ${op_library_DEPS} ${op_common_deps}) @@ -46,32 +50,22 @@ endfunction() add_subdirectory(math) -set(ONLYCPU_OPS - net_op - gather_op - scatter_op) -foreach(src ${ONLYCPU_OPS}) - op_library(${src} SRCS ${src}.cc) -endforeach() - set(DEPS_OPS identity_op minus_op mul_op recurrent_op scale_op) -op_library(identity_op SRCS identity_op.cc DEPS scale_op) -op_library(minus_op SRCS minus_op.cc minus_op.cu DEPS scale_op) -op_library(mul_op SRCS mul_op.cc mul_op.cu DEPS math_function) +op_library(identity_op DEPS scale_op) +op_library(minus_op DEPS scale_op) +op_library(mul_op DEPS math_function) op_library(recurrent_op SRCS recurrent_op.cc rnn/recurrent_op_utils.cc DEPS framework_proto tensor operator net_op) -op_library(scale_op SRCS scale_op.cc scale_op.cu DEPS net_op) +op_library(scale_op DEPS net_op) -list(REMOVE_ITEM GENERAL_OPS - ${ONLYCPU_OPS} - ${DEPS_OPS}) +list(REMOVE_ITEM GENERAL_OPS ${DEPS_OPS}) foreach(src ${GENERAL_OPS}) - op_library(${src} SRCS ${src}.cc ${src}.cu) + op_library(${src}) endforeach() set(GLOB_OP_LIB ${OP_LIBRARY} CACHE INTERNAL "Global OP library") From 42513496f30c137e42b54fab6ce275845349bccf Mon Sep 17 00:00:00 2001 From: Luo Tao <luotao02@baidu.com> Date: Tue, 5 Sep 2017 22:17:24 +0800 Subject: [PATCH 62/72] fix a type error in operator/CMakeLists.txt --- paddle/operators/CMakeLists.txt | 2 +- paddle/operators/add_op.cu | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/paddle/operators/CMakeLists.txt b/paddle/operators/CMakeLists.txt index 99b8e1967f..8a0ff1eb53 100644 --- a/paddle/operators/CMakeLists.txt +++ b/paddle/operators/CMakeLists.txt @@ -20,7 +20,7 @@ function(op_library TARGET) list(APPEND cc_srcs ${TARGET}.cc) endif() if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cu) - list(APPEND cu_srcs ${TARGET}.cc) + list(APPEND cu_srcs ${TARGET}.cu) endif() else() foreach(src ${op_library_SRCS}) diff --git a/paddle/operators/add_op.cu b/paddle/operators/add_op.cu index fdf2c66c7c..d9c6d20a6c 100644 --- a/paddle/operators/add_op.cu +++ b/paddle/operators/add_op.cu @@ -12,8 +12,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -#define EIGEN_USE_GPU -#include "paddle/framework/op_registry.h" #include "paddle/operators/add_op.h" namespace ops = paddle::operators; From dc520da763f258e6ca1c79f79bb82bc55ec4cf14 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Tue, 5 Sep 2017 23:08:21 +0800 Subject: [PATCH 63/72] update doc of softmax_op. --- paddle/operators/softmax_op.cc | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/paddle/operators/softmax_op.cc b/paddle/operators/softmax_op.cc index 40c51a64c4..7d062ad67c 100644 --- a/paddle/operators/softmax_op.cc +++ b/paddle/operators/softmax_op.cc @@ -24,7 +24,7 @@ class SoftmaxOp : public framework::OperatorWithKernel { protected: void InferShape(const framework::InferShapeContext &ctx) const override { PADDLE_ENFORCE(ctx.Input<Tensor>("X")->dims().size() == 2UL, - "The input of softmax op must be matrix"); + "The input of softmax op must be a matrix."); ctx.Output<Tensor>("Y")->Resize(ctx.Input<Tensor>("X")->dims()); } }; @@ -34,9 +34,27 @@ class SoftmaxOpMaker : public framework::OpProtoAndCheckerMaker { SoftmaxOpMaker(framework::OpProto *proto, framework::OpAttrChecker *op_checker) : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("X", "input of softmax"); - AddOutput("Y", "output of softmax"); - AddComment("Softmax Op"); + AddInput("X", + "The input tensor of softmax. " + "2-D with shape [batch_size, input_feature_dimensions]."); + AddOutput("Y", "The normalized values with the same shape as X."); + AddComment(R"DOC( +The input of softmax operator is a 2-D tensor with shape N x K (N is the +batch_size, K is the dimension of input feature). The output tensor has the +same shape as the input tensor. + +For each row of the input tensor, the softmax operator squashes the +K-dimensional vector of arbitrary real values to a K-dimensional vector of real +values in the range [0, 1] that add up to 1. Specifically, it computes the +exponential of the given dimension and the sum of exponential values of all +the other dimensions in the K-dimensional vector input. Then the ratio of the +exponential of the given dimension and the sum of exponential values of all +the other dimensions is the output of the softmax operator. + +For each row `i` and each column `j` in X, we have: + Y[i, j] = exp(X[i, j]) / sum_j(exp(X[i, j])) + +)DOC"); } }; From bc0f9495f019d9f72bf9d6a82f97673c7dce0063 Mon Sep 17 00:00:00 2001 From: fengjiayi <fengjiayi@baidu.com> Date: Tue, 5 Sep 2017 13:43:51 -0700 Subject: [PATCH 64/72] Move two tests form `op_registry_test` to `operator_test` 1. TEST(ProtoMaker, DuplicatedAttr) 2. TEST(ProtoMaker, DuplicatedInOut) --- paddle/framework/op_registry_test.cc | 34 +--------------------------- paddle/framework/operator_test.cc | 34 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/paddle/framework/op_registry_test.cc b/paddle/framework/op_registry_test.cc index 50c45919c5..b43f6a8cc5 100644 --- a/paddle/framework/op_registry_test.cc +++ b/paddle/framework/op_registry_test.cc @@ -174,36 +174,4 @@ TEST(OpRegistry, CustomChecker) { op->Run(scope, dev_ctx); int test_attr = op->GetAttr<int>("test_attr"); ASSERT_EQ(test_attr, 4); -} - -class TestAttrProtoMaker : public pd::OpProtoAndCheckerMaker { - public: - TestAttrProtoMaker(pd::OpProto* proto, pd::OpAttrChecker* op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddAttr<float>("scale", "scale of test op"); - AddAttr<float>("scale", "scale of test op"); - } -}; - -TEST(ProtoMaker, DuplicatedAttr) { - pd::OpProto op_proto; - pd::OpAttrChecker op_checker; - auto proto_maker = TestAttrProtoMaker(&op_proto, &op_checker); - ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); -} - -class TestInOutProtoMaker : public pd::OpProtoAndCheckerMaker { - public: - TestInOutProtoMaker(pd::OpProto* proto, pd::OpAttrChecker* op_checker) - : OpProtoAndCheckerMaker(proto, op_checker) { - AddInput("input", "input of test op"); - AddInput("input", "input of test op"); - } -}; - -TEST(ProtoMaker, DuplicatedInOut) { - pd::OpProto op_proto; - pd::OpAttrChecker op_checker; - auto proto_maker = TestInOutProtoMaker(&op_proto, &op_checker); - ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); -} +} \ No newline at end of file diff --git a/paddle/framework/operator_test.cc b/paddle/framework/operator_test.cc index f7c9e6b196..8a1970c7a8 100644 --- a/paddle/framework/operator_test.cc +++ b/paddle/framework/operator_test.cc @@ -263,4 +263,38 @@ TEST(Operator, Clone) { OperatorClone a("ABC", {}, {}, {}); auto b = a.Clone(); ASSERT_EQ(a.Type(), b->Type()); +} + +class TestAttrProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { + public: + TestAttrProtoMaker(paddle::framework::OpProto* proto, + paddle::framework::OpAttrChecker* op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddAttr<float>("scale", "scale of test op"); + AddAttr<float>("scale", "scale of test op"); + } +}; + +TEST(ProtoMaker, DuplicatedAttr) { + paddle::framework::OpProto op_proto; + paddle::framework::OpAttrChecker op_checker; + auto proto_maker = TestAttrProtoMaker(&op_proto, &op_checker); + ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); +} + +class TestInOutProtoMaker : public paddle::framework::OpProtoAndCheckerMaker { + public: + TestInOutProtoMaker(paddle::framework::OpProto* proto, + paddle::framework::OpAttrChecker* op_checker) + : OpProtoAndCheckerMaker(proto, op_checker) { + AddInput("input", "input of test op"); + AddInput("input", "input of test op"); + } +}; + +TEST(ProtoMaker, DuplicatedInOut) { + paddle::framework::OpProto op_proto; + paddle::framework::OpAttrChecker op_checker; + auto proto_maker = TestInOutProtoMaker(&op_proto, &op_checker); + ASSERT_THROW(proto_maker.Validate(), paddle::platform::EnforceNotMet); } \ No newline at end of file From fd0e1e893f22e1ef27fb9f1e6d12c590d2fcdeea Mon Sep 17 00:00:00 2001 From: fengjiayi <fengjiayi@baidu.com> Date: Tue, 5 Sep 2017 17:42:14 -0700 Subject: [PATCH 65/72] Fix warnings in lookup_op --- paddle/operators/lookup_table_op.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/paddle/operators/lookup_table_op.h b/paddle/operators/lookup_table_op.h index 4da8079b91..877b36cef4 100644 --- a/paddle/operators/lookup_table_op.h +++ b/paddle/operators/lookup_table_op.h @@ -30,12 +30,12 @@ class LookupTableKernel : public framework::OpKernel { auto ids_t = context.Input<Tensor>("Ids"); // int tensor auto output_t = context.Output<Tensor>("Out"); // float tensor - size_t N = table_t->dims()[0]; - size_t D = table_t->dims()[1]; + int N = table_t->dims()[0]; + int D = table_t->dims()[1]; auto ids = ids_t->data<int32_t>(); auto table = table_t->data<T>(); auto output = output_t->mutable_data<T>(context.GetPlace()); - for (size_t i = 0; i < product(ids_t->dims()); ++i) { + for (ssize_t i = 0; i < product(ids_t->dims()); ++i) { PADDLE_ENFORCE_LT(ids[i], N); PADDLE_ENFORCE_GE(ids[i], 0); memcpy(output + i * D, table + ids[i] * D, D * sizeof(T)); @@ -51,8 +51,8 @@ class LookupTableGradKernel : public framework::OpKernel { auto d_output_t = context.Input<Tensor>(framework::GradVarName("Out")); auto d_table_t = context.Output<Tensor>(framework::GradVarName("W")); - size_t N = d_table_t->dims()[0]; - size_t D = d_table_t->dims()[1]; + int N = d_table_t->dims()[0]; + int D = d_table_t->dims()[1]; auto ids = ids_t->data<int32_t>(); const T* d_output = d_output_t->data<T>(); T* d_table = d_table_t->mutable_data<T>(context.GetPlace()); @@ -61,10 +61,10 @@ class LookupTableGradKernel : public framework::OpKernel { t.device(context.GetEigenDevice<platform::CPUPlace>()) = t.constant(static_cast<T>(0)); - for (size_t i = 0; i < product(ids_t->dims()); ++i) { + for (ssize_t i = 0; i < product(ids_t->dims()); ++i) { PADDLE_ENFORCE_LT(ids[i], N); PADDLE_ENFORCE_GE(ids[i], 0); - for (size_t j = 0; j < D; ++j) { + for (int j = 0; j < D; ++j) { d_table[ids[i] * D + j] += d_output[i * D + j]; } } From 5d9478094d8721f312d9fec323920e608ed23e66 Mon Sep 17 00:00:00 2001 From: lispc <lispc@qq.com> Date: Wed, 6 Sep 2017 11:33:16 +0800 Subject: [PATCH 66/72] PyDataProvider2.InputType repr refine style --- python/paddle/trainer/PyDataProvider2.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/paddle/trainer/PyDataProvider2.py b/python/paddle/trainer/PyDataProvider2.py index 033c71cf8f..248da4ae8d 100644 --- a/python/paddle/trainer/PyDataProvider2.py +++ b/python/paddle/trainer/PyDataProvider2.py @@ -87,7 +87,8 @@ class InputType(object): def __repr__(self): """ - Return a human readable representation like 'InputType(dim=25921, seq_type=SequenceType.NO_SEQUENCE, type=DataType.Dense)' + Return a human readable representation like 'InputType(dim=25921, + seq_type=SequenceType.NO_SEQUENCE, type=DataType.Dense)' """ repr_str = type(self).__name__ repr_str += '(' From 11163dfc7a6c1504c42acf77bd48d677d7167941 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 6 Sep 2017 11:54:33 +0800 Subject: [PATCH 67/72] make dim int to int64_t --- paddle/framework/ddim.cc | 64 ++++++++++----------- paddle/framework/ddim.h | 20 +++---- paddle/framework/ddim_test.cc | 4 +- paddle/framework/dim.h | 67 +++++++++++----------- paddle/framework/dim_test.cu | 4 +- paddle/framework/eigen.h | 2 +- paddle/framework/tensor_impl.h | 4 +- paddle/operators/gaussian_random_op.cc | 10 +++- paddle/operators/rnn/recurrent_op_utils.cc | 2 +- paddle/operators/uniform_random_op.cc | 10 +++- paddle/pybind/pybind.cc | 2 +- paddle/pybind/tensor_py.h | 4 +- 12 files changed, 102 insertions(+), 91 deletions(-) diff --git a/paddle/framework/ddim.cc b/paddle/framework/ddim.cc index cfd3e8dfde..85b7de7974 100644 --- a/paddle/framework/ddim.cc +++ b/paddle/framework/ddim.cc @@ -21,16 +21,16 @@ namespace framework { /// @cond HIDDEN template <int i> -Dim<i> make_dim(const int* d) { +Dim<i> make_dim(const int64_t* d) { return Dim<i>(*d, make_dim<i - 1>(d + 1)); } template <> -Dim<1> make_dim<1>(const int* d) { +Dim<1> make_dim<1>(const int64_t* d) { return Dim<1>(*d); } -void make_ddim(DDim& ddim, const int* dims, int n) { +void make_ddim(DDim& ddim, const int64_t* dims, int n) { switch (n) { case 1: ddim = make_dim<1>(dims); @@ -67,13 +67,13 @@ void make_ddim(DDim& ddim, const int* dims, int n) { /// @endcond -DDim make_ddim(std::initializer_list<int> dims) { +DDim make_ddim(std::initializer_list<int64_t> dims) { DDim result(make_dim(0)); make_ddim(result, dims.begin(), dims.size()); return result; } -DDim make_ddim(const std::vector<int>& dims) { +DDim make_ddim(const std::vector<int64_t>& dims) { DDim result(make_dim(0)); make_ddim(result, &dims[0], dims.size()); return result; @@ -81,12 +81,12 @@ DDim make_ddim(const std::vector<int>& dims) { /// @cond HIDDEN // XXX For some reason, putting this in an anonymous namespace causes errors -class DynamicMutableIndexer : public boost::static_visitor<int&> { +class DynamicMutableIndexer : public boost::static_visitor<int64_t&> { public: explicit DynamicMutableIndexer(int idx) : idx_(idx) {} template <int D> - int& operator()(Dim<D>& dim) const { + int64_t& operator()(Dim<D>& dim) const { return dim[idx_]; } @@ -94,12 +94,12 @@ class DynamicMutableIndexer : public boost::static_visitor<int&> { int idx_; }; -class DynamicConstIndexer : public boost::static_visitor<int> { +class DynamicConstIndexer : public boost::static_visitor<int64_t> { public: explicit DynamicConstIndexer(int idx) : idx_(idx) {} template <int D> - int operator()(const Dim<D>& dim) const { + int64_t operator()(const Dim<D>& dim) const { return dim[idx_]; } @@ -109,22 +109,22 @@ class DynamicConstIndexer : public boost::static_visitor<int> { /// @endcond -int& DDim::operator[](int idx) { +int64_t& DDim::operator[](int idx) { return boost::apply_visitor(DynamicMutableIndexer(idx), var); } -int DDim::operator[](int idx) const { +int64_t DDim::operator[](int idx) const { return boost::apply_visitor(DynamicConstIndexer(idx), var); } -ssize_t DDim::size() const { return arity(*this); } +int64_t DDim::size() const { return arity(*this); } bool DDim::operator==(DDim d) const { if (var.which() != d.getVar().which()) { return false; } else { - std::vector<int> v1 = vectorize(*this); - std::vector<int> v2 = vectorize(d); + std::vector<int64_t> v1 = vectorize(*this); + std::vector<int64_t> v2 = vectorize(d); for (unsigned int i = 0; i < v1.size(); i++) { if (v1[i] != v2[i]) { @@ -139,10 +139,10 @@ bool DDim::operator==(DDim d) const { bool DDim::operator!=(DDim d) const { return !(*this == d); } DDim DDim::operator+(DDim d) const { - std::vector<int> v1 = vectorize(*this); - std::vector<int> v2 = vectorize(d); + std::vector<int64_t> v1 = vectorize(*this); + std::vector<int64_t> v2 = vectorize(d); - std::vector<int> v3; + std::vector<int64_t> v3; assert(v1.size() == v2.size()); @@ -154,10 +154,10 @@ DDim DDim::operator+(DDim d) const { } DDim DDim::operator*(DDim d) const { - std::vector<int> v1 = vectorize(*this); - std::vector<int> v2 = vectorize(d); + std::vector<int64_t> v1 = vectorize(*this); + std::vector<int64_t> v2 = vectorize(d); - std::vector<int> v3; + std::vector<int64_t> v3; assert(v1.size() == v2.size()); @@ -168,15 +168,15 @@ DDim DDim::operator*(DDim d) const { return make_ddim(v3); } -int get(const DDim& ddim, int idx) { return ddim[idx]; } +int64_t get(const DDim& ddim, int idx) { return ddim[idx]; } void set(DDim& ddim, int idx, int value) { ddim[idx] = value; } /// @cond HIDDEN struct VectorizeVisitor : public boost::static_visitor<> { - std::vector<int>& vector; + std::vector<int64_t>& vector; - explicit VectorizeVisitor(std::vector<int>& v) : vector(v) {} + explicit VectorizeVisitor(std::vector<int64_t>& v) : vector(v) {} template <typename T> void operator()(const T& t) { @@ -188,31 +188,31 @@ struct VectorizeVisitor : public boost::static_visitor<> { }; /// @endcond -std::vector<int> vectorize(const DDim& ddim) { - std::vector<int> result; +std::vector<int64_t> vectorize(const DDim& ddim) { + std::vector<int64_t> result; VectorizeVisitor visitor(result); boost::apply_visitor(visitor, ddim); return result; } -struct ProductVisitor : public boost::static_visitor<ssize_t> { +struct ProductVisitor : public boost::static_visitor<int64_t> { template <int D> - ssize_t operator()(const Dim<D>& dim) { + int64_t operator()(const Dim<D>& dim) { return product(dim); } }; -ssize_t product(const DDim& ddim) { +int64_t product(const DDim& ddim) { ProductVisitor visitor; return boost::apply_visitor(visitor, ddim); } struct SliceVectorizeVisitor : public boost::static_visitor<> { - std::vector<int>& vector; + std::vector<int64_t>& vector; int begin; int end; - SliceVectorizeVisitor(std::vector<int>& v, int b, int e) + SliceVectorizeVisitor(std::vector<int64_t>& v, int b, int e) : vector(v), begin(b), end(e) { PADDLE_ENFORCE(begin < end, "Begin index must be less than end index in ddim slice."); @@ -240,7 +240,7 @@ struct SliceVectorizeVisitor : public boost::static_visitor<> { }; DDim slice_ddim(const DDim& dim, int begin, int end) { - std::vector<int> vec; + std::vector<int64_t> vec; vec.reserve(end - begin); SliceVectorizeVisitor visitor(vec, begin, end); boost::apply_visitor(visitor, dim); @@ -280,7 +280,7 @@ std::ostream& operator<<(std::ostream& os, const DDim& ddim) { return os; } -DDim::DDim(std::initializer_list<int> init_list) { +DDim::DDim(std::initializer_list<int64_t> init_list) { *this = make_ddim(init_list); } } // namespace framework diff --git a/paddle/framework/ddim.h b/paddle/framework/ddim.h index 95f294b627..db30c52394 100644 --- a/paddle/framework/ddim.h +++ b/paddle/framework/ddim.h @@ -40,7 +40,7 @@ struct DDim { template <int D> explicit DDim(const Dim<D>& in) : var(in) {} - /*implicit*/ DDim(std::initializer_list<int> init_list); + /*implicit*/ DDim(std::initializer_list<int64_t> init_list); template <int D> DDim& operator=(const Dim<D>& in) { @@ -48,8 +48,8 @@ struct DDim { return *this; } - int& operator[](int idx); - int operator[](int idx) const; + int64_t& operator[](int idx); + int64_t operator[](int idx) const; template <typename Visitor> typename Visitor::result_type apply_visitor(Visitor& visitor) { @@ -71,15 +71,15 @@ struct DDim { DDim operator*(DDim d) const; - ssize_t size() const; + int64_t size() const; }; /** - * \brief Make a DDim from std::vector<int> + * \brief Make a DDim from std::vector<int64_t> * * \param dims An vector of ints. Must be sized between [1, 9] */ -DDim make_ddim(const std::vector<int>& dims); +DDim make_ddim(const std::vector<int64_t>& dims); /** * \brief Make a DDim from an initializer list @@ -87,14 +87,14 @@ DDim make_ddim(const std::vector<int>& dims); * \param dims An initializer list of ints. Must be sized between [1, 9] * */ -DDim make_ddim(std::initializer_list<int> dims); +DDim make_ddim(std::initializer_list<int64_t> dims); -int get(const DDim& dim, int idx); +int64_t get(const DDim& dim, int idx); void set(DDim& dim, int idx, int val); -std::vector<int> vectorize(const DDim& ddim); +std::vector<int64_t> vectorize(const DDim& ddim); -ssize_t product(const DDim& ddim); +int64_t product(const DDim& ddim); /** * \brief Slice a ddim diff --git a/paddle/framework/ddim_test.cc b/paddle/framework/ddim_test.cc index 9d18a2972c..756232b1b5 100644 --- a/paddle/framework/ddim_test.cc +++ b/paddle/framework/ddim_test.cc @@ -12,7 +12,7 @@ TEST(DDim, Equality) { EXPECT_EQ(ddim[2], 5); // construct a DDim from a vector - std::vector<int> vec({9, 1, 5}); + std::vector<int64_t> vec({9, 1, 5}); paddle::framework::DDim vddim = paddle::framework::make_ddim(vec); EXPECT_EQ(ddim[0], 9); EXPECT_EQ(ddim[1], 1); @@ -25,7 +25,7 @@ TEST(DDim, Equality) { EXPECT_EQ(paddle::framework::get(ddim, 0), 6); // vectorize a DDim - std::vector<int> res_vec = paddle::framework::vectorize(vddim); + std::vector<int64_t> res_vec = paddle::framework::vectorize(vddim); EXPECT_EQ(res_vec[0], 9); EXPECT_EQ(res_vec[1], 1); EXPECT_EQ(res_vec[2], 5); diff --git a/paddle/framework/dim.h b/paddle/framework/dim.h index 883fdc55eb..04d4b0e604 100644 --- a/paddle/framework/dim.h +++ b/paddle/framework/dim.h @@ -17,13 +17,13 @@ struct Dim { static constexpr int dimensions = i; template <typename... Args> - HOSTDEVICE Dim(int _head, Args... _tail) : head(_head), tail(_tail...) { + HOSTDEVICE Dim(int64_t _head, Args... _tail) : head(_head), tail(_tail...) { static_assert(sizeof...(_tail) == i - 1, "Dim initialized with the wrong number of parameters"); } HOSTDEVICE - Dim(int _head, const Dim<i - 1>& _tail) : head(_head), tail(_tail) {} + Dim(int64_t _head, const Dim<i - 1>& _tail) : head(_head), tail(_tail) {} HOSTDEVICE Dim() : head(0), tail() {} @@ -31,12 +31,12 @@ struct Dim { /** Construct a Dim from a linear index and size. Uses Fortran order * indexing. */ HOSTDEVICE - Dim(int idx, const Dim<i>& size) + Dim(int64_t idx, const Dim<i>& size) : head(idx % size.head), tail(idx / size.head, size.tail) {} /** Construct a Dim with each dimension set to the given index */ HOSTDEVICE - Dim(int idx) : head(idx), tail(idx) {} + Dim(int64_t idx) : head(idx), tail(idx) {} HOSTDEVICE bool operator==(const Dim<i>& o) const { @@ -47,13 +47,13 @@ struct Dim { bool operator!=(const Dim<i>& o) const { return !(*this == o); } HOSTDEVICE - int& operator[](int idx); + int64_t& operator[](int idx); HOSTDEVICE - int operator[](int idx) const; + int64_t operator[](int idx) const; HOST std::string to_string() const; - int head; + int64_t head; Dim<i - 1> tail; }; @@ -63,7 +63,7 @@ struct Dim<1> { static constexpr int dimensions = 1; HOSTDEVICE - Dim(int _head) : head(_head) {} + Dim(int64_t _head) : head(_head) {} HOSTDEVICE Dim() : head(0) {} @@ -86,11 +86,11 @@ struct Dim<1> { bool operator!=(const Dim<1>& o) const { return !(*this == o); } HOSTDEVICE - int& operator[](int idx); + int64_t& operator[](int idx); HOSTDEVICE - int operator[](int idx) const; + int64_t operator[](int idx) const; - int head; + int64_t head; }; namespace { @@ -100,12 +100,12 @@ template <int i> struct DimGetter { // Return a copy if Dim is const template <typename D> - HOSTDEVICE static int impl(const D& d) { + HOSTDEVICE static int64_t impl(const D& d) { return DimGetter<i - 1>::impl(d.tail); } // Return a reference if Dim is mutable template <typename D> - HOSTDEVICE static int& impl(D& d) { + HOSTDEVICE static int64_t& impl(D& d) { return DimGetter<i - 1>::impl(d.tail); } }; @@ -115,18 +115,18 @@ template <> struct DimGetter<0> { // Return a copy if Dim is const template <typename D> - HOSTDEVICE static int impl(const D& d) { + HOSTDEVICE static int64_t impl(const D& d) { return d.head; } // Return a reference if Dim is mutable template <typename D> - HOSTDEVICE static int& impl(D& d) { + HOSTDEVICE static int64_t& impl(D& d) { return d.head; } }; template <int D> -HOSTDEVICE int& indexer(Dim<D>& dim, int idx) { +HOSTDEVICE int64_t& indexer(Dim<D>& dim, int idx) { #ifndef __CUDA_ARCH__ if (idx < 0) { throw std::invalid_argument("Tried to access a negative dimension"); @@ -141,7 +141,7 @@ HOSTDEVICE int& indexer(Dim<D>& dim, int idx) { } template <> -HOSTDEVICE int& indexer<1>(Dim<1>& dim, int idx) { +HOSTDEVICE int64_t& indexer<1>(Dim<1>& dim, int idx) { #ifndef __CUDA_ARCH__ if (idx != 0) { throw std::invalid_argument("Invalid index"); @@ -153,7 +153,7 @@ HOSTDEVICE int& indexer<1>(Dim<1>& dim, int idx) { } template <int D> -HOSTDEVICE int indexer(const Dim<D>& dim, int idx) { +HOSTDEVICE int64_t indexer(const Dim<D>& dim, int idx) { #ifndef __CUDA_ARCH__ if (idx < 0) { throw std::invalid_argument("Tried to access a negative dimension"); @@ -168,7 +168,7 @@ HOSTDEVICE int indexer(const Dim<D>& dim, int idx) { } template <> -HOSTDEVICE int indexer<1>(const Dim<1>& dim, int idx) { +HOSTDEVICE int64_t indexer<1>(const Dim<1>& dim, int idx) { #ifndef __CUDA_ARCH__ if (idx != 0) { throw std::invalid_argument("Invalid index"); @@ -182,73 +182,76 @@ HOSTDEVICE int indexer<1>(const Dim<1>& dim, int idx) { } // namespace // Static access to constant Dim template <int i, int l> -HOSTDEVICE int get(const Dim<l>& d) { +HOSTDEVICE int64_t get(const Dim<l>& d) { return DimGetter<i>::impl(d); } // Static access to mutable Dim template <int i, int l> -HOSTDEVICE int& get(Dim<l>& d) { +HOSTDEVICE int64_t& get(Dim<l>& d) { return DimGetter<i>::impl(d); } // Dynamic access to constant Dim template <int l> -HOSTDEVICE int Dim<l>::operator[](int i) const { +HOSTDEVICE int64_t Dim<l>::operator[](int i) const { return indexer(*this, i); } // Dynamic access to mutable Dim template <int l> -HOSTDEVICE int& Dim<l>::operator[](int i) { +HOSTDEVICE int64_t& Dim<l>::operator[](int i) { return indexer(*this, i); } // Dynamic access to constant Dim -inline HOSTDEVICE int Dim<1>::operator[](int i) const { +inline HOSTDEVICE int64_t Dim<1>::operator[](int i) const { return indexer(*this, i); } // Dynamic access to mutable Dim -inline HOSTDEVICE int& Dim<1>::operator[](int i) { return indexer(*this, i); } +inline HOSTDEVICE int64_t& Dim<1>::operator[](int i) { + return indexer(*this, i); +} // Dynamic access to constant Dim // without std::enable_if will try to instantiate this on get<0>(d) template <int l> -HOSTDEVICE typename std::enable_if<(l > 0), int>::type get(const Dim<l>& d, - int i) { +HOSTDEVICE typename std::enable_if<(l > 0), int64_t>::type get(const Dim<l>& d, + int i) { return d[i]; } // Dynamic access to mutable Dim template <int l> -HOSTDEVICE typename std::enable_if<(l > 0), int&>::type get(Dim<l>& d, int i) { +HOSTDEVICE typename std::enable_if<(l > 0), int64_t&>::type get(Dim<l>& d, + int i) { return d[i]; } // Dot product of two dims template <int i> -HOSTDEVICE int linearize(const Dim<i>& a, const Dim<i>& b) { +HOSTDEVICE int64_t linearize(const Dim<i>& a, const Dim<i>& b) { return a.head * b.head + linearize(a.tail, b.tail); } // Base case dot product of two Dims // Notice it is inline because it is no longer a template template <> -HOSTDEVICE inline int linearize(const Dim<1>& a, const Dim<1>& b) { +HOSTDEVICE inline int64_t linearize(const Dim<1>& a, const Dim<1>& b) { return a.head * b.head; } // Product of a Dim template <int i> -HOSTDEVICE int product(const Dim<i>& a, int prod = 1) { +HOSTDEVICE int64_t product(const Dim<i>& a, int prod = 1) { return prod * a.head * product(a.tail); } // Base case product of a Dim // Notice it is inline because it is no longer a template template <> -HOSTDEVICE inline int product(const Dim<1>& a, int prod) { +HOSTDEVICE inline int64_t product(const Dim<1>& a, int prod) { return prod * a.head; } diff --git a/paddle/framework/dim_test.cu b/paddle/framework/dim_test.cu index 3898d0a447..f42b1eeadf 100644 --- a/paddle/framework/dim_test.cu +++ b/paddle/framework/dim_test.cu @@ -47,9 +47,9 @@ TEST(Dim, Equality) { EXPECT_EQ(b[1], 11); // dynamic access on GPU - thrust::device_vector<int> r(1); + thrust::device_vector<int64_t> r(1); dyn_idx_gpu<<<1, 1>>>(thrust::raw_pointer_cast(r.data())); - int res = r[0]; + int64_t res = r[0]; EXPECT_EQ(res, 6); // ex_prefix_mul diff --git a/paddle/framework/eigen.h b/paddle/framework/eigen.h index a4667cc51f..2d8d9ae10c 100644 --- a/paddle/framework/eigen.h +++ b/paddle/framework/eigen.h @@ -28,7 +28,7 @@ struct EigenDim { static Type From(const DDim& dims) { PADDLE_ENFORCE(arity(dims) == D, "D must match arity(DDim)"); Type ret; - for (int d = 0; d < arity(dims); d++) { + for (int64_t d = 0; d < arity(dims); d++) { ret[d] = dims[d]; } return ret; diff --git a/paddle/framework/tensor_impl.h b/paddle/framework/tensor_impl.h index 7893e233b7..94f436294f 100644 --- a/paddle/framework/tensor_impl.h +++ b/paddle/framework/tensor_impl.h @@ -58,7 +58,7 @@ inline T* Tensor::mutable_data(platform::Place place) { "Tensor's numel must be larger than zero to call " "Tensor::mutable_data. Call Tensor::set_dim first."); /* some versions of boost::variant don't have operator!= */ - size_t size = product(dims_) * sizeof(T); + int64_t size = product(dims_) * sizeof(T); if (holder_ == nullptr || !(holder_->place() == place) || holder_->size() < size + offset_) { if (platform::is_cpu_place(place)) { @@ -131,7 +131,7 @@ inline Tensor Tensor::Slice(const int& begin_idx, const int& end_idx) const { PADDLE_ENFORCE_LT(begin_idx, end_idx, "Begin index must be less than end index."); PADDLE_ENFORCE_NE(dims_[0], 1, "Can not slice a tensor with dims_[0] = 1."); - int base = product(dims_) / dims_[0]; + size_t base = product(dims_) / dims_[0]; Tensor dst; dst.holder_ = holder_; DDim dst_dims = dims_; diff --git a/paddle/operators/gaussian_random_op.cc b/paddle/operators/gaussian_random_op.cc index 056447901d..583c9e5774 100644 --- a/paddle/operators/gaussian_random_op.cc +++ b/paddle/operators/gaussian_random_op.cc @@ -31,8 +31,8 @@ class CPUGaussianRandomKernel : public framework::OpKernel { } engine.seed(seed); std::normal_distribution<T> dist(mean, std); - ssize_t size = framework::product(tensor->dims()); - for (ssize_t i = 0; i < size; ++i) { + int64_t size = framework::product(tensor->dims()); + for (int64_t i = 0; i < size; ++i) { data[i] = dist(engine); } } @@ -46,9 +46,13 @@ class GaussianRandomOp : public framework::OperatorWithKernel { void InferShape(const framework::InferShapeContext& context) const override { auto* tensor = context.Output<framework::Tensor>("Out"); auto dims = GetAttr<std::vector<int>>("dims"); + std::vector<int64_t> temp(dims.size()); + for (auto dim : dims) { + temp.push_back(static_cast<int64_t>(dim)); + } PADDLE_ENFORCE(dims.size() > 0UL, "dims can be one int or array. dims must be set."); - tensor->Resize(framework::make_ddim(dims)); + tensor->Resize(framework::make_ddim(temp)); } }; diff --git a/paddle/operators/rnn/recurrent_op_utils.cc b/paddle/operators/rnn/recurrent_op_utils.cc index a9b65c30f2..69e723b401 100644 --- a/paddle/operators/rnn/recurrent_op_utils.cc +++ b/paddle/operators/rnn/recurrent_op_utils.cc @@ -61,7 +61,7 @@ void ConcatOutputs(const std::vector<Scope*>& step_scopes, PADDLE_ENFORCE(step_scope_var != nullptr, "%s not in scope", outlinks[i].internal); f::DDim step_dims = step_scope_var->template GetMutable<Tensor>()->dims(); - std::vector<int> dims_vec = vectorize(step_dims); + std::vector<int64_t> dims_vec = vectorize(step_dims); dims_vec.insert(dims_vec.begin(), seq_len); output->Resize(f::make_ddim(dims_vec)); } else { diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index 2d943c4508..3241d4289a 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -35,8 +35,8 @@ class CPUUniformRandomKernel : public framework::OpKernel { std::uniform_real_distribution<T> dist( static_cast<T>(context.GetAttr<float>("min")), static_cast<T>(context.GetAttr<float>("max"))); - ssize_t size = framework::product(tensor->dims()); - for (ssize_t i = 0; i < size; ++i) { + int64_t size = framework::product(tensor->dims()); + for (int64_t i = 0; i < size; ++i) { data[i] = dist(engine); } } @@ -52,7 +52,11 @@ class UniformRandomOp : public framework::OperatorWithKernel { "uniform_random's min must less then max"); auto* tensor = ctx.Output<framework::Tensor>("Out"); auto dims = GetAttr<std::vector<int>>("dims"); - tensor->Resize(framework::make_ddim(dims)); + std::vector<int64_t> temp(dims.size()); + for (auto dim : dims) { + temp.push_back(static_cast<int64_t>(dim)); + } + tensor->Resize(framework::make_ddim(temp)); } }; diff --git a/paddle/pybind/pybind.cc b/paddle/pybind/pybind.cc index 6896422617..7db629a68f 100644 --- a/paddle/pybind/pybind.cc +++ b/paddle/pybind/pybind.cc @@ -76,7 +76,7 @@ PYBIND11_PLUGIN(core) { .def("get_dims", [](const Tensor &self) { return vectorize(self.dims()); }) .def("set_dims", - [](Tensor &self, const std::vector<int> &dim) { + [](Tensor &self, const std::vector<int64_t> &dim) { self.Resize(make_ddim(dim)); }) .def("alloc_float", diff --git a/paddle/pybind/tensor_py.h b/paddle/pybind/tensor_py.h index 39ba60b4dc..95171acf72 100644 --- a/paddle/pybind/tensor_py.h +++ b/paddle/pybind/tensor_py.h @@ -85,7 +85,7 @@ void PyCPUTensorSetFromArray( framework::Tensor &self, py::array_t<T, py::array::c_style | py::array::forcecast> array, paddle::platform::CPUPlace &place) { - std::vector<int> dims; + std::vector<int64_t> dims; dims.reserve(array.ndim()); for (size_t i = 0; i < array.ndim(); ++i) { dims.push_back((int)array.shape()[i]); @@ -102,7 +102,7 @@ void PyCUDATensorSetFromArray( framework::Tensor &self, py::array_t<T, py::array::c_style | py::array::forcecast> array, paddle::platform::GPUPlace &place) { - std::vector<int> dims; + std::vector<int64_t> dims; dims.reserve(array.ndim()); for (size_t i = 0; i < array.ndim(); ++i) { dims.push_back((int)array.shape()[i]); From 857cd24a35bef9c182292ca709fe1dd9d0e52e19 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 6 Sep 2017 12:18:23 +0800 Subject: [PATCH 68/72] fix dim_test.cu bug --- paddle/framework/dim_test.cu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paddle/framework/dim_test.cu b/paddle/framework/dim_test.cu index f42b1eeadf..0a6a87669c 100644 --- a/paddle/framework/dim_test.cu +++ b/paddle/framework/dim_test.cu @@ -8,7 +8,7 @@ __global__ void test(paddle::framework::Dim<2>* o) { o[0] = paddle::framework::make_dim(5, 6); } -__global__ void dyn_idx_gpu(int* o) { +__global__ void dyn_idx_gpu(int64_t* o) { auto d = paddle::framework::make_dim(5, 6); o[0] = d[1]; } From a5f1e6d6bdd094253cd6f47bc7bbefb1fbc3b1e4 Mon Sep 17 00:00:00 2001 From: Xinghai Sun <sunxinghai1216@gmail.com> Date: Wed, 6 Sep 2017 12:58:00 +0800 Subject: [PATCH 69/72] Update cos_sim operator by following reviewer's comments. --- paddle/operators/cos_sim_op.cc | 4 +- paddle/operators/cos_sim_op.h | 97 ++++++++++--------- .../v2/framework/tests/test_cos_sim_op.py | 38 +++++--- 3 files changed, 76 insertions(+), 63 deletions(-) diff --git a/paddle/operators/cos_sim_op.cc b/paddle/operators/cos_sim_op.cc index 3760d0b161..c033af3b74 100644 --- a/paddle/operators/cos_sim_op.cc +++ b/paddle/operators/cos_sim_op.cc @@ -90,8 +90,8 @@ class CosSimOpGrad : public framework::OperatorWithKernel { auto *x_grad = ctx.Output<Tensor>(framework::GradVarName("X")); auto *y_grad = ctx.Output<Tensor>(framework::GradVarName("Y")); - x_grad->Resize(x_dims); - y_grad->Resize(y_dims); + if (x_grad) x_grad->Resize(x_dims); + if (y_grad) y_grad->Resize(y_dims); } }; diff --git a/paddle/operators/cos_sim_op.h b/paddle/operators/cos_sim_op.h index 69d35d8bc2..9e3ff26815 100644 --- a/paddle/operators/cos_sim_op.h +++ b/paddle/operators/cos_sim_op.h @@ -28,30 +28,30 @@ template <typename Place, typename T> class CosSimKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto* x = context.Input<Tensor>("X"); - auto* y = context.Input<Tensor>("Y"); - auto* z = context.Output<Tensor>("Out"); - auto* x_norm = context.Output<Tensor>("XNorm"); - auto* y_norm = context.Output<Tensor>("YNorm"); + auto* input_x = context.Input<Tensor>("X"); + auto* input_y = context.Input<Tensor>("Y"); + auto* output_z = context.Output<Tensor>("Out"); + auto* output_x_norm = context.Output<Tensor>("XNorm"); + auto* output_y_norm = context.Output<Tensor>("YNorm"); - z->mutable_data<T>(context.GetPlace()); - x_norm->mutable_data<T>(context.GetPlace()); - y_norm->mutable_data<T>(context.GetPlace()); + output_z->mutable_data<T>(context.GetPlace()); + output_x_norm->mutable_data<T>(context.GetPlace()); + output_y_norm->mutable_data<T>(context.GetPlace()); - auto dims = x->dims(); + auto dims = input_x->dims(); int size = static_cast<int>(framework::product(dims)); auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); - auto X = EigenMatrix<T>::From(*x, new_dims); - auto Y = EigenMatrix<T>::From(*y, new_dims); - auto Z = EigenMatrix<T>::From(*z); - auto XNorm = EigenMatrix<T>::From(*x_norm); - auto YNorm = EigenMatrix<T>::From(*y_norm); + auto x = EigenMatrix<T>::From(*input_x, new_dims); + auto y = EigenMatrix<T>::From(*input_y, new_dims); + auto z = EigenMatrix<T>::From(*output_z); + auto x_norm = EigenMatrix<T>::From(*output_x_norm); + auto y_norm = EigenMatrix<T>::From(*output_y_norm); auto place = context.GetEigenDevice<Place>(); - auto XY = (X * Y).sum(Eigen::array<int, 1>({1})); - XNorm.device(place) = (X * X).sum(Eigen::array<int, 1>({1})).sqrt(); - YNorm.device(place) = (Y * Y).sum(Eigen::array<int, 1>({1})).sqrt(); - Z.device(place) = XY / XNorm / YNorm; + auto xy = (x * y).sum(Eigen::array<int, 1>({1})); + x_norm.device(place) = x.square().sum(Eigen::array<int, 1>({1})).sqrt(); + y_norm.device(place) = y.square().sum(Eigen::array<int, 1>({1})).sqrt(); + z.device(place) = xy / x_norm / y_norm; } }; @@ -59,41 +59,44 @@ template <typename Place, typename T> class CosSimGradKernel : public framework::OpKernel { public: void Compute(const framework::ExecutionContext& context) const override { - auto* x = context.Input<Tensor>("X"); - auto* y = context.Input<Tensor>("Y"); - auto* z = context.Input<Tensor>("Out"); - auto* x_norm = context.Input<Tensor>("XNorm"); - auto* y_norm = context.Input<Tensor>("YNorm"); - auto* grad_x = context.Output<Tensor>(framework::GradVarName("X")); - auto* grad_y = context.Output<Tensor>(framework::GradVarName("Y")); - auto* grad_z = context.Input<Tensor>(framework::GradVarName("Out")); + auto* input_x = context.Input<Tensor>("X"); + auto* input_y = context.Input<Tensor>("Y"); + auto* input_z = context.Input<Tensor>("Out"); + auto* input_x_norm = context.Input<Tensor>("XNorm"); + auto* input_y_norm = context.Input<Tensor>("YNorm"); + auto* output_grad_x = context.Output<Tensor>(framework::GradVarName("X")); + auto* output_grad_y = context.Output<Tensor>(framework::GradVarName("Y")); + auto* input_grad_z = context.Input<Tensor>(framework::GradVarName("Out")); - grad_x->mutable_data<T>(context.GetPlace()); - grad_y->mutable_data<T>(context.GetPlace()); - - auto dims = x->dims(); + auto dims = input_x->dims(); int size = static_cast<int>(framework::product(dims)); auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); - auto X = EigenMatrix<T>::From(*x, new_dims); - auto Y = EigenMatrix<T>::From(*y, new_dims); - auto Z = EigenMatrix<T>::From(*z); - auto X_norm = EigenMatrix<T>::From(*x_norm); - auto Y_norm = EigenMatrix<T>::From(*y_norm); - auto dX = EigenMatrix<T>::From(*grad_x, new_dims); - auto dY = EigenMatrix<T>::From(*grad_y, new_dims); - auto dZ = EigenMatrix<T>::From(*grad_z); + auto x = EigenMatrix<T>::From(*input_x, new_dims); + auto y = EigenMatrix<T>::From(*input_y, new_dims); + auto z = EigenMatrix<T>::From(*input_z); + auto x_norm = EigenMatrix<T>::From(*input_x_norm); + auto y_norm = EigenMatrix<T>::From(*input_y_norm); + auto dz = EigenMatrix<T>::From(*input_grad_z); Eigen::DSizes<int, 2> bcast(1, new_dims[1]); - auto Z_bcast = Z.broadcast(bcast); - auto dZ_bcast = dZ.broadcast(bcast); + auto z_bcast = z.broadcast(bcast); + auto dz_bcast = dz.broadcast(bcast); auto place = context.GetEigenDevice<Place>(); - auto X_snorm_bcast = X_norm.square().eval().broadcast(bcast); - auto Y_snorm_bcast = Y_norm.square().eval().broadcast(bcast); - auto norm_prod_bcast = (X_norm * Y_norm).eval().broadcast(bcast); - dX.device(place) = - dZ_bcast * (Y / norm_prod_bcast - Z_bcast * X / X_snorm_bcast); - dY.device(place) = - dZ_bcast * (X / norm_prod_bcast - Z_bcast * Y / Y_snorm_bcast); + auto x_snorm_bcast = x_norm.square().eval().broadcast(bcast); + auto y_snorm_bcast = y_norm.square().eval().broadcast(bcast); + auto norm_prod_bcast = (x_norm * y_norm).eval().broadcast(bcast); + if (output_grad_x) { + output_grad_x->mutable_data<T>(context.GetPlace()); + auto dx = EigenMatrix<T>::From(*output_grad_x, new_dims); + dx.device(place) = + dz_bcast * (y / norm_prod_bcast - z_bcast * x / x_snorm_bcast); + } + if (output_grad_y) { + output_grad_y->mutable_data<T>(context.GetPlace()); + auto dy = EigenMatrix<T>::From(*output_grad_y, new_dims); + dy.device(place) = + dz_bcast * (x / norm_prod_bcast - z_bcast * y / y_snorm_bcast); + } } }; diff --git a/python/paddle/v2/framework/tests/test_cos_sim_op.py b/python/paddle/v2/framework/tests/test_cos_sim_op.py index a19be47f76..32013a7999 100644 --- a/python/paddle/v2/framework/tests/test_cos_sim_op.py +++ b/python/paddle/v2/framework/tests/test_cos_sim_op.py @@ -24,26 +24,36 @@ class TestCosSimOp(unittest.TestCase): } -class CosSimGradOpTest(GradientChecker): - def test_cos_sim_2d(self): - op = create_op("cos_sim") - inputs = { +class TestCosSimGradOp(GradientChecker): + def setUp(self): + self.op = create_op("cos_sim") + self.inputs = { 'X': np.random.random((10, 5)).astype("float32"), 'Y': np.random.random((10, 5)).astype("float32") } - self.compare_grad(op, inputs) + + def test_cpu_gpu_compare(self): + self.compare_grad(self.op, self.inputs) + + def test_normal(self): self.check_grad( - op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.05) + self.op, self.inputs, ["X", "Y"], "Out", max_relative_error=0.05) - def test_cos_sim_3d(self): - op = create_op("cos_sim") - inputs = { - 'X': np.random.random((10, 5, 2)).astype("float32"), - 'Y': np.random.random((10, 5, 2)).astype("float32") - } - self.compare_grad(op, inputs) + def test_ignore_x(self): + self.check_grad( + self.op, + self.inputs, ["Y"], + "Out", + max_relative_error=0.05, + no_grad_set={"X"}) + + def test_ignore_y(self): self.check_grad( - op, inputs, set(["X", "Y"]), "Out", max_relative_error=0.05) + self.op, + self.inputs, ["X"], + "Out", + max_relative_error=0.05, + no_grad_set={"Y"}) if __name__ == '__main__': From 52f2bc1f9d84a05f1c73428124a1235fb141f193 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 6 Sep 2017 13:34:01 +0800 Subject: [PATCH 70/72] fix vector size error --- paddle/operators/gaussian_random_op.cc | 3 ++- paddle/operators/uniform_random_op.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/paddle/operators/gaussian_random_op.cc b/paddle/operators/gaussian_random_op.cc index 583c9e5774..8bb61275ba 100644 --- a/paddle/operators/gaussian_random_op.cc +++ b/paddle/operators/gaussian_random_op.cc @@ -46,7 +46,8 @@ class GaussianRandomOp : public framework::OperatorWithKernel { void InferShape(const framework::InferShapeContext& context) const override { auto* tensor = context.Output<framework::Tensor>("Out"); auto dims = GetAttr<std::vector<int>>("dims"); - std::vector<int64_t> temp(dims.size()); + std::vector<int64_t> temp; + temp.reserve(dims.size()); for (auto dim : dims) { temp.push_back(static_cast<int64_t>(dim)); } diff --git a/paddle/operators/uniform_random_op.cc b/paddle/operators/uniform_random_op.cc index 3241d4289a..40cef8942a 100644 --- a/paddle/operators/uniform_random_op.cc +++ b/paddle/operators/uniform_random_op.cc @@ -52,7 +52,8 @@ class UniformRandomOp : public framework::OperatorWithKernel { "uniform_random's min must less then max"); auto* tensor = ctx.Output<framework::Tensor>("Out"); auto dims = GetAttr<std::vector<int>>("dims"); - std::vector<int64_t> temp(dims.size()); + std::vector<int64_t> temp; + temp.reserve(dims.size()); for (auto dim : dims) { temp.push_back(static_cast<int64_t>(dim)); } From 1e419d9ed3610c95b518982a026666ea3f699f27 Mon Sep 17 00:00:00 2001 From: qijun <qijun1994@hotmail.com> Date: Wed, 6 Sep 2017 17:24:47 +0800 Subject: [PATCH 71/72] fix clang build and run error --- paddle/operators/cos_sim_op.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/paddle/operators/cos_sim_op.h b/paddle/operators/cos_sim_op.h index 9e3ff26815..9e2bcebe3b 100644 --- a/paddle/operators/cos_sim_op.h +++ b/paddle/operators/cos_sim_op.h @@ -23,6 +23,9 @@ using Tensor = framework::Tensor; template <typename T, int MajorType = Eigen::RowMajor, typename IndexType = Eigen::DenseIndex> using EigenMatrix = framework::EigenMatrix<T, MajorType, IndexType>; +template <typename T, int MajorType = Eigen::RowMajor, + typename IndexType = Eigen::DenseIndex> +using EigenVector = framework::EigenVector<T, MajorType, IndexType>; template <typename Place, typename T> class CosSimKernel : public framework::OpKernel { @@ -43,14 +46,14 @@ class CosSimKernel : public framework::OpKernel { auto new_dims = framework::make_ddim({dims[0], size / dims[0]}); auto x = EigenMatrix<T>::From(*input_x, new_dims); auto y = EigenMatrix<T>::From(*input_y, new_dims); - auto z = EigenMatrix<T>::From(*output_z); - auto x_norm = EigenMatrix<T>::From(*output_x_norm); - auto y_norm = EigenMatrix<T>::From(*output_y_norm); + auto z = EigenVector<T>::Flatten(*output_z); + auto x_norm = EigenVector<T>::Flatten(*output_x_norm); + auto y_norm = EigenVector<T>::Flatten(*output_y_norm); auto place = context.GetEigenDevice<Place>(); - auto xy = (x * y).sum(Eigen::array<int, 1>({1})); - x_norm.device(place) = x.square().sum(Eigen::array<int, 1>({1})).sqrt(); - y_norm.device(place) = y.square().sum(Eigen::array<int, 1>({1})).sqrt(); + auto xy = (x * y).sum(Eigen::array<int, 1>({{1}})); + x_norm.device(place) = x.square().sum(Eigen::array<int, 1>({{1}})).sqrt(); + y_norm.device(place) = y.square().sum(Eigen::array<int, 1>({{1}})).sqrt(); z.device(place) = xy / x_norm / y_norm; } }; From db5e726d160789f05fb8323c6915991e5a276339 Mon Sep 17 00:00:00 2001 From: caoying03 <caoying03@baidu.com> Date: Wed, 6 Sep 2017 18:14:27 +0800 Subject: [PATCH 72/72] update the how to write op doc. --- doc/howto/dev/new_op_cn.md | 183 +++++++++++++++++++++---------------- 1 file changed, 102 insertions(+), 81 deletions(-) diff --git a/doc/howto/dev/new_op_cn.md b/doc/howto/dev/new_op_cn.md index 0d29865447..58665e9f2b 100644 --- a/doc/howto/dev/new_op_cn.md +++ b/doc/howto/dev/new_op_cn.md @@ -45,7 +45,9 @@ Kernel实现 | CPU、GPU共享Kernel实现在`.h`文件中,否则,CPU ### 1. 定义ProtoMaker类 -矩阵乘的公式:$Out = X * Y$, 可见该计算由两个输入,一个输出组成。首先定义`ProtoMaker`来描述该Op的输入、输出及注释: +矩阵乘法的公式:$Out = X * Y$, 可见该计算由两个输入,一个输出组成。 + +首先定义`ProtoMaker`来描述该Op的输入、输出,并添加注释: ```cpp class MulOpMaker : public framework::OpProtoAndCheckerMaker { @@ -63,17 +65,17 @@ The equation is: Out = X * Y }; ``` -[`MulOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc#L43)继承自`framework::OpProtoAndCheckerMaker`,构造函数包括2个参数: +[`MulOpMaker`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/mul_op.cc#L43)继承自`framework::OpProtoAndCheckerMaker`,构造函数含有2个参数: - `framework::OpProto` : 前者存储Op的输入输出和参数属性,将用于Python API接口的生成。 - `framework::OpAttrChecker` :后者用于检查参数属性的合法性。 -构造函数里通过`AddInput`添加输入参数,通过`AddOutput`添加输出参数,通过`AddComment`添加该Op的注释,这些函数会将对应内容添加到`OpProto`中。 +构造函数里通过`AddInput`添加输入参数,通过`AddOutput`添加输出参数,通过`AddComment`添加Op的注释。这些函数会将对应内容添加到`OpProto`中。 -在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,并解释了各自含义,命名请遵守命名规范。 +上面的代码在`MulOp`中添加两个输入`X`和`Y`,添加了一个输出`Out`,并解释了各自含义,命名请遵守命名规范。 -再举个[`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/scale_op.cc#L37)的例子: +再以[`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/scale_op.cc#L37)为例: ```cpp template <typename AttrType> @@ -91,14 +93,16 @@ The equation is: Out = scale*X }; ``` - 这个例子有两处不同: +这个例子有两处不同: + +- `AddInput("X","...").NotInGradient()` : 表示`X`这个输入不参与`ScaleOp`对应的梯度Op计算之中,如果Op的某个输入不参与反向梯度的计算,请显示地调用`.NotInGradient()`进行设置。 - - `AddInput("X","...").NotInGradient()` : 表示`X`这个输入不参与`ScaleOp`对应的梯度Op计算之中。 - - `AddAttr<AttrType>("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 +- `AddAttr<AttrType>("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 ### 2. 定义Operator类 +下面的点实现了MulOp的定义: ```cpp class MulOp : public framework::OperatorWithKernel { @@ -143,14 +147,27 @@ MulOp(const std::string &type, const framework::VariableNameMap &inputs, - 1). 做检查, 尽早报错:检查输入数据维度、类型等是否合法。 - 2). 设置输出Tensor的形状。 -通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中,和要讲到的注册函数一起放在`.cc`中 +通常`OpProtoMaker`和`Op`类的定义写在`.cc`文件中,和下面将要介绍的注册函数一起放在`.cc`中 ### 3. 定义OpKernel类 -```cpp -template <typename Place, typename T> -class MulKernel : public framework::OpKernel { - public: +`MulKernel`继承自`framework::OpKernel`,带有下面两个模板参数: + +- `typename Place`: 表示设备类型,不同设备(CPU、GPU)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 + +- `typename T` : 表示数据类型,如`float`, `double`等。 + +需要为`MulKernel`类重写`Compute`接口。 +- `Compute`接受一个输入参数:`const framework::ExecutionContext& context`。 +- 与`InferShapeContext`相比,`ExecutionContext`增加了设备类型,同样可获取到输入输出和属性参数。 +- `Compute`函数里实现`OpKernel`的具体计算逻辑。 + +下面是 `MulKernel` `Compute`的实现: + + ```cpp + template <typename Place, typename T> + class MulKernel : public framework::OpKernel { + public: void Compute(const framework::ExecutionContext& context) const override { auto* X = context.Input<Tensor>("X"); auto* Y = context.Input<Tensor>("Y"); @@ -160,50 +177,50 @@ class MulKernel : public framework::OpKernel { const_cast<platform::DeviceContext*>(context.device_context_); math::matmul<Place, T>(*X, false, *Y, false, 1, Z, 0, device_context); } -}; -``` + }; + ``` -`MulKernel`继承自`framework::OpKernel`,带有模板参数: +需要注意:**不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。** - - `typename Place`: 表示设备类型,不同设备(CPU、GPU)共享同一个Kernel时,需加该模板参数,不共享则不加,一个不共享的例子是[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 +`MulOp`的CPU、GPU实现共享同一个`Kernel`。`OpKernel`不共享的例子可以参考:[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 - - `typename T` : 表示数据类型,如`float`, `double`等。 +为了使`OpKernel`的计算过程书写更加简单,并且CPU、GPU的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md)。 -`MulKernel`需要重写`Compute`接口,该接口参数为`const framework::ExecutionContext& context`, `ExecutionContext`相比`InferShapeContext`增加了设备类型,同样可获取到输入输出和属性参数,`Compute`函数里写具体实现时。 -注意,不同设备(CPU、GPU)共享一个Op定义,是否则共享同一个`OpKernel`,取决于`Compute`调用的函数是否支持不同设备。`MulOp`的CPU、GPU实现共享同一个`Kernel`,`OpKernel`不共享的例子可以参考[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/operators/cross_entropy_op.h#L43)。 +到此,前向Op实现完成。接下来,需要在`.cc`文件中注册该op和kernel。 +反向Op类的定义,反向OpKernel的定义与前向Op类似,这里不再赘述。**但需注意反向Op没有`ProtoMaker`**。 -为了使得`OpKernel`的计算过程书写较为简单,CPU、GPU的代码可以复用,我们通常借助Eigen unsupported Tensor模块来实现。关于在paddle中如何使用Eigen库,请参考对应的使用[文档](https://github.com/PaddlePaddle/Paddle/blob/develop/doc/howto/dev/use_eigen_cn.md) +### 4. 注册Operator -到此前向Op实现完成,需要在`.cc`文件中注册该op和kernel。反向Op类的定义和Kernel定义与前向Op类似,这里不再重复。但注意,反向Op没有`ProtoMaker`。 +- 在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 -### 4. 注册Operator + ```cpp + namespace ops = paddle::operators; + REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); + REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); + REGISTER_OP_CPU_KERNEL(mul_grad, + ops::MulGradKernel<paddle::platform::CPUPlace, float>); + ``` -在`.cc`文件中注册前向、反向Op类,注册CPU Kernel。 + 在上面的代码中: -```cpp -namespace ops = paddle::operators; -REGISTER_OP(mul, ops::MulOp, ops::MulOpMaker, mul_grad, ops::MulOpGrad); -REGISTER_OP_CPU_KERNEL(mul, ops::MulKernel<paddle::platform::CPUPlace, float>); -REGISTER_OP_CPU_KERNEL(mul_grad, - ops::MulGradKernel<paddle::platform::CPUPlace, float>); -``` + - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`。 + - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 + - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 - - `REGISTER_OP` : 注册`ops::MulOp`类,类型名为`mul`,该类的`ProtoMaker`为`ops::MulOpMaker`,注册`ops::MulOpGrad`,类型名为`mul_grad`, - - `REGISTER_OP_WITHOUT_GRADIENT` : 用于注册没有反向的Op。 - - `REGISTER_OP_CPU_KERNEL` :注册`ops::MulKernel`类,并特化模板参数为`paddle::platform::CPUPlace`和`float`类型,同理,注册`ops::MulKernel`类。 -在 `.cu`文件中注册GPU Kernel。请注意,如果GPU Kernel的实现是基于Eigen unsupported模块,那么在 `.cu`的最前面请加上宏定义 `#define EIGEN_USE_GPU` +- 在 `.cu`文件中注册GPU Kernel。 + - 请注意,如果GPU Kernel的实现基于Eigen unsupported模块,那么在 `.cu`的开始请加上宏定义 `#define EIGEN_USE_GPU`,代码示例如下: -```cpp -// if use Eigen unsupported module before include head files -#define EIGEN_USE_GPU + ```cpp + // if use Eigen unsupported module before include head files + #define EIGEN_USE_GPU -namespace ops = paddle::operators; -REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel<paddle::platform::GPUPlace, float>); -REGISTER_OP_GPU_KERNEL(mul_grad, - ops::MulGradKernel<paddle::platform::GPUPlace, float>); -``` + namespace ops = paddle::operators; + REGISTER_OP_GPU_KERNEL(mul, ops::MulKernel<paddle::platform::GPUPlace, float>); + REGISTER_OP_GPU_KERNEL(mul_grad, + ops::MulGradKernel<paddle::platform::GPUPlace, float>); + ``` ### 5. 编译 @@ -225,7 +242,7 @@ REGISTER_OP_GPU_KERNEL(mul_grad, - 绑定Python 在 [`paddle/pybind/pybind.cc -`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/pybind.cc)文件中添加该类: +`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/pybind.cc) 使用`USE_OP`告知编译器需要链接的Op,具体解释参考[代码注释](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h#L81)。 ``` USE_OP(mul); @@ -242,50 +259,54 @@ REGISTER_OP_GPU_KERNEL(mul_grad, USE_NO_KENREL_OP(recurrent); ``` - 使用`USE_OP`告知编译器需要链接该Op的目标文件,具体解释参考[代码注释](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/framework/op_registry.h#L81)。 - - 生成库 - 无需修改 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会自动被添加链接到生成的lib库中。 + 无需修改 [`paddle/pybind/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/pybind/CMakeLists.txt)文件,`paddle/operators` 目录下新增的 `*_op.cc` 文件会被自动添加链接到生成的lib库中。 ## 实现单元测试 -单测包括对比前向Op不同设备(CPU、GPU)的实现、对比反向OP不同设备(CPU、GPU)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单测](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 +单测包括对比前向Op不同设备(CPU、GPU)的实现、对比反向OP不同设备(CPU、GPU)的实现、反向Op的梯度测试。下面介绍介绍[`MulOp`的单元测试](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/test_mul_op.py)。 ### 前向Operator单元测试 -前向Op单测继承自`unittest.TestCase`,并定义元类`__metaclass__ = OpTestMeta`,具体单测流程在`OpTestMeta`里完成。需在`setUp`函数定义输入输出和属性参数,以及Python对比的输出值。 +前向Op单元测试继承自`unittest.TestCase`,并定义元类`__metaclass__ = OpTestMeta`。各项更加具体的单元测试在`OpTestMeta`里完成。测试前向Operator,需要: -```python -import unittest -import numpy as np -from gradient_checker import GradientChecker, create_op -from op_test_util import OpTestMeta +1. 在`setUp`函数定义输入、输出,以及相关的属性参数。 +2. 生成随机的输入数据。 +3. 在Python脚本中实现与前向operator相同的计算逻辑,得到输出值,与operator前向计算的输出进行对比。 -class TestMulOp(unittest.TestCase): - __metaclass__ = OpTestMeta - def setUp(self): - self.type = "mul" - self.inputs = { - 'X': np.random.random((32, 84)).astype("float32"), - 'Y': np.random.random((84, 100)).astype("float32") - } - self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} -``` - 首先需要`import`必要的包,下面详细解释其他值: + ```python + import unittest + import numpy as np + from gradient_checker import GradientChecker, create_op + from op_test_util import OpTestMeta + + class TestMulOp(unittest.TestCase): + __metaclass__ = OpTestMeta - - `self.type = "mul" ` : 定义类型,和注册的类型一致。 - - `self.inputs` : 定义输入,类型为Numpy.array,并初始化。 - - `self.outputs` : 定义输出,并得到Python结算结果。 + def setUp(self): + self.type = "mul" + self.inputs = { + 'X': np.random.random((32, 84)).astype("float32"), + 'Y': np.random.random((84, 100)).astype("float32") + } + self.outputs = {'Out': np.dot(self.inputs['X'], self.inputs['Y'])} + ``` + +上面的代码首先导入依赖的包,下面是对`setUp`函数中操作的重要变量的详细解释: + +- `self.type = "mul" ` : 定义类型,与operator注册时注册的类型一致。 +- `self.inputs` : 定义输入,类型为`numpy.array`,并初始化。 +- `self.outputs` : 定义输出,并在Python脚本中完成与operator同样的计算逻辑,返回Python端的计算结果。 ### 反向Operator单元测试 -反向Op单测继承自`GradientChecker`,而`GradientChecker`集成自`unittest.TestCase`,所以反向单测函数需要`test_`开头。 +反向Op单元测试继承自`GradientChecker`,而`GradientChecker`继承自`unittest.TestCase`,因此,**反向单元测试函数需要以`test_`开头**。 -```cpp +```python class TestMulGradOp(GradientChecker): def setUp(self): self.op = create_op("mul") @@ -319,27 +340,27 @@ class TestMulGradOp(GradientChecker): no_grad_set={"Y"}) ``` -下面解释一些关键的地方: +下面解释代码中一些关键的地方: - - 调用`create_op("mul")`创建反向Op对应的前向Op。 - - 调用`compare_grad`函数对比CPU、GPU计算结果。 - - `test_normal`中调用`check_grad`检查梯度稳定性,这里采用数值法检测梯度正确性。 - - 第一个参数`self.op` : 前向Op。 - - 第二个参数`self.inputs` : 输入词典,词典的Key和`ProtoMaker`定义保持一致。 - - 第三个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 - - 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out` - - `test_ignore_x`和`test_ignore_y`分支测试只需要计算一个输入梯度的情况。 +- 调用`create_op("mul")`创建反向Op对应的前向Op。 +- 调用`compare_grad`函数对比CPU、GPU计算结果。 +- `test_normal`中调用`check_grad`使用数值法检测梯度正确性和稳定性。 + - 第一个参数`self.op` : 前向Op。 + - 第二个参数`self.inputs` : 输入词典,词典的Key和`ProtoMaker`定义保持一致。 + - 第三个参数`["X", "Y"]` : 指定对输入变量`X`、`Y`做梯度检测。 + - 第四个参数`"Out"` : 指定前向网络最终的输出目标变量`Out` +- `test_ignore_x`和`test_ignore_y`分支用来测试只需要计算一个输入梯度的情况。 ### 编译和执行单元测试 -单测完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)里添加以下内容将单测加入工程中: +单元测试编写完成之后,在[`python/paddle/v2/framework/tests/CMakeLists.txt`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/v2/framework/tests/CMakeLists.txt)中添加以下内容,将单元测试加入工程: ``` py_test(test_mul_op SRCS test_mul_op.py) ``` -请注意,**不同于Op的编译测试,运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`, 即`cmake paddle_dir -DWITH_TESTING=ON`。编译成功后,执行下面的命令来运行单测: +请注意,**不同于Op的编译测试,运行单元测试测时需要编译整个工程**,并且编译时需要打开`WITH_TESTING`, 即`cmake paddle_dir -DWITH_TESTING=ON`。编译成功后,执行下面的命令来运行单元测试: ```bash make test ARGS="-R test_mul_op -V"