Перейти до основного вмісту

Сумісність моделей

Інструмент компіляції SiMa.ai імпортує моделі ONNX та готує оператори для прискорення машинного навчання (MLA). Використовуйте цю сторінку, щоб перевірити підтримку операторів, перш ніж готувати модель для Modalix.

Підтримувані оператори​

Перегляньте таблицю, щоб перевірити підтримку MLA для операторів та схеми точності. INT8 працює на MLA. BF16 доступний на Modalix (бета-версія). 5D позначає оператори, які приймають тензори 5D (N, D, H, W, C). Opset – версія оператора ONNX. Пошук здійснюється як за текстом обмеження, так і за назвами операторів, і кожен оператор посилається на його документацію на 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 — Однакова форма, або рівно один вхід є скаляром, або обидва входи допускають трансляцію (broadcasting).
  • ArgMax — Вихід має тип int32 (HW не підтримує int64).
    axis — лише вісь каналів (SW).
  • AveragePool — count_include_pad = 1 (HW).
    kernel_shape: для глобального пулінгу обмеження розміру немає; інакше розмір < 128 (HW. Можливий обхід засобами SW).
    dilations = 1 для новіших версій opset (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 як UDF із таблицею пошуку INT8.
  • CumSum — reverse = 0 (SW).
    Розмір уздовж осі сумування <= 257 (SW).
    Має бути рівно одна вісь сумування (SW).
    Вісь має бути константою (HW).
  • Div — Однакова форма, або рівно один вхід є скаляром, або обидва входи допускають трансляцію (broadcasting).
  • Einsum — Має бути два вхідні тензори (SW).
    Підтримуються рівняння, у яких кожна змінна використовується щонайменше у двох тензорах і не більш ніж один раз у кожному тензорі. Приклад порушення першої умови: jk,k->k (j не використовується щонайменше у двох тензорах). Приклад порушення другої умови: jk,kk->j (k використовується двічі в одному тензорі) (SW).
  • Expand — Форма має бути константою часу компіляції та сумісною для трансляції (broadcasting). Пакетний вимір не можна транслювати або змінювати (SW).
  • Flatten — axis = 1, щоб зберегти пакетний вимір. Вхід і вихід повинні мати щонайменше 2 виміри (SW).
  • Gather — indices має бути скалярною константою часу компіляції. Імпортований Take повинен мати axis, щоб його можна було перетворити на StridedSlice. Індекси часу виконання або 1D та безпосереднє виконання Take на MLA не підтримуються (SW).
  • Gelu — approximate = "none" (SW).
  • Gemm — A і B повинні мати ранг 2. B має бути константним ініціалізатором часу компіляції; вхід B часу виконання не підтримується та спричиняє помилку до поділу графа між обчислювальними модулями. alpha і beta можуть бути скінченними значеннями з рухомою комою. Підтримується transB = 0 або 1. Для transA = 1 потрібне flexible_batch_size=False, оскільки перший вимір A — це K, а не пакетний вимір. Необов'язкова константа 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 — Вхід і вихід повинні мати щонайменше 2 виміри (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 — Однакова форма, або рівно один вхід є скаляром, або обидва входи допускають трансляцію (broadcasting).
  • Pad — mode: лише режим ‘constant’ зі значенням 0 (SW).
    Ненульову ширину доповнення можуть мати щонайбільше 2 виміри (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 — Для редукції за однією віссю дозволена лише просторова вісь (SW).
    Для всіх просторових осей обмеження розміру немає; інакше розмір уздовж просторових осей < 128 (HW).
  • ReduceMin — Ще не підтримується (SW).
  • ReduceSum — Для редукції за однією віссю дозволена лише просторова вісь (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' коефіцієнт масштабування має бути степенем двійки (HW) або парним числом. Для парного числа коефіцієнт однаковий в обох вимірах, coordinate_transformation_mode має бути half_pixel, а режим округлення — floor (SW).
    Інші методи або коефіцієнти масштабування не підтримуються.

    Лише один вхід (SW).
  • Sin — Лише активації INT8. Запит активацій bfloat16 вставляє перетворення типів і виконує Sin як UDF із таблицею пошуку INT8.
  • Slice — Кроки мають бути додатними (SW).
  • Softmax — Уздовж осі каналів.
  • Squeeze — Вхід Axes має бути константою часу компіляції, може вибирати лише виміри розміру 1 і не може видаляти пакетну вісь. Вихід повинен мати щонайменше 2 виміри (SW).
  • Sub — Однакова форма, або рівно один вхід є скаляром, або обидва входи допускають трансляцію (broadcasting).
  • Sum — Усі входи повинні мати однаковий ранг і пакетний вимір. Інші виміри мають бути однаковими або дорівнювати 1 (SW).
  • Tile — Repeats має бути константою часу компіляції, а кількість повторень уздовж пакетної осі — 1. Вхід і вихід повинні мати щонайменше 2 виміри (SW).
  • TopK — K має бути константою часу компіляції, 1 <= K < розмір вибраної осі, а largest = 1. Вхід і виходи повинні мати щонайменше 2 виміри. Індекси ONNX типу int64 виводяться як int32, оскільки MLA не підтримує int64 (SW/HW).
  • Transpose — Без залучення пакетної осі.
  • Unsqueeze — Вхід Axes має бути константою часу компіляції й не може вставляти нову пакетну вісь. Вхід і вихід повинні мати щонайменше 2 виміри (SW).