bigdl-core-npu 2.6.0b20250114__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 (234) hide show
  1. bigdl-core-npu/__init__.py +0 -0
  2. bigdl-core-npu/include/common.h +96 -0
  3. bigdl-core-npu/include/npu_llm.h +74 -0
  4. bigdl-core-npu/npu_llm.dll +0 -0
  5. bigdl-core-npu/npu_llm.lib +0 -0
  6. bigdl_core_npu-2.6.0b20250114.dist-info/METADATA +44 -0
  7. bigdl_core_npu-2.6.0b20250114.dist-info/RECORD +234 -0
  8. bigdl_core_npu-2.6.0b20250114.dist-info/WHEEL +5 -0
  9. bigdl_core_npu-2.6.0b20250114.dist-info/top_level.txt +2 -0
  10. intel_npu_acceleration_library/__init__.py +24 -0
  11. intel_npu_acceleration_library/_version.py +6 -0
  12. intel_npu_acceleration_library/backend/__init__.py +37 -0
  13. intel_npu_acceleration_library/backend/base.py +250 -0
  14. intel_npu_acceleration_library/backend/bindings.py +383 -0
  15. intel_npu_acceleration_library/backend/compression.py +24 -0
  16. intel_npu_acceleration_library/backend/convolution.py +58 -0
  17. intel_npu_acceleration_library/backend/factory.py +1161 -0
  18. intel_npu_acceleration_library/backend/linear.py +60 -0
  19. intel_npu_acceleration_library/backend/matmul.py +59 -0
  20. intel_npu_acceleration_library/backend/mlp.py +58 -0
  21. intel_npu_acceleration_library/backend/ops.py +142 -0
  22. intel_npu_acceleration_library/backend/qlinear.py +75 -0
  23. intel_npu_acceleration_library/backend/qmatmul.py +66 -0
  24. intel_npu_acceleration_library/backend/runtime.py +215 -0
  25. intel_npu_acceleration_library/backend/sdpa.py +107 -0
  26. intel_npu_acceleration_library/backend/tensor.py +1120 -0
  27. intel_npu_acceleration_library/backend/utils.py +70 -0
  28. intel_npu_acceleration_library/compiler.py +194 -0
  29. intel_npu_acceleration_library/device.py +230 -0
  30. intel_npu_acceleration_library/dtypes.py +155 -0
  31. intel_npu_acceleration_library/external/openvino/__init__.py +72 -0
  32. intel_npu_acceleration_library/external/openvino/_offline_transformations/__init__.py +21 -0
  33. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp310-win_amd64.pyd +0 -0
  34. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp311-win_amd64.pyd +0 -0
  35. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp312-win_amd64.pyd +0 -0
  36. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp38-win_amd64.pyd +0 -0
  37. intel_npu_acceleration_library/external/openvino/_pyopenvino.cp39-win_amd64.pyd +0 -0
  38. intel_npu_acceleration_library/external/openvino/experimental/__init__.py +14 -0
  39. intel_npu_acceleration_library/external/openvino/frontend/__init__.py +34 -0
  40. intel_npu_acceleration_library/external/openvino/frontend/frontend.py +44 -0
  41. intel_npu_acceleration_library/external/openvino/frontend/jax/__init__.py +15 -0
  42. intel_npu_acceleration_library/external/openvino/frontend/jax/jaxpr_decoder.py +293 -0
  43. intel_npu_acceleration_library/external/openvino/frontend/jax/passes.py +65 -0
  44. intel_npu_acceleration_library/external/openvino/frontend/jax/utils.py +182 -0
  45. intel_npu_acceleration_library/external/openvino/frontend/onnx/__init__.py +15 -0
  46. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp310-win_amd64.pyd +0 -0
  47. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp311-win_amd64.pyd +0 -0
  48. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp312-win_amd64.pyd +0 -0
  49. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp38-win_amd64.pyd +0 -0
  50. intel_npu_acceleration_library/external/openvino/frontend/onnx/py_onnx_frontend.cp39-win_amd64.pyd +0 -0
  51. intel_npu_acceleration_library/external/openvino/frontend/paddle/__init__.py +15 -0
  52. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp310-win_amd64.pyd +0 -0
  53. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp311-win_amd64.pyd +0 -0
  54. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp312-win_amd64.pyd +0 -0
  55. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp38-win_amd64.pyd +0 -0
  56. intel_npu_acceleration_library/external/openvino/frontend/paddle/py_paddle_frontend.cp39-win_amd64.pyd +0 -0
  57. intel_npu_acceleration_library/external/openvino/frontend/pytorch/__init__.py +19 -0
  58. intel_npu_acceleration_library/external/openvino/frontend/pytorch/fx_decoder.py +370 -0
  59. intel_npu_acceleration_library/external/openvino/frontend/pytorch/gptq.py +180 -0
  60. intel_npu_acceleration_library/external/openvino/frontend/pytorch/module_extension.py +39 -0
  61. intel_npu_acceleration_library/external/openvino/frontend/pytorch/patch_model.py +118 -0
  62. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp310-win_amd64.pyd +0 -0
  63. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp311-win_amd64.pyd +0 -0
  64. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp312-win_amd64.pyd +0 -0
  65. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp38-win_amd64.pyd +0 -0
  66. intel_npu_acceleration_library/external/openvino/frontend/pytorch/py_pytorch_frontend.cp39-win_amd64.pyd +0 -0
  67. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend.py +131 -0
  68. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/backend_utils.py +85 -0
  69. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/compile.py +141 -0
  70. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/decompositions.py +116 -0
  71. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/execute.py +189 -0
  72. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/op_support.py +290 -0
  73. intel_npu_acceleration_library/external/openvino/frontend/pytorch/torchdynamo/partition.py +126 -0
  74. intel_npu_acceleration_library/external/openvino/frontend/pytorch/ts_decoder.py +568 -0
  75. intel_npu_acceleration_library/external/openvino/frontend/pytorch/utils.py +258 -0
  76. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/__init__.py +16 -0
  77. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/graph_iterator.py +116 -0
  78. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/node_decoder.py +219 -0
  79. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp310-win_amd64.pyd +0 -0
  80. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp311-win_amd64.pyd +0 -0
  81. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp312-win_amd64.pyd +0 -0
  82. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp38-win_amd64.pyd +0 -0
  83. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/py_tensorflow_frontend.cp39-win_amd64.pyd +0 -0
  84. intel_npu_acceleration_library/external/openvino/frontend/tensorflow/utils.py +481 -0
  85. intel_npu_acceleration_library/external/openvino/helpers/__init__.py +6 -0
  86. intel_npu_acceleration_library/external/openvino/helpers/packing.py +87 -0
  87. intel_npu_acceleration_library/external/openvino/preprocess/README.md +60 -0
  88. intel_npu_acceleration_library/external/openvino/preprocess/__init__.py +28 -0
  89. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/__init__.py +15 -0
  90. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/preprocess_converter.py +47 -0
  91. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/requirements.txt +5 -0
  92. intel_npu_acceleration_library/external/openvino/preprocess/torchvision/torchvision_preprocessing.py +347 -0
  93. intel_npu_acceleration_library/external/openvino/properties/__init__.py +22 -0
  94. intel_npu_acceleration_library/external/openvino/properties/_properties.py +55 -0
  95. intel_npu_acceleration_library/external/openvino/properties/device/__init__.py +14 -0
  96. intel_npu_acceleration_library/external/openvino/properties/hint/__init__.py +15 -0
  97. intel_npu_acceleration_library/external/openvino/properties/intel_auto/__init__.py +12 -0
  98. intel_npu_acceleration_library/external/openvino/properties/intel_cpu/__init__.py +8 -0
  99. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/__init__.py +12 -0
  100. intel_npu_acceleration_library/external/openvino/properties/intel_gpu/hint/__init__.py +11 -0
  101. intel_npu_acceleration_library/external/openvino/properties/log/__init__.py +11 -0
  102. intel_npu_acceleration_library/external/openvino/properties/streams/__init__.py +11 -0
  103. intel_npu_acceleration_library/external/openvino/runtime/__init__.py +85 -0
  104. intel_npu_acceleration_library/external/openvino/runtime/exceptions.py +17 -0
  105. intel_npu_acceleration_library/external/openvino/runtime/ie_api.py +631 -0
  106. intel_npu_acceleration_library/external/openvino/runtime/op/__init__.py +19 -0
  107. intel_npu_acceleration_library/external/openvino/runtime/op/util/__init__.py +22 -0
  108. intel_npu_acceleration_library/external/openvino/runtime/opset1/__init__.py +112 -0
  109. intel_npu_acceleration_library/external/openvino/runtime/opset1/ops.py +3068 -0
  110. intel_npu_acceleration_library/external/openvino/runtime/opset10/__init__.py +179 -0
  111. intel_npu_acceleration_library/external/openvino/runtime/opset10/ops.py +173 -0
  112. intel_npu_acceleration_library/external/openvino/runtime/opset11/__init__.py +179 -0
  113. intel_npu_acceleration_library/external/openvino/runtime/opset11/ops.py +107 -0
  114. intel_npu_acceleration_library/external/openvino/runtime/opset12/__init__.py +180 -0
  115. intel_npu_acceleration_library/external/openvino/runtime/opset12/ops.py +120 -0
  116. intel_npu_acceleration_library/external/openvino/runtime/opset13/__init__.py +188 -0
  117. intel_npu_acceleration_library/external/openvino/runtime/opset13/ops.py +398 -0
  118. intel_npu_acceleration_library/external/openvino/runtime/opset14/__init__.py +190 -0
  119. intel_npu_acceleration_library/external/openvino/runtime/opset14/ops.py +171 -0
  120. intel_npu_acceleration_library/external/openvino/runtime/opset15/__init__.py +17 -0
  121. intel_npu_acceleration_library/external/openvino/runtime/opset15/ops.py +276 -0
  122. intel_npu_acceleration_library/external/openvino/runtime/opset2/__init__.py +118 -0
  123. intel_npu_acceleration_library/external/openvino/runtime/opset2/ops.py +216 -0
  124. intel_npu_acceleration_library/external/openvino/runtime/opset3/__init__.py +134 -0
  125. intel_npu_acceleration_library/external/openvino/runtime/opset3/ops.py +638 -0
  126. intel_npu_acceleration_library/external/openvino/runtime/opset4/__init__.py +145 -0
  127. intel_npu_acceleration_library/external/openvino/runtime/opset4/ops.py +464 -0
  128. intel_npu_acceleration_library/external/openvino/runtime/opset5/__init__.py +152 -0
  129. intel_npu_acceleration_library/external/openvino/runtime/opset5/ops.py +372 -0
  130. intel_npu_acceleration_library/external/openvino/runtime/opset6/__init__.py +154 -0
  131. intel_npu_acceleration_library/external/openvino/runtime/opset6/ops.py +215 -0
  132. intel_npu_acceleration_library/external/openvino/runtime/opset7/__init__.py +158 -0
  133. intel_npu_acceleration_library/external/openvino/runtime/opset7/ops.py +169 -0
  134. intel_npu_acceleration_library/external/openvino/runtime/opset8/__init__.py +169 -0
  135. intel_npu_acceleration_library/external/openvino/runtime/opset8/ops.py +787 -0
  136. intel_npu_acceleration_library/external/openvino/runtime/opset9/__init__.py +175 -0
  137. intel_npu_acceleration_library/external/openvino/runtime/opset9/ops.py +341 -0
  138. intel_npu_acceleration_library/external/openvino/runtime/opset_utils.py +22 -0
  139. intel_npu_acceleration_library/external/openvino/runtime/passes/__init__.py +19 -0
  140. intel_npu_acceleration_library/external/openvino/runtime/passes/graph_rewrite.py +33 -0
  141. intel_npu_acceleration_library/external/openvino/runtime/passes/manager.py +26 -0
  142. intel_npu_acceleration_library/external/openvino/runtime/properties/__init__.py +40 -0
  143. intel_npu_acceleration_library/external/openvino/runtime/properties/hint/__init__.py +25 -0
  144. intel_npu_acceleration_library/external/openvino/runtime/utils/__init__.py +7 -0
  145. intel_npu_acceleration_library/external/openvino/runtime/utils/broadcasting.py +44 -0
  146. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/__init__.py +8 -0
  147. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/data_dispatcher.py +447 -0
  148. intel_npu_acceleration_library/external/openvino/runtime/utils/data_helpers/wrappers.py +148 -0
  149. intel_npu_acceleration_library/external/openvino/runtime/utils/decorators.py +156 -0
  150. intel_npu_acceleration_library/external/openvino/runtime/utils/input_validation.py +133 -0
  151. intel_npu_acceleration_library/external/openvino/runtime/utils/node_factory.py +127 -0
  152. intel_npu_acceleration_library/external/openvino/runtime/utils/reduction.py +25 -0
  153. intel_npu_acceleration_library/external/openvino/runtime/utils/types.py +175 -0
  154. intel_npu_acceleration_library/external/openvino/tools/__init__.py +4 -0
  155. intel_npu_acceleration_library/external/openvino/tools/benchmark/__init__.py +3 -0
  156. intel_npu_acceleration_library/external/openvino/tools/benchmark/benchmark.py +186 -0
  157. intel_npu_acceleration_library/external/openvino/tools/benchmark/main.py +695 -0
  158. intel_npu_acceleration_library/external/openvino/tools/benchmark/parameters.py +199 -0
  159. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/__init__.py +3 -0
  160. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/constants.py +26 -0
  161. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/inputs_filling.py +482 -0
  162. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/logging.py +8 -0
  163. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/statistics_report.py +296 -0
  164. intel_npu_acceleration_library/external/openvino/tools/benchmark/utils/utils.py +836 -0
  165. intel_npu_acceleration_library/external/openvino/tools/ovc/__init__.py +20 -0
  166. intel_npu_acceleration_library/external/openvino/tools/ovc/__main__.py +10 -0
  167. intel_npu_acceleration_library/external/openvino/tools/ovc/cli_parser.py +633 -0
  168. intel_npu_acceleration_library/external/openvino/tools/ovc/convert.py +102 -0
  169. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_data_type.py +82 -0
  170. intel_npu_acceleration_library/external/openvino/tools/ovc/convert_impl.py +550 -0
  171. intel_npu_acceleration_library/external/openvino/tools/ovc/environment_setup_utils.py +50 -0
  172. intel_npu_acceleration_library/external/openvino/tools/ovc/error.py +49 -0
  173. intel_npu_acceleration_library/external/openvino/tools/ovc/get_ov_update_message.py +16 -0
  174. intel_npu_acceleration_library/external/openvino/tools/ovc/help.py +45 -0
  175. intel_npu_acceleration_library/external/openvino/tools/ovc/logger.py +91 -0
  176. intel_npu_acceleration_library/external/openvino/tools/ovc/main.py +40 -0
  177. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/__init__.py +2 -0
  178. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/analysis.py +46 -0
  179. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/check_config.py +57 -0
  180. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/extractor.py +447 -0
  181. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/jax_frontend_utils.py +19 -0
  182. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/layout_utils.py +73 -0
  183. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/moc_emit_ir.py +32 -0
  184. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/offline_transformations.py +107 -0
  185. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/paddle_frontend_utils.py +83 -0
  186. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pipeline.py +298 -0
  187. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/preprocessing.py +220 -0
  188. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/pytorch_frontend_utils.py +214 -0
  189. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/shape_utils.py +109 -0
  190. intel_npu_acceleration_library/external/openvino/tools/ovc/moc_frontend/type_utils.py +82 -0
  191. intel_npu_acceleration_library/external/openvino/tools/ovc/ovc.py +13 -0
  192. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_params.py +6 -0
  193. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_stub.py +28 -0
  194. intel_npu_acceleration_library/external/openvino/tools/ovc/telemetry_utils.py +118 -0
  195. intel_npu_acceleration_library/external/openvino/tools/ovc/utils.py +196 -0
  196. intel_npu_acceleration_library/external/openvino/tools/ovc/version.py +80 -0
  197. intel_npu_acceleration_library/external/openvino/torch/__init__.py +5 -0
  198. intel_npu_acceleration_library/external/openvino/utils.py +115 -0
  199. intel_npu_acceleration_library/functional/__init__.py +8 -0
  200. intel_npu_acceleration_library/functional/scaled_dot_product_attention.py +47 -0
  201. intel_npu_acceleration_library/lib/Release/cache.json +113732 -0
  202. intel_npu_acceleration_library/lib/Release/intel_npu_acceleration_library.dll +0 -0
  203. intel_npu_acceleration_library/lib/Release/openvino.dll +0 -0
  204. intel_npu_acceleration_library/lib/Release/openvino_auto_batch_plugin.dll +0 -0
  205. intel_npu_acceleration_library/lib/Release/openvino_auto_plugin.dll +0 -0
  206. intel_npu_acceleration_library/lib/Release/openvino_c.dll +0 -0
  207. intel_npu_acceleration_library/lib/Release/openvino_hetero_plugin.dll +0 -0
  208. intel_npu_acceleration_library/lib/Release/openvino_intel_cpu_plugin.dll +0 -0
  209. intel_npu_acceleration_library/lib/Release/openvino_intel_gpu_plugin.dll +0 -0
  210. intel_npu_acceleration_library/lib/Release/openvino_intel_npu_plugin.dll +0 -0
  211. intel_npu_acceleration_library/lib/Release/openvino_ir_frontend.dll +0 -0
  212. intel_npu_acceleration_library/lib/Release/openvino_onnx_frontend.dll +0 -0
  213. intel_npu_acceleration_library/lib/Release/openvino_paddle_frontend.dll +0 -0
  214. intel_npu_acceleration_library/lib/Release/openvino_pytorch_frontend.dll +0 -0
  215. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_frontend.dll +0 -0
  216. intel_npu_acceleration_library/lib/Release/openvino_tensorflow_lite_frontend.dll +0 -0
  217. intel_npu_acceleration_library/lib/Release/tbb12.dll +0 -0
  218. intel_npu_acceleration_library/lib/Release/tbb12_debug.dll +0 -0
  219. intel_npu_acceleration_library/lib/Release/tbbbind_2_5.dll +0 -0
  220. intel_npu_acceleration_library/lib/Release/tbbbind_2_5_debug.dll +0 -0
  221. intel_npu_acceleration_library/lib/Release/tbbmalloc.dll +0 -0
  222. intel_npu_acceleration_library/lib/Release/tbbmalloc_debug.dll +0 -0
  223. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy.dll +0 -0
  224. intel_npu_acceleration_library/lib/Release/tbbmalloc_proxy_debug.dll +0 -0
  225. intel_npu_acceleration_library/modelling.py +150 -0
  226. intel_npu_acceleration_library/nn/__init__.py +20 -0
  227. intel_npu_acceleration_library/nn/autograd.py +68 -0
  228. intel_npu_acceleration_library/nn/conv.py +257 -0
  229. intel_npu_acceleration_library/nn/functional.py +1207 -0
  230. intel_npu_acceleration_library/nn/linear.py +162 -0
  231. intel_npu_acceleration_library/nn/llm.py +417 -0
  232. intel_npu_acceleration_library/nn/module.py +393 -0
  233. intel_npu_acceleration_library/optimizations.py +157 -0
  234. intel_npu_acceleration_library/quantization.py +174 -0
