模型相容性
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)。