Open1

AX620EのNPU対応OP一覧

nnn112358nnn112358

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 スカラー指数のみ

注意点:

  1. すべての演算はブロードキャスティングをサポート
  2. PyTorchではインプレース演算(末尾に_を付ける)で元のテンソルを直接変更可能
  3. ONNXのバージョンによって利用可能な演算子や動作が異なる場合あり
  4. GPU/CPU間のテンソルでの直接演算は不可(PyTorch)
  5. 異なる型のテンソル間では自動的に型変換が行われる場合あり

活性化関数

オペレーター 演算子 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() 無制限

注意点:

  1. PyTorchでは、関数形式(torch.relu())とモジュール形式(nn.ReLU())の両方を使用可能
  2. ONNXでは、オペレータのバージョンによって利用可能な機能が異なる
  3. PyTorchのモジュール形式は、学習可能なパラメータを持つ場合がある(例:PReLU)
  4. いくつかの関数(SiLUとSwish)は同じ実装を共有
  5. 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

注意点:

  1. PyTorchでは各正規化層に対して、1D、2D、3D版が用意されている

    • BatchNorm1d、BatchNorm2d、BatchNorm3d
    • InstanceNorm1d、InstanceNorm2d、InstanceNorm3d
  2. パラメータの説明:

    • γ (scale): スケーリングパラメータ
    • β (B): バイアスパラメータ
    • ε (epsilon): 数値安定性のための小さな定数
    • μ (mean): 平均
    • σ² (var): 分散
  3. ONNXでの制限:

    • BatchNormalizationはトレーニングモードをサポートしない
    • LayerNormalizationは最後の次元に対してのみ正規化を行う
    • LpNormalizationはp=1またはp=2のみサポート
  4. 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) 無制限

注意点:

  1. PyTorchでは1D、2D、3Dバージョンが利用可能:

    • Conv1d、Conv2d、Conv3d
    • ConvTranspose1d、ConvTranspose2d、ConvTranspose3d
    • AvgPool1d、AvgPool2d、AvgPool3d
    • MaxPool1d、MaxPool2d、MaxPool3d
  2. パラメータの説明:

    • kernel_size: カーネルのサイズ
    • stride: ストライド
    • padding: パディング
    • dilation: 拡張率
    • groups: グループ数
    • bias: バイアスの有無
  3. PyTorchの追加パラメータ:

    • padding_mode: パディングモード('zeros', 'reflect', 'replicate', 'circular')
    • return_indices: MaxPoolで最大値のインデックスを返すかどうか
  4. 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未サポート

注意点:

  1. PyTorchのパラメータ:

    • input: 入力テンソル
    • dim: 削減する次元(複数次元可)
    • keepdim: 削減された次元を1として保持するかどうか
  2. ONNXのパラメータ:

    • axes: 削減する軸(複数軸可)
    • keepdims: 削減された次元を保持するかどうか
    • noop_with_empty_axes: 空の軸リストの扱い(現在未サポート)
  3. 共通の機能:

    • 複数の次元に対して同時に削減操作が可能
    • keepdims/keepdimオプションで出力形状の制御が可能
  4. 主な違い:

    • PyTorchはdimパラメータ、ONNXはaxesパラメータを使用
    • PyTorchではより多くの削減演算が利用可能(例:prod, amax, amin など)

形状操作

オペレーター 演算子 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: 無制限

注意点:

  1. 形状変更の基本操作:

    • Reshapeは総要素数を保持したまま形状を変更
    • Transposeは軸の順序を変更
    • Squeeze/Unsqueezeは次元の追加/削除
  2. PyTorchの特徴:

    • ほとんどの操作がテンソルメソッドとして利用可能
    • view()メソッドはreshapeの代替として使用可能(メモリ配置が連続的な場合)
    • permute()メソッドは複数の軸の転置に対応
  3. ONNXの制限:

    • DepthToSpaceはDCRモードのみサポート
    • 一部の操作で軸の指定方法がPyTorchと異なる
  4. メモリ効率:

    • 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 無制限

注意点:

  1. 比較演算の結果:

    • すべての比較演算は、ブール型のテンソルを返す
    • 要素ごとに比較が行われる
  2. PyTorchの特徴:

    • 関数形式(torch.eq)と演算子形式(==)の両方が使用可能
    • ブロードキャスティングをサポート
    • バッチ処理に対応
  3. ONNXの特徴:

    • すべての比較演算子は要素ごとに適用
    • 入力テンソルは同じ形状であるか、ブロードキャスト可能である必要がある
  4. 共通の注意点:

    • 浮動小数点の比較は数値誤差に注意が必要
    • 異なるデータ型間の比較は自動的な型変換が行われる場合がある

数学関数

オペレーター 演算子 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) 無制限

注意点:

  1. PyTorchの特徴:

    • すべての関数がテンソルメソッドとして利用可能
    • インプレース操作が可能(末尾に_を付ける)
    • GPU上での計算に対応
  2. ONNXの特徴:

    • 入力はスカラーまたはテンソル
    • ブロードキャスティングをサポート
  3. 共通の機能:

    • 要素ごとに関数が適用される
    • バッチ処理に対応
    • 自動微分に対応
  4. 数値的な考慮事項:

    • 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未サポート

注意点:

  1. データ型の制限:

    • Cast操作は特定のデータ型間の変換のみサポート
    • 一部の演算子は特定のデータ型でのみ動作
  2. 形状の制限:

    • Gather操作は1次元のindicesのみサポート
    • LSTM は入力形状に複数の制限あり
    • Pad はconstantモードのみサポート
  3. PyTorchの特徴:

    • より柔軟な操作が可能
    • インプレース操作のサポート
    • より多くのオプションパラメータ
  4. ONNXの制限:

    • 一部のパラメータがサポートされていない
    • 特定のモードのみサポート
    • より厳密な形状要件