From 2ff0e2af5faedc210cd5957a373cacfdbf949a4a Mon Sep 17 00:00:00 2001 From: changzherui Date: Sat, 3 Jul 2021 00:26:49 +0800 Subject: [PATCH] mpdofy onnx.proto --- third_party/proto/onnx/onnx.proto | 287 ++---------------------------- 1 file changed, 19 insertions(+), 268 deletions(-) diff --git a/third_party/proto/onnx/onnx.proto b/third_party/proto/onnx/onnx.proto index 492ac300c4..6f296326bb 100644 --- a/third_party/proto/onnx/onnx.proto +++ b/third_party/proto/onnx/onnx.proto @@ -3,8 +3,8 @@ // -// SPDX-License-Identifier: Apache-2.0 - +// Copyright (c) ONNX Project Contributors. +// Licensed under the MIT license. syntax = "proto2"; @@ -27,6 +27,13 @@ package onnx; // Notes // +// Release +// +// We are still in the very early stage of defining ONNX. The current +// version of ONNX is a starting point. While we are actively working +// towards a complete spec, we would like to get the community involved +// by sharing our working version of ONNX. +// // Protobuf compatibility // // To simplify framework compatibility, ONNX is defined using the subset of protobuf @@ -54,7 +61,7 @@ enum Version { // The version field is always serialized and we will use it to store the // version that the graph is generated from. This helps us set up version // control. - // For the IR, we are using simple numbers starting with 0x00000001, + // For the IR, we are using simple numbers starting with with 0x00000001, // which was the version we published on Oct 10, 2017. IR_VERSION_2017_10_10 = 0x0000000000000001; @@ -83,26 +90,7 @@ enum Version { // - Add support for sparse tensor constants stored in model. // - Add message SparseTensorProto // - Add sparse initializers - IR_VERSION_2019_9_19 = 0x0000000000000006; - - // IR VERSION 7 published on May 8, 2020 - // - Add support to allow function body graph to rely on multiple external opreator sets. - // - Add a list to promote inference graph's initializers to global and - // mutable variables. Global variables are visible in all graphs of the - // stored models. - // - Add message TrainingInfoProto to store initialization - // method and training algorithm. The execution of TrainingInfoProto - // can modify the values of mutable variables. - // - Implicitly add inference graph into each TrainingInfoProto's algorithm. - IR_VERSION_2020_5_8 = 0x0000000000000007; - - // IR VERSION 8 published on - // Introduce TypeProto.SparseTensor - // Introduce TypeProto.Optional - // Added a list of FunctionProtos local to the model - // Deprecated since_version and operator status from FunctionProto - IR_VERSION = 0x0000000000000008; - + IR_VERSION = 0x0000000000000006; } // Attributes @@ -123,7 +111,6 @@ message AttributeProto { TENSOR = 4; GRAPH = 5; SPARSE_TENSOR = 11; - TYPE_PROTO = 13; FLOATS = 6; INTS = 7; @@ -131,7 +118,6 @@ message AttributeProto { TENSORS = 9; GRAPHS = 10; SPARSE_TENSORS = 12; - TYPE_PROTOS = 14; } // The name field MUST be present for this version of the IR. @@ -148,10 +134,10 @@ message AttributeProto { // The type field MUST be present for this version of the IR. // For 0.0.1 versions of the IR, this field was not defined, and - // implementations needed to use has_field heuristics to determine + // implementations needed to use has_field hueristics to determine // which value field was in use. For IR_VERSION 0.0.2 or later, this // field MUST be set and match the f|i|s|t|... field in use. This - // change was made to accommodate proto3 implementations. + // change was made to accomodate proto3 implementations. optional AttributeType type = 20; // discriminator that indicates which field below is in use // Exactly ONE of the following fields must be present for this version of the IR @@ -163,7 +149,6 @@ message AttributeProto { optional SparseTensorProto sparse_tensor = 22; // sparse tensor value // Do not use field below, it's deprecated. // optional ValueProto v = 12; // value - subsumes everything but graph - optional TypeProto tp = 14; // type proto repeated float floats = 7; // list of floats repeated int64 ints = 8; // list of ints @@ -171,7 +156,6 @@ message AttributeProto { repeated TensorProto tensors = 10; // list of tensors repeated GraphProto graphs = 11; // list of graph repeated SparseTensorProto sparse_tensors = 23; // list of sparse tensors - repeated TypeProto type_protos = 15;// list of type protos } // Defines information on value, including the name, the type, and @@ -213,130 +197,12 @@ message NodeProto { optional string doc_string = 6; } -// Training information -// TrainingInfoProto stores information for training a model. -// In particular, this defines two functionalities: an initialization-step -// and a training-algorithm-step. Initialization resets the model -// back to its original state as if no training has been performed. -// Training algorithm improves the model based on input data. -// -// The semantics of the initialization-step is that the initializers -// in ModelProto.graph and in TrainingInfoProto.algorithm are first -// initialized as specified by the initializers in the graph, and then -// updated by the "initialization_binding" in every instance in -// ModelProto.training_info. -// -// The field "algorithm" defines a computation graph which represents a -// training algorithm's step. After the execution of a -// TrainingInfoProto.algorithm, the initializers specified by "update_binding" -// may be immediately updated. If the targeted training algorithm contains -// consecutive update steps (such as block coordinate descent methods), -// the user needs to create a TrainingInfoProto for each step. -message TrainingInfoProto { - // This field describes a graph to compute the initial tensors - // upon starting the training process. Initialization graph has no input - // and can have multiple outputs. Usually, trainable tensors in neural - // networks are randomly initialized. To achieve that, for each tensor, - // the user can put a random number operator such as RandomNormal or - // RandomUniform in TrainingInfoProto.initialization.node and assign its - // random output to the specific tensor using "initialization_binding". - // This graph can also set the initializers in "algorithm" in the same - // TrainingInfoProto; a use case is resetting the number of training - // iteration to zero. - // - // By default, this field is an empty graph and its evaluation does not - // produce any output. Thus, no initializer would be changed by default. - optional GraphProto initialization = 1; - - // This field represents a training algorithm step. Given required inputs, - // it computes outputs to update initializers in its own or inference graph's - // initializer lists. In general, this field contains loss node, gradient node, - // optimizer node, increment of iteration count. - // - // An execution of the training algorithm step is performed by executing the - // graph obtained by combining the inference graph (namely "ModelProto.graph") - // and the "algorithm" graph. That is, the actual the actual - // input/initializer/output/node/value_info/sparse_initializer list of - // the training graph is the concatenation of - // "ModelProto.graph.input/initializer/output/node/value_info/sparse_initializer" - // and "algorithm.input/initializer/output/node/value_info/sparse_initializer" - // in that order. This combined graph must satisfy the normal ONNX conditions. - // Now, let's provide a visualization of graph combination for clarity. - // Let the inference graph (i.e., "ModelProto.graph") be - // tensor_a, tensor_b -> MatMul -> tensor_c -> Sigmoid -> tensor_d - // and the "algorithm" graph be - // tensor_d -> Add -> tensor_e - // The combination process results - // tensor_a, tensor_b -> MatMul -> tensor_c -> Sigmoid -> tensor_d -> Add -> tensor_e - // - // Notice that an input of a node in the "algorithm" graph may reference the - // output of a node in the inference graph (but not the other way round). Also, inference - // node cannot reference inputs of "algorithm". With these restrictions, inference graph - // can always be run independently without training information. - // - // By default, this field is an empty graph and its evaluation does not - // produce any output. Evaluating the default training step never - // update any initializers. - optional GraphProto algorithm = 2; - - // This field specifies the bindings from the outputs of "initialization" to - // some initializers in "ModelProto.graph.initializer" and - // the "algorithm.initializer" in the same TrainingInfoProto. - // See "update_binding" below for details. - // - // By default, this field is empty and no initializer would be changed - // by the execution of "initialization". - repeated StringStringEntryProto initialization_binding = 3; - - // Gradient-based training is usually an iterative procedure. In one gradient - // descent iteration, we apply - // - // x = x - r * g - // - // where "x" is the optimized tensor, "r" stands for learning rate, and "g" is - // gradient of "x" with respect to a chosen loss. To avoid adding assignments - // into the training graph, we split the update equation into - // - // y = x - r * g - // x = y - // - // The user needs to save "y = x - r * g" into TrainingInfoProto.algorithm. To - // tell that "y" should be assigned to "x", the field "update_binding" may - // contain a key-value pair of strings, "x" (key of StringStringEntryProto) - // and "y" (value of StringStringEntryProto). - // For a neural network with multiple trainable (mutable) tensors, there can - // be multiple key-value pairs in "update_binding". - // - // The initializers appears as keys in "update_binding" are considered - // mutable variables. This implies some behaviors - // as described below. - // - // 1. We have only unique keys in all "update_binding"s so that two - // variables may not have the same name. This ensures that one - // variable is assigned up to once. - // 2. The keys must appear in names of "ModelProto.graph.initializer" or - // "TrainingInfoProto.algorithm.initializer". - // 3. The values must be output names of "algorithm" or "ModelProto.graph.output". - // 4. Mutable variables are initialized to the value specified by the - // corresponding initializer, and then potentially updated by - // "initializer_binding"s and "update_binding"s in "TrainingInfoProto"s. - // - // This field usually contains names of trainable tensors - // (in ModelProto.graph), optimizer states such as momentums in advanced - // stochastic gradient methods (in TrainingInfoProto.graph), - // and number of training iterations (in TrainingInfoProto.graph). - // - // By default, this field is empty and no initializer would be changed - // by the execution of "algorithm". - repeated StringStringEntryProto update_binding = 4; -} - // Models // // ModelProto is a top-level file/container format for bundling a ML model and // associating its computation graph with metadata. // -// The semantics of the model are described by the associated GraphProto's. +// The semantics of the model are described by the associated GraphProto. message ModelProto { // The version of the IR this model targets. See Version enum above. // This field MUST be present. @@ -381,35 +247,6 @@ message ModelProto { // Named metadata values; keys should be distinct. repeated StringStringEntryProto metadata_props = 14; - - // Training-specific information. Sequentially executing all stored - // `TrainingInfoProto.algorithm`s and assigning their outputs following - // the corresponding `TrainingInfoProto.update_binding`s is one training - // iteration. Similarly, to initialize the model - // (as if training hasn't happened), the user should sequentially execute - // all stored `TrainingInfoProto.initialization`s and assigns their outputs - // using `TrainingInfoProto.initialization_binding`s. - // - // If this field is empty, the training behavior of the model is undefined. - repeated TrainingInfoProto training_info = 20; - - // A list of function protos local to the model. - // - // Model local functions override standard operator sets. Meaning, - // if a model local function exists for op_type + domain combination - // then it will be preferred over the operator or function present in - // standard defined or cutom operator sets. - // - // The operator sets imported by FunctionProto should be compatible with the ones - // imported by ModelProto and other model local FunctionProtos. - // Example, if same operator set say 'A' is imported by a FunctionProto and ModelProto - // or by 2 FunctionProtos then versions for the operator set may be different but, - // the operator schema returned for op_type, domain, version combination - // for both the versions should be same for every node in the function body. - - // One FunctionProto can reference other FunctionProto in the model, however, recursive reference - // is not allowed. - repeated FunctionProto functions = 25; }; // StringStringEntryProto follows the pattern for cross-proto-version maps. @@ -444,9 +281,8 @@ message GraphProto { optional string name = 2; // namespace Graph // A list of named tensor values, used to specify constant inputs of the graph. - // Each initializer (both TensorProto as well SparseTensorProto) MUST have a name. - // The name MUST be unique across both initializer and sparse_initializer, - // but the name MAY also appear in the input list. + // Each TensorProto entry must have a distinct name (within the list) that + // MAY also appear in the input list. repeated TensorProto initializer = 5; // Initializers (see above) stored in sparse format. @@ -537,7 +373,7 @@ message TensorProto { // For float and complex64 values // Complex64 tensors are encoded as a single array of floats, // with the real components appearing in odd numbered positions, - // and the corresponding imaginary component appearing in the + // and the corresponding imaginary component apparing in the // subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i] // is encoded as [1.0, 2.0 ,3.0 ,4.0] // When this field is present, the data_type field MUST be FLOAT or COMPLEX64. @@ -609,7 +445,7 @@ message TensorProto { // For double // Complex128 tensors are encoded as a single array of doubles, // with the real components appearing in odd numbered positions, - // and the corresponding imaginary component appearing in the + // and the corresponding imaginary component apparing in the // subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i] // is encoded as [1.0, 2.0 ,3.0 ,4.0] // When this field is present, the data_type field MUST be DOUBLE or COMPLEX128 @@ -625,8 +461,6 @@ message TensorProto { message SparseTensorProto { // The sequence of non-default values are encoded as a tensor of shape [NNZ]. // The default-value is zero for numeric tensors, and empty-string for string tensors. - // values must have a non-empty name present which serves as a name for SparseTensorProto - // when used in sparse_initializer list. optional TensorProto values = 1; // The indices of the non-default values, which may be stored in one of two formats. @@ -694,23 +528,6 @@ message TypeProto { optional TypeProto value_type = 2; }; - // wrapper for Tensor, Sequence, or Map - message Optional { - // The type and optional shape of the element wrapped. - // This field MUST be present for this version of the IR. - // Possible values correspond to OptionalProto.DataType enum - optional TypeProto elem_type = 1; - }; - - - message SparseTensor { - // This field MUST NOT have the value of UNDEFINED - // This field MUST have a valid TensorProto.DataType value - // This field MUST be present for this version of the IR. - optional int32 elem_type = 1; - optional TensorShapeProto shape = 2; - } - oneof value { // The type of a tensor. @@ -727,13 +544,6 @@ message TypeProto { // The type of a map. Map map_type = 5; - // The type of an optional. - Optional optional_type = 9; - - - // Type of the sparse tensor - SparseTensor sparse_tensor_type = 8; - } // An optional denotation can be used to denote the whole @@ -756,63 +566,4 @@ message OperatorSetIdProto { // The version of the operator set being identified. // This field MUST be present in this version of the IR. optional int64 version = 2; -} - -// Operator/function status. -enum OperatorStatus { - EXPERIMENTAL = 0; - STABLE = 1; -} - -message FunctionProto { - // The name of the function, similar usage of op_type in OperatorProto. - // Combined with FunctionProto.domain, this forms the unique identity of - // the FunctionProto. - optional string name = 1; - - // Deprecated since IR Version 8 - // optional int64 since_version = 2; - reserved 2; - reserved "since_version"; - - // Deprecated since IR Version 8 - // optional OperatorStatus status = 3; - reserved 3; - reserved "status"; - - // The inputs and outputs of the function. - repeated string input = 4; - repeated string output = 5; - - // The attributes of the function. - repeated string attribute = 6; - - // The nodes in the function. - repeated NodeProto node = 7; - // A human-readable documentation for this function. Markdown is allowed. - optional string doc_string = 8; - - // The OperatorSets this function body (graph) relies on. - // All FunctionProtos implicitly import the operator set which the function operator is part of. - // - // All nodes in the function body (graph) will bind against the operator - // with the same-domain/same-op_type operator with the HIGHEST version - // in the referenced operator sets. This means at most one version can be relied - // for one domain. - // - // The operator sets imported by FunctionProto should be compatible with the ones - // imported by ModelProto. Example, if same operator set say 'A' is imported by FunctionProto - // and ModelProto then versions for the operator set may be different but, - // the operator schema returned for op_type, domain, version combination - // for both the versions should be same. - - repeated OperatorSetIdProto opset_import = 9; - - // The domain which this function belongs to. Combined with FunctionProto.name, this forms the unique identity of - // the FunctionProto. - optional string domain = 10; -} - - -// For using protobuf-lite -option optimize_for = LITE_RUNTIME; +} \ No newline at end of file