Spatial SVDΒΆ
ContextΒΆ
Spatial singular value decomposition (spatial SVD) is a tensor decomposition technique which decomposes one large layer (in terms of Multiply-accumulate(MAC) or memory) into two smaller layers.
Consider a convolution (Conv) layer with kernel (π, π, β, π€), where:
π is the input channels
π the output channels
β is the height of the kernel
π€ is the width of the kernel
Spatial SVD decomposes the kernel into two kernels, one of size (π, π, β, 1) and one of size (π, π, 1, π€), where π is called the rank. The smaller the value of π, the larger the degree of compression.
The following figure illustrates how spatial SVD decomposes both the output channel dimension and the size of the Conv kernel itself.
WorkflowΒΆ
Code exampleΒΆ
SetupΒΆ
Compressing using Spatial SVDΒΆ
Compressing using Spatial SVD in auto mode with multiplicity = 8 for rank rounding
Compressing using Spatial SVD in manual mode
APIΒΆ
Top-level API for Compression
- class aimet_torch.compress.ModelCompressor[source]
AIMET model compressor: Enables model compression using various schemes
- static ModelCompressor.compress_model(model, eval_callback, eval_iterations, input_shape, compress_scheme, cost_metric, parameters, trainer=None, visualization_url=None)[source]
Compress a given model using the specified parameters
- Parameters:
model (
Module) β Model to compresseval_callback (
Callable[[Any,Optional[int],bool],float]) β Evaluation callback. Expected signature is evaluate(model, iterations, use_cuda). Expected to return an accuracy metric.eval_iterations β Iterations to run evaluation for
trainer β Training Class: Contains a callable, train_model, which takes model, layer which is being fine tuned and an optional parameter train_flag as a parameter None: If per layer fine tuning is not required while creating the final compressed model
input_shape (
Tuple) β Shape of the input tensor for modelcompress_scheme (
CompressionScheme) β Compression scheme. See the enum for allowed valuescost_metric (
CostMetric) β Cost metric to use for the compression-ratio (either mac or memory)parameters (
Union[SpatialSvdParameters,WeightSvdParameters,ChannelPruningParameters]) β Compression parameters specific to given compression schemevisualization_url β url the user will need to input where visualizations will appear
- Return type:
Tuple[Module,CompressionStats]- Returns:
A tuple of the compressed model, and compression statistics
Greedy Selection Parameters
- class aimet_torch.common.defs.GreedySelectionParameters(target_comp_ratio, num_comp_ratio_candidates=10, use_monotonic_fit=False, saved_eval_scores_dict=None)[source]
Configuration parameters for the Greedy compression-ratio selection algorithm
- Variables:
target_comp_ratio β Target compression ratio. Expressed as value between 0 and 1. Compression ratio is the ratio of cost of compressed model to cost of the original model.
num_comp_ratio_candidates β Number of comp-ratio candidates to analyze per-layer More candidates allows more granular distribution of compression at the cost of increased run-time during analysis. Default value=10. Value should be greater than 1.
use_monotonic_fit β If True, eval scores in the eval dictionary are fitted to a monotonically increasing function. This is useful if you see the eval dict scores for some layers are not monotonically increasing. By default, this option is set to False.
saved_eval_scores_dict β Path to the eval_scores dictionary pickle file that was saved in a previous run. This is useful to speed-up experiments when trying different target compression-ratios for example. aimet will save eval_scores dictionary pickle file automatically in a ./data directory relative to the current path. num_comp_ratio_candidates parameter will be ignored when this option is used.
Configuration Definitions
- class aimet_torch.common.defs.CostMetric(value)[source]
Enumeration of metrics to measure cost of a model/layer
- mac = 1
Cost modeled for compute requirements
- Type:
MAC
- memory = 2
Cost modeled for space requirements
- Type:
Memory
- class aimet_torch.common.defs.CompressionScheme(value)[source]
Enumeration of compression schemes supported in aimet
- channel_pruning = 3
Channel Pruning
- spatial_svd = 2
Spatial SVD
- weight_svd = 1
Weight SVD
Spatial SVD Configuration
- class aimet_torch.defs.SpatialSvdParameters(mode, params, multiplicity=1)[source]
Configuration parameters for spatial svd compression
- Parameters:
mode (
Mode) β Either auto mode or manual modeparams (
Union[ManualModeParams,AutoModeParams]) β Parameters for the mode selectedmultiplicity β The multiplicity to which ranks/input channels will get rounded. Default: 1
- class AutoModeParams(greedy_select_params, modules_to_ignore=None)[source]
Configuration parameters for auto-mode compression
- Parameters:
greedy_select_params (
GreedySelectionParameters) β Params for greedy comp-ratio selection algorithmmodules_to_ignore (
Optional[List[Module]]) β List of modules to ignore (None indicates nothing to ignore)
- class ManualModeParams(list_of_module_comp_ratio_pairs)[source]
Configuration parameters for manual-mode spatial svd compression
- Parameters:
list_of_module_comp_ratio_pairs (
List[ModuleCompRatioPair]) β List of (module, comp-ratio) pairs
- class Mode(value)[source]
Mode enumeration
- auto = 2
Auto mode
- manual = 1
Manual mode