bigdl-core-npu 2.5.0__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. bigdl_core_npu-2.5.0.dist-info/METADATA +35 -0
  2. bigdl_core_npu-2.5.0.dist-info/RECORD +223 -0
  3. bigdl_core_npu-2.5.0.dist-info/WHEEL +5 -0
  4. bigdl_core_npu-2.5.0.dist-info/top_level.txt +1 -0
  5. intel_npu_acceleration_library/__init__.py +24 -0
  6. intel_npu_acceleration_library/_version.py +6 -0
  7. intel_npu_acceleration_library/backend/__init__.py +37 -0
  8. intel_npu_acceleration_library/backend/base.py +215 -0
  9. intel_npu_acceleration_library/backend/bindings.py +279 -0
  10. intel_npu_acceleration_library/backend/compression.py +24 -0
  11. intel_npu_acceleration_library/backend/convolution.py +58 -0
  12. intel_npu_acceleration_library/backend/factory.py +944 -0
  13. intel_npu_acceleration_library/backend/linear.py +60 -0
  14. intel_npu_acceleration_library/backend/matmul.py +59 -0
  15. intel_npu_acceleration_library/backend/mlp.py +58 -0
  16. intel_npu_acceleration_library/backend/ops.py +141 -0
  17. intel_npu_acceleration_library/backend/qlinear.py +71 -0
  18. intel_npu_acceleration_library/backend/qmatmul.py +66 -0
  19. intel_npu_acceleration_library/backend/runtime.py +210 -0
  20. intel_npu_acceleration_library/backend/sdpa.py +107 -0
  21. intel_npu_acceleration_library/backend/tensor.py +1050 -0
  22. intel_npu_acceleration_library/backend/utils.py +70 -0
  23. intel_npu_acceleration_library/compiler.py +194 -0
  24. intel_npu_acceleration_library/device.py +230 -0
  25. intel_npu_acceleration_library/dtypes.py +122 -0
  26. intel_npu_acceleration_library/external/openvino/__init__.py +71 -0
  27. intel_npu_acceleration_library/external/openvino/_offline_transformations/__init__.py +20 -0
  28. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp310-win_amd64.pyd +0 -0
  29. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp311-win_amd64.pyd +0 -0
  30. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp312-win_amd64.pyd +0 -0
  31. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp38-win_amd64.pyd +0 -0
  32. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp39-win_amd64.pyd +0 -0
  33. intel_npu_acceleration_library/external/openvino/frontend/__init__.py +34 -0
  34. intel_npu_acceleration_library/external/openvino/frontend/frontend.py +44 -0
  35. intel_npu_acceleration_library/external/openvino/frontend/onnx/__init__.py +15 -0
  36. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp310-win_amd64.pyd +0 -0
  37. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp311-win_amd64.pyd +0 -0
  38. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp312-win_amd64.pyd +0 -0
  39. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp38-win_amd64.pyd +0 -0
  40. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp39-win_amd64.pyd +0 -0
  41. intel_npu_acceleration_library/external/openvino/frontend/paddle/__init__.py +15 -0
  42. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp310-win_amd64.pyd +0 -0
  43. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp311-win_amd64.pyd +0 -0
  44. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp312-win_amd64.pyd +0 -0
  45. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp38-win_amd64.pyd +0 -0
  46. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp39-win_amd64.pyd +0 -0
  47. intel_npu_acceleration_library/external/openvino/frontend/pytorch/__init__.py +19 -0
  48. intel_npu_acceleration_library/external/openvino/frontend/pytorch/fx_decoder.py +352 -0
  49. intel_npu_acceleration_library/external/openvino/frontend/pytorch/gptq.py +139 -0
  50. intel_npu_acceleration_library/external/openvino/frontend/pytorch/module_extension.py +39 -0
  51. intel_npu_acceleration_library/external/openvino/frontend/pytorch/patch_model.py +98 -0
  52. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp310-win_amd64.pyd +0 -0
  53. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp311-win_amd64.pyd +0 -0
  54. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp312-win_amd64.pyd +0 -0
  55. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp38-win_amd64.pyd +0 -0
  56. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp39-win_amd64.pyd +0 -0
  57. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend.py +119 -0
  58. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend_utils.py +85 -0
  59. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/compile.py +141 -0
  60. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/decompositions.py +116 -0
  61. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/execute.py +189 -0
  62. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/op_support.py +289 -0
  63. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/partition.py +118 -0
  64. intel_npu_acceleration_library/external/openvino/frontend/pytorch/ts_decoder.py +536 -0
  65. intel_npu_acceleration_library/external/openvino/frontend/pytorch/utils.py +256 -0
  66. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/__init__.py +16 -0
  67. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/graph_iterator.py +116 -0
  68. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/node_decoder.py +219 -0
  69. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp310-win_amd64.pyd +0 -0
  70. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp311-win_amd64.pyd +0 -0
  71. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp312-win_amd64.pyd +0 -0
  72. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp38-win_amd64.pyd +0 -0
  73. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp39-win_amd64.pyd +0 -0
  74. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/utils.py +460 -0
  75. intel_npu_acceleration_library/external/openvino/helpers/__init__.py +6 -0
  76. intel_npu_acceleration_library/external/openvino/helpers/packing.py +87 -0
  77. intel_npu_acceleration_library/external/openvino/preprocess/README.md +60 -0
  78. intel_npu_acceleration_library/external/openvino/preprocess/__init__.py +26 -0
  79. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/__init__.py +15 -0
  80. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/preprocess_converter.py +47 -0
  81. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/requirements.txt +4 -0
  82. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/torchvision_preprocessing.py +347 -0
  83. intel_npu_acceleration_library/external/openvino/properties/__init__.py +21 -0
  84. intel_npu_acceleration_library/external/openvino/properties/_properties.py +55 -0
  85. intel_npu_acceleration_library/external/openvino/properties/device/__init__.py +14 -0
  86. intel_npu_acceleration_library/external/openvino/properties/hint/__init__.py +15 -0
  87. intel_npu_acceleration_library/external/openvino/properties/intel_auto/__init__.py +12 -0
  88. intel_npu_acceleration_library/external/openvino/properties/intel_cpu/__init__.py +8 -0
  89. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/__init__.py +12 -0
  90. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/hint/__init__.py +11 -0
  91. intel_npu_acceleration_library/external/openvino/properties/log/__init__.py +11 -0
  92. intel_npu_acceleration_library/external/openvino/properties/streams/__init__.py +11 -0
  93. intel_npu_acceleration_library/external/openvino/runtime/__init__.py +85 -0
  94. intel_npu_acceleration_library/external/openvino/runtime/exceptions.py +17 -0
  95. intel_npu_acceleration_library/external/openvino/runtime/ie_api.py +631 -0
  96. intel_npu_acceleration_library/external/openvino/runtime/op/__init__.py +18 -0
  97. intel_npu_acceleration_library/external/openvino/runtime/op/util/__init__.py +22 -0
  98. intel_npu_acceleration_library/external/openvino/runtime/opset1/__init__.py +112 -0
  99. intel_npu_acceleration_library/external/openvino/runtime/opset1/ops.py +3067 -0
  100. intel_npu_acceleration_library/external/openvino/runtime/opset10/__init__.py +179 -0
  101. intel_npu_acceleration_library/external/openvino/runtime/opset10/ops.py +173 -0
  102. intel_npu_acceleration_library/external/openvino/runtime/opset11/__init__.py +179 -0
  103. intel_npu_acceleration_library/external/openvino/runtime/opset11/ops.py +107 -0
  104. intel_npu_acceleration_library/external/openvino/runtime/opset12/__init__.py +180 -0
  105. intel_npu_acceleration_library/external/openvino/runtime/opset12/ops.py +120 -0
  106. intel_npu_acceleration_library/external/openvino/runtime/opset13/__init__.py +188 -0
  107. intel_npu_acceleration_library/external/openvino/runtime/opset13/ops.py +399 -0
  108. intel_npu_acceleration_library/external/openvino/runtime/opset14/__init__.py +190 -0
  109. intel_npu_acceleration_library/external/openvino/runtime/opset14/ops.py +171 -0
  110. intel_npu_acceleration_library/external/openvino/runtime/opset15/__init__.py +10 -0
  111. intel_npu_acceleration_library/external/openvino/runtime/opset15/ops.py +85 -0
  112. intel_npu_acceleration_library/external/openvino/runtime/opset2/__init__.py +118 -0
  113. intel_npu_acceleration_library/external/openvino/runtime/opset2/ops.py +216 -0
  114. intel_npu_acceleration_library/external/openvino/runtime/opset3/__init__.py +134 -0
  115. intel_npu_acceleration_library/external/openvino/runtime/opset3/ops.py +638 -0
  116. intel_npu_acceleration_library/external/openvino/runtime/opset4/__init__.py +145 -0
  117. intel_npu_acceleration_library/external/openvino/runtime/opset4/ops.py +464 -0
  118. intel_npu_acceleration_library/external/openvino/runtime/opset5/__init__.py +152 -0
  119. intel_npu_acceleration_library/external/openvino/runtime/opset5/ops.py +372 -0
  120. intel_npu_acceleration_library/external/openvino/runtime/opset6/__init__.py +154 -0
  121. intel_npu_acceleration_library/external/openvino/runtime/opset6/ops.py +189 -0
  122. intel_npu_acceleration_library/external/openvino/runtime/opset7/__init__.py +158 -0
  123. intel_npu_acceleration_library/external/openvino/runtime/opset7/ops.py +169 -0
  124. intel_npu_acceleration_library/external/openvino/runtime/opset8/__init__.py +169 -0
  125. intel_npu_acceleration_library/external/openvino/runtime/opset8/ops.py +783 -0
  126. intel_npu_acceleration_library/external/openvino/runtime/opset9/__init__.py +175 -0
  127. intel_npu_acceleration_library/external/openvino/runtime/opset9/ops.py +341 -0
  128. intel_npu_acceleration_library/external/openvino/runtime/opset_utils.py +22 -0
  129. intel_npu_acceleration_library/external/openvino/runtime/passes/__init__.py +19 -0
  130. intel_npu_acceleration_library/external/openvino/runtime/passes/graph_rewrite.py +33 -0
  131. intel_npu_acceleration_library/external/openvino/runtime/passes/manager.py +26 -0
  132. intel_npu_acceleration_library/external/openvino/runtime/properties/__init__.py +38 -0
  133. intel_npu_acceleration_library/external/openvino/runtime/properties/hint/__init__.py +25 -0
  134. intel_npu_acceleration_library/external/openvino/runtime/utils/__init__.py +7 -0
  135. intel_npu_acceleration_library/external/openvino/runtime/utils/broadcasting.py +44 -0
  136. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/__init__.py +8 -0
  137. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/data_dispatcher.py +429 -0
  138. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/wrappers.py +148 -0
  139. intel_npu_acceleration_library/external/openvino/runtime/utils/decorators.py +70 -0
  140. intel_npu_acceleration_library/external/openvino/runtime/utils/input_validation.py +133 -0
  141. intel_npu_acceleration_library/external/openvino/runtime/utils/node_factory.py +127 -0
  142. intel_npu_acceleration_library/external/openvino/runtime/utils/reduction.py +25 -0
  143. intel_npu_acceleration_library/external/openvino/runtime/utils/types.py +175 -0
  144. intel_npu_acceleration_library/external/openvino/tools/__init__.py +4 -0
  145. intel_npu_acceleration_library/external/openvino/tools/benchmark/__init__.py +3 -0
  146. intel_npu_acceleration_library/external/openvino/tools/benchmark/benchmark.py +186 -0
  147. intel_npu_acceleration_library/external/openvino/tools/benchmark/main.py +695 -0
  148. intel_npu_acceleration_library/external/openvino/tools/benchmark/parameters.py +199 -0
  149. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/__init__.py +3 -0
  150. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/constants.py +26 -0
  151. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/inputs_filling.py +482 -0
  152. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/logging.py +8 -0
  153. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/statistics_report.py +296 -0
  154. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/utils.py +836 -0
  155. intel_npu_acceleration_library/external/openvino/tools/ovc/__init__.py +20 -0
  156. intel_npu_acceleration_library/external/openvino/tools/ovc/__main__.py +10 -0
  157. intel_npu_acceleration_library/external/openvino/tools/ovc/cli_parser.py +633 -0
  158. intel_npu_acceleration_library/external/openvino/tools/ovc/convert.py +102 -0
  159. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_data_type.py +82 -0
  160. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_impl.py +536 -0
  161. intel_npu_acceleration_library/external/openvino/tools/ovc/environment_setup_utils.py +50 -0
  162. intel_npu_acceleration_library/external/openvino/tools/ovc/error.py +49 -0
  163. intel_npu_acceleration_library/external/openvino/tools/ovc/get_ov_update_message.py +16 -0
  164. intel_npu_acceleration_library/external/openvino/tools/ovc/help.py +45 -0
  165. intel_npu_acceleration_library/external/openvino/tools/ovc/logger.py +91 -0
  166. intel_npu_acceleration_library/external/openvino/tools/ovc/main.py +35 -0
  167. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/__init__.py +2 -0
  168. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/analysis.py +46 -0
  169. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/check_config.py +57 -0
  170. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/extractor.py +447 -0
  171. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/layout_utils.py +73 -0
  172. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/moc_emit_ir.py +32 -0
  173. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/offline_transformations.py +107 -0
  174. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/paddle_frontend_utils.py +83 -0
  175. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pipeline.py +246 -0
  176. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/preprocessing.py +220 -0
  177. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pytorch_frontend_utils.py +205 -0
  178. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/shape_utils.py +109 -0
  179. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/type_utils.py +82 -0
  180. intel_npu_acceleration_library/external/openvino/tools/ovc/ovc.py +13 -0
  181. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_params.py +6 -0
  182. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_stub.py +28 -0
  183. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_utils.py +118 -0
  184. intel_npu_acceleration_library/external/openvino/tools/ovc/utils.py +109 -0
  185. intel_npu_acceleration_library/external/openvino/tools/ovc/version.py +80 -0
  186. intel_npu_acceleration_library/external/openvino/torch/__init__.py +5 -0
  187. intel_npu_acceleration_library/external/openvino/utils.py +98 -0
  188. intel_npu_acceleration_library/functional/__init__.py +8 -0
  189. intel_npu_acceleration_library/functional/scaled_dot_product_attention.py +47 -0
  190. intel_npu_acceleration_library/lib/Release/cache.json +113732 -0
  191. intel_npu_acceleration_library/lib/Release/intel_npu_acceleration_library.dll +0 -0
  192. intel_npu_acceleration_library/lib/Release/openvino.dll +0 -0
  193. intel_npu_acceleration_library/lib/Release/openvino_auto_batch_plugin.dll +0 -0
  194. intel_npu_acceleration_library/lib/Release/openvino_auto_plugin.dll +0 -0
  195. intel_npu_acceleration_library/lib/Release/openvino_c.dll +0 -0
  196. intel_npu_acceleration_library/lib/Release/openvino_hetero_plugin.dll +0 -0
  197. intel_npu_acceleration_library/lib/Release/openvino_intel_cpu_plugin.dll +0 -0
  198. intel_npu_acceleration_library/lib/Release/openvino_intel_gpu_plugin.dll +0 -0
  199. intel_npu_acceleration_library/lib/Release/openvino_intel_npu_plugin.dll +0 -0
  200. intel_npu_acceleration_library/lib/Release/openvino_ir_frontend.dll +0 -0
  201. intel_npu_acceleration_library/lib/Release/openvino_onnx_frontend.dll +0 -0
  202. intel_npu_acceleration_library/lib/Release/openvino_paddle_frontend.dll +0 -0
  203. intel_npu_acceleration_library/lib/Release/openvino_pytorch_frontend.dll +0 -0
  204. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_frontend.dll +0 -0
  205. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_lite_frontend.dll +0 -0
  206. intel_npu_acceleration_library/lib/Release/tbb12.dll +0 -0
  207. intel_npu_acceleration_library/lib/Release/tbb12_debug.dll +0 -0
  208. intel_npu_acceleration_library/lib/Release/tbbbind_2_5.dll +0 -0
  209. intel_npu_acceleration_library/lib/Release/tbbbind_2_5_debug.dll +0 -0
  210. intel_npu_acceleration_library/lib/Release/tbbmalloc.dll +0 -0
  211. intel_npu_acceleration_library/lib/Release/tbbmalloc_debug.dll +0 -0
  212. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy.dll +0 -0
  213. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy_debug.dll +0 -0
  214. intel_npu_acceleration_library/modelling.py +150 -0
  215. intel_npu_acceleration_library/nn/__init__.py +20 -0
  216. intel_npu_acceleration_library/nn/autograd.py +68 -0
  217. intel_npu_acceleration_library/nn/conv.py +257 -0
  218. intel_npu_acceleration_library/nn/functional.py +1207 -0
  219. intel_npu_acceleration_library/nn/linear.py +162 -0
  220. intel_npu_acceleration_library/nn/llm.py +417 -0
  221. intel_npu_acceleration_library/nn/module.py +393 -0
  222. intel_npu_acceleration_library/optimizations.py +157 -0
  223. intel_npu_acceleration_library/quantization.py +174 -0
