diff --git a/onnxruntime/core/protobuf/onnx-ml.proto b/onnxruntime/core/protobuf/onnx-ml.proto index 10463ddf63..6cd542c61a 100644 --- a/onnxruntime/core/protobuf/onnx-ml.proto +++ b/onnxruntime/core/protobuf/onnx-ml.proto @@ -2,7 +2,6 @@ // WARNING: This file is automatically generated! Please edit onnx.in.proto. // - // Copyright (c) Facebook Inc. and Microsoft Corporation. // Licensed under the MIT license. @@ -20,11 +19,11 @@ package onnx; // // This document describes the syntax of models and their computation graphs, // as well as the standard data types. Together, they are referred to as the ONNX -// Intermediate Representation, or 'IR' for short. +// Intermediate Representation, or 'IR' for short. // // The normative semantic specification of the ONNX IR is found in docs/IR.md. // Definitions of the built-in neural network operators may be found in docs/Operators.md. -// Definitions of the built-in classical machine learning operators may be found in +// Definitions of the built-in classical machine learning operators may be found in // docs/Operators-ml.md. // Notes @@ -37,8 +36,8 @@ package onnx; // by sharing our working version of ONNX. // // Protobuf compatibility -// -// To simplify framework compatibility, ONNX is defined using the subset of protobuf +// +// To simplify framework compatibility, ONNX is defined using the subset of protobuf // that is compatible with both protobuf v2 and v3. This means that we do not use any // protobuf features that are only available in one of the two versions. // @@ -49,7 +48,6 @@ package onnx; // of key-value pairs, where order does not matter and duplicates // are not allowed. - // Versioning // // ONNX versioning is specified in docs/IR.md and elaborated on in docs/Versioning.md @@ -62,8 +60,8 @@ enum Version { _START_VERSION = 0; // 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 with 0x00000001, + // control. + // 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; @@ -86,7 +84,6 @@ enum Version { // An AttributeProto MUST contain the name field, and *only one* of the // following content fields, effectively enforcing a C/C++ union equivalent. message AttributeProto { - // Note: this enum is structurally identical to the OpSchema::AttrType // enum defined in schema.h. If you rev one, you likely need to rev the other. enum AttributeType { @@ -105,8 +102,8 @@ message AttributeProto { } // The name field MUST be present for this version of the IR. - optional string name = 1; // namespace Attribute - + optional string name = 1; // namespace Attribute + // if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function. // In this case, this AttributeProto does not contain data, and it's a reference of attribute // in parent scope. @@ -122,14 +119,14 @@ message AttributeProto { // 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 accomodate proto3 implementations. - optional AttributeType type = 20; // discriminator that indicates which field below is in use + 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 - optional float f = 2; // float - optional int64 i = 3; // int - optional bytes s = 4; // UTF-8 string - optional TensorProto t = 5; // tensor value - optional GraphProto g = 6; // graph + optional float f = 2; // float + optional int64 i = 3; // int + optional bytes s = 4; // UTF-8 string + optional TensorProto t = 5; // tensor value + optional GraphProto g = 6; // graph // Do not use field below, it's deprecated. // optional ValueProto v = 12; // value - subsumes everything but graph @@ -144,7 +141,7 @@ message AttributeProto { // the shape of the value. message ValueInfoProto { // This field MUST be present in this version of the IR. - optional string name = 1; // namespace Value + optional string name = 1; // namespace Value // This field MUST be present in this version of the IR. optional TypeProto type = 2; // A human-readable documentation for this value. Markdown is allowed. @@ -156,20 +153,20 @@ message ValueInfoProto { // Computation graphs are made up of a DAG of nodes, which represent what is // commonly called a "layer" or "pipeline stage" in machine learning frameworks. // -// For example, it can be a node of type "Conv" that takes in an image, a filter +// For example, it can be a node of type "Conv" that takes in an image, a filter // tensor and a bias tensor, and produces the convolved output. message NodeProto { - repeated string input = 1; // namespace Value - repeated string output = 2; // namespace Value + repeated string input = 1; // namespace Value + repeated string output = 2; // namespace Value // An optional identifier for this node in a graph. // This field MAY be absent in ths version of the IR. - optional string name = 3; // namespace Node + optional string name = 3; // namespace Node // The symbolic identifier of the Operator to execute. optional string op_type = 4; // namespace Operator // The domain of the OperatorSet that specifies the operator named by op_type. - optional string domain = 7; // namespace Domain + optional string domain = 7; // namespace Domain // Additional named attributes. repeated AttributeProto attribute = 5; @@ -236,7 +233,7 @@ message ModelProto { // See https://developers.google.com/protocol-buffers/docs/proto3#maps message StringStringEntryProto { optional string key = 1; - optional string value= 2; + optional string value = 2; }; message QuantInfo { @@ -249,7 +246,7 @@ message QuantInfo { // Graphs // -// A graph defines the computational logic of a model and is comprised of a parameterized +// A graph defines the computational logic of a model and is comprised of a parameterized // list of nodes that form a directed acyclic graph based on their inputs and outputs. // This is the equivalent of the "network" or "graph" in many deep learning // frameworks. @@ -258,7 +255,7 @@ message GraphProto { repeated NodeProto node = 1; // The name of the graph. - optional string name = 2; // namespace Graph + optional string name = 2; // namespace Graph // A list of named tensor values, used to specify constant inputs of the graph. // Each TensorProto entry must have a distinct name (within the list) that @@ -275,7 +272,7 @@ message GraphProto { // Information for the values in the graph. The ValueInfoProto.name's // must be distinct. It is optional for a value to appear in value_info list. repeated ValueInfoProto value_info = 13; - + // This field carries information to indicate the mapping among a tensor and its // quantization parameter tensors. For example: // A tensor “a” and its quantization parameter tensor are “scale_a” and @@ -315,8 +312,8 @@ message TensorProto { DOUBLE = 11; UINT32 = 12; UINT64 = 13; - COMPLEX64 = 14; // complex with float32 real and imaginary components - COMPLEX128 = 15; // complex with float64 real and imaginary components + COMPLEX64 = 14; // complex with float32 real and imaginary components + COMPLEX128 = 15; // complex with float64 real and imaginary components // Non-IEEE floating-point format based on IEEE754 single-precision // floating-point number truncated to 16 bits. @@ -374,7 +371,7 @@ message TensorProto { repeated int64 int64_data = 7 [packed = true]; // Optionally, a name for the tensor. - optional string name = 8; // namespace Value + optional string name = 8; // namespace Value // A human-readable documentation for this tensor. Markdown is allowed. optional string doc_string = 12; @@ -396,6 +393,29 @@ message TensorProto { // When this field is present, the data_type field MUST NOT be STRING or UNDEFINED optional bytes raw_data = 9; + // Data can be stored inside the protobuf file using type-specific fields or raw_data. + // Alternatively, raw bytes data can be stored in an external file, using the external_data field. + // external_data stores key-value pairs describing data location. Recognized keys are: + // - "location" (required) - file path relative to the filesystem directory where the ONNX + // protobuf model was stored + // - "offset" (optional) - position of byte at which stored data begins. Integer stored as string. + // Offset values SHOULD be multiples 4096 (page size) to enable mmap support. + // - "length" (optional) - number of bytes containing data. Integer stored as string. + // - "checksum" (optional) - SHA1 digest of file specified in under 'location' key. + + repeated StringStringEntryProto external_data = 13; + + // Location of the data for this tensor. MUST be one of: + // - DEFAULT - data stored inside the protobuf message. Data is stored in raw_data (if set) otherwise in type-specified field. + // - EXTERNAL - data stored in an external location as described by external_data field. + enum DataLocation { + DEFAULT = 0; + EXTERNAL = 1; + } + + // If value not set, data is stored in raw_data (if set) otherwise in type-specified field. + optional DataLocation data_location = 14; + // For double // Complex128 tensors are encoded as a single array of doubles, // with the real components appearing in odd numbered positions, @@ -418,7 +438,7 @@ message TensorShapeProto { message Dimension { oneof value { int64 dim_value = 1; - string dim_param = 2; // namespace Shape + string dim_param = 2; // namespace Shape }; // Standard denotation can optionally be used to denote tensor // dimensions with standard semantic descriptions to ensure @@ -434,7 +454,6 @@ message TensorShapeProto { // // The standard ONNX data types. message TypeProto { - message Tensor { // This field MUST NOT have the value of UNDEFINED // This field MUST be present for this version of the IR. @@ -442,7 +461,6 @@ message TypeProto { optional TensorShapeProto shape = 2; } - // repeated T message Sequence { // The type and optional shape of each element of the sequence. @@ -476,12 +494,10 @@ message TypeProto { optional TensorShapeProto shape = 2; } - oneof value { // The type of a tensor. Tensor tensor_type = 1; - // NOTE: DNN-only implementations of ONNX MAY elect to not support non-tensor values // as input and output to graphs and nodes. These types are needed to naturally // support classical ML operators. DNN operators SHOULD restrict their input @@ -496,11 +512,10 @@ message TypeProto { Opaque opaque_type = 7; SparseTensor sparse_tensor_type = 8; - } - // An optional denotation can be used to denote the whole - // type with a standard semantic description as to what is + // An optional denotation can be used to denote the whole + // type with a standard semantic description as to what is // stored inside. Refer to https://github.com/onnx/onnx/blob/master/docs/TypeDenotation.md#type-denotation-definition // for pre-defined type denotations. optional string denotation = 6;