mct-nightly 1.7.1.31122022.post351__py3-none-any.whl → 1.8.0.1042023.post423__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.
- {mct_nightly-1.7.1.31122022.post351.dist-info → mct_nightly-1.8.0.1042023.post423.dist-info}/METADATA +16 -16
- {mct_nightly-1.7.1.31122022.post351.dist-info → mct_nightly-1.8.0.1042023.post423.dist-info}/RECORD +193 -150
- {mct_nightly-1.7.1.31122022.post351.dist-info → mct_nightly-1.8.0.1042023.post423.dist-info}/WHEEL +1 -1
- model_compression_toolkit/__init__.py +13 -14
- model_compression_toolkit/core/common/back2framework/base_model_builder.py +1 -1
- model_compression_toolkit/core/common/collectors/base_collector.py +7 -4
- model_compression_toolkit/core/common/collectors/statistics_collector.py +2 -2
- model_compression_toolkit/core/common/constants.py +9 -4
- model_compression_toolkit/core/common/framework_implementation.py +32 -30
- model_compression_toolkit/core/common/graph/base_graph.py +8 -6
- model_compression_toolkit/core/common/logger.py +10 -2
- model_compression_toolkit/core/common/matchers/base_matcher.py +3 -3
- model_compression_toolkit/core/common/mixed_precision/mixed_precision_quantization_config.py +2 -1
- model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_facade.py +2 -2
- model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py +2 -2
- model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py +6 -1
- model_compression_toolkit/core/common/model_validation.py +2 -1
- model_compression_toolkit/core/common/quantization/node_quantization_config.py +3 -1
- model_compression_toolkit/core/common/quantization/quantization_params_fn_selection.py +7 -4
- model_compression_toolkit/core/common/quantization/quantization_params_generation/lut_kmeans_params.py +4 -2
- model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_activations_computation.py +14 -17
- model_compression_toolkit/core/common/quantization/quantizers/quantizers_helpers.py +9 -2
- model_compression_toolkit/core/common/quantization/quantizers/uniform_quantizers.py +5 -4
- model_compression_toolkit/core/common/quantization/set_node_quantization_config.py +3 -3
- model_compression_toolkit/core/common/substitutions/batchnorm_reconstruction.py +7 -0
- model_compression_toolkit/core/common/substitutions/batchnorm_refusing.py +13 -8
- model_compression_toolkit/core/common/substitutions/shift_negative_activation.py +17 -12
- model_compression_toolkit/core/common/substitutions/weights_activation_split.py +1 -1
- model_compression_toolkit/core/common/target_platform/current_tp_model.py +3 -1
- model_compression_toolkit/core/common/target_platform/targetplatform2framework/attribute_filter.py +17 -4
- model_compression_toolkit/core/common/target_platform/targetplatform2framework/operations_to_layers.py +2 -4
- model_compression_toolkit/core/common/target_platform/targetplatform2framework/target_platform_capabilities.py +3 -5
- model_compression_toolkit/core/keras/back2framework/instance_builder.py +12 -21
- model_compression_toolkit/core/keras/back2framework/keras_model_builder.py +40 -14
- model_compression_toolkit/core/keras/back2framework/model_gradients.py +51 -27
- model_compression_toolkit/core/keras/constants.py +1 -0
- model_compression_toolkit/core/keras/graph_substitutions/substitutions/multi_head_attention_decomposition.py +2 -1
- model_compression_toolkit/core/keras/kpi_data_facade.py +2 -2
- model_compression_toolkit/core/keras/quantization_facade.py +3 -3
- model_compression_toolkit/core/keras/quantizer/fake_quant_builder.py +15 -9
- model_compression_toolkit/core/keras/quantizer/input_layer_quantize_transform.py +2 -1
- model_compression_toolkit/core/keras/quantizer/lut_fake_quant.py +1 -1
- model_compression_toolkit/core/keras/reader/common.py +3 -2
- model_compression_toolkit/core/pytorch/back2framework/instance_builder.py +14 -1
- model_compression_toolkit/core/pytorch/back2framework/model_gradients.py +88 -46
- model_compression_toolkit/core/pytorch/back2framework/pytorch_model_builder.py +27 -12
- model_compression_toolkit/core/pytorch/back2framework/quantization_wrapper/wrapper_quantize_config.py +2 -3
- model_compression_toolkit/core/pytorch/constants.py +5 -0
- model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/multi_head_attention_decomposition.py +9 -14
- model_compression_toolkit/core/pytorch/graph_substitutions/substitutions/reshape_with_static_shapes.py +16 -2
- model_compression_toolkit/core/pytorch/kpi_data_facade.py +2 -2
- model_compression_toolkit/core/pytorch/quantization_facade.py +2 -2
- model_compression_toolkit/core/pytorch/quantizer/fake_quant_builder.py +7 -5
- model_compression_toolkit/core/pytorch/quantizer/lut_fake_quant.py +1 -1
- model_compression_toolkit/core/tpc_models/get_target_platform_capabilities.py +6 -2
- model_compression_toolkit/{exporter/model_wrapper/keras/quantize_configs → core/tpc_models/imx500_tpc}/__init__.py +1 -1
- model_compression_toolkit/core/tpc_models/imx500_tpc/latest/__init__.py +24 -0
- model_compression_toolkit/core/tpc_models/imx500_tpc/target_platform_capabilities.py +45 -0
- model_compression_toolkit/core/tpc_models/imx500_tpc/v1/__init__.py +16 -0
- model_compression_toolkit/core/tpc_models/imx500_tpc/v1/tp_model.py +156 -0
- model_compression_toolkit/core/tpc_models/imx500_tpc/v1/tpc_keras.py +101 -0
- model_compression_toolkit/core/tpc_models/imx500_tpc/v1/tpc_pytorch.py +95 -0
- model_compression_toolkit/exporter/__init__.py +5 -0
- model_compression_toolkit/exporter/model_exporter/__init__.py +0 -12
- model_compression_toolkit/exporter/model_exporter/fw_agonstic/exporter.py +1 -1
- model_compression_toolkit/exporter/model_exporter/keras/fakely_quant_keras_exporter.py +12 -39
- model_compression_toolkit/exporter/model_exporter/keras/keras_export_facade.py +39 -27
- model_compression_toolkit/exporter/model_exporter/pytorch/fakely_quant_onnx_pytorch_exporter.py +10 -2
- model_compression_toolkit/exporter/model_exporter/pytorch/fakely_quant_torchscript_pytorch_exporter.py +6 -2
- model_compression_toolkit/exporter/model_exporter/pytorch/pytorch_export_facade.py +48 -35
- model_compression_toolkit/exporter/model_exporter/tflite/fakely_quant_tflite_exporter.py +3 -2
- model_compression_toolkit/exporter/model_exporter/tflite/int8_tflite_exporter.py +180 -0
- model_compression_toolkit/exporter/model_exporter/tflite/tflite_export_facade.py +44 -26
- model_compression_toolkit/exporter/model_wrapper/__init__.py +4 -4
- model_compression_toolkit/exporter/model_wrapper/keras/builder/fully_quantized_model_builder.py +34 -137
- model_compression_toolkit/exporter/model_wrapper/keras/builder/node_to_quantizer.py +143 -0
- model_compression_toolkit/exporter/model_wrapper/keras/builder/node_to_quantizers.py +46 -0
- model_compression_toolkit/exporter/model_wrapper/keras/validate_layer.py +56 -22
- model_compression_toolkit/exporter/model_wrapper/pytorch/builder/fully_quantized_model_builder.py +29 -112
- model_compression_toolkit/exporter/model_wrapper/pytorch/builder/node_to_quantizer.py +83 -79
- model_compression_toolkit/exporter/model_wrapper/pytorch/builder/node_to_quantizers.py +47 -0
- model_compression_toolkit/exporter/model_wrapper/pytorch/validate_layer.py +44 -0
- model_compression_toolkit/gptq/__init__.py +6 -0
- model_compression_toolkit/gptq/common/gptq_config.py +57 -127
- model_compression_toolkit/gptq/common/gptq_constants.py +20 -6
- model_compression_toolkit/gptq/common/gptq_graph.py +22 -0
- model_compression_toolkit/gptq/common/gptq_training.py +32 -26
- model_compression_toolkit/gptq/keras/gptq_loss.py +1 -1
- model_compression_toolkit/gptq/keras/gptq_training.py +73 -39
- model_compression_toolkit/gptq/keras/graph_info.py +24 -43
- model_compression_toolkit/gptq/keras/quantization_facade.py +10 -18
- model_compression_toolkit/gptq/keras/quantizer/__init__.py +2 -1
- model_compression_toolkit/gptq/keras/quantizer/base_keras_gptq_quantizer.py +112 -0
- model_compression_toolkit/gptq/keras/quantizer/quant_utils.py +13 -14
- model_compression_toolkit/gptq/keras/quantizer/quantization_builder.py +78 -0
- model_compression_toolkit/gptq/keras/quantizer/regularization_factory.py +45 -0
- model_compression_toolkit/gptq/keras/{optimizers → quantizer/soft_rounding}/__init__.py +1 -1
- model_compression_toolkit/gptq/keras/quantizer/soft_rounding/soft_quantizer_reg.py +112 -0
- model_compression_toolkit/gptq/keras/quantizer/soft_rounding/symmetric_soft_quantizer.py +256 -0
- model_compression_toolkit/gptq/keras/quantizer/ste_rounding/symmetric_ste.py +68 -168
- model_compression_toolkit/gptq/pytorch/gptq_training.py +78 -39
- model_compression_toolkit/gptq/pytorch/graph_info.py +81 -0
- model_compression_toolkit/gptq/pytorch/quantization_facade.py +12 -18
- model_compression_toolkit/gptq/pytorch/quantizer/__init__.py +5 -1
- model_compression_toolkit/gptq/pytorch/quantizer/base_pytorch_gptq_quantizer.py +92 -0
- model_compression_toolkit/gptq/pytorch/quantizer/quant_utils.py +10 -119
- model_compression_toolkit/gptq/pytorch/quantizer/quantization_builder.py +75 -0
- model_compression_toolkit/gptq/pytorch/quantizer/regularization_factory.py +45 -0
- model_compression_toolkit/{exporter/model_wrapper/keras/quantizers → gptq/pytorch/quantizer/soft_rounding}/__init__.py +1 -1
- model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/soft_quantizer_reg.py +115 -0
- model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/symmetric_soft_quantizer.py +244 -0
- model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/uniform_soft_quantizer.py +196 -0
- model_compression_toolkit/gptq/pytorch/quantizer/ste_rounding/symmetric_ste.py +182 -0
- model_compression_toolkit/ptq/keras/quantization_facade.py +3 -3
- model_compression_toolkit/ptq/pytorch/quantization_facade.py +7 -6
- model_compression_toolkit/qat/common/qat_config.py +68 -0
- model_compression_toolkit/qat/keras/quantization_facade.py +55 -48
- model_compression_toolkit/qat/keras/quantizer/__init__.py +3 -0
- model_compression_toolkit/qat/keras/quantizer/base_keras_qat_quantizer.py +49 -0
- model_compression_toolkit/qat/keras/quantizer/quant_utils.py +48 -0
- model_compression_toolkit/qat/keras/quantizer/quantization_builder.py +77 -0
- model_compression_toolkit/qat/keras/quantizer/ste_rounding/symmetric_ste.py +283 -0
- model_compression_toolkit/qat/keras/quantizer/ste_rounding/uniform_ste.py +158 -46
- model_compression_toolkit/qat/pytorch/quantization_facade.py +190 -11
- model_compression_toolkit/qat/pytorch/quantizer/__init__.py +17 -0
- model_compression_toolkit/qat/pytorch/quantizer/base_pytorch_qat_quantizer.py +49 -0
- model_compression_toolkit/qat/pytorch/quantizer/quantization_builder.py +74 -0
- model_compression_toolkit/qat/pytorch/quantizer/quantizer_utils.py +136 -0
- model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/symmetric_ste.py +204 -0
- model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/uniform_ste.py +190 -0
- model_compression_toolkit/quantizers_infrastructure/__init__.py +23 -0
- model_compression_toolkit/{gptq/keras/quantizer/configs → quantizers_infrastructure/inferable_infrastructure}/__init__.py +1 -1
- model_compression_toolkit/{gptq/keras/quantizer/gumbel_rounding → quantizers_infrastructure/inferable_infrastructure/common}/__init__.py +1 -1
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/base_inferable_quantizer.py +87 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/constants.py +41 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/get_all_subclasses.py +31 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/get_quantizers.py +53 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/common/quant_utils.py +49 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/__init__.py +14 -0
- model_compression_toolkit/{qunatizers_infrastructure → quantizers_infrastructure/inferable_infrastructure}/keras/load_model.py +26 -8
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantize_wrapper.py +345 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizer_utils.py +85 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/__init__.py +27 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_lut_pot_inferable_quantizer.py +148 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_pot_inferable_quantizer.py +65 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_symmetric_inferable_quantizer.py +86 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/activation_inferable_quantizers/activation_uniform_inferable_quantizer.py +111 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/base_keras_inferable_quantizer.py +56 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/constants.py +25 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_lut_pot_inferable_quantizer.py +79 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_lut_symmetric_inferable_quantizer.py +179 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_pot_inferable_quantizer.py +67 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_symmetric_inferable_quantizer.py +87 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/quantizers/weights_inferable_quantizers/weights_uniform_inferable_quantizer.py +163 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/keras/validation_functions.py +66 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantize_wrapper.py +269 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizer_utils.py +152 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/__init__.py +35 -0
- model_compression_toolkit/{exporter/model_wrapper/pytorch/quantizers → quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers}/__init__.py +1 -1
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_lut_pot_inferable_quantizer.py +97 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_pot_inferable_quantizer.py +62 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_symmetric_inferable_quantizer.py +83 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/activation_inferable_quantizers/activation_uniform_inferable_quantizer.py +100 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_lut_symmetric_inferable_quantizer.py +95 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_pytorch_inferable_quantizer.py +48 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_symmetric_inferable_quantizer.py +70 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/base_uniform_inferable_quantizer.py +57 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/constants.py +26 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_lut_pot_inferable_quantizer.py +77 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_lut_symmetric_inferable_quantizer.py +106 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_pot_inferable_quantizer.py +66 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_symmetric_inferable_quantizer.py +104 -0
- model_compression_toolkit/quantizers_infrastructure/inferable_infrastructure/pytorch/quantizers/weights_inferable_quantizers/weights_uniform_inferable_quantizer.py +109 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/base_trainable_quantizer.py +200 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/get_quantizer_config.py +116 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/get_quantizers.py +65 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/quant_utils.py +36 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/common/trainable_quantizer_config.py +97 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/base_keras_quantizer.py +90 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/config_serialization.py +80 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/keras/quantizer_utils.py +48 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/pytorch/__init__.py +14 -0
- model_compression_toolkit/quantizers_infrastructure/trainable_infrastructure/pytorch/base_pytorch_quantizer.py +66 -0
- model_compression_toolkit/exporter/model_wrapper/keras/builder/quantize_config_to_node.py +0 -66
- model_compression_toolkit/exporter/model_wrapper/keras/builder/quantizer_to_node.py +0 -134
- model_compression_toolkit/exporter/model_wrapper/keras/extended_quantize_wrapper.py +0 -81
- model_compression_toolkit/exporter/model_wrapper/keras/quantize_configs/activation_quantize_config.py +0 -81
- model_compression_toolkit/exporter/model_wrapper/keras/quantize_configs/weights_activation_quantize_config.py +0 -128
- model_compression_toolkit/exporter/model_wrapper/keras/quantize_configs/weights_quantize_config.py +0 -107
- model_compression_toolkit/exporter/model_wrapper/keras/quantizers/fq_quantizer.py +0 -99
- model_compression_toolkit/exporter/model_wrapper/keras/quantizers/weights_uniform_quantizer.py +0 -105
- model_compression_toolkit/exporter/model_wrapper/pytorch/builder/node_to_quantize_config.py +0 -61
- model_compression_toolkit/exporter/model_wrapper/pytorch/quantizers/fq_quantizer.py +0 -59
- model_compression_toolkit/exporter/model_wrapper/pytorch/quantizers/uniform_weights_quantizer.py +0 -67
- model_compression_toolkit/exporter/model_wrapper/pytorch/wrappers_quantize_configs/activation_quantize_config.py +0 -52
- model_compression_toolkit/exporter/model_wrapper/pytorch/wrappers_quantize_configs/no_quantization_quantize_config.py +0 -46
- model_compression_toolkit/exporter/model_wrapper/pytorch/wrappers_quantize_configs/weights_activation_quantize_config.py +0 -54
- model_compression_toolkit/exporter/model_wrapper/pytorch/wrappers_quantize_configs/weights_quantize_config.py +0 -52
- model_compression_toolkit/gptq/keras/gptq_model_builder.py +0 -104
- model_compression_toolkit/gptq/keras/optimizers/sam_optimizer.py +0 -119
- model_compression_toolkit/gptq/keras/quantizer/config_factory.py +0 -62
- model_compression_toolkit/gptq/keras/quantizer/configs/base_quantizer_gptq_config.py +0 -65
- model_compression_toolkit/gptq/keras/quantizer/configs/weight_quantizer_gptq_config.py +0 -269
- model_compression_toolkit/gptq/keras/quantizer/gumbel_rounding/base_gumbel_rounding.py +0 -263
- model_compression_toolkit/gptq/keras/quantizer/gumbel_rounding/gumbel_softmax.py +0 -75
- model_compression_toolkit/gptq/keras/quantizer/gumbel_rounding/symmetric_gumbel.py +0 -266
- model_compression_toolkit/gptq/keras/quantizer/gumbel_rounding/uniform_gumbel.py +0 -247
- model_compression_toolkit/gptq/keras/quantizer/kernel_functions.py +0 -50
- model_compression_toolkit/gptq/keras/quantizer/ste_rounding/uniform_ste.py +0 -49
- model_compression_toolkit/gptq/pytorch/gptq_graph_info.py +0 -94
- model_compression_toolkit/gptq/pytorch/gptq_model_builder.py +0 -113
- model_compression_toolkit/gptq/pytorch/quantizer/gptq_quantizer.py +0 -71
- model_compression_toolkit/gptq/pytorch/quantizer/gumbel_rounding/__init__.py +0 -14
- model_compression_toolkit/gptq/pytorch/quantizer/gumbel_rounding/base_gumbel_weights_quantizer.py +0 -157
- model_compression_toolkit/gptq/pytorch/quantizer/gumbel_rounding/sym_gumbel_weights_quantizer.py +0 -150
- model_compression_toolkit/gptq/pytorch/quantizer/gumbel_rounding/uniform_gumbel_weights_quantizer.py +0 -143
- model_compression_toolkit/gptq/pytorch/quantizer/quantizer_wrapper.py +0 -103
- model_compression_toolkit/gptq/pytorch/quantizer/ste_rounding/ste_weights_quantizer.py +0 -103
- model_compression_toolkit/qat/keras/qat_model_builder.py +0 -105
- model_compression_toolkit/qat/keras/quantizer/quantization_dispatcher_builder.py +0 -56
- model_compression_toolkit/qat/keras/quantizer/ste_rounding/symmetirc_ste.py +0 -145
- model_compression_toolkit/qunatizers_infrastructure/__init__.py +0 -8
- model_compression_toolkit/qunatizers_infrastructure/common/__init__.py +0 -14
- model_compression_toolkit/qunatizers_infrastructure/common/base_quantizer.py +0 -123
- model_compression_toolkit/qunatizers_infrastructure/common/node_quantization_dispatcher.py +0 -65
- model_compression_toolkit/qunatizers_infrastructure/keras/__init__.py +0 -14
- model_compression_toolkit/qunatizers_infrastructure/keras/base_keras_quantizer.py +0 -75
- model_compression_toolkit/qunatizers_infrastructure/keras/config_serialization.py +0 -83
- model_compression_toolkit/qunatizers_infrastructure/keras/keras_node_quantization_dispatcher.py +0 -74
- model_compression_toolkit/qunatizers_infrastructure/keras/quantize_wrapper.py +0 -194
- model_compression_toolkit/qunatizers_infrastructure/pytorch/__init__.py +0 -0
- {mct_nightly-1.7.1.31122022.post351.dist-info → mct_nightly-1.8.0.1042023.post423.dist-info}/LICENSE.md +0 -0
- {mct_nightly-1.7.1.31122022.post351.dist-info → mct_nightly-1.8.0.1042023.post423.dist-info}/top_level.txt +0 -0
- /model_compression_toolkit/{exporter/model_wrapper/pytorch/wrappers_quantize_configs → qat/pytorch/quantizer/ste_rounding}/__init__.py +0 -0
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Sony Semiconductor Israel, Inc. All rights reserved.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ==============================================================================
|
|
15
|
-
import copy
|
|
16
|
-
|
|
17
|
-
from collections.abc import Callable
|
|
18
|
-
from typing import Any
|
|
19
|
-
|
|
20
|
-
from model_compression_toolkit import QuantizationConfig
|
|
21
|
-
from model_compression_toolkit.core.common.quantization.node_quantization_config import NodeWeightsQuantizationConfig, \
|
|
22
|
-
BaseNodeQuantizationConfig
|
|
23
|
-
from model_compression_toolkit.core.common.target_platform import QuantizationMethod, OpQuantizationConfig
|
|
24
|
-
from enum import Enum
|
|
25
|
-
|
|
26
|
-
IS_WEIGHTS = "is_weights"
|
|
27
|
-
WEIGHTS_QUANTIZATION_METHOD = "weights_quantization_method"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def transform_enum(v: Any):
|
|
31
|
-
"""
|
|
32
|
-
If an enum is received it value is return otherwise the input is returned.
|
|
33
|
-
Args:
|
|
34
|
-
v: Any type
|
|
35
|
-
|
|
36
|
-
Returns: Any
|
|
37
|
-
|
|
38
|
-
"""
|
|
39
|
-
if isinstance(v, Enum):
|
|
40
|
-
return v.value
|
|
41
|
-
return v
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def config_serialization(quantization_config: BaseNodeQuantizationConfig):
|
|
45
|
-
"""
|
|
46
|
-
This function change BaseNodeQuantizationConfig to a dictionary
|
|
47
|
-
Args:
|
|
48
|
-
quantization_config: A BaseNodeQuantizationConfig for serialization
|
|
49
|
-
|
|
50
|
-
Returns: A config dictionary of BaseNodeQuantizationConfig
|
|
51
|
-
|
|
52
|
-
"""
|
|
53
|
-
config_data = {k: transform_enum(v) for k, v in quantization_config.__dict__.items() if
|
|
54
|
-
v is not isinstance(v, Callable)}
|
|
55
|
-
config_data[IS_WEIGHTS] = isinstance(quantization_config, NodeWeightsQuantizationConfig)
|
|
56
|
-
return config_data
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def config_deserialization(in_config: dict) -> BaseNodeQuantizationConfig:
|
|
60
|
-
"""
|
|
61
|
-
This function change config dictionary to it BaseNodeQuantizationConfig.
|
|
62
|
-
Args:
|
|
63
|
-
in_config: A config dictionary of BaseNodeQuantizationConfig
|
|
64
|
-
|
|
65
|
-
Returns: A BaseNodeQuantizationConfig
|
|
66
|
-
|
|
67
|
-
"""
|
|
68
|
-
in_config = copy.deepcopy(in_config)
|
|
69
|
-
qc = QuantizationConfig()
|
|
70
|
-
op_cfg = OpQuantizationConfig(QuantizationMethod.POWER_OF_TWO, QuantizationMethod.POWER_OF_TWO,
|
|
71
|
-
8, 8, True, True, True, True, 0, 0, 8)
|
|
72
|
-
if in_config[IS_WEIGHTS]:
|
|
73
|
-
nwqc = NodeWeightsQuantizationConfig(qc=qc,
|
|
74
|
-
op_cfg=op_cfg,
|
|
75
|
-
weights_quantization_fn=None,
|
|
76
|
-
weights_quantization_params_fn=None,
|
|
77
|
-
weights_channels_axis=0)
|
|
78
|
-
in_config[WEIGHTS_QUANTIZATION_METHOD] = QuantizationMethod(in_config[WEIGHTS_QUANTIZATION_METHOD])
|
|
79
|
-
|
|
80
|
-
nwqc.__dict__.update(in_config)
|
|
81
|
-
return nwqc
|
|
82
|
-
else:
|
|
83
|
-
raise NotImplemented
|
model_compression_toolkit/qunatizers_infrastructure/keras/keras_node_quantization_dispatcher.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
from typing import Dict, List
|
|
2
|
-
|
|
3
|
-
from model_compression_toolkit.core.common import Logger
|
|
4
|
-
from model_compression_toolkit.core.common.constants import FOUND_TF
|
|
5
|
-
from model_compression_toolkit.qunatizers_infrastructure.common.base_quantizer import BaseQuantizer
|
|
6
|
-
from model_compression_toolkit.qunatizers_infrastructure.common.node_quantization_dispatcher import \
|
|
7
|
-
NodeQuantizationDispatcher
|
|
8
|
-
|
|
9
|
-
if FOUND_TF:
|
|
10
|
-
ACTIVATION_QUANTIZERS = "activation_quantizers"
|
|
11
|
-
WEIGHT_QUANTIZERS = "weight_quantizer"
|
|
12
|
-
import tensorflow as tf
|
|
13
|
-
|
|
14
|
-
keras = tf.keras
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class KerasNodeQuantizationDispatcher(NodeQuantizationDispatcher):
|
|
18
|
-
def __init__(self, weight_quantizers: Dict[str, BaseQuantizer] = None,
|
|
19
|
-
activation_quantizers: List[BaseQuantizer] = None):
|
|
20
|
-
"""
|
|
21
|
-
Keras Node quantization dispatcher collect all the quantizer of a given layer.
|
|
22
|
-
Add to functions get_config and from_config to enable saving and loading of keras models.
|
|
23
|
-
Args:
|
|
24
|
-
weight_quantizers: A dictionary between weight name to it quantizer .
|
|
25
|
-
activation_quantizers: A list of activation quantization one for each layer output.
|
|
26
|
-
"""
|
|
27
|
-
super().__init__(weight_quantizers, activation_quantizers)
|
|
28
|
-
|
|
29
|
-
def get_config(self) -> dict:
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
Returns: Configuration of KerasNodeQuantizationDispatcher.
|
|
33
|
-
|
|
34
|
-
"""
|
|
35
|
-
return {
|
|
36
|
-
ACTIVATION_QUANTIZERS: [keras.utils.serialize_keras_object(act) for act in self.activation_quantizers],
|
|
37
|
-
WEIGHT_QUANTIZERS: {k: keras.utils.serialize_keras_object(v) for k, v in
|
|
38
|
-
self.weight_quantizers.items()}}
|
|
39
|
-
|
|
40
|
-
@classmethod
|
|
41
|
-
def from_config(cls, config):
|
|
42
|
-
"""
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
config(dict): dictonory of KerasNodeQuantizationDispatcher Configuration
|
|
46
|
-
|
|
47
|
-
Returns: A KerasNodeQuantizationDispatcher
|
|
48
|
-
|
|
49
|
-
"""
|
|
50
|
-
config = config.copy()
|
|
51
|
-
activation_quantizers = [keras.utils.deserialize_keras_object(act,
|
|
52
|
-
module_objects=globals(),
|
|
53
|
-
custom_objects=None) for act in
|
|
54
|
-
config.get(ACTIVATION_QUANTIZERS)]
|
|
55
|
-
weight_quantizer = {k: keras.utils.deserialize_keras_object(v,
|
|
56
|
-
module_objects=globals(),
|
|
57
|
-
custom_objects=None) for k, v in
|
|
58
|
-
config.get(WEIGHT_QUANTIZERS).items()}
|
|
59
|
-
return cls(weight_quantizer, activation_quantizers)
|
|
60
|
-
else:
|
|
61
|
-
class KerasNodeQuantizationDispatcher(NodeQuantizationDispatcher):
|
|
62
|
-
def __init__(self, weight_quantizer: Dict[str, BaseQuantizer] = None,
|
|
63
|
-
activation_quantizers: List[BaseQuantizer] = None):
|
|
64
|
-
"""
|
|
65
|
-
Keras Node quantization dispatcher collect all the quantizer of a given layer.
|
|
66
|
-
Add to functions get_config and from_config to enable saving and loading of keras models.
|
|
67
|
-
Args:
|
|
68
|
-
weight_quantizers: A dictionary between weight name to it quantizer .
|
|
69
|
-
activation_quantizers: A list of activation quantization one for each layer output.
|
|
70
|
-
"""
|
|
71
|
-
super().__init__(weight_quantizer, activation_quantizers)
|
|
72
|
-
Logger.critical('Installing tensorflow and tensorflow_model_optimization is mandatory '
|
|
73
|
-
'when using KerasNodeQuantizationDispatcher. '
|
|
74
|
-
'Could not find Tensorflow package.')
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
# Copyright 2022 Sony Semiconductor Israel, Inc. All rights reserved.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ==============================================================================f
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
from model_compression_toolkit.core.common.constants import FOUND_TF
|
|
18
|
-
from model_compression_toolkit.core.common.logger import Logger
|
|
19
|
-
from model_compression_toolkit.qunatizers_infrastructure.common.node_quantization_dispatcher import \
|
|
20
|
-
NodeQuantizationDispatcher
|
|
21
|
-
|
|
22
|
-
if FOUND_TF:
|
|
23
|
-
import tensorflow as tf
|
|
24
|
-
from tensorflow.python.util import tf_inspect
|
|
25
|
-
from tensorflow_model_optimization.python.core.keras import utils
|
|
26
|
-
|
|
27
|
-
keras = tf.keras
|
|
28
|
-
|
|
29
|
-
DISPATCHER = "dispatcher"
|
|
30
|
-
LAYER = "layer"
|
|
31
|
-
STEPS = "optimizer_step"
|
|
32
|
-
TRAINING = "training"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def _make_quantizer_fn(quantizer, x, training):
|
|
36
|
-
"""Use currying to return True/False specialized fns to the cond."""
|
|
37
|
-
|
|
38
|
-
def quantizer_fn():
|
|
39
|
-
return quantizer(x, training)
|
|
40
|
-
|
|
41
|
-
return quantizer_fn
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def _weight_name(name: str) -> str:
|
|
45
|
-
"""Extracts the weight name from the full TensorFlow variable name.
|
|
46
|
-
|
|
47
|
-
For example, returns 'kernel' for 'dense_2/kernel:0'.
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
name: TensorFlow variable name.
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
Extracted weight name.
|
|
54
|
-
"""
|
|
55
|
-
return name.split(':')[0].split('/')[-1]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
class KerasQuantizationWrapper(tf.keras.layers.Wrapper):
|
|
59
|
-
def __init__(self,
|
|
60
|
-
layer,
|
|
61
|
-
dispatcher: NodeQuantizationDispatcher):
|
|
62
|
-
"""
|
|
63
|
-
Keras Quantization Wrapper takes a keras layer and dispatcher and infer a quantized layer.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
layer: A keras layer.
|
|
67
|
-
dispatcher: A node quantization dispatcher.
|
|
68
|
-
"""
|
|
69
|
-
super(KerasQuantizationWrapper, self).__init__(layer)
|
|
70
|
-
self.dispatcher = dispatcher
|
|
71
|
-
|
|
72
|
-
def get_config(self):
|
|
73
|
-
"""
|
|
74
|
-
|
|
75
|
-
Returns: Configuration of KerasQuantizationWrapper.
|
|
76
|
-
|
|
77
|
-
"""
|
|
78
|
-
base_config = super(KerasQuantizationWrapper, self).get_config()
|
|
79
|
-
config = {DISPATCHER: keras.utils.serialize_keras_object(self.dispatcher)}
|
|
80
|
-
return dict(list(base_config.items()) + list(config.items()))
|
|
81
|
-
|
|
82
|
-
@classmethod
|
|
83
|
-
def from_config(cls, config):
|
|
84
|
-
"""
|
|
85
|
-
|
|
86
|
-
Args:
|
|
87
|
-
config(dict): dictonory of KerasNodeQuantizationDispatcher Configuration
|
|
88
|
-
|
|
89
|
-
Returns: A KerasNodeQuantizationDispatcher
|
|
90
|
-
|
|
91
|
-
"""
|
|
92
|
-
config = config.copy()
|
|
93
|
-
|
|
94
|
-
dispatcher = keras.utils.deserialize_keras_object(
|
|
95
|
-
config.pop(DISPATCHER),
|
|
96
|
-
module_objects=globals(),
|
|
97
|
-
custom_objects=None)
|
|
98
|
-
|
|
99
|
-
layer = tf.keras.layers.deserialize(config.pop(LAYER))
|
|
100
|
-
|
|
101
|
-
return cls(layer=layer, dispatcher=dispatcher)
|
|
102
|
-
|
|
103
|
-
def build(self, input_shape):
|
|
104
|
-
"""
|
|
105
|
-
KerasQuantization Wrapper build function.
|
|
106
|
-
Args:
|
|
107
|
-
input_shape: the layer input shape
|
|
108
|
-
|
|
109
|
-
Returns: None
|
|
110
|
-
|
|
111
|
-
"""
|
|
112
|
-
super(KerasQuantizationWrapper, self).build(input_shape)
|
|
113
|
-
|
|
114
|
-
self.optimizer_step = self.add_weight(
|
|
115
|
-
STEPS,
|
|
116
|
-
initializer=tf.keras.initializers.Constant(-1),
|
|
117
|
-
dtype=tf.dtypes.int32,
|
|
118
|
-
trainable=False)
|
|
119
|
-
|
|
120
|
-
self._weight_vars = []
|
|
121
|
-
for name, quantizer in self.dispatcher.weight_quantizers.items():
|
|
122
|
-
weight = getattr(self.layer, name)
|
|
123
|
-
quantizer.initialize_quantization(weight.shape,
|
|
124
|
-
_weight_name(weight.name), self)
|
|
125
|
-
|
|
126
|
-
self._weight_vars.append((name, weight, quantizer))
|
|
127
|
-
# Needed to ensure unquantized weights get trained as part of the wrapper. ?? Nost sure
|
|
128
|
-
self._trainable_weights.append(weight)
|
|
129
|
-
|
|
130
|
-
def set_quantize_weights(self, quantized_weights: dict):
|
|
131
|
-
"""
|
|
132
|
-
This function update layer weights after quantization.
|
|
133
|
-
|
|
134
|
-
Args:
|
|
135
|
-
quantized_weights: a dict of weight to update
|
|
136
|
-
|
|
137
|
-
Returns: None
|
|
138
|
-
|
|
139
|
-
"""
|
|
140
|
-
for weight_attr in self.dispatcher.weight_quantizers.keys():
|
|
141
|
-
weight = quantized_weights.get(weight_attr)
|
|
142
|
-
current_weight = getattr(self.layer, weight_attr)
|
|
143
|
-
if current_weight.shape != weight.shape:
|
|
144
|
-
Logger.error(
|
|
145
|
-
f"Existing layer weight shape {current_weight.shape} is incompatible with provided weight shape {weight.shape}") # pragma: no cover
|
|
146
|
-
|
|
147
|
-
setattr(self.layer, weight_attr, weight)
|
|
148
|
-
|
|
149
|
-
def call(self, inputs, training=None, **kwargs):
|
|
150
|
-
"""
|
|
151
|
-
KerasQuantizationWrapper call functions
|
|
152
|
-
Args:
|
|
153
|
-
inputs: Input tensors to specified layer
|
|
154
|
-
training: a boolean stating if layer is in training mode.
|
|
155
|
-
**kwargs:
|
|
156
|
-
|
|
157
|
-
Returns: tensors that simulate quantized layer.
|
|
158
|
-
|
|
159
|
-
"""
|
|
160
|
-
if training is None:
|
|
161
|
-
training = tf.keras.backend.learning_phase()
|
|
162
|
-
|
|
163
|
-
# Quantize all weights, and replace them in the underlying layer.
|
|
164
|
-
|
|
165
|
-
quantized_weights = {}
|
|
166
|
-
for name, unquantized_weight, quantizer in self._weight_vars:
|
|
167
|
-
quantized_weight = utils.smart_cond(
|
|
168
|
-
training,
|
|
169
|
-
_make_quantizer_fn(quantizer, unquantized_weight, True),
|
|
170
|
-
_make_quantizer_fn(quantizer, unquantized_weight, False))
|
|
171
|
-
quantized_weights.update({name: quantized_weight})
|
|
172
|
-
|
|
173
|
-
self.set_quantize_weights(quantized_weights)
|
|
174
|
-
|
|
175
|
-
args = tf_inspect.getfullargspec(self.layer.call).args
|
|
176
|
-
if TRAINING in args:
|
|
177
|
-
outputs = self.layer.call(inputs, training=training, **kwargs)
|
|
178
|
-
else:
|
|
179
|
-
outputs = self.layer.call(inputs, **kwargs)
|
|
180
|
-
return outputs
|
|
181
|
-
|
|
182
|
-
else:
|
|
183
|
-
class KerasQuantizationWrapper(object):
|
|
184
|
-
def __init__(self, layer, dispatcher: NodeQuantizationDispatcher):
|
|
185
|
-
"""
|
|
186
|
-
Keras Quantization Wrapper takes a keras layer and dispatcher and infer a quantized layer.
|
|
187
|
-
|
|
188
|
-
Args:
|
|
189
|
-
layer: A keras layer.
|
|
190
|
-
dispatcher: A node quantization dispatcher.
|
|
191
|
-
"""
|
|
192
|
-
Logger.critical('Installing tensorflow and tensorflow_model_optimization is mandatory '
|
|
193
|
-
'when using KerasQuantizationWrapper. '
|
|
194
|
-
'Could not find Tensorflow package.')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|