mct-nightly 1.8.0.8032023.post421__py3-none-any.whl → 1.8.0.8052023.post414__py3-none-any.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 (307) hide show
  1. {mct_nightly-1.8.0.8032023.post421.dist-info → mct_nightly-1.8.0.8052023.post414.dist-info}/METADATA +10 -9
  2. {mct_nightly-1.8.0.8032023.post421.dist-info → mct_nightly-1.8.0.8052023.post414.dist-info}/RECORD +303 -291
  3. {mct_nightly-1.8.0.8032023.post421.dist-info → mct_nightly-1.8.0.8052023.post414.dist-info}/WHEEL +1 -1
  4. model_compression_toolkit/__init__.py +12 -41
  5. model_compression_toolkit/{core/common/constants.py → constants.py} +2 -6
  6. model_compression_toolkit/core/__init__.py +14 -0
  7. model_compression_toolkit/core/analyzer.py +3 -2
  8. model_compression_toolkit/core/common/__init__.py +0 -1
  9. model_compression_toolkit/core/common/collectors/base_collector.py +1 -1
  10. model_compression_toolkit/core/common/collectors/mean_collector.py +1 -1
  11. model_compression_toolkit/core/common/collectors/min_max_per_channel_collector.py +1 -1
  12. model_compression_toolkit/core/common/framework_implementation.py +1 -8
  13. model_compression_toolkit/core/common/framework_info.py +1 -1
  14. model_compression_toolkit/core/common/fusion/layer_fusing.py +4 -4
  15. model_compression_toolkit/core/common/graph/base_graph.py +2 -2
  16. model_compression_toolkit/core/common/graph/base_node.py +57 -1
  17. model_compression_toolkit/core/common/graph/memory_graph/bipartite_graph.py +1 -1
  18. model_compression_toolkit/core/common/graph/memory_graph/max_cut_astar.py +1 -1
  19. model_compression_toolkit/core/common/graph/virtual_activation_weights_node.py +2 -2
  20. model_compression_toolkit/core/common/memory_computation.py +1 -1
  21. model_compression_toolkit/core/common/mixed_precision/bit_width_setter.py +3 -5
  22. model_compression_toolkit/core/common/mixed_precision/kpi_tools/kpi_data.py +3 -4
  23. model_compression_toolkit/core/common/mixed_precision/kpi_tools/kpi_methods.py +3 -3
  24. model_compression_toolkit/core/common/mixed_precision/mixed_precision_quantization_config.py +1 -1
  25. model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_facade.py +3 -2
  26. model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py +1 -1
  27. model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py +1 -1
  28. model_compression_toolkit/core/common/mixed_precision/sensitivity_evaluation.py +2 -2
  29. model_compression_toolkit/core/common/mixed_precision/solution_refinement_procedure.py +2 -2
  30. model_compression_toolkit/core/common/model_collector.py +2 -2
  31. model_compression_toolkit/core/common/model_validation.py +1 -1
  32. model_compression_toolkit/core/common/network_editors/actions.py +4 -1
  33. model_compression_toolkit/core/common/network_editors/edit_network.py +0 -2
  34. model_compression_toolkit/core/common/quantization/candidate_node_quantization_config.py +1 -1
  35. model_compression_toolkit/core/common/quantization/filter_nodes_candidates.py +3 -4
  36. model_compression_toolkit/core/common/quantization/node_quantization_config.py +3 -3
  37. model_compression_toolkit/core/common/quantization/quantization_config.py +2 -2
  38. model_compression_toolkit/core/common/quantization/quantization_fn_selection.py +1 -1
  39. model_compression_toolkit/core/common/quantization/quantization_params_fn_selection.py +2 -2
  40. model_compression_toolkit/core/common/quantization/quantization_params_generation/error_functions.py +3 -2
  41. model_compression_toolkit/core/common/quantization/quantization_params_generation/kmeans_params.py +1 -1
  42. model_compression_toolkit/core/common/quantization/quantization_params_generation/lut_kmeans_params.py +2 -2
  43. model_compression_toolkit/core/common/quantization/quantization_params_generation/power_of_two_selection.py +2 -2
  44. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_activations_computation.py +3 -3
  45. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_computation.py +1 -1
  46. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_search.py +1 -1
  47. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_weights_computation.py +1 -1
  48. model_compression_toolkit/core/common/quantization/quantization_params_generation/symmetric_selection.py +2 -2
  49. model_compression_toolkit/core/common/quantization/quantization_params_generation/uniform_selection.py +2 -2
  50. model_compression_toolkit/core/common/quantization/quantize_graph_weights.py +4 -4
  51. model_compression_toolkit/core/common/quantization/quantize_node.py +2 -2
  52. model_compression_toolkit/core/common/quantization/quantizers/kmeans_quantizer.py +1 -1
  53. model_compression_toolkit/core/common/quantization/quantizers/lut_kmeans_quantizer.py +1 -1
  54. model_compression_toolkit/core/common/quantization/quantizers/quantizers_helpers.py +4 -2
  55. model_compression_toolkit/core/common/quantization/quantizers/uniform_quantizers.py +2 -2
  56. model_compression_toolkit/core/common/quantization/set_node_quantization_config.py +7 -7
  57. model_compression_toolkit/core/common/similarity_analyzer.py +2 -2
  58. model_compression_toolkit/core/common/statistics_correction/apply_bias_correction_to_graph.py +1 -1
  59. model_compression_toolkit/core/common/statistics_correction/apply_second_moment_correction_to_graph.py +2 -4
  60. model_compression_toolkit/core/common/statistics_correction/compute_bias_correction_of_graph.py +5 -5
  61. model_compression_toolkit/core/common/substitutions/apply_substitutions.py +2 -5
  62. model_compression_toolkit/core/common/substitutions/batchnorm_reconstruction.py +2 -2
  63. model_compression_toolkit/core/common/substitutions/batchnorm_refusing.py +3 -3
  64. model_compression_toolkit/core/common/substitutions/linear_collapsing.py +1 -1
  65. model_compression_toolkit/core/common/substitutions/linear_collapsing_substitution.py +0 -3
  66. model_compression_toolkit/core/common/substitutions/shift_negative_activation.py +5 -5
  67. model_compression_toolkit/core/common/substitutions/virtual_activation_weights_composition.py +1 -1
  68. model_compression_toolkit/core/common/substitutions/weights_activation_split.py +1 -1
  69. model_compression_toolkit/core/common/visualization/tensorboard_writer.py +1 -1
  70. model_compression_toolkit/core/keras/back2framework/factory_model_builder.py +1 -1
  71. model_compression_toolkit/core/keras/back2framework/float_model_builder.py +1 -1
  72. model_compression_toolkit/core/keras/back2framework/keras_model_builder.py +1 -4
  73. model_compression_toolkit/core/keras/back2framework/mixed_precision_model_builder.py +1 -1
  74. model_compression_toolkit/core/keras/back2framework/model_gradients.py +5 -4
  75. model_compression_toolkit/core/keras/back2framework/quantized_model_builder.py +1 -1
  76. model_compression_toolkit/core/keras/constants.py +0 -7
  77. model_compression_toolkit/core/keras/default_framework_info.py +3 -3
  78. model_compression_toolkit/core/keras/graph_substitutions/substitutions/activation_decomposition.py +1 -1
  79. model_compression_toolkit/core/keras/graph_substitutions/substitutions/input_scaling.py +1 -1
  80. model_compression_toolkit/core/keras/graph_substitutions/substitutions/linear_collapsing.py +1 -1
  81. model_compression_toolkit/core/keras/graph_substitutions/substitutions/multi_head_attention_decomposition.py +3 -4
  82. model_compression_toolkit/core/keras/graph_substitutions/substitutions/relu_bound_to_power_of_2.py +2 -1
  83. model_compression_toolkit/core/keras/graph_substitutions/substitutions/remove_relu_upper_bound.py +3 -2
  84. model_compression_toolkit/core/keras/graph_substitutions/substitutions/residual_collapsing.py +1 -1
  85. model_compression_toolkit/core/keras/graph_substitutions/substitutions/shift_negative_activation.py +1 -1
  86. model_compression_toolkit/core/keras/keras_implementation.py +2 -10
  87. model_compression_toolkit/core/keras/keras_model_validation.py +1 -1
  88. model_compression_toolkit/core/keras/keras_node_prior_info.py +1 -1
  89. model_compression_toolkit/core/keras/kpi_data_facade.py +10 -10
  90. model_compression_toolkit/core/keras/quantizer/fake_quant_builder.py +2 -2
  91. model_compression_toolkit/core/keras/quantizer/input_layer_quantize_transform.py +1 -1
  92. model_compression_toolkit/core/keras/quantizer/lut_fake_quant.py +2 -2
  93. model_compression_toolkit/core/keras/quantizer/mixed_precision/selective_quantize_config.py +1 -1
  94. model_compression_toolkit/core/keras/reader/common.py +1 -1
  95. model_compression_toolkit/core/keras/statistics_correction/apply_second_moment_correction.py +1 -1
  96. model_compression_toolkit/core/pytorch/back2framework/factory_model_builder.py +1 -1
  97. model_compression_toolkit/core/pytorch/back2framework/float_model_builder.py +1 -1
  98. model_compression_toolkit/core/pytorch/back2framework/mixed_precision_model_builder.py +1 -1
  99. model_compression_toolkit/core/pytorch/back2framework/model_gradients.py +15 -8
  100. model_compression_toolkit/core/pytorch/back2framework/pytorch_model_builder.py +1 -1
  101. model_compression_toolkit/core/pytorch/back2framework/quantized_model_builder.py +1 -1
  102. model_compression_toolkit/core/pytorch/constants.py +4 -6
  103. model_compression_toolkit/core/pytorch/default_framework_info.py +2 -2
  104. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/linear_collapsing.py +1 -1
  105. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/multi_head_attention_decomposition.py +1 -1
  106. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/relu_bound_to_power_of_2.py +3 -2
  107. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/reshape_with_static_shapes.py +16 -2
  108. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/residual_collapsing.py +1 -1
  109. model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/shift_negative_activation.py +1 -1
  110. model_compression_toolkit/core/pytorch/kpi_data_facade.py +9 -9
  111. model_compression_toolkit/core/pytorch/mixed_precision/mixed_precision_wrapper.py +1 -1
  112. model_compression_toolkit/core/pytorch/pytorch_implementation.py +6 -12
  113. model_compression_toolkit/core/pytorch/pytorch_node_prior_info.py +1 -1
  114. model_compression_toolkit/core/pytorch/quantizer/fake_quant_builder.py +2 -2
  115. model_compression_toolkit/core/pytorch/quantizer/lut_fake_quant.py +1 -1
  116. model_compression_toolkit/core/pytorch/reader/graph_builders.py +4 -2
  117. model_compression_toolkit/core/pytorch/statistics_correction/apply_second_moment_correction.py +1 -1
  118. model_compression_toolkit/core/runner.py +7 -7
  119. model_compression_toolkit/exporter/__init__.py +5 -0
  120. model_compression_toolkit/exporter/model_exporter/__init__.py +0 -3
  121. model_compression_toolkit/exporter/model_exporter/fw_agonstic/exporter.py +1 -1
  122. model_compression_toolkit/exporter/model_exporter/keras/fakely_quant_keras_exporter.py +1 -1
  123. model_compression_toolkit/exporter/model_exporter/keras/keras_export_facade.py +2 -2
  124. model_compression_toolkit/exporter/model_exporter/pytorch/fakely_quant_onnx_pytorch_exporter.py +15 -1
  125. model_compression_toolkit/exporter/model_exporter/pytorch/fakely_quant_torchscript_pytorch_exporter.py +1 -1
  126. model_compression_toolkit/exporter/model_exporter/pytorch/pytorch_export_facade.py +2 -2
  127. model_compression_toolkit/exporter/model_exporter/tflite/fakely_quant_tflite_exporter.py +2 -2
  128. model_compression_toolkit/exporter/model_exporter/tflite/int8_tflite_exporter.py +1 -1
  129. model_compression_toolkit/exporter/model_exporter/tflite/tflite_export_facade.py +2 -2
  130. model_compression_toolkit/exporter/model_wrapper/__init__.py +4 -8
  131. model_compression_toolkit/exporter/model_wrapper/keras/builder/fully_quantized_model_builder.py +45 -38
  132. model_compression_toolkit/exporter/model_wrapper/keras/builder/node_to_quantizer.py +43 -26
  133. model_compression_toolkit/exporter/model_wrapper/keras/validate_layer.py +51 -43
  134. model_compression_toolkit/exporter/model_wrapper/pytorch/builder/fully_quantized_model_builder.py +43 -35
  135. model_compression_toolkit/exporter/model_wrapper/pytorch/builder/node_to_quantizer.py +27 -7
  136. model_compression_toolkit/exporter/model_wrapper/pytorch/validate_layer.py +25 -18
  137. model_compression_toolkit/gptq/__init__.py +6 -0
  138. model_compression_toolkit/gptq/common/gptq_config.py +57 -104
  139. model_compression_toolkit/gptq/common/gptq_constants.py +0 -7
  140. model_compression_toolkit/gptq/common/gptq_framework_implementation.py +32 -0
  141. model_compression_toolkit/gptq/common/gptq_graph.py +2 -2
  142. model_compression_toolkit/gptq/common/gptq_training.py +30 -39
  143. model_compression_toolkit/gptq/keras/gptq_keras_implementation.py +29 -0
  144. model_compression_toolkit/gptq/keras/gptq_training.py +15 -32
  145. model_compression_toolkit/gptq/keras/graph_info.py +8 -33
  146. model_compression_toolkit/gptq/keras/quantization_facade.py +25 -24
  147. model_compression_toolkit/gptq/keras/quantizer/__init__.py +1 -0
  148. model_compression_toolkit/gptq/keras/quantizer/base_keras_gptq_quantizer.py +2 -3
  149. model_compression_toolkit/gptq/keras/quantizer/quant_utils.py +18 -1
  150. model_compression_toolkit/gptq/keras/quantizer/quantization_builder.py +2 -2
  151. model_compression_toolkit/gptq/keras/quantizer/regularization_factory.py +45 -0
  152. model_compression_toolkit/gptq/keras/quantizer/soft_rounding/soft_quantizer_reg.py +110 -0
  153. model_compression_toolkit/gptq/keras/quantizer/soft_rounding/symmetric_soft_quantizer.py +40 -137
  154. model_compression_toolkit/gptq/keras/quantizer/soft_rounding/uniform_soft_quantizer.py +224 -0
  155. model_compression_toolkit/gptq/keras/quantizer/ste_rounding/symmetric_ste.py +13 -43
  156. model_compression_toolkit/gptq/pytorch/gptq_pytorch_implementation.py +29 -0
  157. model_compression_toolkit/gptq/pytorch/gptq_training.py +10 -25
  158. model_compression_toolkit/gptq/pytorch/graph_info.py +7 -27
  159. model_compression_toolkit/gptq/pytorch/quantization_facade.py +21 -34
  160. model_compression_toolkit/gptq/pytorch/quantizer/__init__.py +1 -0
  161. model_compression_toolkit/gptq/pytorch/quantizer/base_pytorch_gptq_quantizer.py +3 -23
  162. model_compression_toolkit/gptq/pytorch/quantizer/quant_utils.py +18 -4
  163. model_compression_toolkit/gptq/pytorch/quantizer/quantization_builder.py +2 -2
  164. model_compression_toolkit/gptq/pytorch/quantizer/regularization_factory.py +45 -0
  165. model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/soft_quantizer_reg.py +114 -0
  166. model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/symmetric_soft_quantizer.py +32 -119
  167. model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/uniform_soft_quantizer.py +194 -0
  168. model_compression_toolkit/gptq/pytorch/quantizer/ste_rounding/symmetric_ste.py +11 -33
  169. model_compression_toolkit/gptq/runner.py +3 -2
  170. model_compression_toolkit/{core/keras/quantization_facade.py → legacy/keras_quantization_facade.py} +12 -13
  171. model_compression_toolkit/{core/pytorch/quantization_facade.py → legacy/pytorch_quantization_facade.py} +11 -12
  172. model_compression_toolkit/{core/common/logger.py → logger.py} +10 -2
  173. model_compression_toolkit/ptq/__init__.py +3 -0
  174. model_compression_toolkit/ptq/keras/quantization_facade.py +11 -12
  175. model_compression_toolkit/ptq/pytorch/quantization_facade.py +8 -8
  176. model_compression_toolkit/qat/__init__.py +4 -0
  177. model_compression_toolkit/qat/common/__init__.py +1 -2
  178. model_compression_toolkit/qat/common/qat_config.py +3 -1
  179. model_compression_toolkit/qat/keras/quantization_facade.py +18 -20
  180. model_compression_toolkit/qat/keras/quantizer/base_keras_qat_quantizer.py +2 -2
  181. model_compression_toolkit/qat/keras/quantizer/ste_rounding/symmetric_ste.py +43 -48
  182. model_compression_toolkit/qat/keras/quantizer/ste_rounding/uniform_ste.py +34 -43
  183. model_compression_toolkit/qat/pytorch/quantization_facade.py +9 -9
  184. model_compression_toolkit/qat/pytorch/quantizer/base_pytorch_qat_quantizer.py +2 -2
  185. model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/symmetric_ste.py +25 -24
  186. model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/uniform_ste.py +32 -31
  187. model_compression_toolkit/{qat/common → quantizers_infrastructure}/constants.py +2 -1
  188. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/base_inferable_quantizer.py +1 -1
  189. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/get_all_subclasses.py +1 -2
  190. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/get_quantizers.py +3 -3
  191. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/load_model.py +2 -2
  192. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantize_wrapper.py +2 -2
  193. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/__init__.py +4 -0
  194. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_lut_pot_inferable_quantizer.py +3 -3
  195. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_pot_inferable_quantizer.py +3 -3
  196. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_symmetric_inferable_quantizer.py +2 -2
  197. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_uniform_inferable_quantizer.py +3 -3
  198. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/base_keras_inferable_quantizer.py +1 -1
  199. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/constants.py +1 -0
  200. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_lut_pot_inferable_quantizer.py +2 -2
  201. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_lut_symmetric_inferable_quantizer.py +2 -2
  202. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_pot_inferable_quantizer.py +2 -2
  203. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_symmetric_inferable_quantizer.py +2 -2
  204. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_uniform_inferable_quantizer.py +2 -2
  205. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/validation_functions.py +1 -1
  206. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantize_wrapper.py +15 -5
  207. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/__init__.py +6 -0
  208. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/{common → pytorch/quantizers/activation_inferable_quantizers}/activation_lut_pot_inferable_quantizer.py +2 -2
  209. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_pot_inferable_quantizer.py +2 -2
  210. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_symmetric_inferable_quantizer.py +2 -2
  211. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_uniform_inferable_quantizer.py +2 -2
  212. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_lut_symmetric_inferable_quantizer.py +2 -2
  213. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_pytorch_inferable_quantizer.py +1 -1
  214. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_symmetric_inferable_quantizer.py +2 -2
  215. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_uniform_inferable_quantizer.py +2 -2
  216. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/constants.py +3 -0
  217. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_lut_pot_inferable_quantizer.py +2 -2
  218. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_lut_symmetric_inferable_quantizer.py +2 -2
  219. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_pot_inferable_quantizer.py +2 -2
  220. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_symmetric_inferable_quantizer.py +2 -2
  221. model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_uniform_inferable_quantizer.py +3 -3
  222. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/base_trainable_quantizer.py +61 -10
  223. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/get_quantizer_config.py +2 -1
  224. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/get_quantizers.py +4 -5
  225. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/trainable_quantizer_config.py +1 -1
  226. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/base_keras_quantizer.py +24 -6
  227. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/config_serialization.py +1 -1
  228. model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/pytorch/base_pytorch_quantizer.py +26 -5
  229. model_compression_toolkit/target_platform_capabilities/constants.py +27 -0
  230. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/__init__.py +5 -5
  231. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/current_tp_model.py +1 -1
  232. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/fusing.py +2 -2
  233. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/operators.py +4 -4
  234. model_compression_toolkit/target_platform_capabilities/target_platform/quantization_format.py +20 -0
  235. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/target_platform_model.py +16 -7
  236. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/target_platform_model_component.py +1 -1
  237. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/__init__.py +5 -5
  238. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/attribute_filter.py +1 -1
  239. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/layer_filter_params.py +33 -35
  240. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/operations_to_layers.py +4 -4
  241. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/target_platform_capabilities.py +9 -30
  242. model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/target_platform_capabilities_component.py +1 -1
  243. model_compression_toolkit/target_platform_capabilities/tpc_models/__init__.py +0 -0
  244. model_compression_toolkit/target_platform_capabilities/tpc_models/default_tpc/latest/__init__.py +25 -0
  245. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/target_platform_capabilities.py +19 -17
  246. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v1/tp_model.py +7 -1
  247. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v1/tpc_keras.py +2 -2
  248. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v1/tpc_pytorch.py +2 -2
  249. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v2/tp_model.py +7 -1
  250. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v2/tpc_keras.py +2 -2
  251. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v2/tpc_pytorch.py +2 -2
  252. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3/tp_model.py +7 -1
  253. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3/tpc_keras.py +2 -2
  254. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3/tpc_pytorch.py +2 -2
  255. model_compression_toolkit/{core/tpc_models/default_tpc/v4_lut → target_platform_capabilities/tpc_models/default_tpc/v3_lut}/tp_model.py +7 -2
  256. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3_lut/tpc_keras.py +2 -2
  257. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3_lut/tpc_pytorch.py +2 -2
  258. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4/tp_model.py +7 -1
  259. model_compression_toolkit/{core/tpc_models/default_tpc/v5 → target_platform_capabilities/tpc_models/default_tpc/v4}/tpc_keras.py +2 -3
  260. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4/tpc_pytorch.py +2 -2
  261. model_compression_toolkit/{core/tpc_models/default_tpc/v3_lut → target_platform_capabilities/tpc_models/default_tpc/v4_lut}/tp_model.py +7 -2
  262. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4_lut/tpc_keras.py +2 -2
  263. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4_lut/tpc_pytorch.py +2 -2
  264. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v5/tp_model.py +7 -1
  265. model_compression_toolkit/{core/tpc_models/default_tpc/v4 → target_platform_capabilities/tpc_models/default_tpc/v5}/tpc_keras.py +2 -2
  266. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v5/tpc_pytorch.py +2 -2
  267. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/get_target_platform_capabilities.py +6 -8
  268. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/__init__.py +14 -0
  269. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/latest/__init__.py +6 -6
  270. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/target_platform_capabilities.py +6 -5
  271. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/v1/tp_model.py +7 -1
  272. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/v1/tpc_keras.py +2 -2
  273. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/v1/tpc_pytorch.py +2 -2
  274. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/latest/__init__.py +22 -0
  275. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/target_platform_capabilities.py +6 -5
  276. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/v1/tp_model.py +7 -1
  277. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/v1/tpc_keras.py +2 -2
  278. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/v1/tpc_pytorch.py +2 -2
  279. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/latest/__init__.py +22 -0
  280. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/target_platform_capabilities.py +6 -5
  281. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/v1/tp_model.py +26 -18
  282. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/v1/tpc_keras.py +3 -3
  283. model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/v1/tpc_pytorch.py +3 -3
  284. model_compression_toolkit/core/tpc_models/default_tpc/latest/__init__.py +0 -25
  285. model_compression_toolkit/core/tpc_models/qnnpack_tpc/latest/__init__.py +0 -22
  286. model_compression_toolkit/core/tpc_models/tflite_tpc/latest/__init__.py +0 -22
  287. model_compression_toolkit/gptq/common/gptq_quantizer_config.py +0 -93
  288. {mct_nightly-1.8.0.8032023.post421.dist-info → mct_nightly-1.8.0.8052023.post414.dist-info}/LICENSE.md +0 -0
  289. {mct_nightly-1.8.0.8032023.post421.dist-info → mct_nightly-1.8.0.8052023.post414.dist-info}/top_level.txt +0 -0
  290. /model_compression_toolkit/{core/tpc_models/imx500_tpc → legacy}/__init__.py +0 -0
  291. /model_compression_toolkit/{core/tpc_models → target_platform_capabilities}/__init__.py +0 -0
  292. /model_compression_toolkit/{core/common → target_platform_capabilities}/immutable.py +0 -0
  293. /model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/op_quantization_config.py +0 -0
  294. /model_compression_toolkit/{core/common → target_platform_capabilities}/target_platform/targetplatform2framework/current_tpc.py +0 -0
  295. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/__init__.py +0 -0
  296. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v1/__init__.py +0 -0
  297. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v2/__init__.py +0 -0
  298. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3/__init__.py +0 -0
  299. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v3_lut/__init__.py +0 -0
  300. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4/__init__.py +0 -0
  301. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v4_lut/__init__.py +0 -0
  302. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/default_tpc/v5/__init__.py +0 -0
  303. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/imx500_tpc/v1/__init__.py +0 -0
  304. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/__init__.py +0 -0
  305. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/qnnpack_tpc/v1/__init__.py +0 -0
  306. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/__init__.py +0 -0
  307. /model_compression_toolkit/{core → target_platform_capabilities}/tpc_models/tflite_tpc/v1/__init__.py +0 -0
