ONNX 文字語法¶
總覽¶
此文件描述了 ONNX 模型的文字語法,目前這是一個實驗性功能。此語法能夠以精簡且可讀的方式表示 ONNX 模型。其動機來自於幾個使用案例。一是為了能在 CI 中對測試案例進行精簡描述及其應用(無論是在 ONNX 儲存庫還是其他相關儲存庫如 ONNX-MLIR 中)。二是為了協助簡化 ONNX 函數的定義。許多現有的函數定義都很冗長,使用此語法將能讓函數定義更精簡、可讀且易於維護。有效率地表示和剖析非常大的張量常數並不是目標。應該使用其他方法來實現這一點。
API¶
主要的剖析器方法是 OnnxParser::Parse
方法,如下所示。
const char* code = R"ONNX(
<
ir_version: 7,
opset_import: [ "" : 10 ]
>
agraph (float[N, 128] X, float[128, 10] W, float[10] B) => (float[N, 10] C)
{
T = MatMul(X, W)
S = Add(T, B)
C = Softmax(S)
}
)ONNX";
ModelProto model;
OnnxParser::Parse(model, code);
checker::check_model(model);
請參閱 測試案例 以取得更多範例說明 API 和語法。
語法¶
下面的文法描述了此語法
id-list ::= id (',' id)*
quotable-id-list ::= quotable-id (',' quotable-id)*
tensor-dim ::= '?' | id | int-constant
tensor-dims ::= tensor-dim (',' tensor-dim)*
tensor-type ::= prim-type | prim-type '[' ']' | prim-type '[' tensor-dims ']'
type ::= tensor-type | 'seq' '(' type ')' | 'map' '(' prim-type ',' type ')'
| 'optional' '(' type ')' | 'sparse_tensor' '(' tensor-type ')'
value-info ::= type quotable-id
value-infos ::= value-info (',' value-info)*
value-info-list ::= '(' value-infos? ')
id-or-value-info ::= type? quotable-id
id-or-value-infos ::= id-or-value-info (',' id-or-value-info)*
quoted-str :== '"' ([^"])* '"'
quotable-id :== id | quoted-str
str-str :== quoted-str ':' quoted-str
str-str-list :== '[' str-str (',' str-str)* ']'
internal-data ::= '{' prim-constants '}'
external-data ::= str-str-list
constant-data ::= internal-data | external-data
value-info-or-initializer ::= type quotable-id [ '=' constant-data ]
value-info-or-initializers ::= value-info-or-initializer (',' value-info-or-initializer)*
input-list ::= '(' value-info-or-initializers? ')'
output-list ::= '(' value-infos? ')'
initializer-list ::= '<' value-info-or-initializers? '>'
prim-constants ::= prim-constant (',' prim-constant)*
tensor-constant ::= tensor-type (quotable-id)? ('=')? '{' prim-constants '}'
attr-ref ::= '@' id
single-attr-value ::= tensor-constant | graph | prim-constant | attr-ref
attr-value-list ::= '[' single-attr-value (',' single-attr-value)* ']'
attr-value ::= single-attr-value | attr-value-list
attr-type ::= ':' id
attr ::= id attr-type? '=' attr-value
attr-list ::= '<' attr (',' attr)* '>'
node-label ::= '[' quotable-id ']'
node ::= node-label? quotable-id-list? '=' qualified-id attr-list? '(' quotable-id-list? ')'
| node-label? quotable-id-list? '=' qualified-id '(' quotable-id-list? ')' attr-list
node-list ::= '{' node* '}'
graph ::= quotable-id input-list '=>' output-list initializer-list node-list
other-data ::= id ':' value
other-data-list ::= '<' other-data (',' other-data)* '>'
fun-attr-list ::= '<' id | attr (',' id | attr)* '>'
fun-input-list ::= '(' id-or-value-infos ')'
fun-output-list ::= '(' id-or-value-infos ')'
fun-value-infos ::= ( '<' value-infos '>' )?
function ::= other-data-list? id fun-attr-list? quotable-id fun-input-list '=>' fun-output-list fun-value-infos node-list
model ::= other-data-list? graph function*