fallback_ops.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. # Be extra careful when you edit this file, because it affects AOTInductor ABI compatibility. See
  2. # https://github.com/pytorch/pytorch/blob/7e86a7c0155295539996e0cf422883571126073e/torchgen/gen.py#L2424-L2436
  3. # for details.
  4. #
  5. # The inductor_fallback_ops list is based on the fallback ops from torch/_inductor/lowering.py.
  6. #
  7. # Generally speaking, it is ok to add a new op to the list, but you need to run
  8. # `python torchgen/gen.py --update-aoti-c-shim` in order to regenerate C shim header files.
  9. # But it is NOT ok to remove an existing fallback op from the list, since that will break
  10. # some existing AOTInductor-compiled models.
  11. #
  12. # A fallback op version defaults to 1. If you want to extend an existing fallback op by adding
  13. # a new argument with a default value, while it is fine in the Python world, it will be BC-breaking
  14. # when generating C shim. Thus you need to bump up the version number of that fallback op by
  15. # updating the entry in the inductor_fallback_ops list, adding a new version number with a list
  16. # of new arguments, and then run `python torchgen/gen.py --update-aoti-c-shim` to regenerate.
  17. inductor_fallback_ops: dict[str, dict[str, list[str]]] = {
  18. "aten._adaptive_avg_pool2d_backward.default": {},
  19. "aten._adaptive_avg_pool2d.default": {},
  20. "aten._adaptive_avg_pool3d_backward.default": {},
  21. "aten._adaptive_avg_pool3d.default": {},
  22. "aten._addmm_activation.default": {},
  23. "aten._cdist_backward.default": {},
  24. "aten._cdist_forward.default": {},
  25. "aten._cudnn_rnn.default": {},
  26. "aten._dyn_quant_matmul_4bit.default": {},
  27. "aten._dyn_quant_pack_4bit_weight.default": {},
  28. "aten._efficient_attention_backward.default": {},
  29. "aten._efficient_attention_forward.default": {},
  30. "aten._efficientzerotensor.default": {},
  31. "aten._embedding_bag_dense_backward.default": {},
  32. "aten._embedding_bag_forward_only.default": {},
  33. "aten._embedding_bag_per_sample_weights_backward.default": {},
  34. "aten._embedding_bag.default": {},
  35. "aten._fft_c2c.default": {},
  36. "aten._fft_r2c.default": {},
  37. "aten._flash_attention_backward.default": {},
  38. "aten._flash_attention_forward.default": {},
  39. "aten._flash_attention_forward.quantized": {},
  40. "aten._fused_moving_avg_obs_fq_helper_functional.default": {},
  41. "aten._fused_moving_avg_obs_fq_helper.default": {},
  42. "aten._fused_rms_norm.default": {},
  43. "aten._histogramdd_from_bin_cts.default": {},
  44. "aten._int_mm.out": {},
  45. "aten._pdist_backward.default": {},
  46. "aten._pdist_forward.default": {},
  47. "aten._scaled_dot_product_attention_math_for_mps.default": {},
  48. "aten._scaled_dot_product_cudnn_attention_backward.default": {},
  49. "aten._scaled_dot_product_cudnn_attention.default": {},
  50. "aten._scaled_dot_product_efficient_attention_backward.default": {},
  51. "aten._scaled_dot_product_efficient_attention.default": {},
  52. "aten._scaled_dot_product_flash_attention_backward.default": {},
  53. "aten._scaled_dot_product_flash_attention_for_cpu_backward.default": {},
  54. "aten._scaled_dot_product_flash_attention_for_cpu.default": {},
  55. "aten._scaled_dot_product_flash_attention.default": {},
  56. "aten._scaled_dot_product_flash_attention.quantized": {},
  57. "aten._scaled_dot_product_fused_attention_overrideable_backward.default": {},
  58. "aten._scaled_dot_product_fused_attention_overrideable.default": {},
  59. "aten._scaled_mm.default": {},
  60. "aten._scaled_grouped_mm.default": {},
  61. "aten._scaled_mm.out": {},
  62. "aten._segment_reduce_backward.default": {},
  63. "aten._thnn_fused_lstm_cell.default": {},
  64. "aten._to_sparse.default": {},
  65. "aten._trilinear.default": {},
  66. "aten._weight_int4pack_mm.default": {},
  67. "aten._weight_int8pack_mm.default": {},
  68. "aten.abs.default": {},
  69. "aten.adaptive_max_pool2d_backward.default": {},
  70. "aten.adaptive_max_pool2d.default": {},
  71. "aten.adaptive_max_pool3d_backward.default": {},
  72. "aten.adaptive_max_pool3d.default": {},
  73. "aten.add.Scalar": {},
  74. "aten.add.Tensor": {},
  75. "aten.addbmm.default": {},
  76. "aten.addmm.out": {},
  77. "aten.addmv.default": {},
  78. "aten.angle.default": {},
  79. "aten.avg_pool2d_backward.default": {},
  80. "aten.avg_pool2d.default": {},
  81. "aten.avg_pool3d_backward.default": {},
  82. "aten.avg_pool3d.default": {},
  83. "aten.baddbmm.out": {},
  84. "aten.bernoulli_.float": {},
  85. "aten.bernoulli_.Tensor": {},
  86. "aten.bmm.out": {},
  87. "aten.bucketize.Tensor": {},
  88. "aten.cat.default": {},
  89. "aten.cholesky_inverse.default": {},
  90. "aten.cholesky_solve.default": {},
  91. "aten.convolution_backward.default": {},
  92. "aten.convolution.default": {},
  93. "aten.cummax.default": {},
  94. "aten.cummin.default": {},
  95. "aten.cumprod.default": {},
  96. "aten.cumsum.default": {},
  97. "aten.exponential.default": {},
  98. "aten.fill_.Scalar": {},
  99. "aten.fractional_max_pool2d_backward.default": {},
  100. "aten.fractional_max_pool2d.default": {},
  101. "aten.fractional_max_pool3d_backward.default": {},
  102. "aten.fractional_max_pool3d.default": {},
  103. "aten.gcd.default": {},
  104. "aten.geqrf.default": {},
  105. "aten.grid_sampler_2d_backward.default": {},
  106. "aten.hann_window.default": {},
  107. "aten.histc.default": {},
  108. "aten.histogram.bin_ct": {},
  109. "aten.index_put.default": {},
  110. "aten.index_reduce.default": {},
  111. "aten.index.Tensor": {},
  112. "aten.kthvalue.default": {},
  113. "aten.logcumsumexp.default": {},
  114. "aten.lu_unpack.default": {},
  115. "aten.masked_scatter_backward.default": {},
  116. "aten.masked_scatter.default": {},
  117. "aten.masked_select.default": {},
  118. "aten.max_pool2d_with_indices_backward.default": {},
  119. "aten.max_pool2d_with_indices.default": {},
  120. "aten.max_pool3d_with_indices_backward.default": {},
  121. "aten.max_pool3d_with_indices.default": {},
  122. "aten.max_unpool2d.default": {},
  123. "aten.max_unpool3d.default": {},
  124. "aten.median.default": {},
  125. "aten.mm.out": {},
  126. "aten.mm.dtype_out": {},
  127. "aten.mode.default": {},
  128. "aten.mul.Scalar": {},
  129. "aten.mul.Tensor": {},
  130. "aten.nanmedian.default": {},
  131. "aten.narrow.default": {},
  132. "aten.native_dropout.default": {},
  133. "aten.nonzero.default": {},
  134. "aten.nonzero_static.default": {},
  135. "aten.normal_functional.default": {},
  136. "aten.ormqr.default": {},
  137. "aten.pad.default": {},
  138. "aten.permute.default": {},
  139. "aten.polar.default": {},
  140. "aten.pow.Scalar": {},
  141. "aten.pow.Tensor_Scalar": {},
  142. "aten.pow.Tensor_Tensor": {},
  143. "aten.rand.default": {},
  144. "aten.rand.generator": {},
  145. "aten.randint.default": {},
  146. "aten.randint.generator": {},
  147. "aten.randint.low_out": {},
  148. "aten.randint.low": {},
  149. "aten.randn.default": {},
  150. "aten.randn.generator": {},
  151. "aten.randperm.default": {},
  152. "aten.repeat_interleave.Tensor": {},
  153. "aten.replication_pad1d_backward.default": {},
  154. "aten.replication_pad2d_backward.default": {},
  155. "aten.reshape.default": {},
  156. "aten.resize_.default": {},
  157. "aten.resize_as_.default": {},
  158. "aten.scatter_reduce.two_out": {},
  159. "aten.scatter.src_out": {},
  160. "aten.scatter.value_out": {},
  161. "aten.searchsorted.Scalar": {},
  162. "aten.searchsorted.Tensor": {},
  163. "aten.segment_reduce.default": {},
  164. "aten.set_.source_Tensor": {},
  165. "aten.slice.Tensor": {},
  166. "aten.soft_margin_loss_backward.default": {},
  167. "aten.sort.default": {},
  168. "aten.sort.stable": {},
  169. "aten.squeeze.dim": {},
  170. "aten.to_sparse.default": {},
  171. "aten.topk.default": {},
  172. "aten.triangular_solve.default": {},
  173. "aten.uniform.default": {},
  174. "aten.upsample_bicubic2d_backward.default": {},
  175. "aten.upsample_linear1d_backward.default": {},
  176. "aten.upsample_trilinear3d_backward.default": {},
  177. "aten.view_as_complex.default": {},
  178. "aten.view_as_real.default": {},
  179. "aten.view.dtype": {},
  180. "aten._weight_int4pack_mm_with_scales_and_zeros.default": {},
  181. }
  182. # `python torchgen/gen.py --update-aoti-c-shim` will automatically generate
  183. # c_shim_aten.{h/cpp} based on the list below.
  184. # Operators in this list are intended to be used in torch/csrc/stable/ops.h
  185. # Unlike other c_shims, operators in this file do not bypass the dispatcher.
  186. # The same BC rules apply as inductor_fallback_ops.
  187. aten_shimified_ops: dict[str, dict[str, list[str]]] = {
  188. "aten.fill_.Scalar": {},
  189. "aten.pad.default": {},
  190. "aten.narrow.default": {},
  191. "aten.amax.default": {},
  192. "aten.new_empty.default": {},
  193. "aten.new_zeros.default": {},
  194. "aten.full.default": {},
  195. "aten.subtract.Tensor": {},
  196. }