跳至主要内容

模型相容性

SiMa.ai 編譯工具鏈可以導入 ONNX 類型的模型,並為機器學習加速器 (MLA) 準備運算子。 請使用此頁面來檢查運算子是否支援,以便您為 Modalix 準備模型。

支援的運算子​

搜尋表格以查看運算子和精確度方案的 MLA 支援情況。 INT8 支援 MLA。 BF16 則可在 Modalix 上使用(開發者預覽版)。 5D 標示支援 5D (N, D, H, W, C) tensors 的運算子。 Opset 是 ONNX 的 opset 版本。 搜尋結果會同時搜尋限制文字和運算子名稱,每個運算子都會連結到 onnx.ai 上的參考資料。

75 of 75 operators
Abs✅✅—13
Add✅✅—14
ArgMax✅✅—13
AveragePool✅✅—11
BatchNormalization———15
Clip✅✅—13
Concat✅✅✅13
Conv✅✅✅11
ConvTranspose✅✅✅11
Cos✅❌✅22
CumSum———14
DepthToSpace✅✅—13
Div✅✅—14
Einsum✅✅—12
Elu✅✅—6
Erf✅✅—13
Exp✅✅—13
Expand✅✅✅13
Flatten✅✅—21
Gather✅✅—13
Gelu✅✅—20
Gemm✅✅—13
GlobalAveragePool✅✅—13
GlobalLpPool✅❌—22
GlobalMaxPool✅✅—13
GridSample❌✅—16
HardSigmoid✅✅—6
HardSwish✅✅—14
InstanceNormalization✅✅✅6
LayerNormalization✅✅—17
LeakyRelu✅✅—16
Log✅❌—13
LogSoftmax✅❌—13
LpPool✅❌—22
LRN✅❌—13
MatMul✅✅—13
MaxPool✅✅—12
Mean✅❌—13
MeanVarianceNormalization✅❌❌13
Mish✅❌—22
Mul✅✅—14
Neg✅✅—13
Pad✅✅—13
Pow✅✅✅15
PRelu✅✅—16
Reciprocal✅✅—13
ReduceL1✅✅—17
ReduceL2✅✅—18
ReduceLogSum✅❌—17
ReduceLogSumExp✅❌—17
ReduceMax✅✅—13
ReduceMean✅✅—13
ReduceMin❌❌—13
ReduceSum✅✅—13
ReduceSumSquare✅✅—17
Relu✅✅—14
Reshape✅✅✅14
Resize✅✅—13
Sigmoid✅✅—13
Sin✅❌✅22
Slice✅✅—13
Softmax✅✅—13
Softplus✅✅—1
Softsign✅✅—22
SpaceToDepth✅✅—13
Split✅✅—13
Sqrt✅❌—13
Squeeze✅✅—21
Sub✅✅—14
Sum✅✅—13
Tanh✅✅—13
Tile✅✅—13
TopK✅✅—11
Transpose✅✅—13
Unsqueeze✅✅—21

限制​