@@ -0,0 +1,568 @@
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 openvino.frontend.pytorch.py_pytorch_frontend import _FrontEndPytorchDecoder as Decoder
8
+ from openvino.frontend.pytorch.py_pytorch_frontend import _Type as DecoderType
9
+ from openvino.runtime import op, PartialShape, Type as OVType, OVAny
10
+ from openvino.frontend.pytorch.utils import (
11
+ ivalue_to_constant,
12
+ get_value_from_getattr,
13
+ pt_to_ov_type_map,
14
+ prepare_example_inputs_and_model,
15
+ convert_quantized_tensor,
16
+ graph_has_ops,
17
+ )
18
+ from openvino.runtime import opset11 as ops
19
+ from openvino.frontend.pytorch import gptq
20
+ from openvino.frontend.pytorch import patch_model
21
+ from openvino.frontend.pytorch.module_extension import ModuleExtension
22
+
23
+ import typing
24
+ import torch
25
+ import inspect
26
+
27
+
28
+ class TorchScriptPythonDecoder(Decoder):
29
+ def __init__(
30
+ self,
31
+ pt_module,
32
+ graph_element=None,
33
+ example_input=None,
34
+ alias_db=None,
35
+ shared_memory=True,
36
+ skip_freeze=False,
37
+ constant_cache=None,
38
+ module_extensions=None,
39
+ ):
40
+ super().__init__()
41
+ # We store every decoder created by this decoder so that all them are not deleted until the first decoder is deleted
42
+ self.m_decoders = []
43
+ self._input_signature = None
44
+ self._shared_memory = shared_memory
45
+ self._input_is_list = False
46
+ self.constant_cache = constant_cache if constant_cache is not None else dict()
47
+ self.module_extensions = module_extensions
48
+ self.config = None
49
+ self.out_debug_name_overwrites = {}
50
+ if graph_element is None:
51
+ if hasattr(pt_module, "config"):
52
+ self.config = pt_module.config.to_dict() if not isinstance(
53
+ pt_module.config, dict) else pt_module.config
54
+ try:
55
+ pt_module = self._get_scripted_model(
56
+ pt_module, example_input, skip_freeze)
57
+ except Exception as e:
58
+ if example_input is not None:
59
+ msg = "tracing"
60
+ help_msg = "Please check correctness of provided 'example_input'. "
61
+ "Sometimes models can be converted in scripted mode, please try running "
62
+ "conversion without 'example_input'."
63
+ else:
64
+ msg = "scripting"
65
+ help_msg = "\nTracing sometimes provide better results, please provide valid 'example_input' argument."
66
+ raise RuntimeError(
67
+ f"Couldn't get TorchScript module by {msg}. With exception:\n{e}\n{help_msg} "
68
+ "You can also provide TorchScript module that you obtained"
69
+ " yourself, please refer to PyTorch documentation: "
70
+ "https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html."
71
+ )
72
+ self.graph_element = pt_module.inlined_graph
73
+ self.alias_db = self.graph_element.alias_db()
74
+ else:
75
+ self.graph_element = graph_element
76
+ self.alias_db = alias_db
77
+ self.pt_module = pt_module
78
+ self.raw_inputs = list(self.graph_element.inputs())
79
+ self.raw_outputs = list(self.graph_element.outputs())
80
+ if self._input_signature is not None:
81
+ if "self" in self.raw_inputs[0].debugName():
82
+ self._input_signature.insert(0, "self")
83
+ if 0 < len(self._input_signature) < len(self.raw_inputs):
84
+ # last input is args input, we need to multiply that name by number of extra inputs
85
+ self._input_signature = self._input_signature[:-1]
86
+ n = len(self._input_signature)
87
+ for i in range(len(self.raw_inputs) - n):
88
+ self._input_signature.append(
89
+ self.raw_inputs[i + n].debugName())
90
+
91
+ if isinstance(self.graph_element, torch.Graph):
92
+ self._transform_tensor_list_constants_to_listconstruct(
93
+ self.graph_element)
94
+ self._transform_optional_constants(self.graph_element)
95
+
96
+ @staticmethod
97
+ def _get_preserved_attributes(model) -> list:
98
+ preserved_attributes = []
99
+ for name, module in model.named_modules():
100
+ compressed_types = [torch.int8, torch.uint8,
101
+ torch.float16, torch.bfloat16]
102
+ if hasattr(module, "weight") and getattr(module.weight, "dtype", None) in compressed_types:
103
+ preserved_attributes.append(name)
104
+ return preserved_attributes
105
+
106
+ def _get_scripted_model(self, pt_module, example_inputs=None, skip_freeze=False):
107
+ freeze_by_default = False
108
+ if isinstance(pt_module, torch.nn.Module):
109
+ pt_module.eval()
110
+ input_signature = None
111
+ input_parameters = None
112
+ if isinstance(pt_module, torch.nn.Module) and not isinstance(
113
+ pt_module, (torch.jit._trace.TopLevelTracedModule,
114
+ torch.jit._script.RecursiveScriptModule)
115
+ ):
116
+ # input params is dictionary contains input names and their signature values (type hints and default values if any)
117
+ input_params = inspect.signature(pt_module.forward if hasattr(
118
+ pt_module, "forward") else pt_module.__call__).parameters
119
+ input_signature = list(input_params)
120
+
121
+ if example_inputs is None:
122
+ if self.module_extensions:
123
+ raise RuntimeError(
124
+ "ModuleExtension is not supported for scripting. Please provide valid example_input argument to run tracing.")
125
+ scripted = torch.jit.script(pt_module)
126
+ freeze_by_default = True
127
+ else:
128
+ input_parameters, input_signature, pt_module, self._input_is_list = prepare_example_inputs_and_model(
129
+ example_inputs, input_params, pt_module)
130
+
131
+ # name of attribute in a patched module where the original forward method is kept
132
+ orig_forward_name = "_openvino_module_extension_patch_orig_forward"
133
+ if self.module_extensions:
134
+ patch_model.patch_model(
135
+ pt_module, self.module_extensions, orig_forward_name)
136
+
137
+ gptq_patched = False
138
+ if gptq.detect_gptq_model(pt_module):
139
+ try:
140
+ gptq.patch_model(pt_module)
141
+ gptq_patched = True
142
+ except Exception as error:
143
+ print(
144
+ "[ WARNING ] Failed patching of AutoGPTQ model. Error message:\n", error)
145
+ print(
146
+ "[ WARNING ] Tracing of the model will likely be unsuccessful or incorrect")
147
+ gptq.unpatch_model(pt_module)
148
+ gptq_patched = False
149
+
150
+ try:
151
+ scripted = torch.jit.trace(
152
+ pt_module, **input_parameters, strict=False)
153
+ finally:
154
+ if gptq_patched:
155
+ gptq.unpatch_model(pt_module)
156
+ if self.module_extensions:
157
+ patch_model.unpatch_model(pt_module, orig_forward_name)
158
+
159
+ have_to_freeze_ops = ["prim::Uninitialized",
160
+ "prim::unchecked_cast", "aten::append"]
161
+ if not freeze_by_default and graph_has_ops(scripted.inlined_graph, have_to_freeze_ops):
162
+ # freeze models with unsupported ops
163
+ freeze_by_default = True
164
+ quantized_hint_ops = ["quantized", "aten::as_strided"]
165
+ if freeze_by_default and graph_has_ops(scripted.inlined_graph, quantized_hint_ops):
166
+ # do not freeze quantized models and can't freeze for aten::as_strided it will result in incorrect inference
167
+ freeze_by_default = False
168
+ if freeze_by_default and not skip_freeze:
169
+ preserved_attrs = self._get_preserved_attributes(scripted)
170
+ f_model = torch.jit.freeze(
171
+ scripted, preserved_attrs=preserved_attrs)
172
+ else:
173
+ f_model = scripted
174
+ self._example_input = input_parameters["example_inputs"] if input_parameters else None
175
+ else:
176
+ f_model = pt_module
177
+ self._example_input = example_inputs
178
+
179
+ self._input_signature = input_signature
180
+ return f_model
181
+
182
+ def inputs(self) -> list:
183
+ return [x.unique() for x in self.raw_inputs]
184
+
185
+ def get_input(self, index: int):
186
+ return self.inputs()[index]
187
+
188
+ def get_input_debug_name(self, index: int) -> str:
189
+ return self._raw_input(index).debugName()
190
+
191
+ def get_input_signature_name(self, index: int) -> str:
192
+ if self._input_signature is not None and index < len(self._input_signature):
193
+ return self._input_signature[index]
194
+ return self.get_input_debug_name(index)
195
+
196
+ def get_input_shape(self, index: int):
197
+ raw_input = self._raw_input(index)
198
+ return self.get_shape_for_value(raw_input)
199
+
200
+ def get_input_strides(self, index: int) -> typing.List[int]:
201
+ raw_input = self._raw_input(index)
202
+ if isinstance(raw_input, torch.Value):
203
+ inp_type = raw_input.type()
204
+ if isinstance(inp_type, torch.TensorType):
205
+ strides = inp_type.strides()
206
+ if strides:
207
+ return strides
208
+ return []
209
+
210
+ def get_input_type(self, index: int):
211
+ raw_input = self._raw_input(index)
212
+ return self.get_type_for_value(raw_input)
213
+
214
+ def get_output_debug_name(self, index: int) -> str:
215
+ if index in self.out_debug_name_overwrites:
216
+ return self.out_debug_name_overwrites[index]
217
+ return self._raw_output(index).debugName()
218
+
219
+ def get_output_shape(self, index: int):
220
+ output = self._raw_output(index)
221
+ return self.get_shape_for_value(output)
222
+
223
+ def get_output_type(self, index: int):
224
+ output = self._raw_output(index)
225
+ return self.get_type_for_value(output)
226
+
227
+ def _get_known_type_for_value(self, pt_type):
228
+ """Returns known/unknown types wrapped as OVAny."""
229
+ # Check for simple scalar types first
230
+ if pt_type is None:
231
+ return OVAny(OVType.dynamic)
232
+ # TODO: Don't use str, use native types
233
+ if str(pt_type) in ["int", "float", "bool"]:
234
+ return OVAny(DecoderType.PyScalar(OVAny(pt_to_ov_type_map[str(pt_type)])))
235
+ elif str(pt_type) in pt_to_ov_type_map:
236
+ return OVAny(pt_to_ov_type_map[str(pt_type)])
237
+ elif isinstance(pt_type, torch.TensorType):
238
+ # Tensor type, parse element type
239
+ return OVAny(DecoderType.Tensor(self._get_known_type_for_value(pt_type.dtype())))
240
+ elif isinstance(pt_type, torch.ListType):
241
+ element_type = pt_type.getElementType()
242
+ return OVAny(DecoderType.List(self._get_known_type_for_value(element_type)))
243
+ elif isinstance(pt_type, (torch.StringType, torch.DeviceObjType)):
244
+ return OVAny(DecoderType.Str())
245
+ elif isinstance(pt_type, torch.NoneType):
246
+ return OVAny(DecoderType.PyNone())
247
+ else:
248
+ # Not yet recognized
249
+ return OVAny(OVType.dynamic)
250
+
251
+ def get_shape_for_value(self, value: torch.Value):
252
+ if value.isCompleteTensor():
253
+ # We avoid static shapes, they don't generalize on other inputs
254
+ ps = PartialShape([-1] * len(value.type().sizes()))
255
+ return ps
256
+ else:
257
+ # TODO: Recognize types that we can represent as a nested constructs with objects from DecoderType
258
+ # If recognized, return scalar instead of dynamic. Scalar means a single value of that custom type.
259
+ # See get_type_for_value for reference
260
+ pass
261
+ return PartialShape.dynamic()
262
+
263
+ def get_type_for_value(self, value: torch.Value):
264
+ full_type = self._get_known_type_for_value(value.type())
265
+ return full_type
266
+
267
+ def get_subgraph_size(self) -> int:
268
+ if isinstance(self.graph_element, torch.Node):
269
+ return len(self.get_subgraphs())
270
+ else:
271
+ return 1
272
+
273
+ def visit_subgraph(self, node_visitor) -> None:
274
+ # make sure topological order is satisfied
275
+ for node in self.graph_element.nodes():
276
+ decoder = TorchScriptPythonDecoder(
277
+ self.pt_module,
278
+ node,
279
+ alias_db=self.alias_db,
280
+ shared_memory=self._shared_memory,
281
+ constant_cache=self.constant_cache,
282
+ module_extensions=self.module_extensions,
283
+ )
284
+ self.m_decoders.append(decoder)
285
+ node_visitor(decoder)
286
+
287
+ def decoder_type_name(self) -> str:
288
+ return "ts"
289
+
290
+ def get_subgraphs(self) -> list:
291
+ if self.graph_element.kind() == "prim::PythonOp":
292
+ if "Subgraph" in self.graph_element.attributeNames():
293
+ assert isinstance(
294
+ self.graph_element, torch.Node), "Graph element must be of type torch.Node."
295
+ return [getattr(self.graph_element, self.graph_element.kindOf("Subgraph"))("Subgraph")]
296
+ else:
297
+ # Attribute "Subgraph" is only available if Graph was created using tracing.
298
+ # TODO Find way to extract subgraph for scripted Graph.
299
+ return []
300
+ return list(self.graph_element.blocks())
301
+
302
+ def get_subgraph_decoder(self, index: int):
303
+ decoder = TorchScriptPythonDecoder(
304
+ self.pt_module, self.get_subgraphs(
305
+ )[index], alias_db=self.alias_db, shared_memory=self._shared_memory, module_extensions=self.module_extensions
306
+ )
307
+ self.m_decoders.append(decoder)
308
+ return decoder
309
+
310
+ def get_op_type(self) -> str:
311
+ assert isinstance(
312
+ self.graph_element, torch.Node), "Function can be called only when self.graph_element is of type torch.Node"
313
+ if self.graph_element.kind() == "prim::PythonOp" and callable(getattr(self.graph_element, "pyobj", None)):
314
+ pyobj = self.graph_element.pyobj()
315
+ trampoline = getattr(pyobj, "__self__", None)
316
+ target_extension = getattr(trampoline, "target_extension", None)
317
+
318
+ if isinstance(target_extension, ModuleExtension):
319
+ target_op = target_extension.target_op
320
+ if callable(target_op):
321
+ target = target_op(trampoline.original_module)
322
+ elif isinstance(target_op, str):
323
+ target = target_op
324
+ # TODO: Support target as a callable that will play a role of ConversionExtension for an entire module instead of a single op.
325
+ # Without supporting target as a callable here, ConversionExtension functionality is still possible to implement
326
+ # by combining two extensions: ModuleExtension that use temporary name as a target op and another extension of type ConversionExtension
327
+ # that translates that particular temporary name to custom graph. But providing conversion code as a callable `target` is more convenient.
328
+ return target
329
+ return self.graph_element.kind()
330
+
331
+ def get_schema(self) -> str:
332
+ return self.graph_element.schema()
333
+
334
+ def outputs(self) -> list:
335
+ return [x.unique() for x in self.raw_outputs]
336
+
337
+ def _raw_output(self, index: int):
338
+ return self.raw_outputs[index]
339
+
340
+ def _raw_input(self, index: int):
341
+ return self.raw_inputs[index]
342
+
343
+ def num_of_outputs(self):
344
+ return len(self.raw_outputs)
345
+
346
+ def output(self, index: int):
347
+ return self.outputs()[index]
348
+
349
+ def mark_node(self, node):
350
+ name = self.graph_element.kind()
351
+ if "FrameworkNode" not in node.get_type_name():
352
+ name += "/" + node.get_type_name()
353
+ if self.graph_element.scopeName():
354
+ node.set_friendly_name(
355
+ self.graph_element.scopeName().split("/")[-1] + "/" + name)
356
+ else:
357
+ node.set_friendly_name(name)
358
+ return node
359
+
360
+ def _add_name_to_const_and_cache(self, outputs, name):
361
+ if len(outputs) == 1:
362
+ # set name corresponding to state_dict name
363
+ outputs[0].get_node().set_friendly_name(name)
364
+ self.out_debug_name_overwrites[0] = name
365
+ self.constant_cache[name] = outputs
366
+
367
+ def try_decode_get_attr(self):
368
+ pt_value, name = get_value_from_getattr(
369
+ self.graph_element, self.pt_module)
370
+ assert pt_value is not None, "Couldn't retrieve value from prim::GetAttr"
371
+ if isinstance(pt_value, torch.ScriptObject):
372
+ # We assume this is __torch__.torch.classes.quantized.Conv2dPackedParamsBase or __torch__.torch.classes.quantized.LinearPackedParamsBase
373
+ # TODO: but can be anything. Figure a better way to distinguish
374
+ weight, bias = pt_value.unpack()
375
+ w_name = name + ".weight"
376
+ if w_name in self.constant_cache:
377
+ res = self.constant_cache[w_name]
378
+ else:
379
+ res = convert_quantized_tensor(weight, self._shared_memory)
380
+ self._add_name_to_const_and_cache(res, w_name)
381
+
382
+ if isinstance(bias, torch.Tensor):
383
+ b_name = name + ".bias"
384
+ if b_name in self.constant_cache:
385
+ res += self.constant_cache[b_name]
386
+ else:
387
+ b_res = ivalue_to_constant(bias)
388
+ self._add_name_to_const_and_cache(b_res, b_name)
389
+ res += b_res
390
+ else:
391
+ res += ops.convert_like(ivalue_to_constant(torch.zeros(1))
392
+ [0], res[0]).outputs()
393
+ try:
394
+ # these params exist only for conv params
395
+ stride = pt_value.stride()
396
+ padding = pt_value.padding()
397
+ dilation = pt_value.dilation()
398
+ groups = pt_value.groups()
399
+ res += ivalue_to_constant(stride,
400
+ shared_memory=self._shared_memory)
401
+ res += ivalue_to_constant(padding,
402
+ shared_memory=self._shared_memory)
403
+ res += ivalue_to_constant(dilation,
404
+ shared_memory=self._shared_memory)
405
+ res += ivalue_to_constant(groups,
406
+ shared_memory=self._shared_memory)
407
+ except:
408
+ pass
409
+ return res
410
+ elif not isinstance(pt_value, (torch.jit.ScriptModule, torch.jit.TracedModule)):
411
+ # this tensor can be used multiple times in the model, so we have to reuse constants
412
+ if name in self.constant_cache:
413
+ const = self.constant_cache[name]
414
+ else:
415
+ const = ivalue_to_constant(
416
+ pt_value, shared_memory=self._shared_memory)
417
+ self._add_name_to_const_and_cache(const, name)
418
+ return const
419
+ else:
420
+ return []
421
+
422
+ def as_constant(self):
423
+ if not isinstance(self.graph_element, torch.Node):
424
+ return None
425
+ if not self.get_op_type() == "prim::Constant":
426
+ return None
427
+ pt_value = self._raw_output(0)
428
+ pt_type = pt_value.type()
429
+ if isinstance(pt_type, torch.TensorType):
430
+ return ivalue_to_constant(pt_value.toIValue(), shared_memory=self._shared_memory)
431
+ if isinstance(pt_type, torch.ListType):
432
+ return self._as_constant_list(pt_value)
433
+ const = ivalue_to_constant(
434
+ pt_value.toIValue(), shared_memory=self._shared_memory)
435
+ if len(const) > 0:
436
+ # set name corresponding to state_dict name
437
+ const[0].get_node().set_friendly_name(
438
+ self.get_output_debug_name(0))
439
+ return const
440
+
441
+ def as_string(self):
442
+ if self.get_op_type() == "prim::Constant":
443
+ pt_value = self._raw_output(0)
444
+ if str(pt_value.type()) in ["torch.StringType", "str"]:
445
+ return pt_value.toIValue()
446
+ elif str(pt_value.type()) == "Device":
447
+ return pt_value.toIValue().type
448
+ elif self.get_op_type() == "prim::device":
449
+ return self._get_device_string()
450
+ return None
451
+
452
+ @staticmethod
453
+ def _as_constant_list(pt_value: torch.Value):
454
+ # For now it is treat a list as a 1D tensor; it is required by converters to avoid need to massively
455
+ # rewrite them in that part where constant attributes are queried
456
+ pt_element_type = str(pt_value.type().getElementType())
457
+ ivalue = pt_value.toIValue()
458
+ is_known_type = pt_element_type in pt_to_ov_type_map
459
+
460
+ if is_known_type:
461
+ ovtype = pt_to_ov_type_map[pt_element_type]
462
+ ovshape = PartialShape([len(ivalue)])
463
+ ov_const = op.Constant(ovtype, ovshape.get_shape(), ivalue)
464
+ return ov_const.outputs()
465
+
466
+ def _get_device_string(self) -> str:
467
+ assert self.graph_element.kind(
468
+ ) == "prim::device", "This function can be called for prim::device node."
469
+ value = self.raw_inputs[0]
470
+ if value.type().isSubtypeOf(torch.TensorType.get()):
471
+ tensor = typing.cast(torch.TensorType, value.type())
472
+ device = tensor.device()
473
+ if device:
474
+ return str(device)
475
+ # Device cannot be statically determined.
476
+ return "cpu"
477
+
478
+ def input_is_none(self, index: int) -> bool:
479
+ if index >= len(self.inputs()) or self._raw_input(index) is None:
480
+ return True
481
+ else:
482
+ r_input = self._raw_input(index)
483
+ if str(r_input.type()) in ["torch.NoneType", "NoneType"]:
484
+ return True
485
+ else:
486
+ in_node = r_input.node()
487
+ if in_node.kind() == "prim::GetAttr":
488
+ pt_value, _ = get_value_from_getattr(
489
+ in_node, self.pt_module)
490
+ return pt_value is None
491
+ return False
492
+
493
+ def may_produce_alias(self, in_index: int, out_index: int) -> bool:
494
+ if self.get_op_type() in ["aten::conv1d", "aten::conv2d", "aten::conv3d", "aten::_convolution", "aten::matmul", "aten::clone"]:
495
+ # AliasDB::may_contain_alias sometimes return True for tensors produced by convolution or matmul, we have to workaround that
496
+ return False
497
+ try:
498
+ return self.alias_db.may_contain_alias(self._raw_input(in_index), self._raw_output(out_index))
499
+ except:
500
+ # Sometimes pytorch fails to get result with IndexError exception while these indexes exist in node
501
+ return False
502
+
503
+ def inlined_input(self, index):
504
+ return []
505
+
506
+ def is_input_inlined(self, index):
507
+ return False
508
+
509
+ def get_attribute(self, name):
510
+ return OVAny(None)
511
+
512
+ def get_named_input(self, name):
513
+ raise RuntimeError("There is no named inputs in TS graph")
514
+
515
+ def get_rt_info(self):
516
+ rt_info = {}
517
+ if self.config is not None and "quantization_config" in self.config and "sym" in self.config["quantization_config"]:
518
+ rt_info["symmetric_quantization"] = OVAny(
519
+ self.config["quantization_config"]["sym"])
520
+ return rt_info
521
+
522
+ @staticmethod
523
+ def _transform_tensor_list_constants_to_listconstruct(graph: torch.Graph):
524
+ # Function replaces prim::Constant containing List of Tensors with
525
+ # prim::ListConstruct containing prim::Constant Tensors.
526
+ assert isinstance(
527
+ graph, torch.Graph), "Function can be called only with parameters of type torch.Graph."
528
+ for node in graph.nodes():
529
+ if node.kind() != "prim::Constant":
530
+ continue
531
+ output_type = node.output().type()
532
+ allowed_types = [
533
+ output_type.isSubtypeOf(torch.ListType.ofTensors()),
534
+ output_type.isSubtypeOf(torch.ListType(
535
+ torch.OptionalType.ofTensor())),
536
+ ]
537
+ if not any(allowed_types):
538
+ continue
539
+ const_inputs = []
540
+ for val in node.output().toIValue():
541
+ const_input = graph.insertConstant(val)
542
+ const_input.node().moveBefore(node)
543
+ const_input.node().copyMetadata(node)
544
+ const_inputs.append(const_input)
545
+
546
+ replacement = graph.create("prim::ListConstruct", const_inputs)
547
+ replacement.insertBefore(node)
548
+ replacement.output().setType(torch.ListType.ofTensors())
549
+ replacement.copyMetadata(node)
550
+ node.output().replaceAllUsesWith(replacement.output())
551
+
552
+ @staticmethod
553
+ def _transform_optional_constants(graph: torch.Graph):
554
+ # Function replaces prim::Constant containing torch.OptionalType with
555
+ # prim::Constant containing torch.NoneType or type of IValue.
556
+ assert isinstance(
557
+ graph, torch.Graph), "Function can be called only with parameters of type torch.Graph."
558
+ for node in graph.nodes():
559
+ if node.kind() != "prim::Constant":
560
+ continue
561
+ output_type = node.output().type()
562
+ if not isinstance(output_type, torch.OptionalType):
563
+ continue
564
+ value = node.output().toIValue()
565
+ const_input = graph.insertConstant(value)
566
+ const_input.node().moveBefore(node)
567
+ const_input.node().copyMetadata(node)
568
+ node.output().replaceAllUsesWith(const_input)