Skip to main content

Quantization algorithms to compress aidge networks.

Project description

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 -Clean -Tests .\setup.ps1 -Modules quantization -Clean -Tests -Python
Unix ./setup.sh -m quantization --clean --tests ./setup.sh -m quantization --clean --tests --python

[!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)

Project details


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.9.0.post2-cp312-cp312-win_amd64.whl (10.7 MB view details)

Uploaded CPython 3.12Windows x86-64

aidge_quantization-0.9.0.post2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aidge_quantization-0.9.0.post2-cp311-cp311-win_amd64.whl (10.7 MB view details)

Uploaded CPython 3.11Windows x86-64

aidge_quantization-0.9.0.post2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aidge_quantization-0.9.0.post2-cp310-cp310-win_amd64.whl (10.6 MB view details)

Uploaded CPython 3.10Windows x86-64

aidge_quantization-0.9.0.post2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

File details

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

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bd18b71d1aff837a0b1b30f48779376074ed907a8bbb429a57f085b71ab57879
MD5 026dccc8985bc538b088d88d959622e3
BLAKE2b-256 4a464d362c5052a8104dd7e954b6f8b45bc2e809628566e6161dbbef7c4f55fc

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.9.0.post2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 486af405bda017e8dbccb873237f6e4fdabcf75c32d39c5400b2830620a95d15
MD5 92ff8ded0eb5952169d71e498d4aa61e
BLAKE2b-256 122f56671d442400f18468881fe3b9b3c4f281fab2e9193ba930aa30158d1f7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f0fc044191bc31c3460d9dc9b875ed2cd6f60eb1fe914e36dd1c91e697a7d7fb
MD5 2315e827146ae339b9b41513652e2898
BLAKE2b-256 3f123b911e2692bf5bc39db3a689c1cc69421abee6415e9afee7db20e158ddd4

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.9.0.post2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0340c47c49d48abda947d56ee3d509e0bb2823c6cabbf3502cbe503344c391a
MD5 c32fc03145471a95050e1d3bf6c02c04
BLAKE2b-256 c11d5b52277be69da98e20b489997e91c0f10d9930f3598d9ffb8528e8e7a449

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d898a762430a88dbf66a494fd86331df207c32f13b164bec9b5c30f01a2301a2
MD5 e988a989ccd9cb35e854f2ebaf65da26
BLAKE2b-256 37092107b361b5c363eaa331580f25d6e444a5bf99619cf73e9e1be28e5dd0d5

See more details on using hashes here.

File details

Details for the file aidge_quantization-0.9.0.post2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aidge_quantization-0.9.0.post2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 93f7c1ec26641325a6c20951beeae064d82f34ee0b2fd6ee8ce48db4751268e0
MD5 85ade62c8734606dbb69219c20d4d620
BLAKE2b-256 04c7ea16d23a9c54d1bb2f8756f2afa53786bf0c652906614ec2ffcabd433ecf

See more details on using hashes here.

Supported by

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