mct-nightly 2.2.0.20241201.617__py3-none-any.whl → 2.2.0.20241202.131715__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-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/METADATA +1 -1
- {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/RECORD +58 -58
- model_compression_toolkit/__init__.py +1 -1
- model_compression_toolkit/constants.py +0 -3
- model_compression_toolkit/core/common/graph/base_node.py +7 -5
- model_compression_toolkit/core/common/graph/functional_node.py +1 -1
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py +2 -2
- model_compression_toolkit/core/common/quantization/candidate_node_quantization_config.py +2 -2
- model_compression_toolkit/core/common/quantization/node_quantization_config.py +2 -2
- model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_activations_computation.py +2 -1
- model_compression_toolkit/core/common/quantization/set_node_quantization_config.py +1 -1
- model_compression_toolkit/core/common/statistics_correction/apply_activation_bias_correction_to_graph.py +1 -1
- model_compression_toolkit/core/common/statistics_correction/apply_bias_correction_to_graph.py +1 -1
- model_compression_toolkit/core/common/substitutions/batchnorm_reconstruction.py +2 -2
- model_compression_toolkit/core/common/substitutions/shift_negative_activation.py +2 -2
- model_compression_toolkit/core/keras/back2framework/keras_model_builder.py +5 -1
- model_compression_toolkit/metadata.py +14 -5
- model_compression_toolkit/target_platform_capabilities/schema/__init__.py +14 -0
- model_compression_toolkit/target_platform_capabilities/schema/mct_current_schema.py +11 -0
- model_compression_toolkit/target_platform_capabilities/schema/schema_functions.py +37 -0
- model_compression_toolkit/target_platform_capabilities/{target_platform/op_quantization_config.py → schema/v1.py} +377 -24
- model_compression_toolkit/target_platform_capabilities/target_platform/__init__.py +3 -5
- model_compression_toolkit/target_platform_capabilities/target_platform/target_platform_model.py +2 -214
- model_compression_toolkit/target_platform_capabilities/target_platform/targetplatform2framework/operations_to_layers.py +1 -2
- model_compression_toolkit/target_platform_capabilities/target_platform/targetplatform2framework/target_platform_capabilities.py +6 -10
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tp_model.py +39 -32
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_pytorch.py +3 -5
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tp_model.py +36 -31
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tp_model.py +37 -32
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tp_model.py +39 -32
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tp_model.py +36 -31
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tp_model.py +45 -38
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tp_model.py +37 -32
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tp_model.py +70 -62
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tpc_keras.py +3 -2
- model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tp_model.py +22 -17
- model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tpc_keras.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tp_model.py +56 -51
- model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tpc_keras.py +3 -4
- model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tpc_pytorch.py +3 -4
- model_compression_toolkit/target_platform_capabilities/target_platform/fusing.py +0 -85
- model_compression_toolkit/target_platform_capabilities/target_platform/operators.py +0 -87
- model_compression_toolkit/target_platform_capabilities/target_platform/target_platform_model_component.py +0 -40
- {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/LICENSE.md +0 -0
- {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/WHEEL +0 -0
- {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/top_level.txt +0 -0
@@ -24,12 +24,9 @@ from model_compression_toolkit.target_platform_capabilities.target_platform.targ
|
|
24
24
|
from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.target_platform_capabilities_component import TargetPlatformCapabilitiesComponent
|
25
25
|
from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.layer_filter_params import LayerFilterParams
|
26
26
|
from model_compression_toolkit.target_platform_capabilities.immutable import ImmutableClass
|
27
|
-
from model_compression_toolkit.target_platform_capabilities.
|
28
|
-
OpQuantizationConfig
|
29
|
-
from model_compression_toolkit.target_platform_capabilities.target_platform.operators import OperatorsSetBase
|
30
|
-
from model_compression_toolkit.target_platform_capabilities.target_platform.target_platform_model import TargetPlatformModel
|
27
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, OperatorsSetBase, \
|
28
|
+
OpQuantizationConfig, QuantizationConfigOptions
|
31
29
|
from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.current_tpc import _current_tpc
|
32
|
-
from model_compression_toolkit.constants import MCT_VERSION, TPC_VERSION
|
33
30
|
|
34
31
|
|
35
32
|
class TargetPlatformCapabilities(ImmutableClass):
|
@@ -38,14 +35,12 @@ class TargetPlatformCapabilities(ImmutableClass):
|
|
38
35
|
"""
|
39
36
|
def __init__(self,
|
40
37
|
tp_model: TargetPlatformModel,
|
41
|
-
name: str = "base"
|
42
|
-
version: str = None):
|
38
|
+
name: str = "base"):
|
43
39
|
"""
|
44
40
|
|
45
41
|
Args:
|
46
42
|
tp_model (TargetPlatformModel): Modeled hardware to attach framework information to.
|
47
43
|
name (str): Name of the TargetPlatformCapabilities.
|
48
|
-
version (str): TPC version.
|
49
44
|
"""
|
50
45
|
|
51
46
|
super().__init__()
|
@@ -57,7 +52,6 @@ class TargetPlatformCapabilities(ImmutableClass):
|
|
57
52
|
# Track the unused opsets for warning purposes.
|
58
53
|
self.__tp_model_opsets_not_used = [s.name for s in tp_model.operator_set]
|
59
54
|
self.remove_fusing_names_from_not_used_list()
|
60
|
-
self.version = version
|
61
55
|
|
62
56
|
def get_layers_by_opset_name(self, opset_name: str) -> List[Any]:
|
63
57
|
"""
|
@@ -117,7 +111,9 @@ class TargetPlatformCapabilities(ImmutableClass):
|
|
117
111
|
|
118
112
|
"""
|
119
113
|
return {"Target Platform Capabilities": self.name,
|
120
|
-
"
|
114
|
+
"Minor version": self.tp_model.tpc_minor_version,
|
115
|
+
"Patch version": self.tp_model.tpc_patch_version,
|
116
|
+
"Platform type": self.tp_model.tpc_platform_type,
|
121
117
|
"Target Platform Model": self.tp_model.get_info(),
|
122
118
|
"Operations to layers": {op2layer.name:[l.__name__ for l in op2layer.layers] for op2layer in self.op_sets_to_layers.op_sets_to_layers}}
|
123
119
|
|
@@ -15,12 +15,12 @@
|
|
15
15
|
from typing import List, Tuple
|
16
16
|
|
17
17
|
import model_compression_toolkit as mct
|
18
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
18
19
|
from model_compression_toolkit.constants import FLOAT_BITWIDTH
|
19
|
-
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
AttributeQuantizationConfig
|
20
|
+
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
|
21
|
+
IMX500_TP_MODEL
|
22
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
|
23
|
+
AttributeQuantizationConfig, OpQuantizationConfig
|
24
24
|
|
25
25
|
tp = mct.target_platform
|
26
26
|
|
@@ -63,7 +63,8 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
63
63
|
weights_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
64
64
|
weights_n_bits=8,
|
65
65
|
weights_per_channel_threshold=False,
|
66
|
-
enable_weights_quantization=False,
|
66
|
+
enable_weights_quantization=False,
|
67
|
+
# TODO: this will changed to True once implementing multi-attributes quantization
|
67
68
|
lut_values_bitwidth=None)
|
68
69
|
|
69
70
|
# define a quantization config to quantize the kernel (for layers where there is a kernel attribute).
|
@@ -88,7 +89,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
88
89
|
|
89
90
|
# We define a default config for operation without kernel attribute.
|
90
91
|
# This is the default config that should be used for non-linear operations.
|
91
|
-
eight_bits_default =
|
92
|
+
eight_bits_default = schema.OpQuantizationConfig(
|
92
93
|
default_weight_attr_config=default_weight_attr_config,
|
93
94
|
attr_weights_configs_mapping={},
|
94
95
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
@@ -102,7 +103,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
102
103
|
signedness=Signedness.AUTO)
|
103
104
|
|
104
105
|
# We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
|
105
|
-
linear_eight_bits =
|
106
|
+
linear_eight_bits = schema.OpQuantizationConfig(
|
106
107
|
default_weight_attr_config=default_weight_attr_config,
|
107
108
|
attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
|
108
109
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
@@ -152,12 +153,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
152
153
|
# of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
|
153
154
|
# If the QuantizationConfigOptions contains only one configuration,
|
154
155
|
# this configuration will be used for the operation quantization:
|
155
|
-
default_configuration_options =
|
156
|
+
default_configuration_options = schema.QuantizationConfigOptions([default_config])
|
156
157
|
|
157
158
|
# Create a TargetPlatformModel and set its default quantization config.
|
158
159
|
# This default configuration will be used for all operations
|
159
160
|
# unless specified otherwise (see OperatorsSet, for example):
|
160
|
-
generated_tpc =
|
161
|
+
generated_tpc = schema.TargetPlatformModel(
|
162
|
+
default_configuration_options,
|
163
|
+
tpc_minor_version=1,
|
164
|
+
tpc_patch_version=0,
|
165
|
+
tpc_platform_type=IMX500_TP_MODEL,
|
166
|
+
name=name,
|
167
|
+
add_metadata=False)
|
161
168
|
|
162
169
|
# To start defining the model's components (such as operator sets, and fusing patterns),
|
163
170
|
# use 'with' the TargetPlatformModel instance, and create them as below:
|
@@ -172,42 +179,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
172
179
|
|
173
180
|
# May suit for operations like: Dropout, Reshape, etc.
|
174
181
|
default_qco = tp.get_default_quantization_config_options()
|
175
|
-
|
176
|
-
|
177
|
-
|
182
|
+
schema.OperatorsSet("NoQuantization",
|
183
|
+
default_qco.clone_and_edit(enable_activation_quantization=False)
|
184
|
+
.clone_and_edit_weight_attribute(enable_weights_quantization=False))
|
178
185
|
|
179
186
|
# Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
|
180
|
-
mixed_precision_configuration_options =
|
181
|
-
|
187
|
+
mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
|
188
|
+
base_config=base_config)
|
182
189
|
|
183
190
|
# Define operator sets that use mixed_precision_configuration_options:
|
184
|
-
conv =
|
185
|
-
fc =
|
191
|
+
conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
|
192
|
+
fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
|
186
193
|
|
187
194
|
# Define operations sets without quantization configuration
|
188
195
|
# options (useful for creating fusing patterns, for example):
|
189
|
-
any_relu =
|
190
|
-
add =
|
191
|
-
sub =
|
192
|
-
mul =
|
193
|
-
div =
|
194
|
-
prelu =
|
195
|
-
swish =
|
196
|
-
sigmoid =
|
197
|
-
tanh =
|
196
|
+
any_relu = schema.OperatorsSet("AnyReLU")
|
197
|
+
add = schema.OperatorsSet("Add")
|
198
|
+
sub = schema.OperatorsSet("Sub")
|
199
|
+
mul = schema.OperatorsSet("Mul")
|
200
|
+
div = schema.OperatorsSet("Div")
|
201
|
+
prelu = schema.OperatorsSet("PReLU")
|
202
|
+
swish = schema.OperatorsSet("Swish")
|
203
|
+
sigmoid = schema.OperatorsSet("Sigmoid")
|
204
|
+
tanh = schema.OperatorsSet("Tanh")
|
198
205
|
|
199
206
|
# Combine multiple operators into a single operator to avoid quantization between
|
200
207
|
# them. To do this we define fusing patterns using the OperatorsSets that were created.
|
201
208
|
# To group multiple sets with regard to fusing, an OperatorSetConcat can be created
|
202
|
-
activations_after_conv_to_fuse =
|
203
|
-
activations_after_fc_to_fuse =
|
204
|
-
any_binary =
|
209
|
+
activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
|
210
|
+
activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
|
211
|
+
any_binary = schema.OperatorSetConcat(add, sub, mul, div)
|
205
212
|
|
206
213
|
# ------------------- #
|
207
214
|
# Fusions
|
208
215
|
# ------------------- #
|
209
|
-
|
210
|
-
|
211
|
-
|
216
|
+
schema.Fusing([conv, activations_after_conv_to_fuse])
|
217
|
+
schema.Fusing([fc, activations_after_fc_to_fuse])
|
218
|
+
schema.Fusing([any_binary, any_relu])
|
212
219
|
|
213
220
|
return generated_tpc
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_keras.py
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
import tensorflow as tf
|
16
16
|
from packaging import version
|
17
17
|
|
18
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
|
18
19
|
from model_compression_toolkit.defaultdict import DefaultDict
|
19
20
|
from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
|
20
21
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_DEPTHWISE_KERNEL, \
|
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
|
|
48
49
|
return generate_keras_tpc(name='imx500_tpc_keras_tpc', tp_model=imx500_tpc_tp_model)
|
49
50
|
|
50
51
|
|
51
|
-
def generate_keras_tpc(name: str, tp_model:
|
52
|
+
def generate_keras_tpc(name: str, tp_model: TargetPlatformModel):
|
52
53
|
"""
|
53
54
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
54
55
|
|
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
59
60
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
60
61
|
"""
|
61
62
|
|
62
|
-
keras_tpc = tp.TargetPlatformCapabilities(tp_model
|
63
|
+
keras_tpc = tp.TargetPlatformCapabilities(tp_model)
|
63
64
|
|
64
65
|
no_quant_list = [Reshape,
|
65
66
|
tf.reshape,
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_pytorch.py
CHANGED
@@ -23,12 +23,12 @@ from torch.nn import Dropout, Flatten, Hardtanh
|
|
23
23
|
from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
|
24
24
|
from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
|
25
25
|
|
26
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
|
26
27
|
from model_compression_toolkit.defaultdict import DefaultDict
|
27
28
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, PYTORCH_KERNEL, \
|
28
29
|
BIAS
|
29
30
|
from model_compression_toolkit.target_platform_capabilities.tpc_models.imx500_tpc.v1.tp_model import get_tp_model
|
30
31
|
import model_compression_toolkit as mct
|
31
|
-
from model_compression_toolkit.target_platform_capabilities.tpc_models.imx500_tpc.v1 import __version__ as TPC_VERSION
|
32
32
|
|
33
33
|
tp = mct.target_platform
|
34
34
|
|
@@ -42,7 +42,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
|
|
42
42
|
return generate_pytorch_tpc(name='imx500_tpc_pytorch_tpc', tp_model=imx500_tpc_tp_model)
|
43
43
|
|
44
44
|
|
45
|
-
def generate_pytorch_tpc(name: str, tp_model:
|
45
|
+
def generate_pytorch_tpc(name: str, tp_model: TargetPlatformModel):
|
46
46
|
"""
|
47
47
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
48
48
|
Args:
|
@@ -51,9 +51,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
51
51
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
52
52
|
"""
|
53
53
|
|
54
|
-
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model
|
55
|
-
name=name,
|
56
|
-
version=TPC_VERSION)
|
54
|
+
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
|
57
55
|
|
58
56
|
# we provide attributes mapping that maps each layer type in the operations set
|
59
57
|
# that has weights attributes with provided quantization config (in the tp model) to
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tp_model.py
CHANGED
@@ -15,13 +15,12 @@
|
|
15
15
|
from typing import List, Tuple
|
16
16
|
|
17
17
|
import model_compression_toolkit as mct
|
18
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
18
19
|
from model_compression_toolkit.constants import FLOAT_BITWIDTH
|
19
20
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
|
20
|
-
WEIGHTS_QUANTIZATION_METHOD
|
21
|
-
from model_compression_toolkit.target_platform_capabilities.
|
22
|
-
|
23
|
-
from model_compression_toolkit.target_platform_capabilities.target_platform.op_quantization_config import \
|
24
|
-
AttributeQuantizationConfig
|
21
|
+
WEIGHTS_QUANTIZATION_METHOD, IMX500_TP_MODEL
|
22
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
|
23
|
+
AttributeQuantizationConfig, OpQuantizationConfig
|
25
24
|
|
26
25
|
tp = mct.target_platform
|
27
26
|
|
@@ -84,7 +83,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
84
83
|
|
85
84
|
# We define a default config for operation without kernel attribute.
|
86
85
|
# This is the default config that should be used for non-linear operations.
|
87
|
-
eight_bits_default =
|
86
|
+
eight_bits_default = schema.OpQuantizationConfig(
|
88
87
|
default_weight_attr_config=default_weight_attr_config,
|
89
88
|
attr_weights_configs_mapping={},
|
90
89
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
@@ -98,7 +97,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
98
97
|
signedness=Signedness.AUTO)
|
99
98
|
|
100
99
|
# We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
|
101
|
-
linear_eight_bits =
|
100
|
+
linear_eight_bits = schema.OpQuantizationConfig(
|
102
101
|
default_weight_attr_config=default_weight_attr_config,
|
103
102
|
attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
|
104
103
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
@@ -151,12 +150,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
151
150
|
# of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
|
152
151
|
# If the QuantizationConfigOptions contains only one configuration,
|
153
152
|
# this configuration will be used for the operation quantization:
|
154
|
-
default_configuration_options =
|
153
|
+
default_configuration_options = schema.QuantizationConfigOptions([default_config])
|
155
154
|
|
156
155
|
# Create a TargetPlatformModel and set its default quantization config.
|
157
156
|
# This default configuration will be used for all operations
|
158
157
|
# unless specified otherwise (see OperatorsSet, for example):
|
159
|
-
generated_tpc =
|
158
|
+
generated_tpc = schema.TargetPlatformModel(
|
159
|
+
default_configuration_options,
|
160
|
+
tpc_minor_version=1,
|
161
|
+
tpc_patch_version=0,
|
162
|
+
tpc_platform_type=IMX500_TP_MODEL,
|
163
|
+
add_metadata=False,
|
164
|
+
name=name)
|
160
165
|
|
161
166
|
# To start defining the model's components (such as operator sets, and fusing patterns),
|
162
167
|
# use 'with' the TargetPlatformModel instance, and create them as below:
|
@@ -169,42 +174,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
169
174
|
|
170
175
|
# May suit for operations like: Dropout, Reshape, etc.
|
171
176
|
default_qco = tp.get_default_quantization_config_options()
|
172
|
-
|
173
|
-
|
174
|
-
|
177
|
+
schema.OperatorsSet("NoQuantization",
|
178
|
+
default_qco.clone_and_edit(enable_activation_quantization=False)
|
179
|
+
.clone_and_edit_weight_attribute(enable_weights_quantization=False))
|
175
180
|
|
176
181
|
# Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
|
177
|
-
mixed_precision_configuration_options =
|
178
|
-
|
182
|
+
mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
|
183
|
+
base_config=base_config)
|
179
184
|
|
180
185
|
# Define operator sets that use mixed_precision_configuration_options:
|
181
|
-
conv =
|
182
|
-
fc =
|
186
|
+
conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
|
187
|
+
fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
|
183
188
|
|
184
189
|
# Define operations sets without quantization configuration
|
185
190
|
# options (useful for creating fusing patterns, for example):
|
186
|
-
any_relu =
|
187
|
-
add =
|
188
|
-
sub =
|
189
|
-
mul =
|
190
|
-
div =
|
191
|
-
prelu =
|
192
|
-
swish =
|
193
|
-
sigmoid =
|
194
|
-
tanh =
|
191
|
+
any_relu = schema.OperatorsSet("AnyReLU")
|
192
|
+
add = schema.OperatorsSet("Add")
|
193
|
+
sub = schema.OperatorsSet("Sub")
|
194
|
+
mul = schema.OperatorsSet("Mul")
|
195
|
+
div = schema.OperatorsSet("Div")
|
196
|
+
prelu = schema.OperatorsSet("PReLU")
|
197
|
+
swish = schema.OperatorsSet("Swish")
|
198
|
+
sigmoid = schema.OperatorsSet("Sigmoid")
|
199
|
+
tanh = schema.OperatorsSet("Tanh")
|
195
200
|
|
196
201
|
# Combine multiple operators into a single operator to avoid quantization between
|
197
202
|
# them. To do this we define fusing patterns using the OperatorsSets that were created.
|
198
203
|
# To group multiple sets with regard to fusing, an OperatorSetConcat can be created
|
199
|
-
activations_after_conv_to_fuse =
|
200
|
-
activations_after_fc_to_fuse =
|
201
|
-
any_binary =
|
204
|
+
activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
|
205
|
+
activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
|
206
|
+
any_binary = schema.OperatorSetConcat(add, sub, mul, div)
|
202
207
|
|
203
208
|
# ------------------- #
|
204
209
|
# Fusions
|
205
210
|
# ------------------- #
|
206
|
-
|
207
|
-
|
208
|
-
|
211
|
+
schema.Fusing([conv, activations_after_conv_to_fuse])
|
212
|
+
schema.Fusing([fc, activations_after_fc_to_fuse])
|
213
|
+
schema.Fusing([any_binary, any_relu])
|
209
214
|
|
210
215
|
return generated_tpc
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_keras.py
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
import tensorflow as tf
|
16
16
|
from packaging import version
|
17
17
|
|
18
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
|
18
19
|
from model_compression_toolkit.defaultdict import DefaultDict
|
19
20
|
from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
|
20
21
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_KERNEL, BIAS_ATTR, \
|
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
|
|
48
49
|
return generate_keras_tpc(name='imx500_tpc_keras_tpc', tp_model=imx500_tpc_tp_model)
|
49
50
|
|
50
51
|
|
51
|
-
def generate_keras_tpc(name: str, tp_model:
|
52
|
+
def generate_keras_tpc(name: str, tp_model: TargetPlatformModel):
|
52
53
|
"""
|
53
54
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
54
55
|
|
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
59
60
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
60
61
|
"""
|
61
62
|
|
62
|
-
keras_tpc = tp.TargetPlatformCapabilities(tp_model
|
63
|
+
keras_tpc = tp.TargetPlatformCapabilities(tp_model)
|
63
64
|
|
64
65
|
no_quant_list = [Reshape,
|
65
66
|
tf.reshape,
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_pytorch.py
CHANGED
@@ -23,6 +23,7 @@ from torch.nn import Dropout, Flatten, Hardtanh
|
|
23
23
|
from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
|
24
24
|
from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
|
25
25
|
|
26
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
26
27
|
from model_compression_toolkit.defaultdict import DefaultDict
|
27
28
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, PYTORCH_KERNEL, BIAS_ATTR, \
|
28
29
|
BIAS
|
@@ -42,7 +43,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
|
|
42
43
|
return generate_pytorch_tpc(name='imx500_tpc_pytorch_tpc', tp_model=imx500_tpc_tp_model)
|
43
44
|
|
44
45
|
|
45
|
-
def generate_pytorch_tpc(name: str, tp_model:
|
46
|
+
def generate_pytorch_tpc(name: str, tp_model: schema.TargetPlatformModel):
|
46
47
|
"""
|
47
48
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
48
49
|
Args:
|
@@ -51,9 +52,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
51
52
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
52
53
|
"""
|
53
54
|
|
54
|
-
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model
|
55
|
-
name=name,
|
56
|
-
version=TPC_VERSION)
|
55
|
+
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
|
57
56
|
|
58
57
|
# we provide attributes mapping that maps each layer type in the operations set
|
59
58
|
# that has weights attributes with provided quantization config (in the tp model) to
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tp_model.py
CHANGED
@@ -15,13 +15,12 @@
|
|
15
15
|
from typing import List, Tuple
|
16
16
|
|
17
17
|
import model_compression_toolkit as mct
|
18
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
18
19
|
from model_compression_toolkit.constants import FLOAT_BITWIDTH
|
19
|
-
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
AttributeQuantizationConfig
|
24
|
-
|
20
|
+
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
|
21
|
+
IMX500_TP_MODEL
|
22
|
+
from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
|
23
|
+
AttributeQuantizationConfig, OpQuantizationConfig
|
25
24
|
|
26
25
|
tp = mct.target_platform
|
27
26
|
|
@@ -84,7 +83,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
84
83
|
|
85
84
|
# We define a default config for operation without kernel attribute.
|
86
85
|
# This is the default config that should be used for non-linear operations.
|
87
|
-
eight_bits_default =
|
86
|
+
eight_bits_default = schema.OpQuantizationConfig(
|
88
87
|
default_weight_attr_config=default_weight_attr_config,
|
89
88
|
attr_weights_configs_mapping={},
|
90
89
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
@@ -98,7 +97,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
|
|
98
97
|
signedness=Signedness.AUTO)
|
99
98
|
|
100
99
|
# We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
|
101
|
-
linear_eight_bits =
|
100
|
+
linear_eight_bits = schema.OpQuantizationConfig(
|
102
101
|
activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
|
103
102
|
default_weight_attr_config=default_weight_attr_config,
|
104
103
|
attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
|
@@ -147,12 +146,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
147
146
|
# of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
|
148
147
|
# If the QuantizationConfigOptions contains only one configuration,
|
149
148
|
# this configuration will be used for the operation quantization:
|
150
|
-
default_configuration_options =
|
149
|
+
default_configuration_options = schema.QuantizationConfigOptions([default_config])
|
151
150
|
|
152
151
|
# Create a TargetPlatformModel and set its default quantization config.
|
153
152
|
# This default configuration will be used for all operations
|
154
153
|
# unless specified otherwise (see OperatorsSet, for example):
|
155
|
-
generated_tpc =
|
154
|
+
generated_tpc = schema.TargetPlatformModel(
|
155
|
+
default_configuration_options,
|
156
|
+
tpc_minor_version=1,
|
157
|
+
tpc_patch_version=0,
|
158
|
+
tpc_platform_type=IMX500_TP_MODEL,
|
159
|
+
add_metadata=False,
|
160
|
+
name=name)
|
156
161
|
|
157
162
|
# To start defining the model's components (such as operator sets, and fusing patterns),
|
158
163
|
# use 'with' the TargetPlatformModel instance, and create them as below:
|
@@ -165,42 +170,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
|
|
165
170
|
|
166
171
|
# May suit for operations like: Dropout, Reshape, etc.
|
167
172
|
default_qco = tp.get_default_quantization_config_options()
|
168
|
-
|
169
|
-
|
170
|
-
|
173
|
+
schema.OperatorsSet("NoQuantization",
|
174
|
+
default_qco.clone_and_edit(enable_activation_quantization=False)
|
175
|
+
.clone_and_edit_weight_attribute(enable_weights_quantization=False))
|
171
176
|
|
172
177
|
# Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
|
173
|
-
mixed_precision_configuration_options =
|
174
|
-
|
178
|
+
mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
|
179
|
+
base_config=base_config)
|
175
180
|
|
176
181
|
# Define operator sets that use mixed_precision_configuration_options:
|
177
|
-
conv =
|
178
|
-
fc =
|
182
|
+
conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
|
183
|
+
fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
|
179
184
|
|
180
185
|
# Define operations sets without quantization configuration
|
181
186
|
# options (useful for creating fusing patterns, for example):
|
182
|
-
any_relu =
|
183
|
-
add =
|
184
|
-
sub =
|
185
|
-
mul =
|
186
|
-
div =
|
187
|
-
prelu =
|
188
|
-
swish =
|
189
|
-
sigmoid =
|
190
|
-
tanh =
|
187
|
+
any_relu = schema.OperatorsSet("AnyReLU")
|
188
|
+
add = schema.OperatorsSet("Add")
|
189
|
+
sub = schema.OperatorsSet("Sub")
|
190
|
+
mul = schema.OperatorsSet("Mul")
|
191
|
+
div = schema.OperatorsSet("Div")
|
192
|
+
prelu = schema.OperatorsSet("PReLU")
|
193
|
+
swish = schema.OperatorsSet("Swish")
|
194
|
+
sigmoid = schema.OperatorsSet("Sigmoid")
|
195
|
+
tanh = schema.OperatorsSet("Tanh")
|
191
196
|
|
192
197
|
# Combine multiple operators into a single operator to avoid quantization between
|
193
198
|
# them. To do this we define fusing patterns using the OperatorsSets that were created.
|
194
199
|
# To group multiple sets with regard to fusing, an OperatorSetConcat can be created
|
195
|
-
activations_after_conv_to_fuse =
|
196
|
-
activations_after_fc_to_fuse =
|
197
|
-
any_binary =
|
200
|
+
activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
|
201
|
+
activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
|
202
|
+
any_binary = schema.OperatorSetConcat(add, sub, mul, div)
|
198
203
|
|
199
204
|
# ------------------- #
|
200
205
|
# Fusions
|
201
206
|
# ------------------- #
|
202
|
-
|
203
|
-
|
204
|
-
|
207
|
+
schema.Fusing([conv, activations_after_conv_to_fuse])
|
208
|
+
schema.Fusing([fc, activations_after_fc_to_fuse])
|
209
|
+
schema.Fusing([any_binary, any_relu])
|
205
210
|
|
206
211
|
return generated_tpc
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_keras.py
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
import tensorflow as tf
|
16
16
|
from packaging import version
|
17
17
|
|
18
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
18
19
|
from model_compression_toolkit.defaultdict import DefaultDict
|
19
20
|
from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
|
20
21
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_DEPTHWISE_KERNEL, \
|
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
|
|
48
49
|
return generate_keras_tpc(name='imx500_pot_tpc_keras_tpc', tp_model=imx500_pot_tpc_tp_model)
|
49
50
|
|
50
51
|
|
51
|
-
def generate_keras_tpc(name: str, tp_model:
|
52
|
+
def generate_keras_tpc(name: str, tp_model: schema.TargetPlatformModel):
|
52
53
|
"""
|
53
54
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
54
55
|
|
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
59
60
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
60
61
|
"""
|
61
62
|
|
62
|
-
keras_tpc = tp.TargetPlatformCapabilities(tp_model
|
63
|
+
keras_tpc = tp.TargetPlatformCapabilities(tp_model)
|
63
64
|
|
64
65
|
no_quant_list = [Reshape,
|
65
66
|
tf.reshape,
|
model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_pytorch.py
CHANGED
@@ -23,6 +23,7 @@ from torch.nn import Dropout, Flatten, Hardtanh
|
|
23
23
|
from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
|
24
24
|
from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
|
25
25
|
|
26
|
+
import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
|
26
27
|
from model_compression_toolkit.defaultdict import DefaultDict
|
27
28
|
from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, PYTORCH_KERNEL, BIAS_ATTR, \
|
28
29
|
BIAS
|
@@ -43,7 +44,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
|
|
43
44
|
return generate_pytorch_tpc(name='imx500_pot_tpc_pytorch_tpc', tp_model=imx500_pot_tpc_tp_model)
|
44
45
|
|
45
46
|
|
46
|
-
def generate_pytorch_tpc(name: str, tp_model:
|
47
|
+
def generate_pytorch_tpc(name: str, tp_model: schema.TargetPlatformModel):
|
47
48
|
"""
|
48
49
|
Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
|
49
50
|
Args:
|
@@ -52,9 +53,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
|
|
52
53
|
Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
|
53
54
|
"""
|
54
55
|
|
55
|
-
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model
|
56
|
-
name=name,
|
57
|
-
version=TPC_VERSION)
|
56
|
+
pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
|
58
57
|
|
59
58
|
# we provide attributes mapping that maps each layer type in the operations set
|
60
59
|
# that has weights attributes with provided quantization config (in the tp model) to
|