commit
3321dd034b
@ -1,28 +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. */
|
||||
|
||||
syntax = "proto2";
|
||||
package paddle.framework;
|
||||
|
||||
// Attribute Type for paddle's Op.
|
||||
// Op contains many attributes. Each type of attributes could be different.
|
||||
// The AttrType will be shared between AttrDesc and AttrProto.
|
||||
enum AttrType {
|
||||
INT = 0;
|
||||
FLOAT = 1;
|
||||
STRING = 2;
|
||||
INTS = 3;
|
||||
FLOATS = 4;
|
||||
STRINGS = 5;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,82 @@
|
||||
/* 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. */
|
||||
|
||||
syntax = "proto2";
|
||||
package paddle.framework;
|
||||
|
||||
enum AttrType {
|
||||
INT = 0;
|
||||
FLOAT = 1;
|
||||
STRING = 2;
|
||||
INTS = 3;
|
||||
FLOATS = 4;
|
||||
STRINGS = 5;
|
||||
}
|
||||
|
||||
// OpDesc describes an instance of a C++ framework::OperatorBase
|
||||
// derived class type.
|
||||
message OpDesc {
|
||||
|
||||
message Attr {
|
||||
required string name = 1;
|
||||
required AttrType type = 2;
|
||||
optional int32 i = 3;
|
||||
optional float f = 4;
|
||||
optional string s = 5;
|
||||
repeated int32 ints = 6;
|
||||
repeated float floats = 7;
|
||||
repeated string strings = 8;
|
||||
};
|
||||
|
||||
message Var {
|
||||
required string parameter = 1;
|
||||
repeated string arguments = 2;
|
||||
};
|
||||
|
||||
required string type = 3;
|
||||
repeated Var inputs = 1;
|
||||
repeated Var outputs = 2;
|
||||
repeated Attr attrs = 4;
|
||||
};
|
||||
|
||||
// OpProto describes a C++ framework::OperatorBase derived class.
|
||||
message OpProto {
|
||||
|
||||
// VarProto describes the C++ type framework::Variable.
|
||||
message Var {
|
||||
required string name = 1;
|
||||
required string comment = 2;
|
||||
|
||||
optional bool duplicable = 3 [ default = false ];
|
||||
optional bool intermediate = 4 [ default = false ];
|
||||
optional bool no_gradient = 5 [ default = false ];
|
||||
}
|
||||
|
||||
// AttrProto describes the C++ type Attribute.
|
||||
message Attr {
|
||||
required string name = 1;
|
||||
required AttrType type = 2;
|
||||
required string comment = 3;
|
||||
// If that attribute is generated, it means the Paddle third
|
||||
// language binding has responsibility to fill that
|
||||
// attribute. End-User should not set that attribute.
|
||||
optional bool generated = 4 [ default = false ];
|
||||
}
|
||||
|
||||
required string type = 1;
|
||||
repeated Var inputs = 2;
|
||||
repeated Var outputs = 3;
|
||||
repeated Attr attrs = 4;
|
||||
required string comment = 5;
|
||||
}
|
@ -1,56 +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. */
|
||||
|
||||
syntax = "proto2";
|
||||
package paddle.framework;
|
||||
|
||||
import "attribute.proto";
|
||||
|
||||
// AttrDesc is used to describe Attributes of an Operator. It contain's
|
||||
// name, type, and value of Attribute.
|
||||
//
|
||||
// e.g, for scale=3.0: name=scala, type=AttrType.FLOAT, value=3.0
|
||||
message AttrDesc {
|
||||
required string name = 1;
|
||||
required AttrType type = 2;
|
||||
optional int32 i = 3;
|
||||
optional float f = 4;
|
||||
optional string s = 5;
|
||||
repeated int32 ints = 6;
|
||||
repeated float floats = 7;
|
||||
repeated string strings = 8;
|
||||
};
|
||||
|
||||
// Protocol Message to describe an Operator.
|
||||
//
|
||||
// In PaddlePaddle, Operator is used to do a certain computation such
|
||||
// as "add", "sub", "cosine", etc.
|
||||
// (1) Operator needs to know the input and output variable names.
|
||||
// (2) Some ops may have special attributes such as "scale" in "CosineOp".
|
||||
//
|
||||
// 3rd-party language can build this proto message and call
|
||||
// AddOp(const OpDesc& op_desc) of Paddle core to create an Operator.
|
||||
message OpDesc {
|
||||
// input names of this Operator.
|
||||
repeated string inputs = 1;
|
||||
|
||||
// output names of this Operator.
|
||||
repeated string outputs = 2;
|
||||
|
||||
// type of this Operator, such as "add", "sub", "fc".
|
||||
required string type = 3;
|
||||
|
||||
// Attributes of this Operator. e.g., scale=3.0 in cosine op.
|
||||
repeated AttrDesc attrs = 4;
|
||||
};
|
@ -1,35 +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 <gtest/gtest.h>
|
||||
#include <paddle/framework/op_desc.pb.h>
|
||||
|
||||
TEST(OpDesc, Create) {
|
||||
paddle::framework::OpDesc op_desc;
|
||||
op_desc.set_type("add");
|
||||
op_desc.add_inputs("X");
|
||||
op_desc.add_inputs("Y");
|
||||
op_desc.add_outputs("Z");
|
||||
|
||||
auto attr = op_desc.mutable_attrs()->Add();
|
||||
attr->set_type(paddle::framework::AttrType::FLOAT);
|
||||
attr->set_f(3.14);
|
||||
|
||||
// required field name is not set, so IsInitialized should be false.
|
||||
ASSERT_FALSE(op_desc.IsInitialized());
|
||||
|
||||
attr->set_name("add");
|
||||
// after all required fields are set, IsInitialized should be true now.
|
||||
ASSERT_TRUE(op_desc.IsInitialized());
|
||||
}
|
@ -1,116 +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. */
|
||||
|
||||
// Protocol Message for 3rd-party language binding.
|
||||
//
|
||||
// Paddle Python package will use `OpProto` to generate op creation methods.
|
||||
// The op creation methods take user's input and generate `OpDesc` proto
|
||||
// message,
|
||||
// then pass `OpDesc` to C++ side and create Op pointer.
|
||||
//
|
||||
syntax = "proto2";
|
||||
package paddle.framework;
|
||||
|
||||
import "attribute.proto";
|
||||
|
||||
// Attribute protocol message for 3rd-party language binding.
|
||||
// It will store the Op support what attribute and what type.
|
||||
message AttrProto {
|
||||
// Supported attribute name. e.g. `scale` for cosine op.
|
||||
required string name = 1;
|
||||
|
||||
// Supported attribute type.
|
||||
required AttrType type = 2;
|
||||
|
||||
// Supported attribute comments. It helps 3rd-party language generate
|
||||
// doc-string.
|
||||
required string comment = 3;
|
||||
|
||||
// If that attribute is generated, it means the Paddle third language
|
||||
// binding has responsibility to fill that attribute. End-User should
|
||||
// not set that attribute.
|
||||
optional bool generated = 4 [ default = false ];
|
||||
}
|
||||
|
||||
// Input or output message for 3rd-party language binding.
|
||||
// It contains parameter name and its comments.
|
||||
message VarProto {
|
||||
// Input or output name in that op creation function.
|
||||
// e.g. `cos(a, b, output, ...)`, "a", "b", "output" are names.
|
||||
required string name = 1;
|
||||
|
||||
// The comment for that input. It helps 3rd-party language generate
|
||||
// doc-string.
|
||||
required string comment = 2;
|
||||
|
||||
// Is that input/output could be a list or not.
|
||||
// If so, that Op should write a attributed named `input_format` or
|
||||
// `output_format`.
|
||||
//
|
||||
// e.g.
|
||||
// If the op is a fc op, the inputs are `X`, `W`, `b`. The `X` and `W`
|
||||
// could be multiple, so the multiple of `X` and `W` is True, and OpDesc
|
||||
// will hold a attribute of them.
|
||||
//
|
||||
// The Op desc of same fc could be
|
||||
// {
|
||||
// "type": "fc",
|
||||
// "input": ["X1", "X2", "W1", "W2", "b"],
|
||||
// "output": "fc.out",
|
||||
// "attrs" : {
|
||||
// "input_format": [0, 2, 4, 5]
|
||||
// }
|
||||
// }
|
||||
//
|
||||
optional bool multiple = 3 [ default = false ];
|
||||
|
||||
// It marks that output is a temporary output. That output is not used by
|
||||
// user, but used by other op internally as input. If other op is not use
|
||||
// that output, it could be optimized early.
|
||||
//
|
||||
// Attribute temporary_index will be set in OpDesc if there is some
|
||||
// outputs are temporary.
|
||||
//
|
||||
// output = [ "xxx.out1", "xxx.tmp", "xxx.out2"],
|
||||
// attrs = {
|
||||
// "temporary_index": [1]
|
||||
// }
|
||||
optional bool temporary = 4 [ default = false ];
|
||||
|
||||
// The gradient of operator can be ignored immediately
|
||||
// e.g. operator AddOp, y = x1 + x2, the gradient of dy/dx1, dy/dx2
|
||||
// can be ignored for the future optimized on graph.
|
||||
optional bool ignore_gradient = 6;
|
||||
}
|
||||
|
||||
// Op protocol message for 3rd-party language binding.
|
||||
// It contains all information for generating op creation method.
|
||||
message OpProto {
|
||||
// The input information to generate op creation method.
|
||||
repeated VarProto inputs = 1;
|
||||
|
||||
// The output information to generate op creation method.
|
||||
repeated VarProto outputs = 2;
|
||||
|
||||
// The attribute information to generate op creation method.
|
||||
repeated AttrProto attrs = 3;
|
||||
|
||||
// The comments for that Op. It helps 3rd-party language generate
|
||||
// doc-string. The whole documentation of that Op is generated by comment,
|
||||
// inputs, outputs, attrs together.
|
||||
required string comment = 4;
|
||||
|
||||
// The type of that Op.
|
||||
required string type = 5;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <paddle/framework/op_proto.pb.h>
|
||||
|
||||
TEST(TestOpProto, ALL) {
|
||||
paddle::framework::OpProto proto;
|
||||
{
|
||||
auto ipt = proto.mutable_inputs()->Add();
|
||||
*ipt->mutable_name() = "a";
|
||||
*ipt->mutable_comment() = "the one input of cosine op";
|
||||
}
|
||||
{
|
||||
auto ipt = proto.mutable_inputs()->Add();
|
||||
*ipt->mutable_name() = "b";
|
||||
*ipt->mutable_comment() = "the other input of cosine op";
|
||||
}
|
||||
{
|
||||
auto opt = proto.mutable_outputs()->Add();
|
||||
*opt->mutable_name() = "output";
|
||||
*opt->mutable_comment() = "the output of cosine op";
|
||||
}
|
||||
{
|
||||
auto attr = proto.mutable_attrs()->Add();
|
||||
*attr->mutable_name() = "scale";
|
||||
attr->set_type(paddle::framework::AttrType::FLOAT);
|
||||
*attr->mutable_comment() = "the scale attribute of cosine op";
|
||||
}
|
||||
proto.set_type("cos");
|
||||
*proto.mutable_comment() = "cosine op, output = scale * cos(a, b)";
|
||||
|
||||
ASSERT_TRUE(proto.IsInitialized());
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue