メインコンテンツまでスキップ

モデルの互換性

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)。