Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Aidge Compression Module

A module for compressing Convolutional Neural Networks (CNNs).

This module decomposes convolutional layers into multiple smaller convolution operations, reducing the total number of computations and improving inference speed.

It provides a C++/Python interface for compression.

Installation

Work in progress — PyPI packages are not yet available.

From GitLab Package Registry (recommended)

The wheels are published to the Aidge GitLab Package Registry on every push to main (pre-release .dev0) and on tag commits (stable release).

Requires a GitLab personal access token with read_api scope (set as GITLAB_TOKEN):

export GITLAB_TOKEN=<your_personal_access_token>

# Install latest stable release
pip install aidge_compression \
  --index-url https://gitlab.eclipse.org/api/v4/projects/eclipse%2Faidge%2Faidge_compression/packages/pypi/simple

# Install latest pre-release (dev version)
pip install --pre aidge_compression \
  --index-url https://gitlab.eclipse.org/api/v4/projects/eclipse%2Faidge%2Faidge_compression/packages/pypi/simple

# Install a specific version
pip install aidge_compression==0.0.5 \
  --index-url https://gitlab.eclipse.org/api/v4/projects/eclipse%2Faidge%2Faidge_compression/packages/pypi/simple

The dependencies aidge_core and aidge_backend_cpu are also published to the monorepo GitLab Package Registry. Add the monorepo index as well so pip can resolve them:

pip install aidge_compression \
  --index-url https://gitlab.eclipse.org/api/v4/projects/eclipse%2Faidge%2Faidge_compression/packages/pypi/simple \
  --extra-index-url https://gitlab.eclipse.org/api/v4/projects/eclipse%2Faidge%2Faidge/packages/pypi/simple

From PyPI (planned)

pip install aidge_compression

From source

Requires aidge_core and aidge_backend_cpu to be installed first (from GitLab Package Registry, PyPI, or built from source):

pip install aidge_core aidge_backend_cpu
pip install .

Requirements

System

  • Python >= 3.10
  • C++17 compiler (GCC, Clang, MSVC)
  • CMake >= 3.22
  • OpenMP support

Python dependencies (installed automatically)

Package Version
numpy >= 1.21.6
aidge_core any

C++ dependencies (fetched automatically at build time)

Library Version Purpose
Eigen 3.4.0 Linear algebra
nlohmann/json 3.11.3 JSON parsing
pybind11 >= 3.0 Python bindings

Aidge ecosystem

Package Role
aidge_core Core graph, operators, tensor infrastructure
aidge_backend_cpu CPU backend (required for compression evaluation)

Building from source

# With Python bindings (default)
pip install .

# C++ only, without Python
cmake -B build -DPYBIND=OFF
cmake --build build

# With tests
cmake -B build -DTEST=ON
cmake --build build
ctest --test-dir build

CMake options:

Option Default Description
PYBIND ON Build Python bindings
WERROR ON Treat warnings as errors
TEST OFF Build C++ unit tests
COVERAGE OFF Enable code coverage (GCC only)

Usage

Example usage with resnet18, where the first convolution is ignored, and manual ranks are assigned to specific layers (-1 ignores the layer, [0.,1.] represents a weakening factor):

import aidge_core
import aidge_onnx
import aidge_compression

model = aidge_onnx.load_onnx("resnet18.onnx")

ignores = {"conv1_Conv"}
ranks = {
    "layer1_layer1_1_conv1_Conv": -1.,
    "layer2_layer2_0_conv1_Conv": -1.,
}

aidge_compression.Compressor(ignores, ranks, 0.8).compress(model)

aidge_onnx.export_onnx(
    model,
    "resnet18_0.8.onnx",
    inputs_dims={
        list(model.get_input_nodes(aidge_core.InputCategory.Data))[0].name(): [
            [1, 3, 224, 224]
        ]
    },
    outputs_dims={list(model.get_output_nodes())[0].name(): [[1, 100]]},
    opset=18,
)

