Aidge pruning API#

Introduction#

Aidge provides pruning functionalities that can be used during learning.

Basic example of training pipeline with pruning in Aidge (for a single epoch):

# Define model, setup learning...
model = ...
dataprovider = ...
opt = ...

# Setup pruning
# 1. Insert Prune nodes
aidge_pruning.insert_weight_prune_nodes(model)

# 2. Configure pruning
pruner = aidge_pruning.IterNonStructPruner()
pruning_rate = aidge_pruning.constant_pr(0.1)
pruner.set_pruning_rate_scheduler(pruning_rate)
pruner.set_data_and_masks(list(aidge_pruning.prune_data_and_masks(model)))

# 3. Initialize masks
pruner.update_masks()

scheduler = aidge_core.SequentialScheduler(model)
for i, (input, label) in enumerate(tqdm(dataprovider)):
    # Forward pass
    pred = scheduler.forward(data=[input])[0]
    # Reset the gradient
    opt.reset_grad()
    # Compute loss
    loss = aidge_learning.loss.CELoss(pred, label)
    # Compute accuracy (optional)
    acc = aidge_learning.metrics.Accuracy(pred, label, 1)[0]
    # Backward pass
    scheduler.backward()
    # Optimize the parameters
    opt.update()

    # Update masks
    pruner.update_masks()

Components#

Pruners#

The base pruner class is :class:` aidge_pruning.Pruner`:

class aidge_pruning.Pruner#
__init__(self: aidge_pruning.aidge_pruning.Pruner) None#
data_and_masks(self: aidge_pruning.aidge_pruning.Pruner) list[tuple[aidge_core.aidge_core.Tensor, aidge_core.aidge_core.Tensor]]#
pruning_rate(self: aidge_pruning.aidge_pruning.Pruner) float#
pruning_rate_scheduler(self: aidge_pruning.aidge_pruning.Pruner) Aidge::PRScheduler#
set_data_and_masks(self: aidge_pruning.aidge_pruning.Pruner, arg0: collections.abc.Sequence[tuple[aidge_core.aidge_core.Tensor, aidge_core.aidge_core.Tensor]]) None#
set_pruning_rate_scheduler(self: aidge_pruning.aidge_pruning.Pruner, arg0: Aidge::PRScheduler) None#
update_masks(self: aidge_pruning.aidge_pruning.Pruner) None#

The available pruners are:

class aidge_pruning.IterNonStructPruner#
__init__(self: aidge_pruning.aidge_pruning.IterNonStructPruner, delta: SupportsFloat | SupportsIndex = 0.0010000000474974513) None#
update_masks(self: aidge_pruning.aidge_pruning.IterNonStructPruner) None#
class aidge_pruning.RandomPruner#
__init__(self: aidge_pruning.aidge_pruning.RandomPruner) None#
update_masks(self: aidge_pruning.aidge_pruning.RandomPruner) None#

Pruning rate scheduling#

The base pruning rate scheduling class is aidge_pruning.PRScheduler:

class aidge_pruning.PRScheduler#
__init__(*args, **kwargs)#
pr_profiling(self: aidge_pruning.aidge_pruning.PRScheduler, arg0: SupportsInt | SupportsIndex) std::vector<float, std::allocator<float> >#
pruning_rate(self: aidge_pruning.aidge_pruning.PRScheduler) float#
step(self: aidge_pruning.aidge_pruning.PRScheduler) int#
update(self: aidge_pruning.aidge_pruning.PRScheduler) None#

The available pruning rate schedulers are:

aidge_pruning.constant_pr(initial_pr: SupportsFloat | SupportsIndex) aidge_pruning.aidge_pruning.PRScheduler#
aidge_pruning.step_pr(initial_pr: SupportsFloat | SupportsIndex, step_size: SupportsInt | SupportsIndex, gamma: SupportsFloat | SupportsIndex = 0.10000000149011612) aidge_pruning.aidge_pruning.PRScheduler#

Recipes#

aidge_pruning.insert_weight_prune_nodes(graphview: aidge_core.aidge_core.GraphView) None#
aidge_pruning.prune_data_and_masks(graphview: aidge_core.aidge_core.GraphView) list[tuple[aidge_core.aidge_core.Tensor, aidge_core.aidge_core.Tensor]]#

Operators#

aidge_pruning.Prune(name: str = '') aidge_core.aidge_core.Node#