@@ -0,0 +1,189 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2018-2024 Intel Corporation
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ # mypy: ignore-errors
6
+
7
+ from copy import deepcopy
8
+ from dataclasses import dataclass
9
+ from functools import lru_cache
10
+ from types import MappingProxyType
11
+ from warnings import warn
12
+
13
+ import torch
14
+ import torch.overrides
15
+
16
+ from torch.fx import GraphModule
17
+ from torch.utils._pytree import tree_flatten, tree_map, tree_unflatten
18
+
19
+ from openvino.frontend import FrontEndManager
20
+ from openvino.frontend.pytorch.fx_decoder import TorchFXPythonDecoder
21
+ from openvino.frontend.pytorch.torchdynamo.partition import Partitioner
22
+ from openvino.frontend.pytorch.torchdynamo.compile import openvino_compile
23
+ from openvino.runtime import Core, Type, PartialShape
24
+ from openvino.frontend.pytorch.torchdynamo.backend_utils import _get_cache_dir, _get_device, _get_aot_autograd
25
+
26
+ from typing import Callable, Optional, Any
27
+
28
+ from torch.fx.experimental.proxy_tensor import make_fx, wrapper_and_args_for_make_fx
29
+
30
+ import logging
31
+ logger = logging.getLogger(__name__)
32
+ logger.setLevel(logging.WARNING)
33
+
34
+
35
+ DEFAULT_OPENVINO_PYTHON_CONFIG = MappingProxyType(
36
+ {
37
+ "use_python_fusion_cache": True,
38
+ "allow_single_op_fusion": True,
39
+ },
40
+ )
41
+
42
+ compiled_cache = {}
43
+ req_cache = {}
44
+ max_openvino_partitions = 0
45
+ partitioned_modules = {}
46
+
47
+
48
+ def execute(
49
+ gm: GraphModule,
50
+ *args,
51
+ executor: str = "openvino",
52
+ executor_parameters: Optional[dict] = None,
53
+ options: Optional[Any] = None,
54
+ ):
55
+ if executor == "openvino":
56
+ return openvino_execute_partitioned(gm, *args, executor_parameters=executor_parameters, options=options)
57
+ elif executor == "strictly_openvino":
58
+ return openvino_execute(gm, *args, executor_parameters=executor_parameters)
59
+
60
+ msg = "Received unexpected value for 'executor': {0}. Allowed values are: openvino, strictly_openvino.".format(executor)
61
+ raise ValueError(msg)
62
+
63
+
64
+ import numpy as np
65
+
66
+
67
+ def execute_cached(compiled_model, *args):
68
+ ov_inputs = [a.detach().cpu().numpy() for a in args]
69
+ ov_inputs.reverse()
70
+ res = compiled_model(ov_inputs)
71
+ result = [torch.from_numpy(res[out]) for out in compiled_model.outputs]
72
+ return result
73
+
74
+
75
+ def openvino_execute(gm: GraphModule, *args, executor_parameters=None, partition_id, options):
76
+
77
+ executor_parameters = executor_parameters or DEFAULT_OPENVINO_PYTHON_CONFIG
78
+
79
+ use_cache = executor_parameters.get(
80
+ "use_python_fusion_cache",
81
+ DEFAULT_OPENVINO_PYTHON_CONFIG["use_python_fusion_cache"],
82
+ )
83
+ global compiled_cache
84
+
85
+ model_hash_str = executor_parameters.get("model_hash_str", None)
86
+ if model_hash_str is not None:
87
+ fully_supported = False
88
+ if len(model_hash_str) > 3 and model_hash_str[-3:] == "_fs":
89
+ fully_supported = True
90
+ if not fully_supported:
91
+ model_hash_str = model_hash_str + "_p" + str(partition_id)
92
+
93
+ if use_cache and (partition_id in compiled_cache):
94
+ compiled = compiled_cache[partition_id]
95
+ req = req_cache[partition_id]
96
+ else:
97
+ compiled = openvino_compile(gm, *args, model_hash_str=model_hash_str, options=options)
98
+ compiled_cache[partition_id] = compiled
99
+ req = compiled.create_infer_request()
100
+ req_cache[partition_id] = req
101
+
102
+ flat_args, _ = tree_flatten(args)
103
+ ov_inputs = []
104
+ for arg in flat_args:
105
+ ov_inputs.append((arg if isinstance(arg, int) else arg.detach().cpu().numpy()))
106
+
107
+ res = req.infer(ov_inputs, share_inputs=True, share_outputs=True)
108
+
109
+ results1 = [torch.from_numpy(res[out]) for out in compiled.outputs]
110
+ if len(results1) == 1:
111
+ return results1[0]
112
+ return results1
113
+
114
+
115
+ class OpenVINOGraphModule(torch.nn.Module):
116
+ def __init__(self, gm, partition_id, use_python_fusion_cache, model_hash_str: str = None, options=None):
117
+ super().__init__()
118
+ self.gm = gm
119
+ self.partition_id = partition_id
120
+ self.executor_parameters = {"use_python_fusion_cache": use_python_fusion_cache,
121
+ "model_hash_str": model_hash_str}
122
+ self.perm_fallback = False
123
+ self.options = options
124
+
125
+ def __call__(self, *args):
126
+ if self.perm_fallback:
127
+ return self.gm(*args)
128
+
129
+ try:
130
+ result = openvino_execute(self.gm, *args, executor_parameters=self.executor_parameters, partition_id=self.partition_id, options=self.options)
131
+ except Exception:
132
+ logger.debug("OpenVINO execution failed. Falling back to native PyTorch execution.")
133
+ self.perm_fallback = True
134
+ return self.gm(*args)
135
+
136
+ return result
137
+
138
+
139
+ def partition_graph(gm: GraphModule, use_python_fusion_cache: bool, model_hash_str: str = None, options=None):
140
+ global max_openvino_partitions
141
+ partition_id = max_openvino_partitions
142
+ for node in gm.graph.nodes:
143
+ # TODO: use a better way to identify fused submodule
144
+ if node.op == "call_module" and "fused_" in node.name:
145
+ openvino_submodule = getattr(gm, node.name)
146
+ gm.delete_submodule(node.target)
147
+ gm.add_submodule(
148
+ node.target,
149
+ OpenVINOGraphModule(openvino_submodule, partition_id, use_python_fusion_cache,
150
+ model_hash_str=model_hash_str, options=options),
151
+ )
152
+ partition_id = partition_id + 1
153
+
154
+ max_openvino_partitions = partition_id
155
+
156
+ return gm
157
+
158
+
159
+ def openvino_execute_partitioned(gm: GraphModule, *args, executor_parameters=None, options=None):
160
+ executor_parameters = executor_parameters or DEFAULT_OPENVINO_PYTHON_CONFIG
161
+
162
+ global partitioned_modules
163
+
164
+ use_python_fusion_cache = executor_parameters.get(
165
+ "use_python_fusion_cache",
166
+ DEFAULT_OPENVINO_PYTHON_CONFIG["use_python_fusion_cache"],
167
+ )
168
+ model_hash_str = executor_parameters.get("model_hash_str", None)
169
+
170
+ signature = str(id(gm))
171
+ if (not _get_aot_autograd(options)):
172
+ for idx, input_data in enumerate(args):
173
+ if isinstance(input_data, torch.Tensor):
174
+ signature = signature + "_" + str(idx) + ":" + str(input_data.type())[6:] + ":" + str(input_data.size())[11:-1].replace(" ", "")
175
+ else:
176
+ signature = signature + "_" + str(idx) + ":" + type(input_data).__name__ + ":val(" + str(input_data) + ")"
177
+
178
+ if signature not in partitioned_modules:
179
+ partitioned_modules[signature] = partition_graph(gm, use_python_fusion_cache=use_python_fusion_cache,
180
+ model_hash_str=model_hash_str, options=options)
181
+ return partitioned_modules[signature](*args)
182
+
183
+
184
+ def clear_caches():
185
+ global partitioned_modules
186
+ global compiled_cache
187
+
188
+ compiled_cache.clear()
189
+ partitioned_modules.clear()
@@ -0,0 +1,289 @@
1
+ # Copyright (C) 2018-2024 Intel Corporation
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ # flake8: noqa
5
+ # mypy: ignore-errors
6
+
7
+ from typing import Dict
8
+
9
+ import torch
10
+ from torch.nn import Module
11
+ from torch._ops import OpOverload
12
+
13
+ from torch.fx.node import Node, _get_qualified_name
14
+ from torch.fx.passes.operator_support import OperatorSupport
15
+ from torch.fx.passes.tools_common import CALLABLE_NODE_OPS
16
+ from openvino.frontend.pytorch.torchdynamo.backend_utils import _get_disabled_ops
17
+
18
+ import typing as t
19
+ import logging
20
+
21
+ logger = logging.getLogger(__name__)
22
+ logger.setLevel(logging.WARNING)
23
+
24
+ class OperatorSupport(OperatorSupport):
25
+ """
26
+ Operator support for OpenVINO backend.
27
+ """
28
+
29
+ def __init__(self, options):
30
+ support_dict = {
31
+ "_operator.add": None,
32
+ "_operator.floordiv": None,
33
+ "_operator.getitem": None,
34
+ "_operator.mul": None,
35
+ "_operator.sub": None,
36
+ "torch.ops.aten.sym_size.int": None,
37
+ "torch.ops.aten._adaptive_avg_pool1d.default": None,
38
+ "torch.ops.aten._adaptive_avg_pool2d.default": None,
39
+ "torch.ops.aten._adaptive_avg_pool3d.default": None,
40
+ "torch.ops.aten._convolution.default": None,
41
+ "torch.ops.aten._embedding_bag.default": None,
42
+ "torch.ops.aten._fake_quantize_per_tensor_affine_cachemask_tensor_qparams.default": None,
43
+ "torch.ops.aten._local_scalar_dense.default": None,
44
+ "torch.ops.aten._log_softmax.default": None,
45
+ "torch.ops.aten._native_batch_norm_legit.default": None,
46
+ "torch.ops.aten._native_batch_norm_legit.no_stats": None,
47
+ "torch.ops.aten._native_batch_norm_legit_functional.default": None,
48
+ "torch.ops.aten._native_batch_norm_legit_no_training.default": None,
49
+ "torch.ops.aten._scaled_dot_product_flash_attention.default": None,
50
+ "torch.ops.aten._scaled_dot_product_flash_attention_for_cpu.default": None,
51
+ "torch.ops.aten._softmax.default": None,
52
+ "torch.ops.aten._to_copy.default": None,
53
+ "torch.ops.aten._unsafe_view.default": None,
54
+ "torch.ops.aten.abs.default": None,
55
+ "torch.ops.aten.acos.default": None,
56
+ "torch.ops.aten.acosh.default": None,
57
+ "torch.ops.aten.adaptive_max_pool1d.default": None,
58
+ "torch.ops.aten.adaptive_max_pool2d.default": None,
59
+ "torch.ops.aten.adaptive_max_pool3d.default": None,
60
+ "torch.ops.aten.add.Scalar": None,
61
+ "torch.ops.aten.add.Tensor": None,
62
+ "torch.ops.aten.add_.Tensor": None,
63
+ "torch.ops.aten.addcmul.default": None,
64
+ "torch.ops.aten.addmm.default": None,
65
+ "torch.ops.aten.alias.default": None,
66
+ "torch.ops.aten.all.default": None,
67
+ "torch.ops.aten.amax.default": None,
68
+ "torch.ops.aten.amin.default": None,
69
+ "torch.ops.aten.any.default": None,
70
+ "torch.ops.aten.any.dim": None,
71
+ "torch.ops.aten.arange.default": None,
72
+ "torch.ops.aten.arange.start": None,
73
+ "torch.ops.aten.arange.start_step": None,
74
+ "torch.ops.aten.argmax.default": None,
75
+ "torch.ops.aten.argmin.default": None,
76
+ "torch.ops.aten.as_strided.default": None,
77
+ "torch.ops.aten.as_strided_.default": None,
78
+ "torch.ops.aten.asin.default": None,
79
+ "torch.ops.aten.asinh.default": None,
80
+ "torch.ops.aten.asinh.default": None,
81
+ "torch.ops.aten.atanh.default": None,
82
+ "torch.ops.aten.avg_pool2d.default": None,
83
+ "torch.ops.aten.avg_pool3d.default": None,
84
+ "torch.ops.aten.baddbmm.default": None,
85
+ "torch.ops.aten.bitwise_and.Scalar": None,
86
+ "torch.ops.aten.bitwise_and.Tensor": None,
87
+ "torch.ops.aten.bitwise_not.default": None,
88
+ "torch.ops.aten.bitwise_or.Tensor": None,
89
+ "torch.ops.aten.bitwise_xor.Tensor": None,
90
+ "torch.ops.aten.bmm.default": None,
91
+ "torch.ops.aten.cat.default": None,
92
+ "torch.ops.aten.ceil.default": None,
93
+ "torch.ops.aten.clamp.default": None,
94
+ "torch.ops.aten.clamp_max.default": None,
95
+ "torch.ops.aten.clamp_max.Tensor": None,
96
+ "torch.ops.aten.clamp_min.default": None,
97
+ "torch.ops.aten.clamp_min.Tensor": None,
98
+ "torch.ops.aten.clone.default": None,
99
+ "torch.ops.aten.constant_pad_nd.default": None,
100
+ "torch.ops.aten.convolution.default": None,
101
+ "torch.ops.aten.copy.default": None,
102
+ "torch.ops.aten.copy_.default": None,
103
+ "torch.ops.aten.cos.default": None,
104
+ "torch.ops.aten.cosh.default": None,
105
+ "torch.ops.aten.cumsum.default": None,
106
+ "torch.ops.aten.detach.default": None,
107
+ "torch.ops.aten.detach_.default": None,
108
+ "torch.ops.aten.div.Scalar": None,
109
+ "torch.ops.aten.div.Tensor": None,
110
+ "torch.ops.aten.div.Tensor_mode": None,
111
+ "torch.ops.aten.div_.Tensor": None,
112
+ "torch.ops.aten.elu.default": None,
113
+ "torch.ops.aten.elu_.default": None,
114
+ "torch.ops.aten.embedding.default": None,
115
+ "torch.ops.aten.empty.memory_format": None,
116
+ "torch.ops.aten.eq.Scalar": None,
117
+ "torch.ops.aten.eq.Tensor": None,
118
+ "torch.ops.aten.erf.default": None,
119
+ "torch.ops.aten.exp.default": None,
120
+ "torch.ops.aten.expand.default": None,
121
+ "torch.ops.aten.fake_quantize_per_channel_affine_cachemask.default": None,
122
+ "torch.ops.aten.fill.Scalar": None,
123
+ "torch.ops.aten.fill_.Scalar": None,
124
+ "torch.ops.aten.fill.Tensor": None,
125
+ "torch.ops.aten.fill_.Tensor": None,
126
+ "torch.ops.aten.flip.default": None,
127
+ "torch.ops.aten.floor.default": None,
128
+ "torch.ops.aten.floor.default": None,
129
+ "torch.ops.aten.fmod.Scalar": None,
130
+ "torch.ops.aten.fmod.Tensor": None,
131
+ "torch.ops.aten.full.default": None,
132
+ "torch.ops.aten.full.names": None,
133
+ "torch.ops.aten.full_like.default": None,
134
+ "torch.ops.aten.gather.default": None,
135
+ "torch.ops.aten.ge.Scalar": None,
136
+ "torch.ops.aten.ge.Tensor": None,
137
+ "torch.ops.aten.gelu.default": None,
138
+ "torch.ops.aten.glu.default": None,
139
+ "torch.ops.aten.grid_sampler_2d.default": None,
140
+ "torch.ops.aten.gt.Scalar": None,
141
+ "torch.ops.aten.gt.Tensor": None,
142
+ "torch.ops.aten.hardsigmoid.default": None,
143
+ "torch.ops.aten.hardswish.default": None,
144
+ "torch.ops.aten.hardswish_.default": None,
145
+ "torch.ops.aten.hardtanh.default": None,
146
+ "torch.ops.aten.hardtanh_.default": None,
147
+ "torch.ops.aten.index.Tensor": None,
148
+ "torch.ops.aten.index_select.default": None,
149
+ "torch.ops.aten.isfinite.default": None,
150
+ "torch.ops.aten.isinf.default": None,
151
+ "torch.ops.aten.isnan.default": None,
152
+ "torch.ops.aten.le.Scalar": None,
153
+ "torch.ops.aten.le.Tensor": None,
154
+ "torch.ops.aten.leaky_relu.default": None,
155
+ "torch.ops.aten.leaky_relu_.default": None,
156
+ "torch.ops.aten.lift_fresh_copy.default": None,
157
+ "torch.ops.aten.linalg_vector_norm.default": None,
158
+ "torch.ops.aten.log.default": None,
159
+ "torch.ops.aten.log_sigmoid_forward.default": None,
160
+ "torch.ops.aten.log10.default": None,
161
+ "torch.ops.aten.log1p.default": None,
162
+ "torch.ops.aten.log2.default": None,
163
+ "torch.ops.aten.logical_not.default": None,
164
+ "torch.ops.aten.logsumexp.default": None,
165
+ "torch.ops.aten.lt.Scalar": None,
166
+ "torch.ops.aten.lt.Tensor": None,
167
+ "torch.ops.aten.masked_fill.Scalar": None,
168
+ "torch.ops.aten.masked_fill.Tensor": None,
169
+ "torch.ops.aten.masked_fill_.Scalar": None,
170
+ "torch.ops.aten.masked_fill_.Tensor": None,
171
+ "torch.ops.aten.max.default": None,
172
+ "torch.ops.aten.max.dim": None,
173
+ "torch.ops.aten.max_pool2d_with_indices.default": None,
174
+ "torch.ops.aten.max_pool3d_with_indices.default": None,
175
+ "torch.ops.aten.maximum.default": None,
176
+ "torch.ops.aten.mean.default": None,
177
+ "torch.ops.aten.mean.dim": None,
178
+ "torch.ops.aten.min.default": None,
179
+ "torch.ops.aten.min.dim": None,
180
+ "torch.ops.aten.minimum.default": None,
181
+ "torch.ops.aten.mm.default": None,
182
+ "torch.ops.aten.mul.Scalar": None,
183
+ "torch.ops.aten.mul.Tensor": None,
184
+ "torch.ops.aten.mul_.Tensor": None,
185
+ "torch.ops.aten.native_batch_norm.default": None,
186
+ "torch.ops.aten.native_dropout.default": None,
187
+ "torch.ops.aten.native_group_norm.default": None,
188
+ "torch.ops.aten.native_layer_norm.default": None,
189
+ "torch.ops.aten.ne.Scalar": None,
190
+ "torch.ops.aten.ne.Tensor": None,
191
+ "torch.ops.aten.neg.default": None,
192
+ "torch.ops.aten.new_full.default": None,
193
+ "torch.ops.aten.new_ones.default": None,
194
+ "torch.ops.aten.ones_like.default": None,
195
+ "torch.ops.aten.new_zeros.default": None,
196
+ "torch.ops.aten.ones.default": None,
197
+ "torch.ops.aten.permute.default": None,
198
+ "torch.ops.aten.pow.Scalar": None,
199
+ "torch.ops.aten.pow.Tensor_Scalar": None,
200
+ "torch.ops.aten.pow.Tensor_Tensor": None,
201
+ "torch.ops.aten.rand.default": None,
202
+ "torch.ops.aten.reflection_pad2d.default": None,
203
+ "torch.ops.aten.reciprocal.default": None,
204
+ "torch.ops.aten.relu.default": None,
205
+ "torch.ops.aten.relu_.default": None,
206
+ "torch.ops.aten.repeat.default": None,
207
+ "torch.ops.aten.roll.default": None,
208
+ "torch.ops.aten.rsqrt.default": None,
209
+ "torch.ops.aten.rsub.Scalar": None,
210
+ "torch.ops.aten.rsub.Tensor": None,
211
+ "torch.ops.aten.scalar_tensor.default": None,
212
+ "torch.ops.aten.scatter.src": None,
213
+ "torch.ops.aten.scatter.value": None,
214
+ "torch.ops.aten.select.int": None,
215
+ "torch.ops.aten.select_scatter.default": None,
216
+ "torch.ops.aten.sigmoid.default": None,
217
+ "torch.ops.aten.sigmoid_.default": None,
218
+ "torch.ops.aten.sign.default": None,
219
+ "torch.ops.aten.silu.default": None,
220
+ "torch.ops.aten.silu_.default": None,
221
+ "torch.ops.aten.sin.default": None,
222
+ "torch.ops.aten.sinh.default": None,
223
+ "torch.ops.aten.slice.Tensor": None,
224
+ "torch.ops.aten.slice_scatter.default": None,
225
+ "torch.ops.aten.sort.default": None,
226
+ "torch.ops.aten.split.Tensor": None,
227
+ "torch.ops.aten.split_with_sizes.default": None,
228
+ "torch.ops.aten.sqrt.default": None,
229
+ "torch.ops.aten.squeeze.dim": None,
230
+ "torch.ops.aten.squeeze.dims": None,
231
+ "torch.ops.aten.stack.default": None,
232
+ "torch.ops.aten.std.correction": None,
233
+ "torch.ops.aten.sub.default": None,
234
+ "torch.ops.aten.sub.Tensor": None,
235
+ "torch.ops.aten.sum.default": None,
236
+ "torch.ops.aten.sum.dim_IntList": None,
237
+ "torch.ops.aten.t.default": None,
238
+ "torch.ops.aten.tan.default": None,
239
+ "torch.ops.aten.tanh.default": None,
240
+ "torch.ops.aten.topk.default": None,
241
+ "torch.ops.aten.transpose.int": None,
242
+ "torch.ops.aten.tril.default": None,
243
+ "torch.ops.aten.tril_.default": None,
244
+ "torch.ops.aten.unbind.int": None,
245
+ "torch.ops.aten.unfold.default": None,
246
+ "torch.ops.aten.unsqueeze.default": None,
247
+ "torch.ops.aten.upsample_nearest2d.default": None,
248
+ "torch.ops.aten.var.correction": None,
249
+ "torch.ops.aten.var_mean.correction": None,
250
+ "torch.ops.aten.view.default": None,
251
+ "torch.ops.aten.where.self": None,
252
+ "torch.ops.aten.zeros.default": None,
253
+ "torch.ops.aten.zeros_like.default": None,
254
+ "torch.ops.torchvision.deform_conv2d.default": None,
255
+ "torch.ops.torchvision.roi_align.default": None,
256
+ "torch.ops.quantized_decomposed.quantize_per_tensor.default": None,
257
+ "torch.ops.quantized_decomposed.quantize_per_channel.default": None,
258
+ "torch.ops.quantized_decomposed.dequantize_per_tensor.default": None,
259
+ "torch.ops.quantized_decomposed.dequantize_per_channel.default": None
260
+
261
+ }
262
+
263
+ self.enabled_op_names = []
264
+
265
+ for op in _get_disabled_ops(options):
266
+ del support_dict[op]
267
+
268
+ super().__init__(support_dict)
269
+
270
+ def enable_by_name(self, node: Node):
271
+ self.enabled_op_names.append(node.name)
272
+
273
+ def is_node_supported(self, submodules: t.Mapping[str, Module], node: Node) -> bool:
274
+ # OpenVINO FX subgraph should be purely functional
275
+ if node.op not in CALLABLE_NODE_OPS:
276
+ return False
277
+
278
+ # ops in supported_dict doesn't have overload name
279
+ # use overloadpacket's qualified_name for OpOverload
280
+ if isinstance(node.target, OpOverload):
281
+ target = _get_qualified_name(node.target.overloadpacket)
282
+
283
+ if target in self._support_dict:
284
+ return True
285
+
286
+ if node.name in self.enabled_op_names:
287
+ return True
288
+
289
+ return super().is_node_supported(submodules, node)
@@ -0,0 +1,118 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2018-2024 Intel Corporation
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ # mypy: ignore-errors
6
+
7
+ from typing import Dict
8
+
9
+ import torch
10
+ from torch.nn import Module
11
+ from torch.fx import GraphModule, Node
12
+ from torch.fx.passes.infra.partitioner import CapabilityBasedPartitioner, Partition
13
+
14
+ from torch.fx.experimental.proxy_tensor import DecompositionInterpreter
15
+ from torch._decomp import decomposition_table
16
+ from torch.fx.experimental.proxy_tensor import make_fx
17
+ from torch.utils._pytree import tree_flatten, tree_map, tree_unflatten
18
+ from openvino.frontend.pytorch.torchdynamo.op_support import OperatorSupport
19
+ from openvino.frontend.pytorch.torchdynamo.backend_utils import _is_testing
20
+
21
+ import typing as t
22
+ import logging
23
+
24
+ logger = logging.getLogger(__name__)
25
+ logger.setLevel(logging.WARNING)
26
+
27
+
28
+ class Partitioner:
29
+ def __init__(self, options):
30
+ self.supported_ops = OperatorSupport(options)
31
+
32
+ def fx_serialize(self, graph_module: GraphModule, *args, **kwargs):
33
+ fx_gm = make_fx(graph_module)(*args)
34
+ return fx_gm
35
+
36
+ def add_get_attr_inputs(self, partitions: t.List[Partition]):
37
+ # TODO: Find a more efficient way to include input
38
+ # "get_attr" nodes to the partitions.
39
+ getattr_to_merge: Dict[Node, Node] = {}
40
+ for partition in partitions:
41
+ for pnode in partition.nodes:
42
+ for pnode_input in pnode.all_input_nodes:
43
+ if pnode_input.op in ["get_attr"] and pnode_input.op not in getattr_to_merge:
44
+ getattr_to_merge[pnode_input] = partition
45
+ for getattr_node, getattr_part in getattr_to_merge.items():
46
+ getattr_part.add_node(getattr_node)
47
+
48
+ def check_fully_supported(self, graph_module: GraphModule) -> bool:
49
+ num_fused = 0
50
+ for node in graph_module.graph.nodes:
51
+ if node.op == "call_module" and "fused_" in node.name:
52
+ num_fused += 1
53
+ elif node.op != "placeholder" and node.op != "output":
54
+ return False
55
+ if num_fused == 1:
56
+ return True
57
+ return False
58
+
59
+ def capture_gptq_patterns(self, graph_module: GraphModule) -> bool:
60
+ for node in graph_module.graph.nodes:
61
+ if str(node.op) == "call_function" and str(node.target) == "aten.bitwise_and.Scalar":
62
+ bitwise_and_in_nodes = node.all_input_nodes
63
+ if len(bitwise_and_in_nodes) != 1:
64
+ continue
65
+ to_copy_node = bitwise_and_in_nodes[0]
66
+ if str(to_copy_node.op) != "call_function" or str(to_copy_node.target) != "aten._to_copy.default":
67
+ continue
68
+ to_copy_in_nodes = to_copy_node.all_input_nodes
69
+ if len(to_copy_in_nodes) != 1:
70
+ continue
71
+ bitwise_right_shift_node = to_copy_in_nodes[0]
72
+ if str(bitwise_right_shift_node.op) != "call_function" or str(bitwise_right_shift_node.target) != "aten.bitwise_right_shift.Tensor":
73
+ continue
74
+ bitwise_right_shift_in_nodes = bitwise_right_shift_node.all_input_nodes
75
+ if len(bitwise_right_shift_in_nodes) != 2:
76
+ continue
77
+ expand_node = bitwise_right_shift_in_nodes[0]
78
+ if str(expand_node.op) != "call_function" or str(expand_node.target) != "aten.expand.default":
79
+ continue
80
+ expand_in_nodes = expand_node.all_input_nodes
81
+ if len(expand_in_nodes) != 1:
82
+ continue
83
+ unsqueeze_0_node = expand_in_nodes[0]
84
+ if str(unsqueeze_0_node.op) != "call_function" or str(unsqueeze_0_node.target) != "aten.unsqueeze.default":
85
+ continue
86
+ unsqueeze_0_in_nodes = unsqueeze_0_node.all_input_nodes
87
+ if len(unsqueeze_0_in_nodes) != 1:
88
+ continue
89
+ const_0_node = unsqueeze_0_in_nodes[0]
90
+ if str(const_0_node.op) != "get_attr":
91
+ continue
92
+ unsqueeze_1_node = bitwise_right_shift_in_nodes[1]
93
+ if str(unsqueeze_1_node.op) != "call_function" or str(unsqueeze_1_node.target) != "aten.unsqueeze.default":
94
+ continue
95
+ unsqueeze_1_in_nodes = unsqueeze_1_node.all_input_nodes
96
+ if len(unsqueeze_1_in_nodes) != 1:
97
+ continue
98
+ const_1_node = unsqueeze_1_in_nodes[0]
99
+ if str(const_1_node.op) != "get_attr":
100
+ continue
101
+
102
+ self.supported_ops.enable_by_name(node)
103
+ self.supported_ops.enable_by_name(to_copy_node)
104
+ self.supported_ops.enable_by_name(bitwise_right_shift_node)
105
+ self.supported_ops.enable_by_name(expand_node)
106
+ self.supported_ops.enable_by_name(unsqueeze_0_node)
107
+ self.supported_ops.enable_by_name(unsqueeze_1_node)
108
+
109
+ def make_partitions(self, graph_module: GraphModule, options) -> GraphModule:
110
+ allow_single_node_partition = _is_testing(options)
111
+ self.capture_gptq_patterns(graph_module)
112
+ partitioner = CapabilityBasedPartitioner(
113
+ graph_module, self.supported_ops, allows_single_node_partition=allow_single_node_partition)
114
+ partitions = partitioner.propose_partitions()
115
+ self.add_get_attr_inputs(partitions)
116
+ fused_graph_module = partitioner.fuse_partitions(partitions)
117
+
118
+ return fused_graph_module