Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not quantize AdaptiveMaxPool #2284

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions nncf/experimental/torch/pruning/operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from nncf.experimental.common.pruning.operations import SplitPruningOp
from nncf.experimental.common.pruning.operations import StopMaskForwardPruningOp
from nncf.experimental.common.pruning.operations import TransposePruningOp
from nncf.torch.graph.operator_metatypes import PTAdaptiveMaxPool2dMetatype
from nncf.torch.graph.operator_metatypes import PTAddMetatype
from nncf.torch.graph.operator_metatypes import PTAvgPool2dMetatype
from nncf.torch.graph.operator_metatypes import PTBatchNormMetatype
Expand Down Expand Up @@ -92,6 +93,7 @@ class PTIdentityMaskForwardPruningOp(IdentityMaskForwardPruningOp):
PTSigmoidMetatype,
PTSoftmaxMetatype,
PTAvgPool2dMetatype,
PTAdaptiveMaxPool2dMetatype,
PTMaxPool2dMetatype,
PTMeanMetatype,
PTDropoutMetatype,
Expand Down
23 changes: 20 additions & 3 deletions nncf/torch/graph/operator_metatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -565,23 +565,40 @@ class PTAvgPool3dMetatype(PTOperatorMetatype):
hw_config_names = [HWConfigOpName.AVGPOOL]


class PTAdaptiveMaxPool1dMetatype(PTOperatorMetatype):
name = "AdaptiveMaxPool1DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["adaptive_max_pool1d"]}


@PT_OPERATOR_METATYPES.register()
class PTAdaptiveMaxPool2dMetatype(PTOperatorMetatype):
name = "AdaptiveMaxPool2DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["adaptive_max_pool2d"]}


@PT_OPERATOR_METATYPES.register()
class PTAdaptiveMaxPool3dMetatype(PTOperatorMetatype):
name = "AdaptiveMaxPool3DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["adaptive_max_pool3d"]}


class PTMaxPool1dMetatype(PTOperatorMetatype):
name = "MaxPool1DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool1d", "adaptive_max_pool1d"]}
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool1d"]}
hw_config_names = [HWConfigOpName.MAXPOOL]


@PT_OPERATOR_METATYPES.register()
class PTMaxPool2dMetatype(PTOperatorMetatype):
name = "MaxPool2DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool2d", "adaptive_max_pool2d"]}
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool2d"]}
hw_config_names = [HWConfigOpName.MAXPOOL]


@PT_OPERATOR_METATYPES.register()
class PTMaxPool3dMetatype(PTOperatorMetatype):
name = "MaxPool3DOp"
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool3d", "adaptive_max_pool3d"]}
module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["max_pool3d"]}
hw_config_names = [HWConfigOpName.MAXPOOL]


