モデルの互換性
SiMa.ai コンパイルツールチェーンは、ONNX モデルをインポートし、機械学習アクセラレータ (MLA) 用のオペレーターを準備します。 Modalix 用にモデルを準備する前に、オペレーターのサポート状況を確認するために、このページを使用してください。
サポートされているオペレーター
表を検索して、オペレーターと精度スキームごとのMLAコンパイラのサポート状況を確認してください。INT8 はMLAで動作します。BF16 はModalix(開発者向けプレビュー版)で利用可能です。5D は、5D (N, D, H, W, C) テンソルを受け取るオペレーターを示します。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](depthwise 以外)、[1, 2](depthwise)(SW)。 - Cos — INT8 アクティベーションのみ。bfloat16 アクティベーションを要求するとキャストが挿入され、Cos は INT8 ルックアップテーブル UDF として実行される。
- CumSum — reverse = 0(SW)。
合計軸のサイズ <= 257(SW)。
合計軸はちょうど 1 つであること(SW)。
軸は定数であること(HW)。 - Div — 同じ形状、またはちょうど一方の入力がスカラー、または両方の入力がブロードキャスト可能であること。
- Einsum — 入力テンソルは 2 つであること(SW)。
各変数が少なくとも 2 つのテンソルで使用され、各テンソル内では高々 1 回だけ使用される式をサポートする。最初の条件に違反する例は jk,k->k(j が少なくとも 2 つのテンソルで使用されていない)。2 番目の条件に違反する例は jk,kk->j(k が同じテンソル内で 2 回使用されている)(SW)。 - Expand — 形状はコンパイル時定数であり、ブロードキャスト互換であること。バッチ次元のブロードキャストや変更は不可(SW)。
- Flatten — バッ チ次元を維持するため axis = 1。入力と出力は少なくとも 2D であること(SW)。
- Gather — indices はスカラーのコンパイル時定数であること。インポートされた Take には axis が必要で、StridedSlice に書き換えられること。実行時または 1D の indices、および Take の MLA 上での直接実行はサポートしない(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 が完全に MLA 上に残るのは [1,N]、[M,1]、[M,N] の場合のみ。実行時のスカラー 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)。
ゼロ以外のパディング幅を持つ次元は高々 2 つ(SW)。 - Pow — 入力の指数はスカラー定数 0.5、-0.5、2、または 3(SW)。
- PRelu — alpha は 1D(SW)。
- ReduceL1 — axes が属性となるよう ONNX opset <= 17 を使用すること。空間軸の一部をリダクションする場合、各対象次元のサイズは < 128。すべての空間軸をリダクションする場合はサイズ制限なし(SW/HW)。
- ReduceL2 — 後続の DIV と結合して L2 正規化になることを想定する。
- ReduceLogSum — axes が属性となるよう ONNX opset <= 17 を使用すること。空間軸の一部をリダクションする場合、各対象次元のサイズは < 128。すべての空間軸をリダクションする場合はサイズ制限なし。リダクション後の合計は Log の定義域内であること(SW/HW)。
- ReduceLogSumExp — axes が属性となるよう ONNX opset <= 17 を使用すること。空間軸の一部をリダクションする場合、各対象次元のサイズは < 128。すべての空間軸をリダクションする場合はサイズ制限なし(SW/HW)。
- ReduceMean — 1D リダクションでは、軸は空間次元のみ(SW)。
すべての空間軸が対象の場合はサイズ制限なし。それ以外は空間軸のサイズ < 128(HW)。 - ReduceMin — まだサポートされていない(SW)。
- ReduceSum — 1D リダクションでは、軸は空間次元のみ(SW)。
すべての空間軸が対象の場合はサイズ制限なし。それ以外は空間軸のサイズ < 128(SW)。 - ReduceSumSquare — axes が属性となるよう ONNX opset <= 17 を使用すること。空間軸の一部をリダクションする場合、各対象次元のサイズは < 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)。
その他の方式やスケール係数はサポートしない。
入力は 1 つのみ(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)。