Skip to main content

Aidge logo

EPL 2.0 Examples PyPi Examples Documentation Status GitLab Contributors Open GitLab Issues Closed GitLab Issues

Aidge Quantization Module

You can find in this folder the library that implements the quantization algorithms. For the moment only Post Training Quantization (PTQ) is available. Its implementation does support multiple branch architectures.

Prerequisite:

  • aidge_core
  • aidge_backend_cpu
  • aidge_backend_cuda
  • aidge_onnx
pip install aidge-learning

🛠 Build from Source

Prerequisite (in addition to previous one):

1. Python or C++ installation using setup scripts

Environment C++ Development Python Development
Windows .\setup.ps1 -Modules quantization -Tests -CppOnly .\setup.ps1 -Modules quantization -Tests
Unix ./setup.sh -m quantization --tests --cpp-only ./setup.sh -m quantization --tests

[!TIP] Use Get-Help setup.ps1 (Windows) or ./setup.sh -h (Unix) for full documentation.

2. Python Installation using pip

Run these commands from the aidge_quantization/ directory:

# Standard install
pip install . -v

# Install with testing dependencies
pip install .[test] -v && pytest

Editable Install (Experimental)

Use this for real-time development without re-installing.

pip install --no-build-isolation -ve . --config-settings=editable.rebuild=true -Cbuild-dir=build

3. C++ Installation (CMake)

A CMakePresets.json is provided for standard configurations.

# Configure, Build, and Install
cmake --preset clang-debug
cmake --build --preset clang-debug
cmake --install

# Run C++ Tests
ctest --test-dir build/

[!TIP] Create a CMakeUserPresets.json to define your own local build configurations.

User guide

In order to perform a quantization, you will need an AIDGE model (that can be loaded from an ONNX). Then, you will have to provide a calibration dataset consisting of AIDGE tensors (that can be loaded from some numpy arrays). And finally, you will have to specify the quantization number of bits.

Performing the PTQ on your model will then be a one liner:

aidge_quantization.quantize_network(aidge_model, nb_of_bits, calibration_set)

Technical insights

The PTQ algorithm consists of 3 main steps:

- Normalization of the parameters, so that each node set of weights fits in the [-1:1] range.
- Normalization of the activations, so that each node output value fits in the [-1:1] range.
- Quantization of the scaling nodes previously inserted

To achieve those steps, one must propagate the scaling factors inside the network. One should also balance the different branches when they are merging. A particular care is needed for the biases rescaling at each step.

Doing quantization step by step

It is possible to perform the PTQ step by step, thanks to the exposed functions of the API. In that case, here is the standard pipeline:

- Prepare the network for the PTQ (remove the flatten nodes, fuse the BatchNorms ...)
- Insert the scaling nodes that will allow the model calibration
- Perform the Cross Layer Equalization if possible
- Perform the parameter normalization
- Compute the node output ranges over an input calibration dataset
- Adjust the output ranges using a specified error metric (MSE, KL, ...)
- Perform the activation normalization
- Quantize the normalized network
- Convert the scaling factors to bit-shifting operations if needed

Further work

  • add Quantization Aware Training (QAT)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aidge_quantization-0.10.0.post2-cp312-cp312-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.12Windows x86-64

aidge_quantization-0.10.0.post2-cp312-cp312-manylinux_2_28_x86_64.whl (58.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

aidge_quantization-0.10.0.post2-cp311-cp311-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.11Windows x86-64

aidge_quantization-0.10.0.post2-cp311-cp311-manylinux_2_28_x86_64.whl (58.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

aidge_quantization-0.10.0.post2-cp310-cp310-win_amd64.whl (4.2 MB view details)

Uploaded CPython 3.10Windows x86-64

aidge_quantization-0.10.0.post2-cp310-cp310-manylinux_2_28_x86_64.whl (58.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

File details

Details for the file aidge_quantization-0.10.0.post2-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 539d2c2dd45dac3e40d1ac6afceb3d096e03b477ac78bdad18ae35d7c46682db
MD5 705da791493ed17c8b08983834e5ae61
BLAKE2b-256 a6633d15c6e5b7d5065a7d768c73132913e4bbda3962d5ca08ba6f60d07cc4de

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.10.0.post2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9509631839ed8b99ad699280c7cc9fc7d300000d303f5152cdb8b1eeb9ccda3a
MD5 0f7e4dba55d4b5446458df8c9d901a8e
BLAKE2b-256 438620915414ec17c766b4cdd9aca09ae5ec957db105e83f04d5ae136759d681

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.10.0.post2-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 91ac1b13960f95009747ee68ffc3a0407589778b7c1bc88636a4b781be03276d
MD5 ade133fe64559008b4f6808dac9d2a68
BLAKE2b-256 4491c07899ca11a5332652725939742c8c9b11508183753d7f14cbcb187b2ad3

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.10.0.post2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 846ff2519678d02ed844fb1d41076f8e759d32a1f941f8fdc1978770c0412022
MD5 014ac977fa3dc06b3cd19ad653929ea3
BLAKE2b-256 7d453bd2a5a731369674163e1490ce2574d7c9168b4813060ec0ce5d89584fb6

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.10.0.post2-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d9166707ba5b16ecfce98caceff43a5b0ceb912bd2c129ee8ba8f92d05eb9d1b
MD5 91bc6c74adbaf8172259d3c28af4faf0
BLAKE2b-256 0a369e35e978f0fa26ec823528140ccb111ef98b116df09f7f94961cef03eb11

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.10.0.post2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.10.0.post2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 52ac2f7148079c785c99f58d8ccadadd19e184e5b8ef07a95405ec7d343c9641
MD5 359bd3cb159cf91f63450eb1d13a0362
BLAKE2b-256 c6fe7a604f46edb596f74fe08dc2585cc6fe8b8d7d331cce3dc6a4e2b77f87b9

See more details on using hashes here.

Release history Release notifications | RSS feed

0.10.0.post3

6 files

This release

0.10.0.post2 This release

6 files

0.10.0

6 files

0.9.1.post2

3 files

0.9.0.post3

6 files

0.9.0.post2

6 files

0.9.0

6 files

0.5.0

4 files

0.4.2

4 files

0.4.1

4 files

0.4.0

4 files

0.3.1

6 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page