Open1
AX620EのNPU対応OP一覧

Module-LLM(AX620E)NPUオペレーターサポート一覧
カテゴリ別オペレーター数
カテゴリ | オペレーター数 | オペレーター一覧 |
---|---|---|
基本的な算術演算子 | 7 | Add (+), Sub (-), Mul (*), Div (/), Max, Min, Pow |
活性化関数 | 14 | Relu, Sigmoid, Tanh, LeakyRelu, Elu, Gelu, HardSigmoid, HardSwish, Softmax, Softplus, PRelu, Mish, Silu, Swish |
正規化層 | 4 | BatchNormalization, LayerNormalization, InstanceNormalization, LpNormalization |
畳み込み演算 | 6 | Conv, ConvTranspose, AveragePool, MaxPool, GlobalAveragePool, GlobalMaxPool |
削減演算 | 4 | ReduceSum, ReduceMean, ReduceMax, ReduceL2 |
形状操作 | 7 | Reshape, Transpose, Squeeze, Unsqueeze, Flatten, DepthToSpace, SpaceToDepth |
比較演算子 | 5 | Equal (==), Greater (>), GreaterOrEqual (>=), Less (<), LessOrEqual (<=) |
数学関数 | 7 | Abs, Sqrt, Exp, Sin, Ceil, Erf, Clip |
その他の演算子 | 20 | Where, Gather, Split, Concat, Slice, Cast, TopK, ArgMax, ArgMin, Constant, ConstantOfShape, Identity, Expand, LSTM, Pad, GridSample, Resize, SpatialTransformer, MatMul, Gemm |
基本的な算術演算子
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Add | + |
Add(A, B) |
torch.add(a, b) または a + b
|
無制限 |
Sub | - |
Sub(A, B) |
torch.sub(a, b) または a - b
|
無制限 |
Mul | * |
Mul(A, B) |
torch.mul(a, b) または a * b
|
無制限 |
Div | / |
Div(A, B) |
torch.div(a, b) または a / b
|
無制限 |
Max | max() |
Max(A, B) |
torch.max(a, b) |
無制限 |
Min | min() |
Min(A, B) |
torch.min(a, b) |
無制限 |
Pow | ** |
Pow(A, B) |
torch.pow(a, b) または a ** b
|
スカラー指数のみ |
注意点:
- すべての演算はブロードキャスティングをサポート
- PyTorchではインプレース演算(末尾に
_
を付ける)で元のテンソルを直接変更可能 - ONNXのバージョンによって利用可能な演算子や動作が異なる場合あり
- GPU/CPU間のテンソルでの直接演算は不可(PyTorch)
- 異なる型のテンソル間では自動的に型変換が行われる場合あり
活性化関数
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Relu | relu() |
Relu(X) |
torch.relu(x) または nn.ReLU()
|
無制限 |
Sigmoid | sigmoid() |
Sigmoid(X) |
torch.sigmoid(x) または nn.Sigmoid()
|
無制限 |
Tanh | tanh() |
Tanh(X) |
torch.tanh(x) または nn.Tanh()
|
無制限 |
LeakyRelu | leaky_relu() |
LeakyRelu(X, alpha) |
torch.nn.LeakyReLU(alpha) |
無制限 |
Elu | elu() |
Elu(X, alpha) |
torch.nn.ELU(alpha) |
無制限 |
Gelu | gelu() |
Gelu(X) |
torch.nn.GELU() |
無制限 |
HardSigmoid | hardsigmoid() |
HardSigmoid(X, alpha, beta) |
torch.nn.Hardsigmoid() |
無制限 |
HardSwish | hardswish() |
HardSwish(X) |
torch.nn.Hardswish() |
無制限 |
Softmax | softmax() |
Softmax(X, axis) |
torch.nn.Softmax(dim) |
axis: 無制限 |
Softplus | softplus() |
Softplus(X) |
torch.nn.Softplus() |
無制限 |
PRelu | prelu() |
PRelu(X, slope) |
torch.nn.PReLU() |
特定の形状制限あり |
Mish | mish() |
Mish(X) |
torch.nn.Mish() |
無制限 |
Silu | silu() |
Silu(X) |
torch.nn.SiLU() |
無制限 |
Swish | swish() |
Silu(X) |
torch.nn.SiLU() |
無制限 |
注意点:
- PyTorchでは、関数形式(
torch.relu()
)とモジュール形式(nn.ReLU()
)の両方を使用可能 - ONNXでは、オペレータのバージョンによって利用可能な機能が異なる
- PyTorchのモジュール形式は、学習可能なパラメータを持つ場合がある(例:PReLU)
- いくつかの関数(SiLUとSwish)は同じ実装を共有
- GPU/CPU間のテンソルでの直接演算は不可(PyTorch)
正規化層
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
BatchNormalization | batch_norm() |
BatchNormalization(X, scale, B, mean, var) |
torch.nn.BatchNorm2d(num_features) |
training_mode非サポート |
LayerNormalization | layer_norm() |
LayerNormalization(X, scale, B) |
torch.nn.LayerNorm(normalized_shape) |
axis: -1のみ |
InstanceNormalization | instance_norm() |
InstanceNormalization(X, scale, B) |
torch.nn.InstanceNorm2d(num_features) |
epsilon: 無制限 |
LpNormalization | lp_norm() |
LpNormalization(X, p) |
torch.nn.functional.normalize(x, p) |
axis: -1のみ、p: 1または2 |
注意点:
-
PyTorchでは各正規化層に対して、1D、2D、3D版が用意されている
- BatchNorm1d、BatchNorm2d、BatchNorm3d
- InstanceNorm1d、InstanceNorm2d、InstanceNorm3d
-
パラメータの説明:
- γ (scale): スケーリングパラメータ
- β (B): バイアスパラメータ
- ε (epsilon): 数値安定性のための小さな定数
- μ (mean): 平均
- σ² (var): 分散
-
ONNXでの制限:
- BatchNormalizationはトレーニングモードをサポートしない
- LayerNormalizationは最後の次元に対してのみ正規化を行う
- LpNormalizationはp=1またはp=2のみサポート
-
PyTorchでの追加機能:
- 学習時とテスト時の動作を制御するtraining引数
- モメンタムの設定が可能
- running_mean、running_varの追跡が可能
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Conv | conv2d() |
Conv(X, W, B, kernel_shape) |
torch.nn.Conv2d(in_channels, out_channels, kernel_size) |
auto_pad: NOTSETのみ |
ConvTranspose | conv_transpose2d() |
ConvTranspose(X, W, B, kernel_shape) |
torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size) |
dilation: 1のみ |
AveragePool | avg_pool2d() |
AveragePool(X, kernel_shape) |
torch.nn.AvgPool2d(kernel_size) |
auto_pad: NOTSETのみ |
MaxPool | max_pool2d() |
MaxPool(X, kernel_shape) |
torch.nn.MaxPool2d(kernel_size) |
auto_pad: NOTSETのみ |
GlobalAveragePool | global_avg_pool2d() |
GlobalAveragePool(X) |
torch.nn.AdaptiveAvgPool2d(1) |
無制限 |
GlobalMaxPool | global_max_pool2d() |
GlobalMaxPool(X) |
torch.nn.AdaptiveMaxPool2d(1) |
無制限 |
注意点:
-
PyTorchでは1D、2D、3Dバージョンが利用可能:
- Conv1d、Conv2d、Conv3d
- ConvTranspose1d、ConvTranspose2d、ConvTranspose3d
- AvgPool1d、AvgPool2d、AvgPool3d
- MaxPool1d、MaxPool2d、MaxPool3d
-
パラメータの説明:
- kernel_size: カーネルのサイズ
- stride: ストライド
- padding: パディング
- dilation: 拡張率
- groups: グループ数
- bias: バイアスの有無
-
PyTorchの追加パラメータ:
- padding_mode: パディングモード('zeros', 'reflect', 'replicate', 'circular')
- return_indices: MaxPoolで最大値のインデックスを返すかどうか
-
ONNXの制限:
- auto_padがNOTSETのみサポート(明示的なパディング指定が必要)
- ConvTransposeではdilationが1のみサポート
削減演算
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
ReduceSum | sum() |
ReduceSum(X, axes) |
torch.sum(input, dim) |
noop_with_empty_axes未サポート |
ReduceMean | mean() |
ReduceMean(X, axes) |
torch.mean(input, dim) |
noop_with_empty_axes未サポート |
ReduceMax | max() |
ReduceMax(X, axes) |
torch.max(input, dim) |
noop_with_empty_axes未サポート |
ReduceL2 | norm() |
ReduceL2(X, axes) |
torch.norm(input, p=2, dim) |
noop_with_empty_axes未サポート |
注意点:
-
PyTorchのパラメータ:
- input: 入力テンソル
- dim: 削減する次元(複数次元可)
- keepdim: 削減された次元を1として保持するかどうか
-
ONNXのパラメータ:
- axes: 削減する軸(複数軸可)
- keepdims: 削減された次元を保持するかどうか
- noop_with_empty_axes: 空の軸リストの扱い(現在未サポート)
-
共通の機能:
- 複数の次元に対して同時に削減操作が可能
- keepdims/keepdimオプションで出力形状の制御が可能
-
主な違い:
- PyTorchは
dim
パラメータ、ONNXはaxes
パラメータを使用 - PyTorchではより多くの削減演算が利用可能(例:prod, amax, amin など)
- PyTorchは
形状操作
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Reshape | reshape() |
Reshape(data, shape) |
torch.reshape(input, shape) または tensor.reshape(shape)
|
無制限 |
Transpose | transpose() |
Transpose(data, perm) |
torch.transpose(input, dim0, dim1) または tensor.transpose(dim0, dim1)
|
無制限 |
Squeeze | squeeze() |
Squeeze(data, axes) |
torch.squeeze(input, dim) または tensor.squeeze(dim)
|
axes: 無制限 |
Unsqueeze | unsqueeze() |
Unsqueeze(data, axes) |
torch.unsqueeze(input, dim) または tensor.unsqueeze(dim)
|
axes: 無制限 |
Flatten | flatten() |
Flatten(input, axis) |
torch.flatten(input, start_dim, end_dim) または tensor.flatten(start_dim, end_dim)
|
無制限 |
DepthToSpace | pixel_shuffle() |
DepthToSpace(input, blocksize) |
torch.nn.PixelShuffle(upscale_factor) |
mode: DCRのみ |
SpaceToDepth | pixel_unshuffle() |
SpaceToDepth(input, blocksize) |
torch.nn.PixelUnshuffle(downscale_factor) |
blocksize: 無制限 |
注意点:
-
形状変更の基本操作:
- Reshapeは総要素数を保持したまま形状を変更
- Transposeは軸の順序を変更
- Squeeze/Unsqueezeは次元の追加/削除
-
PyTorchの特徴:
- ほとんどの操作がテンソルメソッドとして利用可能
- view()メソッドはreshapeの代替として使用可能(メモリ配置が連続的な場合)
- permute()メソッドは複数の軸の転置に対応
-
ONNXの制限:
- DepthToSpaceはDCRモードのみサポート
- 一部の操作で軸の指定方法がPyTorchと異なる
-
メモリ効率:
- reshape/viewは可能な場合メモリコピーを避ける
- transposeは通常メモリコピーが必要
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Equal | == |
Equal(A, B) |
torch.eq(a, b) または a == b
|
無制限 |
Greater | > |
Greater(A, B) |
torch.gt(a, b) または a > b
|
無制限 |
GreaterOrEqual | >= |
GreaterOrEqual(A, B) |
torch.ge(a, b) または a >= b
|
無制限 |
Less | < |
Less(A, B) |
torch.lt(a, b) または a < b
|
無制限 |
LessOrEqual | <= |
LessOrEqual(A, B) |
torch.le(a, b) または a <= b
|
無制限 |
注意点:
-
比較演算の結果:
- すべての比較演算は、ブール型のテンソルを返す
- 要素ごとに比較が行われる
-
PyTorchの特徴:
- 関数形式(torch.eq)と演算子形式(==)の両方が使用可能
- ブロードキャスティングをサポート
- バッチ処理に対応
-
ONNXの特徴:
- すべての比較演算子は要素ごとに適用
- 入力テンソルは同じ形状であるか、ブロードキャスト可能である必要がある
-
共通の注意点:
- 浮動小数点の比較は数値誤差に注意が必要
- 異なるデータ型間の比較は自動的な型変換が行われる場合がある
数学関数
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Abs | abs() |
Abs(X) |
torch.abs(x) または x.abs()
|
無制限 |
Sqrt | sqrt() |
Sqrt(X) |
torch.sqrt(x) または x.sqrt()
|
無制限 |
Exp | exp() |
Exp(X) |
torch.exp(x) または x.exp()
|
無制限 |
Sin | sin() |
Sin(X) |
torch.sin(x) または x.sin()
|
無制限 |
Ceil | ceil() |
Ceil(X) |
torch.ceil(x) または x.ceil()
|
無制限 |
Erf | erf() |
Erf(X) |
torch.erf(x) または x.erf()
|
無制限 |
Clip | clip() |
Clip(X, min, max) |
torch.clamp(x, min, max) または x.clamp(min, max)
|
無制限 |
注意点:
-
PyTorchの特徴:
- すべての関数がテンソルメソッドとして利用可能
- インプレース操作が可能(末尾に_を付ける)
- GPU上での計算に対応
-
ONNXの特徴:
- 入力はスカラーまたはテンソル
- ブロードキャスティングをサポート
-
共通の機能:
- 要素ごとに関数が適用される
- バッチ処理に対応
- 自動微分に対応
-
数値的な考慮事項:
- Sqrt: 負の入力に対する動作に注意
- Exp: オーバーフローに注意
- Clip: min_val ≤ max_valである必要がある
その他の演算子
オペレーター | 演算子 | ONNX構文 | PyTorch構文 | ax630c制限 |
---|---|---|---|---|
Where | where() |
Where(condition, X, Y) |
torch.where(condition, x, y) |
無制限 |
Gather | gather() |
Gather(data, indices) |
torch.gather(input, dim, index) |
indices: 1次元のみ |
Split | split() |
Split(input, split) |
torch.split(tensor, split_size_or_sections) |
無制限 |
Concat | cat() |
Concat(inputs, axis) |
torch.cat(tensors, dim) |
axis: 無制限 |
Slice | slice() |
Slice(input, starts, ends) |
tensor[start:end] または torch.slice(input, dim)
|
無制限 |
Cast | to() |
Cast(input, to) |
torch.to(dtype) または tensor.to(dtype)
|
特定の型のみ |
TopK | topk() |
TopK(X, K) |
torch.topk(input, k) |
無制限 |
ArgMax | argmax() |
ArgMax(data, axis) |
torch.argmax(input, dim) |
select_last_index: 0のみ |
ArgMin | argmin() |
ArgMin(data, axis) |
torch.argmin(input, dim) |
select_last_index: 0のみ |
Constant | - | Constant(value) |
torch.tensor(data) |
無制限 |
ConstantOfShape | full() |
ConstantOfShape(input) |
torch.full(size, fill_value) |
無制限 |
Identity | - | Identity(input) |
tensor.clone() |
無制限 |
Expand | expand() |
Expand(input, shape) |
torch.expand(input, size) |
無制限 |
LSTM | lstm() |
LSTM(X, W, R, ...) |
torch.nn.LSTM() |
複数の制限あり |
Pad | pad() |
Pad(data, pads) |
torch.nn.functional.pad(input, pad) |
mode: constantのみ |
GridSample | grid_sample() |
GridSample(X, grid) |
torch.nn.functional.grid_sample() |
無制限 |
Resize | interpolate() |
Resize(X, scales) |
torch.nn.functional.interpolate() |
mode: nearest/linear |
SpatialTransformer | affine_grid() |
SpatialTransformer(X, theta) |
torch.nn.functional.affine_grid() |
bilinear補間のみ |
MatMul | matmul() |
MatMul(A, B) |
torch.matmul(input, other) |
無制限 |
Gemm | linear() |
Gemm(A, B, C) |
torch.nn.functional.linear() |
alpha, beta未サポート |
注意点:
-
データ型の制限:
- Cast操作は特定のデータ型間の変換のみサポート
- 一部の演算子は特定のデータ型でのみ動作
-
形状の制限:
- Gather操作は1次元のindicesのみサポート
- LSTM は入力形状に複数の制限あり
- Pad はconstantモードのみサポート
-
PyTorchの特徴:
- より柔軟な操作が可能
- インプレース操作のサポート
- より多くのオプションパラメータ
-
ONNXの制限:
- 一部のパラメータがサポートされていない
- 特定のモードのみサポート
- より厳密な形状要件