본문으로 건너뛰기

모델 호환성

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).
    합산 축은 정확히 하나여야 한다(SW).
    축은 상수여야 한다(HW).
  • Div — 같은 형상이거나, 정확히 하나의 입력이 스칼라이거나, 두 입력 모두 브로드캐스트 가능해야 한다.
  • Einsum — 입력 텐서는 두 개여야 한다(SW).
    각 변수가 최소 두 텐서에서 사용되고, 각 텐서에서는 최대 한 번 사용되는 모든 수식을 지원한다. 첫 번째 조건에 위배되는 예는 jk,k->k(j가 최소 두 텐서에서 사용되지 않음)이다. 두 번째 조건에 위배되는 예는 jk,kk->j(k가 같은 텐서에서 두 번 사용됨)이다(SW).
  • Expand — 형상은 컴파일 시점 상수이며 브로드캐스트 호환성이 있어야 한다. 배치 차원은 브로드캐스트하거나 변경할 수 없다(SW).
  • Flatten — 배치 차원을 유지하도록 axis = 1이어야 한다. 입력과 출력은 최소 2D여야 한다(SW).
  • Gather — indices는 스칼라 컴파일 타임 상수여야 한다. 가져온 Take에는 StridedSlice로 다시 쓸 수 있도록 axis가 있어야 한다. 런타임 또는 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 속성이 없으므로 선택한 축의 분산은 0이 아니어야 한다.
  • Mul — 같은 형상이거나, 정확히 하나의 입력이 스칼라이거나, 두 입력 모두 브로드캐스트 가능해야 한다.
  • Pad — mode: 값이 0인 ‘constant’ 모드만 지원한다(SW).
    0이 아닌 패딩 너비를 가진 차원은 최대 두 개이다(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).
    그 외의 방식이나 배율은 지원하지 않는다.

    입력은 하나만 지원한다(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).