A more complete set of examples to use this module is provided in the examples/ folder, including a tutorial notebook.

Compression methods

This module compresses CNNs through tensor decomposition, replacing a single convolutional tensor with multiple smaller tensors, reducing computational complexity.

Module internal pipeline{width=50%}

The process starts with rank selection for each layer's decomposition:

  • Without a training dataset: The module uses VBMF to estimate the rank for each layer.

  • With a training dataset: It leverages inference on the dataset to assess the impact of decomposition on each layer.

  • With a partial dataset: The method can still use the available data, but it's preferable to ensure the dataset represents various cases the network will encounter.

Following rank selection, each layer undergoes Tucker-2 decomposition or WeightSVD:

Tucker2 decomposition.{width=50%}

  • WeightSVD: Applied to 2D tensors, replacing a single tensor with two smaller ones.

  • Tucker-2: Applied to 4D tensors, replacing a 4D tensor with two 2D tensors and a smaller 4D tensor.

TODO list

  • Tucker-2 implementation.
  • VBMF rank automatic selection.
  • Weight SVD for linear tensors.
  • Validation dataset aided rank selection.
  • CP decomposition
  • Automatic hybrid selection between CP / Tucker
  • Robust network decomposition

Metadata

Release files for aidge-compression 0.0.5.dev0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for aidge-compression 0.0.5.dev0
File
aidge_compression-0.0.5.dev0-cp313-cp313-manylinux_2_35_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ x86-64 Details
aidge_compression-0.0.5.dev0-cp312-cp312-manylinux_2_35_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ x86-64 Details
aidge_compression-0.0.5.dev0-cp311-cp311-manylinux_2_35_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ x86-64 Details
aidge_compression-0.0.5.dev0-cp310-cp310-manylinux_2_35_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.35+ x86-64 Details

Total release size: 3.3 MB

Release files / aidge_compression-0.0.5.dev0-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL aidge_compression-0.0.5.dev0-cp313-cp313-manylinux_2_35_x86_64.whl
Size 831.9 kB
Tags CPython 3.13 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
e1d3195ca82f2bbee36a0f80899770631253f9c055e9ffbe5ab3fdac8cf700d8
BLAKE2b-256 checksum
How to use checksums
8498bef465851e46226661ac4521370a6cce1a84a20b0bcfb8be5df299fb3900
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / aidge_compression-0.0.5.dev0-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL aidge_compression-0.0.5.dev0-cp312-cp312-manylinux_2_35_x86_64.whl
Size 831.0 kB
Tags CPython 3.12 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
6a6223f0f4c9fb8edccbbbd4668fe9e59271e5b31bc52bf3d59ac11276526864
BLAKE2b-256 checksum
How to use checksums
1874bcdc9324e5eae2b20059c2ca6c05008d57dcf34c6fdb1f337c5a7517890a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / aidge_compression-0.0.5.dev0-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL aidge_compression-0.0.5.dev0-cp311-cp311-manylinux_2_35_x86_64.whl
Size 825.9 kB
Tags CPython 3.11 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
5156505d32f5e2ee1d55b63c29e51ebf9c520dd2357277b5d9e33588f61fdaa3
BLAKE2b-256 checksum
How to use checksums
067a479463b0ff14fbda5045fc3a671cafb5d25528c6750547a6c06bb99da9b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / aidge_compression-0.0.5.dev0-cp310-cp310-manylinux_2_35_x86_64.whl

Download URL aidge_compression-0.0.5.dev0-cp310-cp310-manylinux_2_35_x86_64.whl
Size 820.6 kB
Tags CPython 3.10 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
43baa9e33bc6c37c981a212620b2ed8185ae49c709108ee7e20b59c7cc61780b
BLAKE2b-256 checksum
How to use checksums
6d32c9f06d0a2bde1b9accb00c98b39606571e6af3f1674607f0ab635cc77944
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.0.5.dev0 This release

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page