@@ -13,18 +13,20 @@
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
15
 
16
- from typing import Dict, Union
16
+ from typing import Union
17
17
 
18
18
  import numpy as np
19
19
  import tensorflow as tf
20
20
  from tensorflow.python.framework.tensor_shape import TensorShape
21
- from model_compression_toolkit.core.common.constants import SIGNED
21
+ from model_compression_toolkit.constants import SIGNED
22
+ from model_compression_toolkit.quantizers_infrastructure.constants import FQ_MIN, FQ_MAX
22
23
 
23
- from model_compression_toolkit.core.common.target_platform import QuantizationMethod
24
+ from model_compression_toolkit.qat import TrainingMethod
25
+
26
+ from model_compression_toolkit.target_platform_capabilities.target_platform import QuantizationMethod
24
27
  from model_compression_toolkit.qat.common import THRESHOLD_TENSOR
25
- from model_compression_toolkit.qat.common.constants import FQ_MIN, FQ_MAX
26
- from model_compression_toolkit import quantizers_infrastructure as qi, TrainingMethod
27
- from model_compression_toolkit.core.common import constants as C
28
+ from model_compression_toolkit import quantizers_infrastructure as qi, constants as C
29
+
28
30
  from model_compression_toolkit.qat.keras.quantizer.base_keras_qat_quantizer import BaseKerasQATTrainableQuantizer
