-
Notifications
You must be signed in to change notification settings - Fork 4.4k
[OpenVINO Quantizer] Update OpenVINO Quantizer Tutorial #3889
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
base: main
Are you sure you want to change the base?
Changes from 4 commits
ba70b4a
d89f3e8
d652ee0
695bd7d
6397dec
96a8dee
90fde84
79d4fc3
410edac
94e446f
ca0265e
1c49c6a
6c75d8b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,7 +15,7 @@ Introduction | |
|
|
||
| This is an experimental feature, the quantization API is subject to change. | ||
|
|
||
| This tutorial demonstrates how to use ``OpenVINOQuantizer`` from `Neural Network Compression Framework (NNCF) <https://github.com/openvinotoolkit/nncf/tree/develop>`_ in PyTorch 2 Export Quantization flow to generate a quantized model customized for the `OpenVINO torch.compile backend <https://docs.openvino.ai/2024/openvino-workflow/torch-compile.html>`_ and explains how to lower the quantized model into the `OpenVINO <https://docs.openvino.ai/2024/index.html>`_ representation. | ||
| This tutorial demonstrates how to use ``OpenVINOQuantizer`` from `Executorch <https://github.com/pytorch/executorch/blob/main/backends/openvino/quantizer/quantizer.py>`_ in PyTorch 2 Export Quantization flow to generate a quantized model customized for the `OpenVINO torch.compile backend <https://docs.openvino.ai/2024/openvino-workflow/torch-compile.html>`_ and explains how to lower the quantized model into the `OpenVINO <https://docs.openvino.ai/2024/index.html>`_ representation. | ||
| ``OpenVINOQuantizer`` unlocks the full potential of low-precision OpenVINO kernels due to the placement of quantizers designed specifically for the OpenVINO. | ||
|
|
||
| The PyTorch 2 export quantization flow uses ``torch.export`` to capture the model into a graph and performs quantization transformations on top of the ATen graph. | ||
|
|
@@ -118,29 +118,29 @@ After we capture the FX Module to be quantized, we will import the OpenVINOQuant | |
|
|
||
| .. code-block:: python | ||
|
|
||
| from nncf.experimental.torch.fx import OpenVINOQuantizer | ||
| from executorch.backends.openvino.quantizer import OpenVINOQuantizer | ||
| from executorch.backends.openvino.quantizer import QuantizationMode | ||
|
|
||
| quantizer = OpenVINOQuantizer() | ||
|
|
||
| ``OpenVINOQuantizer`` has several optional parameters that allow tuning the quantization process to get a more accurate model. | ||
| Below is the list of essential parameters and their description: | ||
|
|
||
|
|
||
| * ``preset`` - defines quantization scheme for the model. Two types of presets are available: | ||
| * ``mode`` - defines quantization scheme for the model. Multiple modes are supported: | ||
|
|
||
| * ``PERFORMANCE`` (default) - defines symmetric quantization of weights and activations | ||
| * ``INT8_SYM`` (default) - defines symmetric quantization of weights and activations. This is the best for performance | ||
|
|
||
| * ``MIXED`` - weights are quantized with symmetric quantization and the activations are quantized with asymmetric quantization. This preset is recommended for models with non-ReLU and asymmetric activation functions, e.g. ELU, PReLU, GELU, etc. | ||
| * ``INT8_MIXED`` - weights are quantized with symmetric quantization and the activations are quantized with asymmetric quantization. This preset is recommended for models with non-ReLU and asymmetric activation functions, e.g. ELU, PReLU, GELU, etc. | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| OpenVINOQuantizer(preset=nncf.QuantizationPreset.MIXED) | ||
| * ``INT8_TRANSFORMER`` - special quantization scheme to preserve accuracy after quantization of Transformer models (BERT, Llama, etc.). None is default, i.e. no specific scheme is defined. | ||
|
|
||
| * ``model_type`` - used to specify quantization scheme required for specific type of the model. Transformer is the only supported special quantization scheme to preserve accuracy after quantization of Transformer models (BERT, Llama, etc.). None is default, i.e. no specific scheme is defined. | ||
| * ``INT8WO_SYM``, ``INT8WO_ASYM``, ``INT4WO_SYM``, ``INT4WO_ASYM`` - these are weights-only quantization schemes. They apply simple min-max quantization to model weights to INT8/INT4 with Symmetric and Asymmetric schemes. | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| OpenVINOQuantizer(model_type=nncf.ModelType.Transformer) | ||
| OpenVINOQuantizer(mode=QuantizationMode.INT8_SYM) | ||
|
|
||
|
|
||
| * ``ignored_scope`` - this parameter can be used to exclude some layers from the quantization process to preserve the model accuracy. For example, when you want to exclude the last layer of the model from quantization. Below are some examples of how to use this parameter: | ||
|
|
||
|
|
@@ -165,12 +165,6 @@ Below is the list of essential parameters and their description: | |
| OpenVINOQuantizer(ignored_scope=nncf.IgnoredScope(subgraphs=[subgraph])) | ||
|
|
||
|
|
||
| * ``target_device`` - defines the target device, the specificity of which will be taken into account during optimization. The following values are supported: ``ANY`` (default), ``CPU``, ``CPU_SPR``, ``GPU``, and ``NPU``. | ||
|
|
||
| .. code-block:: python | ||
|
|
||
| OpenVINOQuantizer(target_device=nncf.TargetDevice.CPU) | ||
|
|
||
|
Comment on lines
-168
to
-173
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @daniil-lyakhov I couldn't find the target_device being used inside of openvino quantizer.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Reverted. It is accepted through **kwargs in OVQuantizer and passed to nncf as a kwargs dict directly. no explicit usage inside the quantizer |
||
| For further details on `OpenVINOQuantizer` please see the `documentation <https://openvinotoolkit.github.io/nncf/autoapi/nncf/experimental/torch/fx/index.html#nncf.experimental.torch.fx.OpenVINOQuantizer>`_. | ||
|
|
||
| After we import the backend-specific Quantizer, we will prepare the model for post-training quantization. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why leave weight compression behind? Can we extend the example with WC?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the optional part? I agree I will add it there.
Also, maybe we can change the link which points to some example for PTQ in executorch like yolo instead of nncf resnet example. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you mean this is the best for performance? Unclear
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was called performance before and comapred to INT8_ASYM, I assume INT8_SYM is faster, hence my assumption that it is faster.
Reverted as it is not required