Expand Down
4 changes: 4 additions & 0 deletions nncf/torch/pruning/operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
from nncf.common.pruning.utils import PruningOperationsMetatypeRegistry
from nncf.common.pruning.utils import get_input_masks
from nncf.common.pruning.utils import is_prunable_depthwise_conv
from nncf.torch.graph.operator_metatypes import PTAdaptiveMaxPool2dMetatype
from nncf.torch.graph.operator_metatypes import PTAdaptiveMaxPool3dMetatype
from nncf.torch.graph.operator_metatypes import PTAddMetatype
from nncf.torch.graph.operator_metatypes import PTAvgPool2dMetatype
from nncf.torch.graph.operator_metatypes import PTAvgPool3dMetatype
Expand Down Expand Up @@ -167,8 +169,10 @@ class PTIdentityMaskForwardPruningOp(IdentityMaskForwardPruningOp, PTPruner):
PTGELUMetatype,
PTSigmoidMetatype,
PTSoftmaxMetatype,
PTAdaptiveMaxPool2dMetatype,
PTAvgPool2dMetatype,
PTMaxPool2dMetatype,
PTAdaptiveMaxPool3dMetatype,
PTAvgPool3dMetatype,
PTMaxPool3dMetatype,
PTMeanMetatype,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv1d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv1d[_conv1]/conv1d_0" [id=3, type=conv1d];
"4 TestModel/AdaptiveMaxPool1d[_layer]/adaptive_max_pool1d_0" [id=4, type=adaptive_max_pool1d];
"5 TestModel/AdaptiveMaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0" [id=5, type=symmetric_quantize];
"6 TestModel/NNCFConv1d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv1d[_conv2]/conv1d_0" [id=7, type=conv1d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv1d[_conv1]/conv1d_0";
"2 TestModel/NNCFConv1d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv1d[_conv1]/conv1d_0";
"3 TestModel/NNCFConv1d[_conv1]/conv1d_0" -> "4 TestModel/AdaptiveMaxPool1d[_layer]/adaptive_max_pool1d_0";
"4 TestModel/AdaptiveMaxPool1d[_layer]/adaptive_max_pool1d_0" -> "5 TestModel/AdaptiveMaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0";
"5 TestModel/AdaptiveMaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0" -> "7 TestModel/NNCFConv1d[_conv2]/conv1d_0";
"6 TestModel/NNCFConv1d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv1d[_conv2]/conv1d_0";
"7 TestModel/NNCFConv1d[_conv2]/conv1d_0" -> "8 /nncf_model_output_0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv2d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv2d[_conv1]/conv2d_0" [id=3, type=conv2d];
"4 TestModel/AdaptiveMaxPool2d[_layer]/adaptive_max_pool2d_0" [id=4, type=adaptive_max_pool2d];
"5 TestModel/AdaptiveMaxPool2d[_layer]/SymmetricQuantizer/symmetric_quantize_0" [id=5, type=symmetric_quantize];
"6 TestModel/NNCFConv2d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv2d[_conv2]/conv2d_0" [id=7, type=conv2d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv2d[_conv1]/conv2d_0";
"2 TestModel/NNCFConv2d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv2d[_conv1]/conv2d_0";
"3 TestModel/NNCFConv2d[_conv1]/conv2d_0" -> "4 TestModel/AdaptiveMaxPool2d[_layer]/adaptive_max_pool2d_0";
"4 TestModel/AdaptiveMaxPool2d[_layer]/adaptive_max_pool2d_0" -> "5 TestModel/AdaptiveMaxPool2d[_layer]/SymmetricQuantizer/symmetric_quantize_0";
"5 TestModel/AdaptiveMaxPool2d[_layer]/SymmetricQuantizer/symmetric_quantize_0" -> "7 TestModel/NNCFConv2d[_conv2]/conv2d_0";
"6 TestModel/NNCFConv2d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv2d[_conv2]/conv2d_0";
"7 TestModel/NNCFConv2d[_conv2]/conv2d_0" -> "8 /nncf_model_output_0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv3d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv3d[_conv1]/conv3d_0" [id=3, type=conv3d];
"4 TestModel/AdaptiveMaxPool3d[_layer]/adaptive_max_pool3d_0" [id=4, type=adaptive_max_pool3d];
"5 TestModel/AdaptiveMaxPool3d[_layer]/SymmetricQuantizer/symmetric_quantize_0" [id=5, type=symmetric_quantize];
"6 TestModel/NNCFConv3d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv3d[_conv2]/conv3d_0" [id=7, type=conv3d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv3d[_conv1]/conv3d_0";
"2 TestModel/NNCFConv3d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv3d[_conv1]/conv3d_0";
"3 TestModel/NNCFConv3d[_conv1]/conv3d_0" -> "4 TestModel/AdaptiveMaxPool3d[_layer]/adaptive_max_pool3d_0";
"4 TestModel/AdaptiveMaxPool3d[_layer]/adaptive_max_pool3d_0" -> "5 TestModel/AdaptiveMaxPool3d[_layer]/SymmetricQuantizer/symmetric_quantize_0";
"5 TestModel/AdaptiveMaxPool3d[_layer]/SymmetricQuantizer/symmetric_quantize_0" -> "7 TestModel/NNCFConv3d[_conv2]/conv3d_0";
"6 TestModel/NNCFConv3d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv3d[_conv2]/conv3d_0";
"7 TestModel/NNCFConv3d[_conv2]/conv3d_0" -> "8 /nncf_model_output_0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv1d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv1d[_conv1]/conv1d_0" [id=3, type=conv1d];
"4 TestModel/MaxPool1d[_layer]/max_pool1d_0" [id=4, type=max_pool1d];
"5 TestModel/MaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0" [id=5, type=symmetric_quantize];
"6 TestModel/NNCFConv1d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv1d[_conv2]/conv1d_0" [id=7, type=conv1d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv1d[_conv1]/conv1d_0";
"2 TestModel/NNCFConv1d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv1d[_conv1]/conv1d_0";
"3 TestModel/NNCFConv1d[_conv1]/conv1d_0" -> "4 TestModel/MaxPool1d[_layer]/max_pool1d_0";
"4 TestModel/MaxPool1d[_layer]/max_pool1d_0" -> "5 TestModel/MaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0";
"5 TestModel/MaxPool1d[_layer]/SymmetricQuantizer/symmetric_quantize_0" -> "7 TestModel/NNCFConv1d[_conv2]/conv1d_0";
"6 TestModel/NNCFConv1d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv1d[_conv2]/conv1d_0";
"7 TestModel/NNCFConv1d[_conv2]/conv1d_0" -> "8 /nncf_model_output_0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv2d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv2d[_conv1]/conv2d_0" [id=3, type=conv2d];
"4 TestModel/NNCFConv2d[_conv1]/SymmetricQuantizer/symmetric_quantize_0" [id=4, type=symmetric_quantize];
"5 TestModel/MaxPool2d[_layer]/max_pool2d_0" [id=5, type=max_pool2d];
"6 TestModel/NNCFConv2d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv2d[_conv2]/conv2d_0" [id=7, type=conv2d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv2d[_conv1]/conv2d_0";
"2 TestModel/NNCFConv2d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv2d[_conv1]/conv2d_0";
"3 TestModel/NNCFConv2d[_conv1]/conv2d_0" -> "4 TestModel/NNCFConv2d[_conv1]/SymmetricQuantizer/symmetric_quantize_0";
"4 TestModel/NNCFConv2d[_conv1]/SymmetricQuantizer/symmetric_quantize_0" -> "5 TestModel/MaxPool2d[_layer]/max_pool2d_0";
"5 TestModel/MaxPool2d[_layer]/max_pool2d_0" -> "7 TestModel/NNCFConv2d[_conv2]/conv2d_0";
"6 TestModel/NNCFConv2d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv2d[_conv2]/conv2d_0";
"7 TestModel/NNCFConv2d[_conv2]/conv2d_0" -> "8 /nncf_model_output_0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 TestModel/NNCFConv3d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=2, type=symmetric_quantize];
"3 TestModel/NNCFConv3d[_conv1]/conv3d_0" [id=3, type=conv3d];
"4 TestModel/NNCFConv3d[_conv1]/SymmetricQuantizer/symmetric_quantize_0" [id=4, type=symmetric_quantize];
"5 TestModel/MaxPool3d[_layer]/max_pool3d_0" [id=5, type=max_pool3d];
"6 TestModel/NNCFConv3d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
"7 TestModel/NNCFConv3d[_conv2]/conv3d_0" [id=7, type=conv3d];
"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "3 TestModel/NNCFConv3d[_conv1]/conv3d_0";
"2 TestModel/NNCFConv3d[_conv1]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "3 TestModel/NNCFConv3d[_conv1]/conv3d_0";
"3 TestModel/NNCFConv3d[_conv1]/conv3d_0" -> "4 TestModel/NNCFConv3d[_conv1]/SymmetricQuantizer/symmetric_quantize_0";
"4 TestModel/NNCFConv3d[_conv1]/SymmetricQuantizer/symmetric_quantize_0" -> "5 TestModel/MaxPool3d[_layer]/max_pool3d_0";
"5 TestModel/MaxPool3d[_layer]/max_pool3d_0" -> "7 TestModel/NNCFConv3d[_conv2]/conv3d_0";
"6 TestModel/NNCFConv3d[_conv2]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 TestModel/NNCFConv3d[_conv2]/conv3d_0";
"7 TestModel/NNCFConv3d[_conv2]/conv3d_0" -> "8 /nncf_model_output_0";
}
41 changes: 41 additions & 0 deletions tests/torch/test_compressed_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,39 @@ def forward(self, x):
return TestModel(self.tensor_method, **self.model_kwargs)


class ConvLayerConvModelDesc(BaseDesc):
def __init__(
self,
layer: nn.Module,
conv_class: nn.Module,
input_sample_sizes: Union[Tuple[List[int], ...], List[int]] = None,
model_name: str = None,
):
super().__init__(input_sample_sizes, model_name)

self.model_name = model_name
if model_name is None:
self.model_name = f"Conv_{layer.__class__.__name__}_Conv"
self.layer = layer
self.conv_class = conv_class

def get_model(self):
class TestModel(ModelWithDummyParameter):
def __init__(self, layer, conv_class):
super().__init__()
self._conv1 = conv_class(1, 1, 1)
self._layer = layer
self._conv2 = conv_class(1, 1, 1)

def forward(self, x):
x = self._conv1(x)
x = self._layer(x)
x = self._conv2(x)
return x

return TestModel(self.layer, self.conv_class)


shift_scale_models = []
params_combinations = list(itertools.product([True, False], repeat=2))

Expand Down Expand Up @@ -661,6 +694,14 @@ def forward(self, x):
SingleLayerModelDesc(layer=nn.MaxPool1d(1), input_sample_sizes=[1, 1, 1]),
SingleLayerModelDesc(layer=nn.MaxPool2d(1), input_sample_sizes=[1, 1, 1]),
SingleLayerModelDesc(layer=nn.MaxPool3d(1), input_sample_sizes=[1, 1, 1, 1]),
ConvLayerConvModelDesc(layer=nn.AdaptiveMaxPool1d(1), conv_class=nn.Conv1d, input_sample_sizes=[1, 1]),
ConvLayerConvModelDesc(layer=nn.AdaptiveMaxPool2d((1, 1)), conv_class=nn.Conv2d, input_sample_sizes=[1, 1, 1]),
ConvLayerConvModelDesc(
layer=nn.AdaptiveMaxPool3d((1, 1, 1)), conv_class=nn.Conv3d, input_sample_sizes=[1, 1, 1, 1]
),
ConvLayerConvModelDesc(layer=nn.MaxPool1d(1), conv_class=nn.Conv1d, input_sample_sizes=[1, 1]),
ConvLayerConvModelDesc(layer=nn.MaxPool2d((1, 1)), conv_class=nn.Conv2d, input_sample_sizes=[1, 1, 1]),
ConvLayerConvModelDesc(layer=nn.MaxPool3d((1, 1, 1)), conv_class=nn.Conv3d, input_sample_sizes=[1, 1, 1, 1]),
GeneralModelDesc(
model_name="MaxUnpool3d",
model_builder=PoolUnPool,
Expand Down