29
31
  from model_compression_toolkit.quantizers_infrastructure import TrainableQuantizerWeightsConfig, \
30
32
  TrainableQuantizerActivationConfig
@@ -32,6 +34,7 @@ from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructur
32
34
  from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructure.keras.quantizers import \
33
35
  WeightsPOTInferableQuantizer, WeightsSymmetricInferableQuantizer, ActivationPOTInferableQuantizer, \
34
36
  ActivationSymmetricInferableQuantizer
37
+ from model_compression_toolkit.quantizers_infrastructure.trainable_infrastructure.common.base_trainable_quantizer import VariableGroup
35
38
 
36
39
 
37
40
  @mark_quantizer(quantization_target=qi.QuantizationTarget.Weights,
@@ -52,11 +55,11 @@ class STEWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
52
55
  """
53
56
  super().__init__(quantization_config)
54
57
  self.power_of_two = quantization_config.weights_quantization_method == QuantizationMethod.POWER_OF_TWO
55
- self.threshold_values = quantization_config.weights_quantization_params[C.THRESHOLD]
58
+ self.threshold_values = np.array(quantization_config.weights_quantization_params[C.THRESHOLD])
56
59
  self.threshold_shape = np.asarray(self.threshold_values).shape
57
60
  self.per_channel = self.quantization_config.weights_per_channel_threshold
58
61
  self.channel_axis = self.quantization_config.weights_channels_axis
59
- self.np_threshold_values = np.reshape(np.asarray(self.threshold_values),[-1]) if self.channel_axis else float(self.threshold_values)
62
+ self.np_threshold_values = np.reshape(np.asarray(self.threshold_values),[-1]) if self.per_channel else float(self.threshold_values)
60
63
 
61
64
  if self.per_channel and self.channel_axis not in [-1, len(self.threshold_shape) - 1]:
62
65
  # Tensorflow's fake_quant_with_min_max_vars_per_channel only works on last axis, so
@@ -76,48 +79,45 @@ class STEWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
76
79
  max_int = (2 ** (self.num_bits - int(C.WEIGHTS_SIGNED))) - 1
77
80
  self.min = delta * min_int
78
81
  self.max = delta * max_int
79
- self.quantizer_parameters = {}
82
+
80
83
 
81
84
  def initialize_quantization(self,
82
85
  tensor_shape: TensorShape,
83
86
  name: str,
84
- layer: qi.KerasQuantizationWrapper) -> Dict[str, tf.Variable]:
87
+ layer: qi.KerasQuantizationWrapper):
85
88
  """
86
- Add min and max variables to layer.
87
- Args:
88
- tensor_shape: Tensor shape the quantizer quantize.
89
- name: Prefix of variables names.
90
- layer: Layer to add the variables to. The variables are saved
91
- in the layer's scope.
89
+ Add quantizer parameters to the quantizer parameters dictionary
92
90
 
93
- Returns:
94
- Dictionary of new variables.
91
+ Args:
92
+ tensor_shape: tensor shape of the quantized tensor.
93
+ name: Tensor name.
94
+ layer: Layer to quantize.
95
95
  """
96
96
  ptq_threshold_tensor = layer.add_weight(
97
97
  name + THRESHOLD_TENSOR,
98
- shape=len(self.np_threshold_values) if self.channel_axis else (),
98
+ shape=len(self.np_threshold_values) if self.per_channel else (),
99
99
  initializer=tf.keras.initializers.Constant(1.0),
100
100
  trainable=False)
101
101
  ptq_threshold_tensor.assign(self.np_threshold_values)
102
102
 
103
103
  fq_min = layer.add_weight(
104
104
  name + FQ_MIN,
105
- shape=len(self.min) if self.channel_axis else (),
105
+ shape=len(self.min) if self.per_channel else (),
106
106
  initializer=tf.keras.initializers.Constant(-1.0),
107
107
  trainable=False)
108
108
  fq_min.assign(self.min)
109
109
 
110
110
  fq_max = layer.add_weight(
111
111
  name + FQ_MAX,
112
- shape=len(self.max) if self.channel_axis else (),
112
+ shape=len(self.max) if self.per_channel else (),
113
113
  initializer=tf.keras.initializers.Constant(1.0),
114
114
  trainable=False)
115
115
  fq_max.assign(self.max)
116
116
 
117
117
  # save the quantizer added parameters for later calculations
118
- self.quantizer_parameters = {THRESHOLD_TENSOR: ptq_threshold_tensor,
119
- FQ_MIN: fq_min, FQ_MAX: fq_max}
120
- return self.quantizer_parameters
118
+ self.add_quantizer_variable(THRESHOLD_TENSOR, ptq_threshold_tensor, VariableGroup.QPARAMS)
119
+ self.add_quantizer_variable(FQ_MIN, fq_min, VariableGroup.QPARAMS)
120
+ self.add_quantizer_variable(FQ_MAX, fq_max, VariableGroup.QPARAMS)
121
121
 
122
122
  def __call__(self,
123
123
  inputs: tf.Tensor,
@@ -134,9 +134,9 @@ class STEWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
134
134
  The quantized tensor.
135
135
  """
136
136
 
137
- _min = self.quantizer_parameters[FQ_MIN]
138
- _max = self.quantizer_parameters[FQ_MAX]
139
- if self.channel_axis:
137
+ _min = self.get_quantizer_variable(FQ_MIN)
138
+ _max = self.get_quantizer_variable(FQ_MAX)
139
+ if self.per_channel:
140
140
  if self.perm_vec:
141
141
  inputs = tf.transpose(inputs, perm=self.perm_vec)
142
142
  q_tensor = tf.quantization.fake_quant_with_min_max_vars_per_channel(inputs, _min, _max,
@@ -157,7 +157,7 @@ class STEWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
157
157
  BaseKerasInferableQuantizer object.
158
158
  """
159
159
  if self.power_of_two:
160
- pot_threshold = 2 ** np.ceil(np.log2(self.quantizer_parameters[THRESHOLD_TENSOR]))
160
+ pot_threshold = 2 ** np.ceil(np.log2(self.get_quantizer_variable(THRESHOLD_TENSOR)))
161
161
  return WeightsPOTInferableQuantizer(num_bits=self.num_bits,
162
162
  threshold=list(pot_threshold.flatten()),
163
163
  per_channel=self.per_channel,
@@ -165,8 +165,7 @@ class STEWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
165
165
  input_rank=len(self.threshold_shape))
166
166
  else:
167
167
  return WeightsSymmetricInferableQuantizer(num_bits=self.num_bits,
168
- threshold=list(self.quantizer_parameters[
169
- THRESHOLD_TENSOR].numpy().flatten()),
168
+ threshold=list(self.get_quantizer_variable(THRESHOLD_TENSOR).numpy().flatten()),
170
169
  per_channel=self.per_channel,
171
170
  channel_axis=self.channel_axis,
172
171
  input_rank=len(self.threshold_shape))
@@ -203,22 +202,18 @@ class STEActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
203
202
  max_int = (2 ** (self.num_bits - int(self.signed))) - 1
204
203
  self.min = delta * min_int
205
204
  self.max = delta * max_int
206
- self.quantizer_parameters = {}
207
205
 
208
206
  def initialize_quantization(self,
209
207
  tensor_shape: TensorShape,
210
208
  name: str,
211
- layer: qi.KerasQuantizationWrapper) -> Dict[str, tf.Variable]:
209
+ layer: qi.KerasQuantizationWrapper):
212
210
  """
213
- Add min and max variables to layer.
214
- Args:
215
- tensor_shape: Tensor shape the quantizer quantize.
216
- name: Prefix of variables names.
217
- layer: Layer to add the variables to. The variables are saved
218
- in the layer's scope.
211
+ Add quantizer parameters to the quantizer parameters dictionary
219
212
 
220
- Returns:
221
- Dictionary of new variables.
213
+ Args:
214
+ tensor_shape: tensor shape of the quantized tensor.
215
+ name: Tensor name.
216
+ layer: Layer to quantize.
222
217
  """
223
218
  ptq_threshold_tensor = layer.add_weight(
224
219
  name + THRESHOLD_TENSOR,
@@ -242,9 +237,10 @@ class STEActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
242
237
  fq_max.assign(self.max)
243
238
 
244
239
  # save the quantizer added parameters for later calculations
245
- self.quantizer_parameters = {THRESHOLD_TENSOR: ptq_threshold_tensor,
246
- FQ_MIN: fq_min, FQ_MAX: fq_max}
247
- return self.quantizer_parameters
240
+ self.add_quantizer_variable(THRESHOLD_TENSOR, ptq_threshold_tensor, VariableGroup.QPARAMS)
241
+ self.add_quantizer_variable(FQ_MIN, fq_min, VariableGroup.QPARAMS)
242
+ self.add_quantizer_variable(FQ_MAX, fq_max, VariableGroup.QPARAMS)
243
+
248
244
 
249
245
  def __call__(self,
250
246
  inputs: tf.Tensor,
@@ -259,8 +255,8 @@ class STEActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
259
255
  The quantized tensor.
260
256
  """
261
257
 
262
- _min = self.quantizer_parameters[FQ_MIN]
263
- _max = self.quantizer_parameters[FQ_MAX]
258
+ _min = self.get_quantizer_variable(FQ_MIN)
259
+ _max = self.get_quantizer_variable(FQ_MAX)
264
260
  q_tensor = tf.quantization.fake_quant_with_min_max_vars(inputs, _min, _max,
265
261
  num_bits=self.num_bits)
266
262
 
@@ -275,7 +271,7 @@ class STEActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
275
271
  """
276
272
 
277
273
  if self.power_of_two:
278
- pot_threshold = 2 ** np.ceil(np.log2(self.quantizer_parameters[THRESHOLD_TENSOR]))
274
+ pot_threshold = 2 ** np.ceil(np.log2(self.get_quantizer_variable(THRESHOLD_TENSOR)))
279
275
  return ActivationPOTInferableQuantizer(num_bits=self.num_bits,
280
276
  # In activation quantization is per-tensor only - thus we pass
281
277
  # the threshold as a list with a len of 1
@@ -285,6 +281,5 @@ class STEActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
285
281
  return ActivationSymmetricInferableQuantizer(num_bits=self.num_bits,
286
282
  # In activation quantization is per-tensor only - thus we
287
283
  # pass the threshold as a list with a len of 1
288
- threshold=[
289
- self.quantizer_parameters[THRESHOLD_TENSOR].numpy()],
284
+ threshold=[self.get_quantizer_variable(THRESHOLD_TENSOR).numpy()],
290
285
  signed=self.signed)
@@ -12,19 +12,18 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
-
16
- from typing import Dict
17
-
18
15
  import numpy as np
19
16
  import tensorflow as tf
20
17
  from tensorflow.python.framework.tensor_shape import TensorShape
21
- from model_compression_toolkit.core.common.constants import RANGE_MIN, RANGE_MAX
22
- from model_compression_toolkit.core.common.target_platform import QuantizationMethod
23
- from model_compression_toolkit.qat.common.constants import FQ_MIN, FQ_MAX
18
+ from model_compression_toolkit.constants import RANGE_MIN, RANGE_MAX
19
+ from model_compression_toolkit.quantizers_infrastructure.constants import FQ_MIN, FQ_MAX
20
+ from model_compression_toolkit.qat import TrainingMethod
21
+ from model_compression_toolkit.target_platform_capabilities.target_platform import QuantizationMethod
22
+
24
23
  from model_compression_toolkit.qat.keras.quantizer.quant_utils import adjust_range_to_include_zero
25
24
  from model_compression_toolkit.core.common.quantization.quantizers.quantizers_helpers import fix_range_to_include_zero
26
- from model_compression_toolkit import quantizers_infrastructure as qi, TrainingMethod
27
- from model_compression_toolkit.core.common import constants as C
25
+ from model_compression_toolkit import quantizers_infrastructure as qi, constants as C
26
+
28
27
  from model_compression_toolkit.qat.keras.quantizer.base_keras_qat_quantizer import BaseKerasQATTrainableQuantizer
29
28
  from model_compression_toolkit.quantizers_infrastructure import TrainableQuantizerWeightsConfig, \
30
29
  TrainableQuantizerActivationConfig
@@ -32,6 +31,7 @@ from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructur
32
31
  mark_quantizer
33
32
  from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructure.keras.quantizers import \
34
33
  BaseKerasInferableQuantizer, WeightsUniformInferableQuantizer, ActivationUniformInferableQuantizer
34
+ from model_compression_toolkit.quantizers_infrastructure.trainable_infrastructure.common.base_trainable_quantizer import VariableGroup
35
35
 
36
36
 
37
37
  @mark_quantizer(quantization_target=qi.QuantizationTarget.Weights,
@@ -52,8 +52,8 @@ class STEUniformWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
52
52
 
53
53
  """
54
54
  super().__init__(quantization_config)
55
- self.max_values = quantization_config.weights_quantization_params[RANGE_MAX]
56
- self.min_values = quantization_config.weights_quantization_params[RANGE_MIN]
55
+ self.max_values = np.array(quantization_config.weights_quantization_params[RANGE_MAX])
56
+ self.min_values = np.array(quantization_config.weights_quantization_params[RANGE_MIN])
57
57
  self.num_bits = self.quantization_config.weights_n_bits
58
58
  self.per_channel = self.quantization_config.weights_per_channel_threshold
59
59
  self.channel_axis = self.quantization_config.weights_channels_axis
@@ -70,22 +70,17 @@ class STEUniformWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
70
70
  else:
71
71
  self.perm_vec = None
72
72
 
73
- self.quantizer_parameters = {}
74
-
75
73
  def initialize_quantization(self,
76
74
  tensor_shape: TensorShape,
77
75
  name: str,
78
- layer: qi.KerasQuantizationWrapper) -> Dict[str, tf.Variable]:
76
+ layer: qi.KerasQuantizationWrapper):
79
77
  """
80
- Add min and max variables to layer.
81
- Args:
82
- tensor_shape: Tensor shape the quantizer quantize.
83
- name: Prefix of variables names.
84
- layer: Layer to add the variables to. The variables are saved
85
- in the layer's scope.
78
+ Add quantizer parameters to the quantizer parameters dictionary
86
79
 
87
- Returns:
88
- Dictionary of new variables.
80
+ Args:
81
+ tensor_shape: tensor shape of the quantized tensor.
82
+ name: Tensor name.
83
+ layer: Layer to quantize.
89
84
  """
90
85
  fq_min = layer.add_weight(
91
86
  name + FQ_MIN,
@@ -102,8 +97,8 @@ class STEUniformWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
102
97
  fq_max.assign(self.max)
103
98
 
104
99
  # save the quantizer added parameters for later calculations
105
- self.quantizer_parameters = {FQ_MIN: fq_min, FQ_MAX: fq_max}
106
- return self.quantizer_parameters
100
+ self.add_quantizer_variable(FQ_MIN, fq_min, VariableGroup.QPARAMS)
101
+ self.add_quantizer_variable(FQ_MAX, fq_max, VariableGroup.QPARAMS)
107
102
 
108
103
  def __call__(self, inputs: tf.Tensor,
109
104
  training: bool):
@@ -117,8 +112,8 @@ class STEUniformWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
117
112
  The quantized tensor.
118
113
  """
119
114
 
120
- _min = self.quantizer_parameters[FQ_MIN]
121
- _max = self.quantizer_parameters[FQ_MAX]
115
+ _min = self.get_quantizer_variable(FQ_MIN)
116
+ _max = self.get_quantizer_variable(FQ_MAX)
122
117
  _min, _max = adjust_range_to_include_zero(_min, _max, self.num_bits)
123
118
 
124
119
  if self.per_channel:
@@ -142,8 +137,8 @@ class STEUniformWeightQATQuantizer(BaseKerasQATTrainableQuantizer):
142
137
  Returns:
143
138
  BaseKerasInferableQuantizer object.
144
139
  """
145
- min_range, max_range = fix_range_to_include_zero(self.quantizer_parameters[FQ_MIN].numpy(),
146
- self.quantizer_parameters[FQ_MAX].numpy(),
140
+ min_range, max_range = fix_range_to_include_zero(self.get_quantizer_variable(FQ_MIN).numpy(),
141
+ self.get_quantizer_variable(FQ_MAX).numpy(),
147
142
  self.num_bits)
148
143
  return WeightsUniformInferableQuantizer(num_bits=self.num_bits,
149
144
  min_range=list(min_range.flatten()),
@@ -174,22 +169,18 @@ class STEUniformActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
174
169
  self.num_bits = quantization_config.activation_n_bits
175
170
  self.min_range = quantization_config.activation_quantization_params[C.RANGE_MIN]
176
171
  self.max_range = quantization_config.activation_quantization_params[C.RANGE_MAX]
177
- self.quantizer_parameters = {}
178
172
 
179
173
  def initialize_quantization(self,
180
174
  tensor_shape: TensorShape,
181
175
  name: str,
182
- layer: qi.KerasQuantizationWrapper) -> Dict[str, tf.Variable]:
176
+ layer: qi.KerasQuantizationWrapper):
183
177
  """
184
- Add min and max variables to layer.
185
- Args:
186
- tensor_shape: Tensor shape the quantizer quantize.
187
- name: Prefix of variables names.
188
- layer: Layer to add the variables to. The variables are saved
189
- in the layer's scope.
178
+ Add quantizer parameters to the quantizer parameters dictionary
190
179
 
191
- Returns:
192
- Dictionary of new variables.
180
+ Args:
181
+ tensor_shape: tensor shape of the quantized tensor.
182
+ name: Tensor name.
183
+ layer: Layer to quantize.
193
184
  """
194
185
  fq_min = layer.add_weight(
195
186
  name + FQ_MIN,
@@ -206,8 +197,8 @@ class STEUniformActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
206
197
  fq_max.assign(self.max_range)
207
198
 
208
199
  # save the quantizer added parameters for later calculations
209
- self.quantizer_parameters = {FQ_MIN: fq_min, FQ_MAX: fq_max}
210
- return self.quantizer_parameters
200
+ self.add_quantizer_variable(FQ_MIN, fq_min, VariableGroup.QPARAMS)
201
+ self.add_quantizer_variable(FQ_MAX, fq_max, VariableGroup.QPARAMS)
211
202
 
212
203
  def __call__(self,
213
204
  inputs: tf.Tensor,
@@ -222,8 +213,8 @@ class STEUniformActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
222
213
  The quantized tensor.
223
214
  """
224
215
 
225
- _min = self.quantizer_parameters[FQ_MIN]
226
- _max = self.quantizer_parameters[FQ_MAX]
216
+ _min = self.get_quantizer_variable(FQ_MIN)
217
+ _max = self.get_quantizer_variable(FQ_MAX)
227
218
  _min, _max = adjust_range_to_include_zero(_min, _max, self.num_bits)
228
219
  q_tensor = tf.quantization.fake_quant_with_min_max_vars(inputs, _min, _max,
229
220
  num_bits=self.num_bits)
@@ -237,8 +228,8 @@ class STEUniformActivationQATQuantizer(BaseKerasQATTrainableQuantizer):
237
228
  Returns:
238
229
  BaseKerasInferableQuantizer object.
239
230
  """
240
- min_range, max_range = fix_range_to_include_zero(self.quantizer_parameters[FQ_MIN].numpy(),
241
- self.quantizer_parameters[FQ_MAX].numpy(),
231
+ min_range, max_range = fix_range_to_include_zero(self.get_quantizer_variable(FQ_MIN).numpy(),
232
+ self.get_quantizer_variable(FQ_MAX).numpy(),
242
233
  self.num_bits)
243
234
  return ActivationUniformInferableQuantizer(num_bits=self.num_bits,
244
235
  # In activation quantization is per-tensor only - thus we pass
@@ -16,16 +16,16 @@ import copy
16
16
  from typing import Callable
17
17
  from functools import partial
18
18
 
19
- from model_compression_toolkit.core.common.constants import FOUND_TORCH, PYTORCH
19
+ from model_compression_toolkit.constants import FOUND_TORCH, PYTORCH
20
20
 
21
- from model_compression_toolkit import CoreConfig
21
+ from model_compression_toolkit.core import CoreConfig
22
22
  from model_compression_toolkit.core import common
23
- from model_compression_toolkit.core.common import Logger
23
+ from model_compression_toolkit.logger import Logger
24
24
  from model_compression_toolkit.core.common.framework_info import FrameworkInfo
25
25
  from model_compression_toolkit.core.common.mixed_precision.kpi_tools.kpi import KPI
26
26
  from model_compression_toolkit.core.common.mixed_precision.mixed_precision_quantization_config import \
27
27
  MixedPrecisionQuantizationConfigV2
28
- from model_compression_toolkit.core.common.target_platform.targetplatform2framework import TargetPlatformCapabilities
28
+ from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework import TargetPlatformCapabilities
29
29
  from model_compression_toolkit.core.runner import core_runner, _init_tensorboard_writer
30
30
  from model_compression_toolkit.ptq.runner import ptq_runner
31
31
 
@@ -34,7 +34,7 @@ if FOUND_TORCH:
34
34
  import torch.nn as nn
35
35
  from torch.nn import Module
36
36
  from model_compression_toolkit.core.pytorch.default_framework_info import DEFAULT_PYTORCH_INFO
37
- from model_compression_toolkit.core.pytorch.constants import DEFAULT_TP_MODEL
37
+ from model_compression_toolkit.target_platform_capabilities.constants import DEFAULT_TP_MODEL
38
38
  from model_compression_toolkit.core.pytorch.pytorch_implementation import PytorchImplementation
39
39
  from model_compression_toolkit.qat.common.qat_config import _is_qat_applicable
40
40
  from model_compression_toolkit.core.pytorch.back2framework.pytorch_model_builder import PyTorchModelBuilder
@@ -121,7 +121,7 @@ if FOUND_TORCH:
121
121
 
122
122
  Create a MCT core config, containing the quantization configuration:
123
123
 
124
- >>> config = mct.CoreConfig()
124
+ >>> config = mct.core.CoreConfig()
125
125
 
126
126
  Pass the model, the representative dataset generator, the configuration and the target KPI to get a
127
127
  quantized model. Now the model contains quantizer wrappers for fine tunning the weights:
@@ -134,11 +134,11 @@ if FOUND_TORCH:
134
134
 
135
135
  if core_config.mixed_precision_enable:
136
136
  if not isinstance(core_config.mixed_precision_config, MixedPrecisionQuantizationConfigV2):
137
- common.Logger.error("Given quantization config to mixed-precision facade is not of type "
137
+ Logger.error("Given quantization config to mixed-precision facade is not of type "
138
138
  "MixedPrecisionQuantizationConfigV2. Please use pytorch_post_training_quantization API,"
139
139
  "or pass a valid mixed precision configuration.")
140
140
 
141
- common.Logger.info("Using experimental mixed-precision quantization. "
141
+ Logger.info("Using experimental mixed-precision quantization. "
142
142
  "If you encounter an issue please file a bug.")
143
143
 
144
144
  tb_w = _init_tensorboard_writer(fw_info)
@@ -193,7 +193,7 @@ if FOUND_TORCH:
193
193
 
194
194
  Create a MCT core config, containing the quantization configuration:
195
195
 
196
- >>> config = mct.CoreConfig()
196
+ >>> config = mct.core.CoreConfig()
197
197
 
198
198
  Pass the model, the representative dataset generator, the configuration and the target KPI to get a
199
199
  quantized model:
@@ -14,8 +14,8 @@
14
14
  # ==============================================================================
15
15
  from typing import Union
16
16
 
17
- from model_compression_toolkit.core.common.logger import Logger
18
- from model_compression_toolkit.core.common.constants import FOUND_TORCH
17
+ from model_compression_toolkit.logger import Logger
18
+ from model_compression_toolkit.constants import FOUND_TORCH
19
19
 
20
20
  from model_compression_toolkit.quantizers_infrastructure import TrainableQuantizerWeightsConfig, \
21
21
  TrainableQuantizerActivationConfig
@@ -12,18 +12,19 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- from typing import Dict, Union
15
+ from typing import Union
16
16
 
17
17
  import numpy as np
18
18
  import torch
19
19
  import torch.nn as nn
20
20
 
21
- from model_compression_toolkit.core.common.target_platform import QuantizationMethod
21
+ from model_compression_toolkit.qat import TrainingMethod
22
+ from model_compression_toolkit.target_platform_capabilities.target_platform import QuantizationMethod
22
23
  from model_compression_toolkit.qat.common import THRESHOLD_TENSOR
23
- from model_compression_toolkit import quantizers_infrastructure as qi, TrainingMethod
24
+ from model_compression_toolkit import quantizers_infrastructure as qi, constants as C
24
25
  from model_compression_toolkit.qat.pytorch.quantizer.base_pytorch_qat_quantizer import BasePytorchQATTrainableQuantizer
25
26
  from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructure.common.base_inferable_quantizer import mark_quantizer
26
- from model_compression_toolkit.core.common import constants as C
27
+
27
28
  from model_compression_toolkit.core.pytorch.utils import to_torch_tensor
28
29
  from model_compression_toolkit.qat.pytorch.quantizer.quantizer_utils import ste_round, ste_clip, symmetric_quantizer
29
30
  from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructure.pytorch.quantizers import \
@@ -31,6 +32,7 @@ from model_compression_toolkit.quantizers_infrastructure.inferable_infrastructur
31
32
  ActivationSymmetricInferableQuantizer
32
33
  from model_compression_toolkit.quantizers_infrastructure.trainable_infrastructure.common.trainable_quantizer_config import \
33
34
  TrainableQuantizerWeightsConfig, TrainableQuantizerActivationConfig
35
+ from model_compression_toolkit.quantizers_infrastructure.trainable_infrastructure.common.base_trainable_quantizer import VariableGroup
34
36
 
35
37
 
36
38
  @mark_quantizer(quantization_target=qi.QuantizationTarget.Weights,
@@ -66,22 +68,19 @@ class STEWeightQATQuantizer(BasePytorchQATTrainableQuantizer):
66
68
  self.max_int = (2 ** n_pos_bits) - 1
67
69
  self.min = delta * self.min_int
68
70
  self.max = delta * self.max_int
69
- self.quantizer_parameters = {}
71
+
70
72
 
71
73
  def initialize_quantization(self,
72
74
  tensor_shape: torch.Size,
73
75
  name: str,
74
- layer: qi.PytorchQuantizationWrapper) -> Dict[str, nn.Parameter]:
76
+ layer: qi.PytorchQuantizationWrapper):
75
77
  """
76
- Add min and max variables to layer.
77
- Args:
78
- tensor_shape: Tensor shape the quantizer quantize.
79
- name: Prefix of variables names.
80
- layer: Layer to add the variables to. The variables are saved
81
- in the layer's scope.
78
+ Add quantizer parameters to the quantizer parameters dictionary
82
79
 
83
- Returns:
84
- Dictionary of new variables.
80
+ Args:
81
+ tensor_shape: tensor shape of the quantized tensor.
82
+ name: Tensor name.
83
+ layer: Layer to quantize.
85
84
  """
86
85
 
87
86
  # Add threshold variables to layer.
@@ -89,9 +88,8 @@ class STEWeightQATQuantizer(BasePytorchQATTrainableQuantizer):
89
88
  requires_grad=False))
90
89
 
91
90
  # save the quantizer added parameters for later calculations
92
- self.quantizer_parameters = {THRESHOLD_TENSOR: layer.get_parameter(name + "_" + THRESHOLD_TENSOR)}
91
+ self.add_quantizer_variable(THRESHOLD_TENSOR, layer.get_parameter(name + "_" + THRESHOLD_TENSOR), VariableGroup.QPARAMS)
93
92
 
94
- return self.quantizer_parameters
95
93
 
96
94
  def __call__(self,
97
95
  inputs: nn.Parameter,
@@ -116,7 +114,7 @@ class STEWeightQATQuantizer(BasePytorchQATTrainableQuantizer):
116
114
  Returns:
117
115
  A pytorch inferable quanizer object.
118
116
  """
119
- np_threshold = self.quantizer_parameters[THRESHOLD_TENSOR].cpu().detach().numpy().flatten()
117
+ np_threshold = self.get_quantizer_variable(THRESHOLD_TENSOR).cpu().detach().numpy().flatten()
120
118
  if self.power_of_two:
121
119
  pot_threshold = 2 ** np.ceil(np.log2(np_threshold))
122
120
  return WeightsPOTInferableQuantizer(num_bits=self.num_bits,
@@ -153,20 +151,23 @@ class STEActivationQATQuantizer(BasePytorchQATTrainableQuantizer):
153
151
  np_threshold_values = quantization_config.activation_quantization_params[C.THRESHOLD]
154
152
  self.threshold_tensor = torch.Tensor([np_threshold_values])
155
153
  self.num_bits = quantization_config.activation_n_bits
156
- self.quantizer_parameters = {}
157
154
 
158
155
  def initialize_quantization(self,
159
156
  tensor_shape: torch.Size,
160
157
  name: str,
161
- layer: qi.PytorchQuantizationWrapper) -> Dict[str, nn.Parameter]:
158
+ layer: qi.PytorchQuantizationWrapper):
162
159
  """
163
- Add threshold variables to layer.
160
+ Add quantizer parameters to the quantizer parameters dictionary
161
+
162
+ Args:
163
+ tensor_shape: tensor shape of the quantized tensor.
164
+ name: Tensor name.
165
+ layer: Layer to quantize.
164
166
  """
165
167
  layer.register_parameter(name, nn.Parameter(to_torch_tensor(self.threshold_tensor), requires_grad=True))
166
168
 
167
169
  # save the quantizer added parameters for later calculations
168
- self.quantizer_parameters = {THRESHOLD_TENSOR: layer.get_parameter(name)}
169
- return self.quantizer_parameters
170
+ self.add_quantizer_variable(THRESHOLD_TENSOR, layer.get_parameter(name), VariableGroup.QPARAMS)
170
171
 
171
172
  def __call__(self,
172
173
  inputs: torch.Tensor,
@@ -181,7 +182,7 @@ class STEActivationQATQuantizer(BasePytorchQATTrainableQuantizer):
181
182
  The quantized tensor.
182
183
  """
183
184
 
184
- _t = self.quantizer_parameters[THRESHOLD_TENSOR]
185
+ _t = self.get_quantizer_variable(THRESHOLD_TENSOR)
185
186
  q_tensor = symmetric_quantizer(inputs, _t, self.num_bits, sign=self.sign)
186
187
  return q_tensor
187
188
 
@@ -192,7 +193,7 @@ class STEActivationQATQuantizer(BasePytorchQATTrainableQuantizer):
192
193
  Returns:
193
194
  A pytorch inferable quanizer object.
194
195
  """
195
- np_threshold = self.quantizer_parameters[THRESHOLD_TENSOR].cpu().detach().numpy()
196
+ np_threshold = self.get_quantizer_variable(THRESHOLD_TENSOR).cpu().detach().numpy()
196
197
  if self.power_of_two:
197
198
  pot_threshold = np.power(2.0, np.ceil(np.log2(np_threshold)))
198
199
  return ActivationPOTInferableQuantizer(num_bits=self.num_bits,