以下運算子有以下限制。未在此處列出的運算子沒有額外限制。如果限制指定一個 ONNX 屬性,請在匯出模型時設定該屬性。

  • Add — 形狀相同,或恰有一個輸入為純量,或兩個輸入皆可廣播。
  • ArgMax — 輸出為 int32(HW 不支援 int64)。
    axis 僅限通道軸(SW)。
  • AveragePool — count_include_pad = 1(HW)。
    kernel_shape:全域池化無大小限制;否則大小 < 128(HW,可透過 SW 繞過限制)。
    較新 opset 的 dilations = 1(HW)。
  • BatchNormalization — training_mode = 0(SW)。
  • Concat — 不可沿批次軸串接。
  • Conv — dilation = [1, 63](HW)。
    strides = [1, 31](HW)。
  • ConvTranspose — dilations == 1(HW)。
    group = 1(HW)或逐通道卷積(depthwise)(SW)。
    stride = [1, 2, 4, 8, 16](非逐通道卷積);[1, 2](逐通道卷積)(SW)。
  • Cos — 僅支援 INT8 啟用值。要求 bfloat16 啟用值時會插入型別轉換,並將 Cos 作為 INT8 查找表 UDF 執行。
  • CumSum — reverse = 0(SW)。
    加總軸的大小 <= 257(SW)。
    必須恰有一個加總軸(SW)。
    軸必須為常數(HW)。
  • Div — 形狀相同,或恰有一個輸入為純量,或兩個輸入皆可廣播。
  • Einsum — 必須有兩個輸入張量(SW)。
    支援每個變數至少用於兩個張量,且在每個張量中最多出現一次的方程式。違反第一個條件的例子為 jk,k->k(j 未用於至少兩個張量)。違反第二個條件的例子為 jk,kk->j(k 在同一個張量中使用兩次)(SW)。
  • Expand — 形狀必須為編譯時期常數,且具有廣播相容性。批次維度不可廣播或變更(SW)。
  • Flatten — axis = 1,以保留批次維度。輸入與輸出必須至少為 2D(SW)。
  • Gather — indices 必須是編譯時期的純量常數。匯入的 Take 必須具有 axis,才能改寫為 StridedSlice。不支援執行階段或 1D indices,也不支援直接在 MLA 上執行 Take。(SW)
  • Gelu — approximate = "none"(SW)。
  • Gemm — A 與 B 必須為秩 2。B 必須為編譯時期常數初始值;不支援執行階段的 B 輸入,並會在後端分割前失敗。alpha 與 beta 可為有限的浮點數值。支援 transB = 0 或 1。transA = 1 時,A 的第一個維度為 K 而非批次維度,因此必須設定 flexible_batch_size=False。選用的常數 C 支援純量、[N]、[1,N] 或 [M,N];不支援常數 [M,1]。執行階段的 C 僅在 [1,N]、[M,1] 或 [M,N] 時完全保留於 MLA;執行階段的純量 C 或 [N] C 會退回 APU 執行。
  • GlobalLpPool — p = 2。靜態輸入形狀。輸入秩 = 3、4 或 5(SW)。
  • GridSample — RaftStereo 專用的受限核心:僅沿 W 軸取樣(SW)。
    mode = 'linear'
    padding_mode != 'reflection'
  • InstanceNormalization — 僅支援 4D 與 5D 張量(SW)。
  • LayerNormalization — 不支援 stash_type = 10(FLOAT16)(SW)。
  • LogSoftmax — 輸入與輸出必須至少為 2D(SW)。
  • LpPool — p = 2。dilation = 1。ceil_mode = 0。靜態形狀。除全域池化外,每個空間維度的核心大小皆須 < 128(HW/SW)。
  • MaxPool — dilations = 1(HW)。
    kernel_shape:全域池化無大小限制;否則大小 < 128(HW)。

    storage_order:不支援選用的索引張量輸出(SW)。
  • Mean — 所有輸入必須具有相同形狀與批次維度。輸入數量須少於 128(SW/HW)。
  • MeanVarianceNormalization — 僅支援 INT8 啟用值。要求 bfloat16 啟用值時會插入型別轉換,但 sqrt/rsqrt 及部分縮減路徑仍以 INT8 執行。秩 5(3D 空間)的軸處理取決於配置模式,通常不受支援;為確保可攜式 MLA 支援,請使用秩 4 以下。由於此 ONNX 運算子沒有 epsilon 屬性,所選軸必須產生非零變異數。
  • Mul — 形狀相同,或恰有一個輸入為純量,或兩個輸入皆可廣播。
  • Pad — mode:僅支援填充值為 0 的 ‘constant’ 模式(SW)。
    最多可有兩個維度具非零填充寬度(SW)。
  • Pow — 輸入指數須為純量常數 0.5、-0.5、2 或 3(SW)。
  • PRelu — alpha 須為 1D(SW)。
  • ReduceL1 — 使用 ONNX opset <= 17,使 axes 為屬性。若僅縮減部分空間軸,每個縮減維度的大小須 < 128;若縮減所有空間軸,則無大小限制(SW/HW)。
  • ReduceL2 — 預期與後續 DIV 合併為 L2 正規化。
  • ReduceLogSum — 使用 ONNX opset <= 17,使 axes 為屬性。若僅縮減部分空間軸,每個縮減維度的大小須 < 128;若縮減所有空間軸,則無大小限制。縮減後的總和須位於 Log 的定義域內(SW/HW)。
  • ReduceLogSumExp — 使用 ONNX opset <= 17,使 axes 為屬性。若僅縮減部分空間軸,每個縮減維度的大小須 < 128;若縮減所有空間軸,則無大小限制(SW/HW)。
  • ReduceMean — 1D 縮減僅限空間維度軸(SW)。
    若縮減所有空間軸,則無大小限制;否則空間軸的大小須 < 128(HW)。
  • ReduceMin — 尚未支援(SW)。
  • ReduceSum — 1D 縮減僅限空間維度軸(SW)。
    若縮減所有空間軸,則無大小限制;否則空間軸的大小須 < 128(SW)。
  • ReduceSumSquare — 使用 ONNX opset <= 17,使 axes 為屬性。若僅縮減部分空間軸,每個縮減維度的大小須 < 128;若縮減所有空間軸,則無大小限制(SW/HW)。
  • Reshape — allowzero = 0(SW)。
    形狀不可為空(SW)。
  • Resize — mode = [nearest, linear](HW/SW)。
    不支援 coordinate_transformation_mode= 'tf_crop_and_resize'(SW)。
    'linear' 支援任意縮放係數。不過,
    對 8 位元整數而言,超過 63 的縮放係數可能導致精度下降(HW)。
    'nearest' 的縮放係數必須為 2 的次方(HW)或偶數。若為偶數,兩個維度須使用相同係數,coordinate_transformation_mode 須為 half_pixel,取整模式須為 floor(SW)。
    不支援其他方法或縮放係數。

    僅支援單一輸入(SW)。
  • Sin — 僅支援 INT8 啟用值。要求 bfloat16 啟用值時會插入型別轉換,並將 Sin 作為 INT8 查找表 UDF 執行。
  • Slice — 步幅須為正值(SW)。
  • Softmax — 沿通道軸執行。
  • Squeeze — Axes 輸入必須為編譯時期常數,僅可選擇大小為 1 的維度,且不可移除批次軸。輸出必須至少為 2D(SW)。
  • Sub — 形狀相同,或恰有一個輸入為純量,或兩個輸入皆可廣播。
  • Sum — 所有輸入必須具有相同秩與批次維度。其他維度須相同或為 1(SW)。
  • Tile — Repeats 必須為編譯時期常數,且批次軸的重複次數須為 1。輸入與輸出必須至少為 2D(SW)。
  • TopK — K 必須為編譯時期常數,且 1 <= K < 所選軸大小,largest = 1。輸入與輸出必須至少為 2D。由於 MLA 不支援 int64,ONNX int64 索引會以 int32 輸出(SW/HW)。
  • Transpose — 不可涉及批次軸。
  • Unsqueeze — Axes 輸入必須為編譯時期常數,且不可插入新的批次軸。輸入與輸出必須至少為 2D(SW)。