PyTorch でサポートされる演算子 - 2.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語
表 1. PyTorch でサポートされる演算子
PyTorch XIR DPU のインプリメンテーション 
API 属性 OP 名 属性
パラメーター/テンソル/ゼロ data const data 入力データ用のメモリを割り当てます。
  shape
  data_type
Conv2d in_channels conv2d (groups = 1) / depthwise-conv2d (groups = input channel)   groups == input channel の場合、convolution は Depthwise たたみ込みエンジンにコンパイルされます。groups == 1 の場合、convolution はたたみ込みエンジンにマップされます。それ以外の場合、CPU にマップされます。
out_channels  
kernel_size: kernel
stride stride
padding pad
padding_mode('zeros') pad_mode (FLOOR)
groups  
dilation dilation
ConvTranspose2d in_channels transposed-conv2d (groups = 1) / depthwise-transposed-conv2d (groups = input channel)   groups == input channel の場合、convolution は Depthwise たたみ込みエンジンにコンパイルされます。groups == 1 の場合、convolution はたたみ込みエンジンにマップされます。それ以外の場合、CPU にマップされます。output_padding 機能については、DPU はまだサポートされていないため、値がすべて 0 でない場合、この演算子は CPU に割り当てられます。
out_channels  
kernel_size: kernel
stride stride
padding pad
output_padding output_padding
padding_mode('zeros') pad_mode (FLOOR)
groups  
dilation dilation
matmul    conv2d / matmul  transpose_a matmul は conv2d に変換され、たたみ込みエンジンにコンパイルされます。matmul の変換がエラーになった場合は、CPU によってインプリメントされます。 
  transpose_b
MaxPool2d/AdaptiveMaxPool2d kernel_size: maxpool2d kernel プーリング エンジン
stride stride
padding pad
ceil_mode pad_mode
output_size (adaptive) global
AvgPool2d/AdaptiveAvgPool2d kernel_size: avgpool2d kernel プーリング エンジン
stride stride
padding pad
ceil_mode pad_mode
count_include_pad count_include_pad
  count_include_invalid (true)
output_size (adaptive) global
ReLU   relu   アクティベーションは、convolution および add などの隣接する動作に融合されます。
LeakyReLU negative_slope leakyrelu alpha
ReLU6   relu6  
Hardtanh  min_val = 0  
max_val = 6  
Hardsigmoid   hard-sigmoid  
Hardswish   hardswish  
ConstantPad2d/ZeroPad2d  padding pad  paddings 最初にコンパイラは「CONSTANT」パディングを隣接する動作 (たたみ込み、プーリングなど) に融合しようとします。このような演算子が存在しない場合でも、パディングの次元が 4 でハードウェア要件を満たしている場合、「CONSTANT」パディングを DPU にマップできます。
value = 0 constant_values
  mode ("CONSTANT")
add   add   add が要素ごとの加算である場合、add は DPU の要素ごとの加算エンジンにマップされます。add がチャネルごとの加算である場合、add と、convolution などの隣接する動作を融合できる可能性を探します。shape に関連する動作である場合、コンパイル中に削除されます。粗粒度の動作のコンポーネントである場合、隣接する動作と融合されます。それ以外の場合、CPU インプリメンテーションにコンパイルされます。mul の入力のうち 1 つが定数である場合、mul は depthwise たたみ込みエンジンにマップできます。2 つの入力が同じ形状である場合、mul は要素ごとの乗算として Misc Engine にマップできます。その他の mul 演算が特殊な演算子の組み合わせの一部である場合、この mul はその組み合わせに融合できます。それ以外の場合、mul は CPU にマップされます。
sub / rsub   sub  
mul   mul  
neg   neg  
sum dim reduction_sum axis
keepdim keep_dims
max  dim reduction_max  axis
keepdim keep_dims
mean  dim reduction_mean  axis
keepdim keep_dims
interpolate / upsample / upsample_bilinear / upsample_nearest size resize size resize のモードが「BILINEAR」、align_corner=false、half_pixel_centers = false、size = 2、4、8 である場合、align_corner=false、half_pixel_centers = true、size = 2、4 は、DPU インプリメンテーション (pad+depthwise-転置された conv2d) に変換できます。resize のモードが「NEAREST」で size が整数である場合、resize は DPU インプリメンテーションにマップされます。
scale_factor  
mode mode
align_corners align_corners
  half_pixel_centers = !align_corners
transpose  dim0 transpose  order reshape 動作に変換される場合があります。さらに、次元変換動作を隣接する動作の特殊な読み込みまたは保存命令に融合してオーバーヘッドを低減できる可能性を探します。それ以外の場合、CPU にマップされます。
dim1  
permute dims    
view/reshape size reshape shape
flatten  start_dim reshape / flatten  start_axis
end_dim end_axis
squeeze dim reshape / squeeze axis
cat dim concat axis 特殊な読み出しまたは書き込みストラテジとオンチップ メモリの慎重な割り当てにより、concat の結果生じるオーバーヘッドを低減します。
aten::slice* dim strided_slice   strided_slice が shape に関連する動作であるか、粗粒度の動作の構成要素である場合、strided_slice は削除されます。それ以外の場合、strided_slice は CPU インプリメンテーションにコンパイルされます。
start begin
end end
step strides
BatchNorm2d eps depthwise-conv2d / scale epsilon batch_norm が量子化され、等価な depthwise-conv2d に変換可能である場合、batch_norm は depthwise-conv2d に変換されます。コンパイラは、batch_norm を DPU インプリメンテーションにマップするためのコンパイルができる可能性を探します。それ以外の場合、batch_norm は CPU によって実行されます。
  axis
  moving_mean
  moving_var
  gamma
  beta
softmax dim softmax axis CPU インプリメンテーションにのみコンパイルされます。 
Tanh   tanh  
Sigmoid   sigmoid  
PixelShuffle upscale_factor pixel_shuffle scale 入力としてたたみ込みが存在する場合、これらはタイルに変換されます。
      upscale=True
PixelUnshuffle downscale_factor pixel_shuffle scale
      upscale=False
  1. PyTorch のテンソルのスライスが Python 構文で書かれている場合、aten::slice に変換されます。