Recommendation Compression

Recommendation Compression

recommendation_compression(self, compression_method: ~netspresso.enums.compression.CompressionMethod, recommendation_method: ~netspresso.enums.compression.RecommendationMethod, recommendation_ratio: float, input_model_path: str, output_dir: str, input_shapes: ~typing.List[~typing.Dict[str, int]], framework: ~netspresso.enums.model.Framework = Framework.PYTORCH, options: ~netspresso.clients.compressor.v2.schemas.compression.base.RecommendationOptions = RecommendationOptions(reshape_channel_axis=-1, policy=<Policy.AVERAGE: 'average'>, layer_norm=<LayerNorm.STANDARD_SCORE: 'standard_score'>, group_policy=<GroupPolicy.AVERAGE: 'average'>, step_size=2, step_op=<StepOp.ROUND: 'round'>, reverse=False, min_num_of_value=8), dataset_path: str | None = None) → CompressorMetadata

Compress a recommendation-based model using the given compression and recommendation methods.

  • Parameters:
    • compression_method (CompressionMethod) – The selected compression method.
    • recommendation_method (RecommendationMethod) – The selected recommendation method.
    • recommendation_ratio (float) – The compression ratio recommended by the recommendation method.
    • input_model_path (str) – The file path where the model is located.
    • output_dir (str) – The local path to save the compressed model.
    • input_shapes (List *[*Dict *[*str , int ] ]) – Input shapes of the model.
    • framework (Framework , optional) – The framework of the model.
    • options (Options , optional) – The options for pruning method.
    • dataset_path (str , optional) – The path of the dataset used for nuclear norm compression method. Default is None.
  • Raises:
    e – If an error occurs while performing recommendation compression.
  • Returns:
    Compress metadata.
  • Return type:
    CompressorMetadata

Details of Parameters

Compression Method

class CompressionMethod(value)

An enumeration.

Available Compression Method

NameDescription
PR_L2L2 Norm Pruning
PR_GMGM Pruning
PR_NNNuclear Norm Pruning
PR_SNPStructured Neuron-level Pruning
FD_TKTucker Decomposition
FD_SVDSingular Value Decomposition

Example

from netspresso.enums import CompressionMethod

COMPRESSION_METHOD = CompressionMethod.PR_L2
❗️

Warning

  • Nuclear Norm is only supported in the Tensorflow-Keras framework.
  • Structured Neuron-level is only supported in the PyTorch and ONNX frameworks.
📘

Note

Recommendation Method

class RecommendationMethod(value)

An enumeration.

Available Recommendation Method

NameDescription
SLAMPStructured Layer-adaptive Sparsity for the Magnitude-based Pruning
VBMFVariational Bayesian Matrix Factorization

Example

from netspresso.enums import RecommendationMethod

RECOMMENDATION_METHOD = RecommendationMethod.SLAMP

📘

Note

  • If you selected PR_L2, PR_GM, PR_NN, PR_SNP for compression_method
    • The recommended_method available is SLAMP.
  • If you selected FD_TK, FD_SVD for compression_method
    • The recommended_method available is VBMF.

Recommendation Ratio

📘

Note

  • SLAMP (Pruning ratio)
    • Remove corresponding amounts of the filters. (e.g. 0.2 removes 20% of the filters in each layer)

    • Available ranges

    • Click the link for more information(SLAMP)

  • VBMF (Calibration ratio)
    • This function control compression level of model if the result of recommendation doesn’t meet the compression level user wants. Remained rank add or subtract (removed rank x calibration ratio) according to calibration ratio range.

    • Available ranges

    • Click the link for more information. (VBMF)

Options

Example

from netspresso.enums import Policy, LayerNorm, GroupPolicy
from netspresso.clients.compressor.v2.schemas import Options

OPTIONS = Options(
    policy=Policy.AVERAGE,
    layer_norm=LayerNorm.TSS_NORM,
    group_policy=GroupPolicy.COUNT,
    reshape_channel_axis=-1
)
📘

Note

📘

Note

  • This parameter applies only to the Pruning Method (PR_L2, PR_GM, PR_NN, PR_SNP).

Example

from netspresso import NetsPresso
from netspresso.enums import CompressionMethod, RecommendationMethod


netspresso = NetsPresso(email="YOUR_EMAIL", password="YOUR_PASSWORD")

compressor = netspresso.compressor_v2()
compressed_model = compressor.recommendation_compression(
    compression_method=CompressionMethod.PR_L2,
    recommendation_method=RecommendationMethod.SLAMP,
    recommendation_ratio=0.5,
    input_model_path="./examples/sample_models/graphmodule.pt",
    output_dir="./outputs/compressed/graphmodule_recommend",
    input_shapes=[\{"batch": 1, "channel": 3, "dimension": [224, 224]\}],
)