diff --git a/sparsify/userguide/images/image_0.jpg b/sparsify/_images/image_0.jpg similarity index 100% rename from sparsify/userguide/images/image_0.jpg rename to sparsify/_images/image_0.jpg diff --git a/sparsify/userguide/images/image_10.jpg b/sparsify/_images/image_10.jpg similarity index 100% rename from sparsify/userguide/images/image_10.jpg rename to sparsify/_images/image_10.jpg diff --git a/sparsify/userguide/images/image_11.jpg b/sparsify/_images/image_11.jpg similarity index 100% rename from sparsify/userguide/images/image_11.jpg rename to sparsify/_images/image_11.jpg diff --git a/sparsify/userguide/images/image_12.jpg b/sparsify/_images/image_12.jpg similarity index 100% rename from sparsify/userguide/images/image_12.jpg rename to sparsify/_images/image_12.jpg diff --git a/sparsify/userguide/images/image_13.jpg b/sparsify/_images/image_13.jpg similarity index 100% rename from sparsify/userguide/images/image_13.jpg rename to sparsify/_images/image_13.jpg diff --git a/sparsify/userguide/images/image_15.jpg b/sparsify/_images/image_15.jpg similarity index 100% rename from sparsify/userguide/images/image_15.jpg rename to sparsify/_images/image_15.jpg diff --git a/sparsify/userguide/images/image_15a.jpg b/sparsify/_images/image_15a.jpg similarity index 100% rename from sparsify/userguide/images/image_15a.jpg rename to sparsify/_images/image_15a.jpg diff --git a/sparsify/userguide/images/image_15b.jpg b/sparsify/_images/image_15b.jpg similarity index 100% rename from sparsify/userguide/images/image_15b.jpg rename to sparsify/_images/image_15b.jpg diff --git a/sparsify/userguide/images/image_16.jpg b/sparsify/_images/image_16.jpg similarity index 100% rename from sparsify/userguide/images/image_16.jpg rename to sparsify/_images/image_16.jpg diff --git a/sparsify/userguide/images/image_17.jpg b/sparsify/_images/image_17.jpg similarity index 100% rename from sparsify/userguide/images/image_17.jpg rename to sparsify/_images/image_17.jpg diff --git a/sparsify/userguide/images/image_18.jpg b/sparsify/_images/image_18.jpg similarity index 100% rename from sparsify/userguide/images/image_18.jpg rename to sparsify/_images/image_18.jpg diff --git a/sparsify/userguide/images/image_19.jpg b/sparsify/_images/image_19.jpg similarity index 100% rename from sparsify/userguide/images/image_19.jpg rename to sparsify/_images/image_19.jpg diff --git a/sparsify/userguide/images/image_2.jpg b/sparsify/_images/image_2.jpg similarity index 100% rename from sparsify/userguide/images/image_2.jpg rename to sparsify/_images/image_2.jpg diff --git a/sparsify/userguide/images/image_21.jpg b/sparsify/_images/image_21.jpg similarity index 100% rename from sparsify/userguide/images/image_21.jpg rename to sparsify/_images/image_21.jpg diff --git a/sparsify/userguide/images/image_21a.jpg b/sparsify/_images/image_21a.jpg similarity index 100% rename from sparsify/userguide/images/image_21a.jpg rename to sparsify/_images/image_21a.jpg diff --git a/sparsify/userguide/images/image_21b.jpg b/sparsify/_images/image_21b.jpg similarity index 100% rename from sparsify/userguide/images/image_21b.jpg rename to sparsify/_images/image_21b.jpg diff --git a/sparsify/userguide/images/image_22.jpg b/sparsify/_images/image_22.jpg similarity index 100% rename from sparsify/userguide/images/image_22.jpg rename to sparsify/_images/image_22.jpg diff --git a/sparsify/userguide/images/image_23.jpg b/sparsify/_images/image_23.jpg similarity index 100% rename from sparsify/userguide/images/image_23.jpg rename to sparsify/_images/image_23.jpg diff --git a/sparsify/userguide/images/image_24.jpg b/sparsify/_images/image_24.jpg similarity index 100% rename from sparsify/userguide/images/image_24.jpg rename to sparsify/_images/image_24.jpg diff --git a/sparsify/userguide/images/image_25.jpg b/sparsify/_images/image_25.jpg similarity index 100% rename from sparsify/userguide/images/image_25.jpg rename to sparsify/_images/image_25.jpg diff --git a/sparsify/userguide/images/image_27.jpg b/sparsify/_images/image_27.jpg similarity index 100% rename from sparsify/userguide/images/image_27.jpg rename to sparsify/_images/image_27.jpg diff --git a/sparsify/userguide/images/image_29.jpg b/sparsify/_images/image_29.jpg similarity index 100% rename from sparsify/userguide/images/image_29.jpg rename to sparsify/_images/image_29.jpg diff --git a/sparsify/userguide/images/image_29a.jpg b/sparsify/_images/image_29a.jpg similarity index 100% rename from sparsify/userguide/images/image_29a.jpg rename to sparsify/_images/image_29a.jpg diff --git a/sparsify/userguide/images/image_29b.jpg b/sparsify/_images/image_29b.jpg similarity index 100% rename from sparsify/userguide/images/image_29b.jpg rename to sparsify/_images/image_29b.jpg diff --git a/sparsify/userguide/images/image_29c.jpg b/sparsify/_images/image_29c.jpg similarity index 100% rename from sparsify/userguide/images/image_29c.jpg rename to sparsify/_images/image_29c.jpg diff --git a/sparsify/userguide/images/image_29d.jpg b/sparsify/_images/image_29d.jpg similarity index 100% rename from sparsify/userguide/images/image_29d.jpg rename to sparsify/_images/image_29d.jpg diff --git a/sparsify/userguide/images/image_29e.jpg b/sparsify/_images/image_29e.jpg similarity index 100% rename from sparsify/userguide/images/image_29e.jpg rename to sparsify/_images/image_29e.jpg diff --git a/sparsify/userguide/images/image_3.jpg b/sparsify/_images/image_3.jpg similarity index 100% rename from sparsify/userguide/images/image_3.jpg rename to sparsify/_images/image_3.jpg diff --git a/sparsify/userguide/images/image_30.jpg b/sparsify/_images/image_30.jpg similarity index 100% rename from sparsify/userguide/images/image_30.jpg rename to sparsify/_images/image_30.jpg diff --git a/sparsify/userguide/images/image_31.jpg b/sparsify/_images/image_31.jpg similarity index 100% rename from sparsify/userguide/images/image_31.jpg rename to sparsify/_images/image_31.jpg diff --git a/sparsify/userguide/images/image_31a.jpg b/sparsify/_images/image_31a.jpg similarity index 100% rename from sparsify/userguide/images/image_31a.jpg rename to sparsify/_images/image_31a.jpg diff --git a/sparsify/userguide/images/image_32.jpg b/sparsify/_images/image_32.jpg similarity index 100% rename from sparsify/userguide/images/image_32.jpg rename to sparsify/_images/image_32.jpg diff --git a/sparsify/userguide/images/image_33.jpg b/sparsify/_images/image_33.jpg similarity index 100% rename from sparsify/userguide/images/image_33.jpg rename to sparsify/_images/image_33.jpg diff --git a/sparsify/userguide/images/image_35.jpg b/sparsify/_images/image_35.jpg similarity index 100% rename from sparsify/userguide/images/image_35.jpg rename to sparsify/_images/image_35.jpg diff --git a/sparsify/userguide/images/image_36.jpg b/sparsify/_images/image_36.jpg similarity index 100% rename from sparsify/userguide/images/image_36.jpg rename to sparsify/_images/image_36.jpg diff --git a/sparsify/userguide/images/image_36a.jpg b/sparsify/_images/image_36a.jpg similarity index 100% rename from sparsify/userguide/images/image_36a.jpg rename to sparsify/_images/image_36a.jpg diff --git a/sparsify/userguide/images/image_37.jpg b/sparsify/_images/image_37.jpg similarity index 100% rename from sparsify/userguide/images/image_37.jpg rename to sparsify/_images/image_37.jpg diff --git a/sparsify/userguide/images/image_38.jpg b/sparsify/_images/image_38.jpg similarity index 100% rename from sparsify/userguide/images/image_38.jpg rename to sparsify/_images/image_38.jpg diff --git a/sparsify/userguide/images/image_39.jpg b/sparsify/_images/image_39.jpg similarity index 100% rename from sparsify/userguide/images/image_39.jpg rename to sparsify/_images/image_39.jpg diff --git a/sparsify/userguide/images/image_4.jpg b/sparsify/_images/image_4.jpg similarity index 100% rename from sparsify/userguide/images/image_4.jpg rename to sparsify/_images/image_4.jpg diff --git a/sparsify/userguide/images/image_40.jpg b/sparsify/_images/image_40.jpg similarity index 100% rename from sparsify/userguide/images/image_40.jpg rename to sparsify/_images/image_40.jpg diff --git a/sparsify/userguide/images/image_41.jpg b/sparsify/_images/image_41.jpg similarity index 100% rename from sparsify/userguide/images/image_41.jpg rename to sparsify/_images/image_41.jpg diff --git a/sparsify/userguide/images/image_42.jpg b/sparsify/_images/image_42.jpg similarity index 100% rename from sparsify/userguide/images/image_42.jpg rename to sparsify/_images/image_42.jpg diff --git a/sparsify/userguide/images/image_43.jpg b/sparsify/_images/image_43.jpg similarity index 100% rename from sparsify/userguide/images/image_43.jpg rename to sparsify/_images/image_43.jpg diff --git a/sparsify/userguide/images/image_44.jpg b/sparsify/_images/image_44.jpg similarity index 100% rename from sparsify/userguide/images/image_44.jpg rename to sparsify/_images/image_44.jpg diff --git a/sparsify/userguide/images/image_45.jpg b/sparsify/_images/image_45.jpg similarity index 100% rename from sparsify/userguide/images/image_45.jpg rename to sparsify/_images/image_45.jpg diff --git a/sparsify/userguide/images/image_46.jpg b/sparsify/_images/image_46.jpg similarity index 100% rename from sparsify/userguide/images/image_46.jpg rename to sparsify/_images/image_46.jpg diff --git a/sparsify/userguide/images/image_47.jpg b/sparsify/_images/image_47.jpg similarity index 100% rename from sparsify/userguide/images/image_47.jpg rename to sparsify/_images/image_47.jpg diff --git a/sparsify/userguide/images/image_48.jpg b/sparsify/_images/image_48.jpg similarity index 100% rename from sparsify/userguide/images/image_48.jpg rename to sparsify/_images/image_48.jpg diff --git a/sparsify/userguide/images/image_49.jpg b/sparsify/_images/image_49.jpg similarity index 100% rename from sparsify/userguide/images/image_49.jpg rename to sparsify/_images/image_49.jpg diff --git a/sparsify/userguide/images/image_5.jpg b/sparsify/_images/image_5.jpg similarity index 100% rename from sparsify/userguide/images/image_5.jpg rename to sparsify/_images/image_5.jpg diff --git a/sparsify/userguide/images/image_50.jpg b/sparsify/_images/image_50.jpg similarity index 100% rename from sparsify/userguide/images/image_50.jpg rename to sparsify/_images/image_50.jpg diff --git a/sparsify/userguide/images/image_51.jpg b/sparsify/_images/image_51.jpg similarity index 100% rename from sparsify/userguide/images/image_51.jpg rename to sparsify/_images/image_51.jpg diff --git a/sparsify/userguide/images/image_52.jpg b/sparsify/_images/image_52.jpg similarity index 100% rename from sparsify/userguide/images/image_52.jpg rename to sparsify/_images/image_52.jpg diff --git a/sparsify/userguide/images/image_53.jpg b/sparsify/_images/image_53.jpg similarity index 100% rename from sparsify/userguide/images/image_53.jpg rename to sparsify/_images/image_53.jpg diff --git a/sparsify/userguide/images/image_54.jpg b/sparsify/_images/image_54.jpg similarity index 100% rename from sparsify/userguide/images/image_54.jpg rename to sparsify/_images/image_54.jpg diff --git a/sparsify/userguide/images/image_55.jpg b/sparsify/_images/image_55.jpg similarity index 100% rename from sparsify/userguide/images/image_55.jpg rename to sparsify/_images/image_55.jpg diff --git a/sparsify/userguide/images/image_56.jpg b/sparsify/_images/image_56.jpg similarity index 100% rename from sparsify/userguide/images/image_56.jpg rename to sparsify/_images/image_56.jpg diff --git a/sparsify/userguide/images/image_57.jpg b/sparsify/_images/image_57.jpg similarity index 100% rename from sparsify/userguide/images/image_57.jpg rename to sparsify/_images/image_57.jpg diff --git a/sparsify/userguide/images/image_58.jpg b/sparsify/_images/image_58.jpg similarity index 100% rename from sparsify/userguide/images/image_58.jpg rename to sparsify/_images/image_58.jpg diff --git a/sparsify/userguide/images/image_59.jpg b/sparsify/_images/image_59.jpg similarity index 100% rename from sparsify/userguide/images/image_59.jpg rename to sparsify/_images/image_59.jpg diff --git a/sparsify/userguide/images/image_6.jpg b/sparsify/_images/image_6.jpg similarity index 100% rename from sparsify/userguide/images/image_6.jpg rename to sparsify/_images/image_6.jpg diff --git a/sparsify/userguide/images/image_61.jpg b/sparsify/_images/image_61.jpg similarity index 100% rename from sparsify/userguide/images/image_61.jpg rename to sparsify/_images/image_61.jpg diff --git a/sparsify/userguide/images/image_62.jpg b/sparsify/_images/image_62.jpg similarity index 100% rename from sparsify/userguide/images/image_62.jpg rename to sparsify/_images/image_62.jpg diff --git a/sparsify/userguide/images/image_63.jpg b/sparsify/_images/image_63.jpg similarity index 100% rename from sparsify/userguide/images/image_63.jpg rename to sparsify/_images/image_63.jpg diff --git a/sparsify/userguide/images/image_64.jpg b/sparsify/_images/image_64.jpg similarity index 100% rename from sparsify/userguide/images/image_64.jpg rename to sparsify/_images/image_64.jpg diff --git a/sparsify/userguide/images/image_65.jpg b/sparsify/_images/image_65.jpg similarity index 100% rename from sparsify/userguide/images/image_65.jpg rename to sparsify/_images/image_65.jpg diff --git a/sparsify/userguide/images/image_8.jpg b/sparsify/_images/image_8.jpg similarity index 100% rename from sparsify/userguide/images/image_8.jpg rename to sparsify/_images/image_8.jpg diff --git a/sparsify/userguide/images/image_9.jpg b/sparsify/_images/image_9.jpg similarity index 100% rename from sparsify/userguide/images/image_9.jpg rename to sparsify/_images/image_9.jpg diff --git a/sparsify/_modules/index.html b/sparsify/_modules/index.html index 9d8026a5198..2413d853a07 100644 --- a/sparsify/_modules/index.html +++ b/sparsify/_modules/index.html @@ -104,10 +104,11 @@ -

Help and Support

+

Help

@@ -206,8 +207,7 @@

All modules for which code is available

  • sparsify.schemas.system
  • sparsify.utils.system
  • sparsify.workers.base
  • -
  • sparsify.workers.base_manager
  • -
  • sparsify.workers.base_wrapper
  • +
  • sparsify.workers.manager
  • sparsify.workers.projects_benchmark
  • sparsify.workers.projects_data
  • sparsify.workers.projects_model
  • diff --git a/sparsify/_modules/marshmallow/schema.html b/sparsify/_modules/marshmallow/schema.html index 75611710301..dcb1bd5f4b3 100644 --- a/sparsify/_modules/marshmallow/schema.html +++ b/sparsify/_modules/marshmallow/schema.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/peewee.html b/sparsify/_modules/peewee.html index b06be7dd779..9b2b7eb8b65 100644 --- a/sparsify/_modules/peewee.html +++ b/sparsify/_modules/peewee.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/playhouse/sqlite_ext.html b/sparsify/_modules/playhouse/sqlite_ext.html index 9c0e88e6848..d84b29f09f8 100644 --- a/sparsify/_modules/playhouse/sqlite_ext.html +++ b/sparsify/_modules/playhouse/sqlite_ext.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/app.html b/sparsify/_modules/sparsify/app.html index f0a72be5dcb..8443dff85d6 100644 --- a/sparsify/_modules/sparsify/app.html +++ b/sparsify/_modules/sparsify/app.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -189,6 +190,7 @@

    Source code for sparsify.app

     # limitations under the License.
     
     import argparse
    +import atexit
     import logging
     import os
     from typing import Any, Union
    @@ -272,7 +274,13 @@ 

    Source code for sparsify.app

     
     
     def _worker_setup():
    -    JobWorkerManager().app_startup()
    +    manager = JobWorkerManager()
    +
    +    def _interrupt():
    +        manager.shutdown()
    +
    +    atexit.register(_interrupt)
    +    manager.start()
     
     
     
    [docs]def run( diff --git a/sparsify/_modules/sparsify/blueprints/code_samples/pytorch__training.html b/sparsify/_modules/sparsify/blueprints/code_samples/pytorch__training.html index e7d41feb42f..6070a36c257 100644 --- a/sparsify/_modules/sparsify/blueprints/code_samples/pytorch__training.html +++ b/sparsify/_modules/sparsify/blueprints/code_samples/pytorch__training.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/blueprints/utils/helpers.html b/sparsify/_modules/sparsify/blueprints/utils/helpers.html index 47d0d2adf08..cd7f8c6b57a 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/helpers.html +++ b/sparsify/_modules/sparsify/blueprints/utils/helpers.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/blueprints/utils/projects.html b/sparsify/_modules/sparsify/blueprints/utils/projects.html index 7236065a0b4..186f776f2d9 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/projects.html +++ b/sparsify/_modules/sparsify/blueprints/utils/projects.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/blueprints/utils/projects_benchmark.html b/sparsify/_modules/sparsify/blueprints/utils/projects_benchmark.html index 0f093f2c3ec..d577af0bc29 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/projects_benchmark.html +++ b/sparsify/_modules/sparsify/blueprints/utils/projects_benchmark.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/blueprints/utils/projects_data.html b/sparsify/_modules/sparsify/blueprints/utils/projects_data.html index 043aefb666b..ffc095c789c 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/projects_data.html +++ b/sparsify/_modules/sparsify/blueprints/utils/projects_data.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations.html b/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations.html index 99d88d4dbed..3746f9287b4 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations.html +++ b/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -423,7 +424,7 @@

    Source code for sparsify.blueprints.utils.projects_optimizations

    sparsity = 0.85 # TODO: dynamically choose sparsity level balance_perf_loss = 1.0 filter_min_sparsity = 0.4 - filter_min_perf_gain = 0.75 + filter_min_perf_gain = 0.6 filter_min_recovery = -1.0 return PruningSettings( diff --git a/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations_pruning.html b/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations_pruning.html index 1757a3ab27b..972f95047a8 100644 --- a/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations_pruning.html +++ b/sparsify/_modules/sparsify/blueprints/utils/projects_optimizations_pruning.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -195,8 +196,7 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    import logging -from collections import OrderedDict -from enum import Enum +from collections import OrderedDict, defaultdict from typing import Any, Dict, List, NamedTuple, Tuple, Union import numpy @@ -206,7 +206,6 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    __all__ = [ "PruningSettings", - "PruningNodeEvaluator", "PruningModelEvaluator", ] @@ -227,290 +226,244 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    ) -class ValueRescaler(object): +class _PruningPointRescaler(object): """ Convenience class for normalizing / rescaling values """ def __init__(self): - self._data = [] # type: List[Tuple[float, float, float]] - self._avg_mins = None - self._avg_ranges = None - - def add_rescale_point(self, values: List[float]): - """ - :param values: a list of values to add a point (min, max) for later rescaling - """ - minimum = numpy.min(values).item() if values else 0.0 - maximum = numpy.max(values).item() if values else 0.0 - self._data.append((minimum, maximum, maximum - minimum)) - - def rescale(self, val: float) -> float: - """ - :param val: the value to rescale - :return: the rescaled / normalized value based off of previously added points - """ - if self._avg_mins is None or self._avg_ranges is None: - self._set_averages() - - rescaled = val - self._avg_mins - if self._avg_ranges: - rescaled = rescaled / self._avg_ranges + self.min_val = None # type: Union[None, float] + self.max_val = None # type: Union[None, float] + + def __repr__(self): + return f"_ValueRescaler(min_val={self.min_val}, max_val={self.max_val})" + + def __call__(self, val: Union[None, float]) -> Union[None, float]: + if val is None: + return val + + # normalize the value such that it will fall in the range [0, max] + # by subtracting the min + rescaled = val - self.min_val if self.min_val else val + + # normalize the value such that it will fall in the range [0, 1.0] + # by dividing by the max range + max_range = ( + self.max_val - self.min_val + if self.max_val is not None and self.min_val is not None + else 0.0 + ) + rescaled = rescaled / max_range if max_range else rescaled return rescaled - def _set_averages(self): - self._avg_mins = ( - numpy.average([d[0] for d in self._data]).item() if self._data else 0.0 - ) - self._avg_ranges = ( - numpy.average([d[2] for d in self._data]).item() if self._data else 0.0 - ) + def add_rescale_series(self, min_series_val: float, max_series_val: float): + if self.min_val is None or min_series_val < self.min_val: + self.min_val = min_series_val + if self.max_val is None or max_series_val > self.max_val: + self.max_val = max_series_val -class PruningNodeSeriesSmoothingType(Enum): + +class _PruningNodeSeriesValue: """ - Enum for how to smooth a node's pruning estimations / measurements + Simple data object to map the number of sparse params and the defined sparsity + at that level to a series value """ - none = "none" - maximum = "maximum" - minimum = "minimum" + def __init__( + self, + sparse_params: int, + sparsity: float, + value: float, + node_id: Union[str, None] = None, + ): + self.sparse_params = sparse_params + self.sparsity = sparsity + self.value = value + self.node_id = node_id + + def __repr__(self): + return ( + f"_PruningNodeSeriesValue(sparse_params={self.sparse_params}, " + f"sparsity={self.sparsity}, value={self.value}, node_id={self.node_id})" + ) -class PruningNodeSeries(object): +class _PruningNodeSeries(object): """ - Series of measurements / estimations for a pruning node - - :param measurements: a dictionary containing the measurements for the series - :param baseline_measurement_key: the baseline key that should be used - for series comparisons - :param smoothing_type: the smoothing type to apply to the measurements; - useful for smoothing out sensitivity measurements for pruning - :param invert_sensitivity: True to invert the sensitivity values, - False otherwise + Object to contain a series of data that allows estimations of values + and cleansing of the data for optimization tasks. """ def __init__( self, - measurements: Union[None, Dict[str, float]], - baseline_measurement_key: str, - smoothing_type: PruningNodeSeriesSmoothingType, - invert_sensitivity: bool, + sparsity_measurements: Union[None, Dict[str, float]], + baseline_key: str, + num_params: int, + increasing: bool, ): - self._baseline = None # type: Union[None, float] - self._measurements = [] # type: List[Tuple[float, float]] - self._measurements_smoothed = [] # type: List[Tuple[float, float]] - self._smoothing_type = smoothing_type - self._set_measurements(measurements, baseline_measurement_key) - self._invert_sensitivity = invert_sensitivity - - @property - def baseline(self) -> Union[None, float]: - """ - :return: the baseline measurement value - """ - return self._baseline - - @property - def measurements(self) -> List[Tuple[float, float]]: - """ - :return: the list of measurement tuples (sparsity, measurement) - """ - return self._measurements - - @property - def measurements_smoothed(self) -> List[Tuple[float, float]]: - """ - :return: the list of measurement tuples (sparsity, measurement) - after applying the smoothing type - """ - return self._measurements_smoothed - - @property - def smoothing_type(self) -> PruningNodeSeriesSmoothingType: - """ - :return: the smoothing type to apply to the measurements; - useful for smoothing out sensitivity measurements for pruning - """ - return self._smoothing_type - - @property - def invert_sensitivity(self) -> bool: - """ - :return: True to invert the sensitivity values, - False otherwise - """ - return self._invert_sensitivity - - def sparse( - self, sparsity: Union[None, float], smooth: bool = False - ) -> Union[None, float]: - """ - :param sparsity: the sparsity to get a measurement for - :param smooth: True to pull from the measurements_smoothed, - False otherwise - :return: the measurement at the given sparsity - """ - if not self._measurements: + self.sparsity_measurements = sparsity_measurements + self.baseline_key = baseline_key + self.num_params = num_params + self.increasing = increasing + + self.value_baseline = None # type: Union[None, float] + self.value_min = None # type: Union[None, float] + self.value_max = None # type: Union[None, float] + self.value_smoothed_min = None # type: Union[None, float] + self.value_smoothed_max = None # type: Union[None, float] + self.value_optimized_min = None # type: Union[None, float] + self.value_optimized_max = None # type: Union[None, float] + + self.data = [] # type: List[_PruningNodeSeriesValue] + self.data_smoothed = [] # type: List[_PruningNodeSeriesValue] + self.data_optimization = [] # type: List[_PruningNodeSeriesValue] + self._set_data() + + def estimated_value(self, sparsity: Union[None, float]) -> Union[None, float]: + if not self.data: return None if not sparsity: - return self.baseline + return self.value_baseline - _, interpolated = interpolate_list_linear( - self._measurements if not smooth else self._measurements_smoothed, sparsity - )[0] + measurements = [(val.sparsity, val.value) for val in self.data] + _, interpolated = interpolate_list_linear(measurements, sparsity)[0] return interpolated - def sparse_measurements( - self, smooth: bool = False - ) -> List[Tuple[float, Union[None, float]]]: - """ - :param smooth: True to pull from the measurements_smoothed, - False otherwise - :return: a list of tuples containing the sparsity from - 0 to 99% at increments of 1% and the associated measurements - """ - sparsities = [v / 100.0 for v in range(100)] - - if not self._measurements: - return [v for v in zip(sparsities, [None for _ in range(len(sparsities))])] - - interpolated = interpolate_list_linear( - self._measurements if not smooth else self._measurements_smoothed, - sparsities, - ) - - return interpolated - - def sparse_gain( - self, sparsity: Union[None, float], smooth: bool = False - ) -> Union[None, float]: + def estimated_gain(self, sparsity: Union[None, float]) -> Union[None, float]: """ :param sparsity: the sparsity to get the gain value for - :param smooth: True to pull from the measurements_smoothed, - False otherwise :return: the ratio of the predicted value at the given sparsity as compared with the baseline value """ - if not self._measurements: + + if not self.data: return None if not sparsity: return 1.0 - sparse = self.sparse(sparsity, smooth) + value = self.estimated_value(sparsity) - if not sparse or not self._baseline: + if not value or not self.value_baseline: return 0.0 - return self._baseline / sparse + return self.value_baseline / value - def sparse_sensitivity( - self, sparsity: Union[None, float], smooth: bool = False - ) -> Union[None, float]: + def estimated_sensitivity(self, sparsity: Union[None, float]) -> Union[None, float]: """ :param sparsity: the sparsity to get the sensitivity value for - :param smooth: True to pull from the measurements_smoothed, - False otherwise :return: the sensitivity comparison (difference) of the measurement at the given sparsity compared with the baseline """ - sparse = self.sparse(sparsity, smooth) - baseline = self.baseline - return PruningNodeSeries._sensitivity(sparse, baseline, self.invert_sensitivity) + if not self.data: + return None - def sparse_sensitivities( - self, smooth: bool = False - ) -> List[Tuple[float, Union[None, float]]]: - """ - :param smooth: True to pull from the measurements_smoothed, - False otherwise - :return: a list of tuples containing the sparsity from - 0 to 99% at increments of 1% and the associated sensitivity value - """ - measurements = self.sparse_measurements(smooth) - baseline = self.baseline + if not sparsity: + return None - return PruningNodeSeries._sensitivities( - measurements, baseline, self.invert_sensitivity - ) + value = self.estimated_value(sparsity) - def _set_measurements( - self, - measurements: Dict[str, float], - baseline_measurement_key: str, - ): - if not measurements: - return + if value is None or self.value_baseline is None: + return None + + # subtract from baseline if decreasing so lower values = more sensitive: perf + # subtract from sparse val if increasing so higher values = more sensitive: loss - meas_min = None - meas_max = None + return ( + (self.value_baseline - value) + if not self.increasing + else (value - self.value_baseline) + ) - for key, meas in measurements.items(): - meas_smoothed = meas + def costs( + self, rescaler: _PruningPointRescaler, use_max: bool + ) -> List[Tuple[float, Union[None, float]]]: + """ + :param rescaler: the rescaler to use to rescale the optimized values + to the [0.0, 1.0] range + :param use_max: True to use the max value for all measurements, + False to interpolate between. Max value is used for FLOPS performance + because the slopes for smaller convs are less and therefore prioritized + improperly by optimization + :return: a list of tuples containing (sparsity, cost) + """ + if not self.data_optimization: + return [(float(index) / 100.0, None) for index in range(100)] - if key == baseline_measurement_key: - self._baseline = meas - else: - if meas_min is None or meas < meas_min: - meas_min = meas + def _get_val(v: float) -> float: + return rescaler(v if not use_max else self.value_optimized_max) - if meas_max is None or meas < meas_max: - meas_max = meas + measurements = [ + (val.sparsity, _get_val(val.value)) for val in self.data_optimization + ] - if ( - self._smoothing_type == PruningNodeSeriesSmoothingType.minimum - and meas > meas_min - ): - meas_smoothed = meas_min + # creates the data at increments of 1% levels from 0 to 99 + costs = interpolate_list_linear( + measurements, [float(index) / 100.0 for index in range(100)] + ) - if ( - self._smoothing_type == PruningNodeSeriesSmoothingType.maximum - and meas < meas_max - ): - meas_smoothed = meas_max + return costs - self._measurements.append((float(key), meas)) - self._measurements_smoothed.append((float(key), meas_smoothed)) + def _set_data(self): + if not self.sparsity_measurements: + return - self._measurements.sort(key=lambda x: x[0]) - self._measurements_smoothed.sort(key=lambda x: x[0]) + # smoothed values will always keep with the trend given + # if set as increasing, value will always be equal to or greater than last value + # if set as decreasing, value will always be equal to or less than last value + smoothed_val = None - @staticmethod - def _sensitivity( - sparse: Union[float, None], baseline: Union[float, None], invert: bool - ) -> Union[float, None]: - if sparse is None or baseline is None: - return None + for key, meas in self.sparsity_measurements.items(): + if key == self.baseline_key: + self.value_baseline = meas - sensitivity = (baseline - sparse) if invert else (sparse - baseline) + sparsity = float(key) + sparse_params = int(sparsity * self.num_params) + self.data.append(_PruningNodeSeriesValue(sparse_params, sparsity, meas)) - return sensitivity + if ( + smoothed_val is None + or (self.increasing and meas >= smoothed_val) + or (not self.increasing and meas <= smoothed_val) + ): + smoothed_val = meas - @staticmethod - def _sensitivities( - measurements: List[Tuple[float, Union[float, None]]], - baseline: Union[float, None], - invert: bool, - ): - sensitivities = [] + self.data_smoothed.append( + _PruningNodeSeriesValue(sparse_params, sparsity, smoothed_val) + ) - for (sparsity, measurement) in measurements: - sensitivities.append( - ( - sparsity, - PruningNodeSeries._sensitivity(measurement, baseline, invert), - ) + self.data.sort(key=lambda x: x.sparse_params) + self.data_smoothed.sort(key=lambda x: x.sparse_params) + self.value_min = min([val.value for val in self.data]) + self.value_max = max([val.value for val in self.data]) + self.value_smoothed_min = min([val.value for val in self.data_smoothed]) + self.value_smoothed_max = max([val.value for val in self.data_smoothed]) + + for val in self.data_smoothed: + optimize_value = val.value + + if not self.increasing: + # need to invert the graph so the values are always increasing + # for the optimization algorithms. + # do this by reformulating as the difference from the smoothed max + # ex: -x^2 + 5 => 5 - (-x^2 + 5) + optimize_value = self.value_smoothed_max - optimize_value + + self.data_optimization.append( + _PruningNodeSeriesValue(val.sparse_params, val.sparsity, optimize_value) ) - return sensitivities + self.data_optimization.sort(key=lambda x: x.sparse_params) + self.value_optimized_min = min([val.value for val in self.data_optimization]) + self.value_optimized_max = max([val.value for val in self.data_optimization]) -
    [docs]class PruningNodeEvaluator(object): +class _PruningNodeEvaluator(object): """ Evaluator for a model's node for pruning. Able to estimate the effect of pruning on the node for performance, loss, etc @@ -528,135 +481,95 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    perf_analysis: Union[None, Dict], loss_analysis: Union[None, Dict], ): - self._node_id = node_id - self._analysis = PruningNodeEvaluator._extract_node_analysis( + self.node_id = node_id + self.analysis = _PruningNodeEvaluator._extract_node_analysis( node_id, model_analysis ) - self._perf_analysis = PruningNodeEvaluator._extract_node_perf_analysis( + self.num_params = self.analysis["params"] + self.num_prunable_params = self.analysis["prunable_params"] + self.num_flops = self.analysis["flops"] + + self.analysis_perf = _PruningNodeEvaluator._extract_node_perf_analysis( node_id, perf_analysis ) - self._loss_analysis = PruningNodeEvaluator._extract_node_loss_analysis( + self.analysis_loss = _PruningNodeEvaluator._extract_node_loss_analysis( node_id, loss_analysis ) - self._params = PruningNodeSeries( - measurements=OrderedDict( + self.series_params = _PruningNodeSeries( + sparsity_measurements=OrderedDict( [ - ("0.0", self._analysis["params"]), - ( - "1.0", - self._analysis["params"] - self._analysis["prunable_params"], - ), + ("0.0", self.num_params), + ("1.0", self.num_params - self.num_prunable_params), ] ), - baseline_measurement_key="0.0", - smoothing_type=PruningNodeSeriesSmoothingType.none, - invert_sensitivity=False, + baseline_key="0.0", + num_params=self.num_params, + increasing=False, ) - self._flops = PruningNodeSeries( - measurements=OrderedDict([("0.0", self._analysis["flops"]), ("1.0", 0.0)]) - if self._analysis["flops"] - else None, - baseline_measurement_key="0.0", - smoothing_type=PruningNodeSeriesSmoothingType.none, - invert_sensitivity=True, + self.series_flops = _PruningNodeSeries( + sparsity_measurements=( + OrderedDict([("0.0", self.num_flops), ("1.0", 0.0)]) + if self.num_flops + else None + ), + baseline_key="0.0", + num_params=self.num_params, + increasing=False, ) - self._performance = PruningNodeSeries( - measurements=self._perf_analysis["measurements"] - if self._perf_analysis - else None, - baseline_measurement_key=self._perf_analysis["baseline_measurement_key"] - if self._perf_analysis - else None, - smoothing_type=PruningNodeSeriesSmoothingType.minimum, - invert_sensitivity=True, + self.series_perf = _PruningNodeSeries( + sparsity_measurements=( + self.analysis_perf["measurements"] if self.analysis_perf else None + ), + baseline_key=( + self.analysis_perf["baseline_measurement_key"] + if self.analysis_perf + else None + ), + num_params=self.num_params, + increasing=False, ) - self._loss = PruningNodeSeries( - measurements=self._loss_analysis["measurements"] - if self._loss_analysis - else None, - baseline_measurement_key=self._loss_analysis["baseline_measurement_key"] - if self._loss_analysis - else None, - smoothing_type=PruningNodeSeriesSmoothingType.maximum, - invert_sensitivity=False, + self.series_loss = _PruningNodeSeries( + sparsity_measurements=( + self.analysis_loss["measurements"] if self.analysis_loss else None + ), + baseline_key=( + self.analysis_loss["baseline_measurement_key"] + if self.analysis_loss + else None + ), + num_params=self.num_params, + increasing=True, ) - self._loss_estimated = PruningNodeSeries( - OrderedDict( + self.series_loss_est = _PruningNodeSeries( + sparsity_measurements=OrderedDict( [ ("0.0", 0.0), - ("1.0", self._analysis["prunable_equation_sensitivity"]), + ("1.0", self.analysis["prunable_equation_sensitivity"]), ] ), - baseline_measurement_key="0.0", - smoothing_type=PruningNodeSeriesSmoothingType.none, - invert_sensitivity=False, + baseline_key="0.0", + num_params=self.num_params, + increasing=True, ) @property - def node_id(self) -> str: - """ - :return: id of the node the evaluator is created for - """ - return self._node_id - - @property - def prunable_params(self) -> Union[int, None]: - """ - :return: number of prunable params in the node - """ - return self._analysis["prunable_params"] - - @property - def params(self) -> PruningNodeSeries: + def available_series_perf(self) -> _PruningNodeSeries: """ - :return: the params pruning series for the node - """ - return self._params - - @property - def flops(self) -> PruningNodeSeries: - """ - :return: the flops pruning series for the node - """ - return self._flops - - @property - def performance(self) -> PruningNodeSeries: - """ - :return: the performance timings pruning series for the node - """ - return self._performance - - @property - def performance_metric(self) -> PruningNodeSeries: - """ - :return: the available performance metric, + :return: the available performance series, falls back on flops if perf sensitivity is not available """ - return self.performance if self._perf_analysis is not None else self.flops + return self.series_perf if self.analysis_perf is not None else self.series_flops @property - def loss(self) -> PruningNodeSeries: + def available_series_loss(self) -> _PruningNodeSeries: """ - :return: the loss measurements pruning series for the node - """ - return self._loss - - @property - def loss_estimated(self) -> PruningNodeSeries: - """ - :return: the estimated loss measurements pruning series for the node - """ - return self._loss_estimated - - @property - def loss_metric(self) -> PruningNodeSeries: - """ - :return: the available loss metric, + :return: the available loss series, falls back on estimated loss if loss sensitivity is not available """ - return self.loss if self._loss_analysis is not None else self.loss_estimated + return ( + self.series_loss if self.analysis_loss is not None else self.series_loss_est + ) @property def structurally_pruned(self) -> bool: @@ -665,12 +578,12 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    False otherwise """ attributes = ( - self._analysis["attributes"] if "attributes" in self._analysis else None + self.analysis["attributes"] if "attributes" in self.analysis else None ) return attributes and "group" in attributes and attributes["group"] > 1 -
    [docs] def eval_dict( + def eval_dict( self, sparsity: Union[float, None], baseline_sparsity: Union[float, None], @@ -678,11 +591,11 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    ) -> Dict[str, Any]: sensitivity_sparsities = [0.0, 0.2, 0.4, 0.6, 0.8, 0.9, 0.95, 0.99] perf_sensitivities = [ - (sparsity, self.performance_metric.sparse_sensitivity(sparsity)) + (sparsity, self.available_series_perf.estimated_sensitivity(sparsity)) for sparsity in sensitivity_sparsities ] loss_sensitivities = [ - (sparsity, self.loss_metric.sparse_sensitivity(sparsity)) + (sparsity, self.available_series_loss.estimated_sensitivity(sparsity)) for sparsity in sensitivity_sparsities ] @@ -693,24 +606,24 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    "perf_sensitivities": perf_sensitivities, "loss_sensitivities": loss_sensitivities, "est_recovery": self.recovery(sparsity, baseline_sparsity), - "est_loss_sensitivity": self.loss_metric.sparse_sensitivity( + "est_loss_sensitivity": self.available_series_loss.estimated_sensitivity( PruningModelEvaluator.EVAL_SENSITIVITY_SPARSITY, ), - "est_perf_sensitivity": self.performance_metric.sparse_sensitivity( + "est_perf_sensitivity": self.available_series_perf.estimated_sensitivity( PruningModelEvaluator.EVAL_SENSITIVITY_SPARSITY, ), - "est_time": self.performance.sparse(sparsity), - "est_time_baseline": self.performance.baseline, - "est_time_gain": self.performance.sparse_gain(sparsity), - "params_baseline": self.params.baseline, - "params": self.params.sparse(sparsity), - "compression": self.params.sparse_gain(sparsity), - "flops_baseline": self.flops.baseline, - "flops": self.flops.sparse(sparsity), - "flops_gain": self.flops.sparse_gain(sparsity), - }
    - -
    [docs] def recovery( + "est_time": self.series_perf.estimated_value(sparsity), + "est_time_baseline": self.series_perf.value_baseline, + "est_time_gain": self.series_perf.estimated_gain(sparsity), + "params_baseline": self.series_params.value_baseline, + "params": self.series_params.estimated_value(sparsity), + "compression": self.series_params.estimated_gain(sparsity), + "flops_baseline": self.series_flops.value_baseline, + "flops": self.series_flops.estimated_value(sparsity), + "flops_gain": self.series_flops.estimated_gain(sparsity), + } + + def recovery( self, sparsity: Union[float, None], baseline_sparsity: Union[float, None], @@ -721,8 +634,9 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    :return: the estimated confidence of recovery for the given sparsity as compared to the baseline """ - baseline = self.loss_metric.sparse_sensitivity(baseline_sparsity) - estimated = self.loss_metric.sparse_sensitivity(sparsity) + + baseline = self.available_series_loss.estimated_sensitivity(baseline_sparsity) + estimated = self.available_series_loss.estimated_sensitivity(sparsity) if baseline == estimated or not sparsity: # baseline equals estimated or layer is not pruned @@ -740,14 +654,14 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    # less than 1.0 gives a worse chance of recovery # greater than 1.0 gives a better chance of recovery - return (baseline - estimated) / baseline + 1.0
    + return (baseline - estimated) / baseline + 1.0 -
    [docs] def sparse_costs( + def optimization_costs( self, balance_perf_loss: float, - perf_rescaler: ValueRescaler, - loss_rescaler: ValueRescaler, - ) -> List[Tuple[str, float, Union[float, None]]]: + perf_rescaler: _PruningPointRescaler, + loss_rescaler: _PruningPointRescaler, + ) -> List[_PruningNodeSeriesValue]: """ :param balance_perf_loss: the weight [0.0, 1.0] for balancing perf vs loss; 0.0 for all performance, 1.0 for all loss @@ -758,38 +672,22 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    :return: a list of tuples containing the sparsities from 0% to 99% and their associated cost for pruning the node to that sparsity """ - perfs = self.performance_metric.sparse_sensitivities(True) - losses = self.loss_metric.sparse_sensitivities(True) + loss_costs = self.available_series_loss.costs(loss_rescaler, use_max=False) + perf_costs = self.available_series_perf.costs( + perf_rescaler, + use_max=self.available_series_perf == self.series_flops, + ) costs = [] - for ((sparsity, perf), (_, loss)) in zip(perfs, losses): - perf = ( - perf_rescaler.rescale(perf) - if perf is not None and perf_rescaler - else perf - ) - loss = ( - loss_rescaler.rescale(loss) - if loss is not None and loss_rescaler - else loss - ) - - if balance_perf_loss <= 0.0: - # all performance - cost = perf - elif balance_perf_loss >= 1.0: - # all loss - cost = loss - else: - cost = ( - balance_perf_loss * loss + (1.0 - balance_perf_loss) * perf - if loss is not None and perf is not None - else None + for ((sparsity, loss_cost), (_, perf_cost)) in zip(loss_costs, perf_costs): + cost = balance_perf_loss * loss_cost + (1.0 - balance_perf_loss) * perf_cost + costs.append( + _PruningNodeSeriesValue( + round(sparsity * self.num_params), sparsity, cost, self.node_id ) + ) - costs.append((self.node_id, sparsity, cost)) - - return costs
    + return costs @staticmethod def _extract_node_analysis(node_id: str, model_analysis: Dict) -> Dict: @@ -829,7 +727,7 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    if op["id"] == node_id: analysis = op - return analysis
    + return analysis class _PruningNodeSetting(object): @@ -850,7 +748,7 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    :param loss_analysis: loss analysis of the model, if any """ - MAX_NODE_SPARSITY = 0.975 + MAX_NODE_SPARSITY = 0.95 EVAL_SENSITIVITY_SPARSITY = 0.95 def __init__( @@ -873,35 +771,31 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    else None ) - self._nodes = [] # type: List[PruningNodeEvaluator] + self._nodes = [] # type: List[_PruningNodeEvaluator] self._nodes_settings = {} # type: Dict[str, _PruningNodeSetting] - self._perf_rescaler = ValueRescaler() - self._loss_rescaler = ValueRescaler() + self._perf_rescaler = _PruningPointRescaler() + self._loss_rescaler = _PruningPointRescaler() for node in model_analysis["nodes"]: if not node["prunable"]: continue - pruning_node = PruningNodeEvaluator( + pruning_node = _PruningNodeEvaluator( node["id"], model_analysis, perf_analysis, loss_analysis ) self._nodes.append(pruning_node) self._nodes_settings[pruning_node.node_id] = _PruningNodeSetting() - if pruning_node.performance_metric.measurements: - self._perf_rescaler.add_rescale_point( - [ - pruning_node.performance_metric.sparse_sensitivity(0.0, True), - pruning_node.performance_metric.sparse_sensitivity(0.95, True), - ] + if pruning_node.available_series_perf.data: + self._perf_rescaler.add_rescale_series( + pruning_node.available_series_perf.value_optimized_min, + pruning_node.available_series_perf.value_optimized_max, ) - if pruning_node.loss_metric.measurements: - self._loss_rescaler.add_rescale_point( - [ - pruning_node.loss_metric.sparse_sensitivity(0.0, True), - pruning_node.loss_metric.sparse_sensitivity(0.95, True), - ] + if pruning_node.available_series_loss.data: + self._loss_rescaler.add_rescale_series( + pruning_node.available_series_loss.value_optimized_min, + pruning_node.available_series_loss.value_optimized_max, )
    [docs] def eval_baseline(self, baseline_sparsity: float): @@ -911,12 +805,8 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    :param baseline_sparsity: the baseline_sparsity to use and evaluate with """ - node_sparsities = PruningModelEvaluator._optimize_nodes_sparsity( - self._nodes, - baseline_sparsity, - balance_perf_loss=1.0, - perf_rescaler=self._perf_rescaler, - loss_rescaler=self._loss_rescaler, + node_sparsities = self._get_nodes_optimized_sparsities( + baseline_sparsity, balance_perf_loss=1.0, settings=None ) for node_id, sparsity in node_sparsities.items(): @@ -929,40 +819,12 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    :param settings: the pruning settings to use and evaluate with """ - node_sparsities = PruningModelEvaluator._optimize_nodes_sparsity( - self._nodes, - settings.sparsity, - balance_perf_loss=settings.balance_perf_loss, - perf_rescaler=self._perf_rescaler, - loss_rescaler=self._loss_rescaler, + node_sparsities = self._get_nodes_optimized_sparsities( + settings.sparsity, settings.balance_perf_loss, settings ) for node in self._nodes: - sparsity = node_sparsities[node.node_id] - est_perf_gain = node.performance_metric.sparse_gain(sparsity) - est_recovery = node.recovery( - sparsity, self._nodes_settings[node.node_id].baseline_sparsity - ) - - if sparsity is None or ( - ( - settings.filter_min_sparsity - and sparsity < settings.filter_min_sparsity - ) - or ( - settings.filter_min_perf_gain - and est_perf_gain is not None - and est_perf_gain < settings.filter_min_perf_gain - ) - or ( - settings.filter_min_recovery - and est_recovery is not None - and est_recovery < settings.filter_min_recovery - ) - ): - sparsity = None - - self._nodes_settings[node.node_id].sparsity = sparsity + self._nodes_settings[node.node_id].sparsity = node_sparsities[node.node_id] self._nodes_settings[node.node_id].overridden = False
    [docs] def apply_node_overrides(self, node_overrides: List[Dict[str, Any]]): @@ -1051,12 +913,12 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    model_values = { "est_recovery": numpy.average(recoveries).item() if recoveries else None, - "est_loss_sensitivity": numpy.average(loss_sensitivities).item() - if loss_sensitivities - else None, - "est_perf_sensitivity": numpy.average(perf_sensitivities).item() - if perf_sensitivities - else None, + "est_loss_sensitivity": ( + numpy.average(loss_sensitivities).item() if loss_sensitivities else None + ), + "est_perf_sensitivity": ( + numpy.average(perf_sensitivities).item() if perf_sensitivities else None + ), "est_time": est_time, "est_time_baseline": self._baseline_time, "est_time_gain": est_time_gain, @@ -1070,62 +932,119 @@

    Source code for sparsify.blueprints.utils.projects_optimizations_pruning

    return node_values, model_values
    - @staticmethod - def _optimize_nodes_sparsity( - nodes: List[PruningNodeEvaluator], + def _get_nodes_optimized_sparsities( + self, sparsity: float, balance_perf_loss: float, - perf_rescaler: ValueRescaler, - loss_rescaler: ValueRescaler, - ) -> Dict[str, float]: - sparsities = {} - nodes_costs = {} - costs = [] + settings: Union[None, PruningSettings], + ) -> Dict[str, Union[float, None]]: + sparsities = {node.node_id: None for node in self._nodes} + nodes_costs = self._optimize_sparsity_get_costs(balance_perf_loss) - for index, node in enumerate(nodes): - sparsities[node.node_id] = None + if not nodes_costs: + return sparsities - if index == 0 or node.structurally_pruned: - # skip the first node in a graph since this is almost always ' - # one of the most sensitive for loss. - # additionally skip any structurally pruned nodes (group convolutions) - # since those already have removed connections - continue + self._optimize_sparsity_update_from_costs(sparsities, nodes_costs, sparsity) + self._optimize_sparsity_update_from_restrictions(sparsities, settings) - costs = node.sparse_costs(balance_perf_loss, perf_rescaler, loss_rescaler) + return sparsities - if costs and costs[0][2] is not None: - nodes_costs[node.node_id] = costs + def _optimize_sparsity_get_costs( + self, balance_perf_loss: float + ) -> List[_PruningNodeSeriesValue]: + nodes_costs = [] - if not nodes_costs: - return sparsities + for index, node in enumerate(self._nodes): + costs = node.optimization_costs( + balance_perf_loss, + self._perf_rescaler, + self._loss_rescaler, + ) + + # make sure we have sensitivity data for the node to add for consideration + if costs and costs[-1].value is not None: + nodes_costs.extend(costs) - nodes_costs_indices = {node_id: 0 for node_id in nodes_costs.keys()} - available_steps = len(nodes_costs) * len(costs) - num_optim_steps = round(available_steps * sparsity) + return nodes_costs - for step in range(num_optim_steps): - smallest_id = None - smallest_cost = None + def _optimize_sparsity_update_from_costs( + self, + sparsities: Dict[str, Union[float, None]], + costs: List[_PruningNodeSeriesValue], + sparsity: float, + ): + # all costs are assumed to be on the same scale across layers, + # normalized, and always increasing. + # therefore we can simply sort by the values to get the desired sparsity dist + costs.sort(key=lambda c: c.value) + total_params = sum([node.num_params for node in self._nodes]) + target_sparse_params = sparsity * total_params + sparse_params = defaultdict(lambda: 0) + + for index, cost in enumerate(costs): + sparse_params[cost.node_id] = cost.sparse_params + current_sparse_params = sum(sparse_params.values()) + + if current_sparse_params > target_sparse_params: + break - for node_id, cost_index in nodes_costs_indices.items(): - _, cost_sparsity, cost = nodes_costs[node_id][cost_index + 1] + # if we're not above our sparse param target, set the sparsity for the node + sparsities[cost.node_id] = cost.sparsity - if cost_sparsity < PruningModelEvaluator.MAX_NODE_SPARSITY and ( - smallest_cost is None or cost < smallest_cost - ): - smallest_id = node_id - smallest_cost = cost + def _optimize_sparsity_update_from_restrictions( + self, + sparsities: Dict[str, Union[float, None]], + settings: Union[None, PruningSettings], + ): + for index, node in enumerate(self._nodes): + node_id = node.node_id + sparsity = sparsities[node_id] - if smallest_id is None: - break + if sparsity is None: + continue + + # clip the max sparsity for everything + if sparsity > PruningModelEvaluator.MAX_NODE_SPARSITY: + sparsities[node_id] = PruningModelEvaluator.MAX_NODE_SPARSITY + + # if there aren't any pruning settings provided, then don't filter + # the desired sparsities + if settings is None: + continue - nodes_costs_indices[smallest_id] += 1 + if index == 0 or node.structurally_pruned: + # skip the first node in a graph since this is almost always ' + # one of the most sensitive for loss. + # additionally skip any structurally pruned nodes (group convolutions) + # since those already have removed connections + sparsities[node.node_id] = None + continue - for node_id, cost_index in nodes_costs_indices.items(): - sparsities[node_id] = nodes_costs[node_id][cost_index][1] + # if the desired sparsity is too low for any of the filters metrics + # (minimum sparsity, minimum perf gain, minimum recovery) + # then set to None so we don't prune the layer that didn't reach + # a high enough sparsity for the desired effects + baseline_sparsity = self._nodes_settings[node_id].baseline_sparsity + est_perf_gain = node.available_series_perf.estimated_gain(sparsity) + est_recovery = node.recovery(sparsity, baseline_sparsity) - return sparsities
    + if ( + ( + settings.filter_min_sparsity + and sparsities[node.node_id] < settings.filter_min_sparsity + ) + or ( + settings.filter_min_perf_gain + and est_perf_gain is not None + and est_perf_gain < settings.filter_min_perf_gain + ) + or ( + settings.filter_min_recovery + and est_recovery is not None + and est_recovery < settings.filter_min_recovery + ) + ): + sparsities[node_id] = None
    diff --git a/sparsify/_modules/sparsify/log.html b/sparsify/_modules/sparsify/log.html index 5612d2dfa4b..48900613306 100644 --- a/sparsify/_modules/sparsify/log.html +++ b/sparsify/_modules/sparsify/log.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/base.html b/sparsify/_modules/sparsify/models/base.html index 11b20f45689..7b18b70800b 100644 --- a/sparsify/_modules/sparsify/models/base.html +++ b/sparsify/_modules/sparsify/models/base.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -265,7 +266,13 @@

    Source code for sparsify.models.base

     
         class Meta(object):
             database = database
    -        storage = storage
    + storage = storage + +
    [docs] def refresh(self): + """ + Refresh the data for the model instance from the DB + """ + return type(self).get_by_id(self._pk)
    [docs]class BaseCreatedModifiedModel(BaseModel): diff --git a/sparsify/_modules/sparsify/models/jobs.html b/sparsify/_modules/sparsify/models/jobs.html index ca01d5fe8ae..e3b8c3fab24 100644 --- a/sparsify/_modules/sparsify/models/jobs.html +++ b/sparsify/_modules/sparsify/models/jobs.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -197,7 +198,7 @@

    Source code for sparsify.models.jobs

     import uuid
     from enum import Enum
     
    -from peewee import CharField, DateTimeField, Field, TextField
    +from peewee import BooleanField, CharField, DateTimeField, Field, TextField
     from playhouse.sqlite_ext import JSONField
     
     from sparsify.models.base import BaseModel
    @@ -247,6 +248,7 @@ 

    Source code for sparsify.models.jobs

         modified = DateTimeField(default=datetime.datetime.now)
         type_ = CharField()
         worker_args = JSONField(null=True, default=None)
    +    worker_ack = BooleanField(default=False)
         status = JobStatusField(default=JobStatus.pending)
         progress = JSONField(null=True, default=None)
         error = TextField(null=True)
    diff --git a/sparsify/_modules/sparsify/models/projects.html b/sparsify/_modules/sparsify/models/projects.html
    index 8d4f82c23a5..202ae300edb 100644
    --- a/sparsify/_modules/sparsify/models/projects.html
    +++ b/sparsify/_modules/sparsify/models/projects.html
    @@ -104,10 +104,11 @@
     
    -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/projects_benchmark.html b/sparsify/_modules/sparsify/models/projects_benchmark.html index 39c04fca8bd..84de54753ea 100644 --- a/sparsify/_modules/sparsify/models/projects_benchmark.html +++ b/sparsify/_modules/sparsify/models/projects_benchmark.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/projects_data.html b/sparsify/_modules/sparsify/models/projects_data.html index 7449add7bfc..b00adec9331 100644 --- a/sparsify/_modules/sparsify/models/projects_data.html +++ b/sparsify/_modules/sparsify/models/projects_data.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/projects_model.html b/sparsify/_modules/sparsify/models/projects_model.html index c04483d29ec..135a108b741 100644 --- a/sparsify/_modules/sparsify/models/projects_model.html +++ b/sparsify/_modules/sparsify/models/projects_model.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/projects_optimizations.html b/sparsify/_modules/sparsify/models/projects_optimizations.html index 5e9963da907..cb36247b05b 100644 --- a/sparsify/_modules/sparsify/models/projects_optimizations.html +++ b/sparsify/_modules/sparsify/models/projects_optimizations.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/projects_profiles.html b/sparsify/_modules/sparsify/models/projects_profiles.html index f979679b87c..515aec45168 100644 --- a/sparsify/_modules/sparsify/models/projects_profiles.html +++ b/sparsify/_modules/sparsify/models/projects_profiles.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/models/utils.html b/sparsify/_modules/sparsify/models/utils.html index 3e1a4aed630..8fb24c0990e 100644 --- a/sparsify/_modules/sparsify/models/utils.html +++ b/sparsify/_modules/sparsify/models/utils.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/errors.html b/sparsify/_modules/sparsify/schemas/errors.html index da9126a4420..d7af42bca68 100644 --- a/sparsify/_modules/sparsify/schemas/errors.html +++ b/sparsify/_modules/sparsify/schemas/errors.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/helpers.html b/sparsify/_modules/sparsify/schemas/helpers.html index 245dd98149b..d7c797fa882 100644 --- a/sparsify/_modules/sparsify/schemas/helpers.html +++ b/sparsify/_modules/sparsify/schemas/helpers.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/jobs.html b/sparsify/_modules/sparsify/schemas/jobs.html index c58271bf111..7b690582215 100644 --- a/sparsify/_modules/sparsify/schemas/jobs.html +++ b/sparsify/_modules/sparsify/schemas/jobs.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/model_repo.html b/sparsify/_modules/sparsify/schemas/model_repo.html index d16d4041168..ca210f5a83f 100644 --- a/sparsify/_modules/sparsify/schemas/model_repo.html +++ b/sparsify/_modules/sparsify/schemas/model_repo.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects.html b/sparsify/_modules/sparsify/schemas/projects.html index 54d1d73d819..91a2e1fdcef 100644 --- a/sparsify/_modules/sparsify/schemas/projects.html +++ b/sparsify/_modules/sparsify/schemas/projects.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects_benchmarks.html b/sparsify/_modules/sparsify/schemas/projects_benchmarks.html index 8eca52664e9..496a90f7202 100644 --- a/sparsify/_modules/sparsify/schemas/projects_benchmarks.html +++ b/sparsify/_modules/sparsify/schemas/projects_benchmarks.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects_data.html b/sparsify/_modules/sparsify/schemas/projects_data.html index 7da5ae068d5..31cb38429fe 100644 --- a/sparsify/_modules/sparsify/schemas/projects_data.html +++ b/sparsify/_modules/sparsify/schemas/projects_data.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects_model.html b/sparsify/_modules/sparsify/schemas/projects_model.html index d22608f6d7a..cedd303d456 100644 --- a/sparsify/_modules/sparsify/schemas/projects_model.html +++ b/sparsify/_modules/sparsify/schemas/projects_model.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects_optimizations.html b/sparsify/_modules/sparsify/schemas/projects_optimizations.html index 6eb7f668a83..248111a8960 100644 --- a/sparsify/_modules/sparsify/schemas/projects_optimizations.html +++ b/sparsify/_modules/sparsify/schemas/projects_optimizations.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/projects_profiles.html b/sparsify/_modules/sparsify/schemas/projects_profiles.html index 22f501bb1f4..46eea9c08c6 100644 --- a/sparsify/_modules/sparsify/schemas/projects_profiles.html +++ b/sparsify/_modules/sparsify/schemas/projects_profiles.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/schemas/system.html b/sparsify/_modules/sparsify/schemas/system.html index 6b47432a5d1..8e0415a307c 100644 --- a/sparsify/_modules/sparsify/schemas/system.html +++ b/sparsify/_modules/sparsify/schemas/system.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/_modules/sparsify/utils/system.html b/sparsify/_modules/sparsify/utils/system.html index 10d95ef9ce8..904afc67cd7 100644 --- a/sparsify/_modules/sparsify/utils/system.html +++ b/sparsify/_modules/sparsify/utils/system.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -267,8 +268,12 @@

    Source code for sparsify.utils.system

         :return: a dictionary containing the version information of sparseml,
             deepsparse, onnxruntime, and onnx if installed.
         """
    -    sparseml_version = _get_package_version("sparseml")
    -    deepsparse_version = _get_package_version("deepsparse")
    +    sparseml_version = _get_package_version("sparseml") or _get_package_version(
    +        "sparseml-nightly"
    +    )
    +    deepsparse_version = _get_package_version("deepsparse") or _get_package_version(
    +        "deepsparse-nightly"
    +    )
         onnxruntime_version = _get_package_version("onnxruntime")
         onnx_version = _get_package_version("onnx")
     
    diff --git a/sparsify/_modules/sparsify/workers/base.html b/sparsify/_modules/sparsify/workers/base.html
    index 36a407eb1f4..f4a41aa305c 100644
    --- a/sparsify/_modules/sparsify/workers/base.html
    +++ b/sparsify/_modules/sparsify/workers/base.html
    @@ -104,10 +104,11 @@
     
    -

    Help and Support

    +

    Help

    @@ -196,10 +197,10 @@

    Source code for sparsify.workers.base

     from typing import Any, Dict, Iterator
     
     
    -__all__ = ["JobWorkerRegistryHolder", "BaseJobWorker"]
    +__all__ = ["JobWorkerRegistry", "JobWorker"]
     
     
    -
    [docs]class JobWorkerRegistryHolder(type): +
    [docs]class JobWorkerRegistry(type): """ Registry class for handling and storing BaseJobWorker sub class instances. All subclasses are added to the the REGISTRY property @@ -211,10 +212,17 @@

    Source code for sparsify.workers.base

             new_cls = type.__new__(cls, name, bases, attrs)
             cls.REGISTRY[new_cls.__name__] = new_cls
     
    -        return new_cls
    + return new_cls +
    [docs] @staticmethod + def create_worker(job): + cls = JobWorkerRegistry.REGISTRY[job.type_] + worker = cls(job.job_id, job.project_id, **job.worker_args) -
    [docs]class BaseJobWorker(object, metaclass=JobWorkerRegistryHolder): + return worker
    + + +
    [docs]class JobWorker(object, metaclass=JobWorkerRegistry): """ The base job worker instance all job workers must extend @@ -222,14 +230,14 @@

    Source code for sparsify.workers.base

         :param project_id: the id of the project the job belongs to
         """
     
    -
    [docs] @classmethod +
    [docs] @classmethod def get_type(cls) -> str: """ :return: the type of job worker """ return cls.__name__
    -
    [docs] @classmethod +
    [docs] @classmethod @abstractmethod def format_args(cls, **kwargs) -> Dict[str, Any]: """ @@ -259,7 +267,7 @@

    Source code for sparsify.workers.base

             """
             return self._project_id
     
    -
    [docs] @abstractmethod +
    [docs] @abstractmethod def run(self) -> Iterator[Dict[str, Any]]: """ Perform the work for the job. diff --git a/sparsify/_modules/sparsify/workers/base_manager.html b/sparsify/_modules/sparsify/workers/base_manager.html deleted file mode 100644 index dcae6baf591..00000000000 --- a/sparsify/_modules/sparsify/workers/base_manager.html +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - sparsify.workers.base_manager — Sparsify 0.1.0 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
      - -
    • »
    • - -
    • Module code »
    • - -
    • sparsify.workers.base_manager
    • - - -
    • - -
    • - -
    - - -
    -
    -
    -
    - -

    Source code for sparsify.workers.base_manager

    -# Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
    -#
    -# Licensed under the Apache License, Version 2.0 (the "License");
    -# you may not use this file except in compliance with the License.
    -# You may obtain a copy of the License at
    -#
    -#    http://www.apache.org/licenses/LICENSE-2.0
    -#
    -# Unless required by applicable law or agreed to in writing,
    -# software distributed under the License is distributed on an "AS IS" BASIS,
    -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -# See the License for the specific language governing permissions and
    -# limitations under the License.
    -
    -"""
    -Code related to managing jobs in the server
    -"""
    -
    -import logging
    -import threading
    -from typing import Union
    -
    -from sparseml.utils import Singleton
    -from sparsify.models import Job, JobStatus, database
    -from sparsify.workers.base import JobWorkerRegistryHolder
    -from sparsify.workers.base_wrapper import JobWorkerWrapper
    -
    -
    -__all__ = ["JobNotFoundError", "JobCancelationFailureError", "JobWorkerManager"]
    -
    -
    -_LOGGER = logging.getLogger(__name__)
    -
    -
    -
    [docs]class JobNotFoundError(Exception): - """ - Error raised if a job is not found in the database - """ - - def __init__(self, *args: object) -> None: - super().__init__(*args)
    - - -
    [docs]class JobCancelationFailureError(Exception): - """ - Error raised if a job could not be canceled - """ - - def __init__(self, *args: object) -> None: - super().__init__(*args)
    - - -
    [docs]class JobWorkerManager(object, metaclass=Singleton): - """ - Manager class for handling running job workers in the background. - Only one job worker can run at once. - Once one completes, the next oldest one marked as pending in the db is launched. - """ - - def __init__(self): - self._lock = threading.Lock() - self._current = None # type: Union[None, JobWorkerWrapper] - -
    [docs] def app_startup(self): - """ - Handle app startup to clear uncompleted state for jobs and begin running - """ - - # cancel any jobs that were left in an uncompleted state - with database.connection_context(): - Job.update(status=JobStatus.canceled).where(Job.status == JobStatus.started) - - self.refresh()
    - -
    [docs] def refresh(self): - """ - Refresh the available jobs. - If a new job is marked as pending and no current job is running, - will start the new job. - - Otherwise will exit out without doing anything and - subsequent jobs will be launched after the current one completes. - """ - refresh_thread = threading.Thread(target=self._refresh_worker) - refresh_thread.start()
    - -
    [docs] def cancel_job(self, job_id: str): - """ - Cancel a job with the given job_id so it won't be run. - Blocks until the job can be canceled. - - :param job_id: the job_id to cancel - :raise JobNotFoundError: if the job could not be found in the database - :raise JobCancelationFailureError: if the job could not be canceled - """ - _LOGGER.info("Canceling job with id {}".format(job_id)) - - with self._lock: - if self._current is not None and self._current.job_id == job_id: - self._current.cancel() - - return - - with database.connection_context(): - job = Job.get_or_none(Job.job_id == job_id) - - if job is None: - _LOGGER.error("Could not find job with id {}".format(job_id)) - - raise JobNotFoundError( - "Could not find job with id {}".format(job_id) - ) - - if ( - job.status == JobStatus.error - or job.status == JobStatus.completed - or job.status == JobStatus.canceled - ): - _LOGGER.error( - "Could not cancel job with status {}".format(job.status) - ) - - raise JobCancelationFailureError( - "Job with status {} cannot be canceled".format(job.status) - ) - - job.status = JobStatus.canceled - job.save()
    - - def _refresh_worker(self): - _LOGGER.info("refreshing JobWorkerManager state") - - with self._lock: - if ( - self._current is not None - and not self._current.completed - and not self._current.canceled - and not self._current.errored - ): - return - - self._current = JobWorkerManager._load_next_pending() - - if self._current is not None: - _LOGGER.info( - ( - "found pending job with job_id {} " - "and project_id {}, starting" - ).format( - self._current.worker.job_id, self._current.worker.project_id - ) - ) - self._current.start(self.refresh) - else: - _LOGGER.info("no pending jobs found") - - @staticmethod - def _load_next_pending() -> Union[None, JobWorkerWrapper]: - _LOGGER.debug("loading next pending job for JobWorkerManager") - err_count = 0 - - while err_count < 5: - try: - worker = JobWorkerManager._load_next_pending_helper() - - return worker - except Exception as err: - _LOGGER.error( - ( - "error while loading next pending job " - "for JobWorkerManager {}" - ).format(err) - ) - err_count += 1 - - @staticmethod - def _load_next_pending_helper() -> Union[None, JobWorkerWrapper]: - with database.connection_context(): - next_job = None # type: Union[None, Job] - query = ( - Job.select() - .where(Job.status == JobStatus.pending) - .order_by(Job.created) - .limit(1) - ) - - for job in query: - next_job = job - break - - if next_job is None: - return None - - try: - if next_job.type_ not in JobWorkerRegistryHolder.REGISTRY: - raise ValueError( - "Cannot find job of type {}".format(next_job.type_) - ) - - cls = JobWorkerRegistryHolder.REGISTRY[next_job.type_] - worker = cls(job.job_id, job.project_id, **job.worker_args) - wrapper = JobWorkerWrapper(worker) - - return wrapper - except Exception as err: - next_job.error = str(err) - next_job.status = JobStatus.error - next_job.save() - - raise err
    -
    - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2021 - present / Neuralmagic, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"). - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sparsify/_modules/sparsify/workers/base_wrapper.html b/sparsify/_modules/sparsify/workers/base_wrapper.html deleted file mode 100644 index 3992a473eec..00000000000 --- a/sparsify/_modules/sparsify/workers/base_wrapper.html +++ /dev/null @@ -1,541 +0,0 @@ - - - - - - - - - - sparsify.workers.base_wrapper — Sparsify 0.1.0 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
      - -
    • »
    • - -
    • Module code »
    • - -
    • sparsify.workers.base_wrapper
    • - - -
    • - -
    • - -
    - - -
    -
    -
    -
    - -

    Source code for sparsify.workers.base_wrapper

    -# Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
    -#
    -# Licensed under the Apache License, Version 2.0 (the "License");
    -# you may not use this file except in compliance with the License.
    -# You may obtain a copy of the License at
    -#
    -#    http://www.apache.org/licenses/LICENSE-2.0
    -#
    -# Unless required by applicable law or agreed to in writing,
    -# software distributed under the License is distributed on an "AS IS" BASIS,
    -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -# See the License for the specific language governing permissions and
    -# limitations under the License.
    -
    -"""
    -Code related to wrappers for the job worker to handle running them
    -through the proper flow and update state to the manager and the dataabase.
    -"""
    -
    -import logging
    -import threading
    -import time
    -from typing import Any, Callable, Dict, Union
    -
    -from sparsify.models import Job, JobStatus, database
    -from sparsify.workers.base import BaseJobWorker
    -
    -
    -__all__ = ["JobCancelError", "JobWorkerWrapper"]
    -
    -
    -_LOGGER = logging.getLogger(__name__)
    -
    -
    -
    [docs]class JobCancelError(Exception): - """ - Error raised if a job was canceled - """ - - def __init__(self, *args: object): - super().__init__(*args)
    - - -
    [docs]class JobWorkerWrapper(object): - """ - The wrapper for a job worker to handle running an instance - through the proper flow and update state to the manager and the database. - - :param worker: the worker instance to run - """ - - def __init__(self, worker: BaseJobWorker): - self._worker = worker - self._done_callback = None # type: Union[Callable[[], None], None] - self._lock = threading.Lock() - - self._started = False - self._progress = None - self._progress_time = None - self._completed = False - self._canceling = False - self._canceled = False - self._errored = False - self._error = None - - @property - def job_id(self) -> str: - """ - :return: the job id - """ - return self._worker.job_id - - @property - def worker(self) -> BaseJobWorker: - """ - :return: the worker instance to run - """ - return self._worker - - @property - def started(self) -> bool: - """ - :return: True if start has been called, False otherwise - """ - with self._lock: - return self._started - - @property - def progress(self) -> Union[None, Dict[str, Any]]: - """ - :return: current progress, if any, for the running job worker - """ - with self._lock: - return self._progress - - @property - def completed(self) -> bool: - """ - :return: True if the job is completed, False otherwise - """ - with self._lock: - return self._completed - - @property - def canceling(self) -> bool: - """ - :return: True if the job is being canceled, False otherwise - """ - with self._lock: - return self._canceling - - @property - def canceled(self) -> bool: - """ - :return: True if the job is canceled, False otherwise - """ - with self._lock: - return self._canceled - - @property - def errored(self) -> bool: - """ - :return: True if the job has errored, False otherwise - """ - with self._lock: - return self._errored - - @property - def error(self) -> Union[str, None]: - """ - :return: The error, if any, encountered while running the job worker - """ - with self._lock: - return self._error - -
    [docs] def start(self, done_callback: Callable[[], None]): - """ - Start running the contained job worker in a separate thread - - :param done_callback: the callback to invoke once completed running - """ - _LOGGER.info( - "starting job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - ) - assert done_callback is not None - - with self._lock: - if self._started: - raise RuntimeError("start can only be called once") - - self._started = True - self._done_callback = done_callback - worker_thread = threading.Thread(target=self._worker_thread) - worker_thread.start() - - _LOGGER.debug( - "started job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - )
    - -
    [docs] def cancel(self): - """ - Cancel the running job. start must have been called first - """ - _LOGGER.info( - "canceling job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - ) - - with self._lock: - if self._completed: - return - - self._canceling = True - - # freeze the caller thread until canceled, completed, or error - freeze = True - - while freeze: - # don't hammer the CPU with constant checks - time.sleep(0.01) - - with self._lock: - freeze = not (self._errored or self._canceled or self._completed) - - _LOGGER.debug( - "canceled job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - )
    - - def _worker_thread(self): - _LOGGER.debug( - "job worker for job_id {} and project_id {} thead init".format( - self._worker.job_id, self._worker.project_id - ) - ) - - with database.connection_context(): - with self._lock: - job = Job.get(Job.job_id == self._worker.job_id) - self._report_started(job) - - canceled = False - error = None - - try: - # initial check to see if job was canceled before it started - if self._should_cancel(): - raise JobCancelError() - - for progress in self._worker.run(): - with self._lock: - if self._should_report_progress(): - self._report_progress(job, progress) - - if self._should_cancel(): - raise JobCancelError() - except JobCancelError: - canceled = True - - _LOGGER.debug( - "cancel job worker for job_id {} and project_id {} received".format( - self._worker.job_id, self._worker.project_id - ) - ) - except Exception as err: - _LOGGER.info( - ( - "job worker for job_id {} and project_id {} " - "encountered error: {}" - ).format(self._worker.job_id, self._worker.project_id, err) - ) - error = err - - with self._lock: - self._start_completed = True - - if canceled: - self._report_canceled(job) - _LOGGER.info( - "canceled job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - ) - elif error is not None: - self._report_error(job, str(error)) - _LOGGER.info( - "errored job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - ) - else: - self._report_completed(job) - _LOGGER.info( - "completed job worker for job_id {} and project_id {}".format( - self._worker.job_id, self._worker.project_id - ) - ) - - self._done_callback() - - def _report_started(self, job: Job): - self._started = True - job.status = JobStatus.started - job.save() - - def _should_report_progress(self) -> bool: - # let's not hammer the database, limit progress saves to 10 per second - return self._progress_time is None or time.time() - self._progress_time >= 0.1 - - def _report_progress(self, job: Job, progress: Dict[str, Any]): - self._progress = progress - self._progress_time = time.time() - job.progress = progress - job.save() - - def _report_completed(self, job: Job): - self._completed = True - job.status = JobStatus.completed - job.progress = None - job.save() - - def _should_cancel(self) -> bool: - if self._canceling: - return True - - return not threading.main_thread().is_alive() - - def _report_canceled(self, job: Job): - self._canceled = True - job.status = JobStatus.canceled - job.progress = None - job.save() - - def _report_error(self, job: Job, error: str): - self._errored = True - self._error = error - job.status = JobStatus.error - job.error = error - job.progress = None - job.save()
    -
    - -
    - -
    -
    - -
    - -
    -

    - © Copyright 2021 - present / Neuralmagic, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"). - -

    -
    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sparsify/_modules/sparsify/workers/manager.html b/sparsify/_modules/sparsify/workers/manager.html new file mode 100644 index 00000000000..8d7922f1a3d --- /dev/null +++ b/sparsify/_modules/sparsify/workers/manager.html @@ -0,0 +1,554 @@ + + + + + + + + + + sparsify.workers.manager — Sparsify 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
      + +
    • »
    • + +
    • Module code »
    • + +
    • sparsify.workers.manager
    • + + +
    • + +
    • + +
    + + +
    +
    +
    +
    + +

    Source code for sparsify.workers.manager

    +# Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
    +#
    +# Licensed under the Apache License, Version 2.0 (the "License");
    +# you may not use this file except in compliance with the License.
    +# You may obtain a copy of the License at
    +#
    +#    http://www.apache.org/licenses/LICENSE-2.0
    +#
    +# Unless required by applicable law or agreed to in writing,
    +# software distributed under the License is distributed on an "AS IS" BASIS,
    +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +# See the License for the specific language governing permissions and
    +# limitations under the License.
    +
    +"""
    +Code related to managing jobs in the server
    +"""
    +
    +import logging
    +import threading
    +import time
    +from concurrent.futures import ThreadPoolExecutor
    +from typing import Any, Dict, Generic, TypeVar
    +
    +from sparseml.utils import Singleton
    +from sparsify.models import Job, JobStatus, database
    +from sparsify.workers.base import JobWorker, JobWorkerRegistry
    +
    +
    +__all__ = ["JobNotFoundError", "JobCancelationFailureError", "JobWorkerManager"]
    +
    +
    +_LOGGER = logging.getLogger(__name__)
    +
    +
    +
    [docs]class JobNotFoundError(Exception): + """ + Error raised if a job is not found in the database + """ + + def __init__(self, *args: object) -> None: + super().__init__(*args)
    + + +
    [docs]class JobCancelationFailureError(Exception): + """ + Error raised if a job could not be canceled + """ + + def __init__(self, *args: object) -> None: + super().__init__(*args)
    + + +class JobCancelError(Exception): + """ + Error raised if a job was canceled + """ + + def __init__(self, *args: object): + super().__init__(*args) + + +_T = TypeVar("_T") + + +class _LockedVar(Generic[_T]): + def __init__(self, initial: _T): + self._lock = threading.Lock() + self._value = initial + + def get(self) -> _T: + with self._lock: + return self._value + + def set(self, value: _T): + with self._lock: + self._value = value + + +class _JobExecutionState(object): + def __init__(self): + self._db_canceled_check_time = None + self._db_progress_saved_time = None + + @property + def db_canceled_check_time(self) -> float: + return self._db_canceled_check_time + + @db_canceled_check_time.setter + def db_canceled_check_time(self, value: float): + self._db_canceled_check_time = value + + @property + def db_progress_saved_time(self) -> float: + return self._db_progress_saved_time + + @db_progress_saved_time.setter + def db_progress_saved_time(self, value: float): + self._db_progress_saved_time = value + + +
    [docs]class JobWorkerManager(object, metaclass=Singleton): + """ + Manager class for handling running job workers in the background. + Only one job worker can run at once. + Once one completes, the next oldest one marked as pending in the db is launched. + + :param max_workers: The maximum number of workers to allow the ThreadPoolExecutor + to work with in parallel + """ + + def __init__(self, max_workers: int = 1): + self._pool = ThreadPoolExecutor(max_workers=max_workers) + self._canceled = _LockedVar(False) + self._refresh_lock = threading.Lock() + +
    [docs] def start(self): + """ + Start the JobWorkerManager to begin processing any background jobs present + """ + _LOGGER.info("Starting JobWorkerManager") + self._cancel_pending_jobs() + self.refresh()
    + +
    [docs] def shutdown(self): + """ + Shutdown the JobWorkerManager to stop processing any background jobs + """ + _LOGGER.info("Canceling JobWorkerManager") + self._canceled.set(True) + self._pool.shutdown() + _LOGGER.info("Canceled JobWorkerManager")
    + +
    [docs] @database.connection_context() + def refresh(self): + """ + Refresh the available jobs and put any pending ones since last refresh + onto the ThreadPoolExecutor. + + Otherwise will exit out without doing anything and + subsequent jobs will be launched after the current one completes. + """ + # lock to make sure the queries are safe across threads and jobs are unique + # should be done with a DB transaction, but current setup with + # peewee and the connection pooling does not support transactions + with self._refresh_lock: + _LOGGER.info("Refreshing JobWorkerManager") + query = ( + Job.select() + .where(Job.status == JobStatus.pending and Job.worker_ack == False) + .order_by(Job.created) + ) + job_ids = [job.job_id for job in query] + _LOGGER.info(f"Found {len(job_ids)} pending jobs, adding to threadpool") + + for job in query: + _LOGGER.debug(f"Adding job {job.job_id} to threadpool") + self._pool.submit(self._execute_job, str(job.job_id), self._canceled) + + _LOGGER.debug(f"Updating jobs in db to ack that worker received them") + Job.update(worker_ack=True).where(Job.job_id.in_(job_ids)).execute()
    + +
    [docs] @database.connection_context() + def cancel_job(self, job_id: str): + """ + Cancel a job with the given job_id so it won't be run. + + :param job_id: the job_id to cancel + :raise JobNotFoundError: if the job could not be found in the database + :raise JobCancelationFailureError: if the job could not be canceled + """ + _LOGGER.info("Canceling job {}".format(job_id)) + + try: + _LOGGER.debug(f"Getting job {job_id} from DB") + job = Job.get_or_none(Job.job_id == job_id) + + if job is None: + _LOGGER.error(f"Could not find job {job_id} to cancel") + raise JobNotFoundError() + + if ( + job.status == JobStatus.error + or job.status == JobStatus.completed + or job.status == JobStatus.canceled + ): + _LOGGER.error(f"Could not cancel job {job_id} with status {job.status}") + + raise JobCancelationFailureError( + "Job with status {} cannot be canceled".format(job.status) + ) + + self._update_job_canceled(job) + except (JobNotFoundError, JobCancelationFailureError) as passthrough_err: + raise passthrough_err + except Exception as err: + _LOGGER.warning(f"Error while canceling job {job_id} in db: {err}")
    + + @database.connection_context() + def _cancel_pending_jobs(self): + _LOGGER.debug("Canceling any pending jobs") + query = Job.update( + status=JobStatus.canceled, + error=( + "Job was left in a stranded state and did not complete on last run, " + "canceled on server startup" + ), + ).where(Job.status == JobStatus.started or Job.status == JobStatus.pending) + row_count = query.execute() + + if row_count > 0: + _LOGGER.info(f"Canceled {row_count} stranded jobs") + + @database.connection_context() + def _execute_job(self, job_id: str, canceled: _LockedVar[bool]): + _LOGGER.info(f"Starting job {job_id} in JobWorkerManager") + state = _JobExecutionState() + job = None + + try: + _LOGGER.debug(f"Getting job {job_id} from DB") + job = Job.get(Job.job_id == job_id) + + if self._check_cancel_job(job, canceled, state): + _LOGGER.debug( + f"Job {job_id} cancel requested before starting, canceling" + ) + raise JobCancelError() + + self._update_job_started(job) + + _LOGGER.debug(f"Creating worker for job {job_id}") + worker = JobWorkerRegistry.create_worker(job) # type: JobWorker + + _LOGGER.debug(f"Starting worker run for job {job_id}") + for progress in worker.run(): + if self._check_cancel_job(job, canceled, state): + _LOGGER.debug(f"Job {job_id} cancel requested, canceling") + raise JobCancelError() + + self._update_job_progress(job, state, progress) + + self._update_job_completed(job) + except JobCancelError: + if not job: + raise RuntimeError("job is None after JobCancelError") + + self._update_job_canceled(job) + _LOGGER.info(f"Job {job_id} canceled in JobWorkerManager") + except Exception as err: + # try to update the job in the DB in case the job doesn't exist + # or the job was deleted from the DB + try: + self._update_job_error(job, err) + except Exception as save_err: + _LOGGER.warning( + f"Could not update job state in db to errored " + f"for job {job_id}: {save_err}: for error {err}" + ) + + def _check_cancel_job( + self, job: Job, canceled: _LockedVar[bool], state: _JobExecutionState + ) -> bool: + # cancel if overall system is being shutdown + if canceled.get() or not threading.main_thread().is_alive(): + return True + + # refresh job state at maximum one second intervals to see if job was canceled + if ( + state.db_canceled_check_time + and time.time() - state.db_canceled_check_time < 1.0 + ): + return False + + job = job.refresh() + state.db_canceled_check_time = time.time() + + return job.status == JobStatus.canceled + + def _update_job_started(self, job: Job): + _LOGGER.debug(f"Updating job {job.job_id} to started status") + job.status = JobStatus.started + job.save() + + def _update_job_progress(self, job: Job, state: _JobExecutionState, progress: Dict): + # update the progress max 5 times a second to not hammer the DB + if ( + state.db_progress_saved_time + and time.time() - state.db_progress_saved_time < 0.2 + ): + return + + _LOGGER.debug(f"Job {job.job_id} saving progress to DB") + job.progress = progress + job.save() + state.db_progress_saved_time = time.time() + + def _update_job_completed(self, job: Job): + _LOGGER.debug(f"Job {job.job_id} completed, saving DB state") + job.status = JobStatus.completed + job.progress = None + job.save() + _LOGGER.info(f"Job {job.job_id} completed in JobWorkerManager") + + def _update_job_canceled(self, job: Job): + _LOGGER.debug(f"Job {job.job_id} cancel requested, saving in DB") + job.status = JobStatus.canceled + job.progress = None + job.save() + _LOGGER.info(f"Job {job.job_id} canceled in DB") + + def _update_job_error(self, job: Job, err: Any): + _LOGGER.debug(f"Job {job.job_id} errored, saving to DB") + job.status = JobStatus.canceled + job.error = err + job.progress = None + job.save() + _LOGGER.warning(f"Job {job.job_id} errored out {err}")
    +
    + +
    + +
    +
    + +
    + +
    +

    + © Copyright 2021 - present / Neuralmagic, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"). + +

    +
    + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sparsify/_modules/sparsify/workers/projects_benchmark.html b/sparsify/_modules/sparsify/workers/projects_benchmark.html index 2ff90365db1..7ab044fea2d 100644 --- a/sparsify/_modules/sparsify/workers/projects_benchmark.html +++ b/sparsify/_modules/sparsify/workers/projects_benchmark.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -215,7 +216,7 @@

    Source code for sparsify.workers.projects_benchmark

    data_dump_and_validation, ) from sparsify.utils import get_ml_sys_info -from sparsify.workers.base import BaseJobWorker +from sparsify.workers.base import JobWorker _LOGGER = logging.getLogger(__name__) @@ -227,7 +228,7 @@

    Source code for sparsify.workers.projects_benchmark

    ORT_GPU_ENGINE = "ort_gpu" -
    [docs]class CreateBenchmarkJobWorker(BaseJobWorker): +
    [docs]class CreateBenchmarkJobWorker(JobWorker): """ A job worker for running and saving a benchmark for a given project and configuration. diff --git a/sparsify/_modules/sparsify/workers/projects_data.html b/sparsify/_modules/sparsify/workers/projects_data.html index 7458380448e..b3af497e8d3 100644 --- a/sparsify/_modules/sparsify/workers/projects_data.html +++ b/sparsify/_modules/sparsify/workers/projects_data.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -204,7 +205,7 @@

    Source code for sparsify.workers.projects_data

    from sparsify.blueprints.utils import validate_model_data from sparsify.models import ProjectData, ProjectModel from sparsify.schemas import JobProgressSchema -from sparsify.workers.base import BaseJobWorker +from sparsify.workers.base import JobWorker _LOGGER = logging.getLogger(__name__) @@ -212,7 +213,7 @@

    Source code for sparsify.workers.projects_data

    __all__ = ["DataFromPathJobWorker", "DataFromRepoJobWorker"] -class _DataLoaderJobWorker(BaseJobWorker): +class _DataLoaderJobWorker(JobWorker): @classmethod def format_args( cls, data_id: str, uri: str, **kwargs diff --git a/sparsify/_modules/sparsify/workers/projects_model.html b/sparsify/_modules/sparsify/workers/projects_model.html index ec74478590a..8dedf6080f5 100644 --- a/sparsify/_modules/sparsify/workers/projects_model.html +++ b/sparsify/_modules/sparsify/workers/projects_model.html @@ -104,10 +104,11 @@

    -

    Help and Support

    +

    Help

    @@ -203,7 +204,7 @@

    Source code for sparsify.workers.projects_model

    < from sparsezoo.utils import download_file_iter from sparsify.models import ProjectModel from sparsify.schemas import JobProgressSchema -from sparsify.workers.base import BaseJobWorker +from sparsify.workers.base import JobWorker __all__ = ["ModelFromPathJobWorker", "ModelFromRepoJobWorker"] @@ -212,7 +213,7 @@

    Source code for sparsify.workers.projects_model

    < _LOGGER = logging.getLogger(__name__) -class _ModelLoaderJobWorker(BaseJobWorker): +class _ModelLoaderJobWorker(JobWorker): """ A base job worker for retrieving a model from a given uri. diff --git a/sparsify/_modules/sparsify/workers/projects_profiles.html b/sparsify/_modules/sparsify/workers/projects_profiles.html index 5427a66d619..3f41980dc41 100644 --- a/sparsify/_modules/sparsify/workers/projects_profiles.html +++ b/sparsify/_modules/sparsify/workers/projects_profiles.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -212,7 +213,7 @@

    Source code for sparsify.workers.projects_profiles

    ProjectProfileModelOpsBaselineMeasurementsSchema, ProjectProfileModelOpsMeasurementsSchema, ) -from sparsify.workers.base import BaseJobWorker +from sparsify.workers.base import JobWorker __all__ = [ @@ -224,7 +225,7 @@

    Source code for sparsify.workers.projects_profiles

    _LOGGER = logging.getLogger(__name__) -class BaseProfileJobWorker(BaseJobWorker): +class BaseProfileJobWorker(JobWorker): """ Base job worker for working with profiles for projects diff --git a/sparsify/_sources/api/sparsify.workers.rst.txt b/sparsify/_sources/api/sparsify.workers.rst.txt index f47ae2eae1a..9b1295a3acc 100644 --- a/sparsify/_sources/api/sparsify.workers.rst.txt +++ b/sparsify/_sources/api/sparsify.workers.rst.txt @@ -12,18 +12,10 @@ sparsify.workers.base module :undoc-members: :show-inheritance: -sparsify.workers.base\_manager module -------------------------------------- +sparsify.workers.manager module +------------------------------- -.. automodule:: sparsify.workers.base_manager - :members: - :undoc-members: - :show-inheritance: - -sparsify.workers.base\_wrapper module -------------------------------------- - -.. automodule:: sparsify.workers.base_wrapper +.. automodule:: sparsify.workers.manager :members: :undoc-members: :show-inheritance: diff --git a/sparsify/_sources/index.rst.txt b/sparsify/_sources/index.rst.txt index d2b1aefd3e6..80bca3602a8 100644 --- a/sparsify/_sources/index.rst.txt +++ b/sparsify/_sources/index.rst.txt @@ -17,7 +17,7 @@ Sparsify |version| =================== -Neural network model repository for highly sparse models and optimization recipes +Easy-to-use UI for automatically sparsifying neural networks and creating sparsification recipes for better inference performance and a smaller footprint .. raw:: html @@ -48,40 +48,52 @@ Neural network model repository for highly sparse models and optimization recipe Overview ======== -Sparsify is a deep learning autoML tool that simplifies the model optimization process to rapidly achieve the best combination of size, speed, and accuracy on any deep learning model. Sparsify optimizes and benchmarks models informed by industry research insights for ML practitioners, including ML engineers and operators, who need to deploy performant deep learning models fast and at scale. Sparsify shows visual performance potential for your model, including a sliding scale between performance and loss sensitivity, ultimately speeding up the model optimization process from weeks to minutes. +Sparsify is an easy-to-use UI tool that simplifies the deep learning model optimization process to rapidly achieve the best combination of size, speed, and accuracy. +Sparsify sparsifies and benchmarks models informed by industry research insights for ML practitioners, including ML engineers and operators, who need to deploy performant deep learning models fast and at scale. +Sparsify shows visual performance potential for your model, including a sliding scale between performance and recovery, ultimately speeding up the model sparsification process from weeks to minutes. -This repository contains the package to locally launch Sparsify where you can create projects to load and optimize your deep learning models. At the end, you can export optimization recipes to integrate with your training workflow. +`This repository `_ contains the package to locally launch Sparsify where you can create projects to load and sparsify your deep learning models. +At the end, you can export sparsification recipes to integrate with your training workflow. -Related Products -================ +Sparsification +============== -- `DeepSparse `_: - CPU inference engine that delivers unprecedented performance for sparse models -- `SparseZoo `_: - Neural network model repository for highly sparse models and optimization recipes -- `SparseML `_: - Libraries for state-of-the-art deep neural network optimization algorithms, - enabling simple pipelines integration with a few lines of code +Sparsification is the process of taking a trained deep learning model and removing redundant information from the overprecise and over-parameterized network resulting in a faster and smaller model. +Techniques for sparsification are all encompassing including everything from inducing sparsity using `pruning `_ and `quantization `_ to enabling naturally occurring sparsity using `activation sparsity `_ or `winograd/FFT `_. +When implemented correctly, these techniques result in significantly more performant and smaller models with limited to no effect on the baseline metrics. +For example, pruning plus quantization can give over `7x improvements in performance `_ while recovering to nearly the same baseline accuracy. + +The Deep Sparse product suite builds on top of sparsification enabling you to easily apply the techniques to your datasets and models using recipe-driven approaches. +Recipes encode the directions for how to sparsify a model into a simple, easily editable format. +- Download a sparsification recipe and sparsified model from the `SparseZoo `_. +- Alternatively, create a recipe for your model using `Sparsify `_. +- Apply your recipe with only a few lines of code using `SparseML `_. +- Finally, for GPU-level performance on CPUs, deploy your sparse-quantized model with the `DeepSparse Engine `_. + + +**Full Deep Sparse product flow:** + + Resources and Learning More =========================== -- `DeepSparse Documentation `_ -- `SparseZoo Documentation `_ -- `SparseML Documentation `_ -- `Neural Magic Blog `_, - `Resources `_, - `Website `_ +- `DeepSparse Documentation `_ +- `SparseZoo Documentation `_ +- `SparseML Documentation `_ +- `Neural Magic Blog `_, + `Resources `_, + `Website `_ Release History =============== Official builds are hosted on PyPi -- stable: `sparsify `_ -- nightly (dev): `sparsify-nightly `_ +- stable: `sparsify `_ +- nightly (dev): `sparsify-nightly `_ Additionally, more information can be found via -`GitHub Releases `_. +`GitHub Releases `_. .. toctree:: :maxdepth: 3 @@ -98,8 +110,9 @@ Additionally, more information can be found via api/sparsify .. toctree:: - :maxdepth: 2 - :caption: Help and Support + :maxdepth: 3 + :caption: Help Bugs, Feature Requests Support, General Q&A + Neural Magic Docs diff --git a/sparsify/_sources/quicktour.md.txt b/sparsify/_sources/quicktour.md.txt index bbbb2481375..89b73b26b2b 100644 --- a/sparsify/_sources/quicktour.md.txt +++ b/sparsify/_sources/quicktour.md.txt @@ -39,16 +39,18 @@ then you will need to substitute in the proper IP address for that server in pla Additionally, confirm that the networking rules on your server allow for access to port 5543. After visiting `http://0.0.0.0:5543` in a web browser, the home page for Sparsify will load if configured correctly: -![SparseZoo main page Icon](userguide/images/image_1.jpg) -A quick start flow is given below. For a more in-depth read, check out the [Sparsify User Guide](userguide/index). +
    + +A quick start flow is given below. For a more in-depth read, check out [Sparsify documentation](https://docs.neuralmagic.com/sparsify/). ### New Project -To begin optimizing a model, a new project must be created. +To begin sparsifying a model, a new project must be created. The New Project button is located in the lower right of Sparsify's home screen. After clicking, the create project popup will be displayed: -![Sparsify new project popup](userguide/images/image_7.jpg) + +
    Sparsify only accepts [ONNX](https://onnx.ai/) model formats currently. To easily convert to ONNX from common ML frameworks, see the [SparseML repository](https://github.com/neuralmagic/sparseml). @@ -63,40 +65,45 @@ Continue through the popup and fill in information as specified to finish creati ### Analyzing a Model -After model creation, optimization sensitivity analysis for the model are shown under the `Performance Profiles` and `Loss Profiles` in the left navigation. +After model creation, sensitivity analysis for the model are shown under the `Performance Profiles` and `Loss Profiles` in the left navigation. -The profiles will show the effects that different types of optimizations and degrees of those optimizations have on both the models inference speed and the baseline loss. +The profiles will show the effects that different types of algorithms and degrees of those algorithms have on both the models inference speed and the baseline loss. Performance Profiles: -![Sparsify performance profiles](userguide/images/image_14.jpg) + +
    Loss Profiles: -![Sparsify loss profiles](userguide/images/image_20.jpg) + +
    ### Optimizing a Model -Click on the `Optimization` in the left navigation or the `Start Optimizing` button on the analyzing pages to begin optimizing your model. After clicking, the optimization creation popup will be displayed: -![Sparsify loss profiles](userguide/images/image_26.jpg) +Click on the `Optimization` in the left navigation or the `Start Optimizing` button on the analyzing pages to begin sparsifying your model. +After clicking, the sparsification creation popup will be displayed: + +
    Fill in the information as required in the modal. Once completed, Sparsify's autoML algorithms will choose the best settings it can find for optimizing your model. The resulting recipe will be displayed along with estimated metrics for the optimized model. The recipe can then be further edited if desired: -![Sparsify loss profiles](userguide/images/image_28.jpg) + +
    ### Exporting a Recipe -Currently Sparsify is focused on training-aware optimizations; -these allow much better loss recovery for a given target performance. -A future release will enable the option of one-shot optimizations with limited to no retraining. +Currently Sparsify is focused on training-aware methods; these allow much better loss recovery for a given target performance. +A future release will enable the option of one-shot sparsification with limited to no retraining. -Given that the optimization recipe is created with training-aware optimizations, it must be exported for inclusion in your original training pipeline using [SparseML](https://github.com/neuralmagic/sparseml). +Given that the recipe is created with training-aware algorithms, it must be exported for inclusion in your original training pipeline using [SparseML](https://github.com/neuralmagic/sparseml). SparseML enables this inclusion with only a few lines of code for most training workflows. On the optimization page, click the `Export` button in the bottom right. This will open up the export popup: -![Sparsify loss profiles](userguide/images/image_60.jpg) + +
    Select the framework the model was originally trained in on the upper right of the popup. Once selected, either copy or download the recipe for use with SparseML. -In addition, some sample code using SparseML is given to integrate the exported optimization recipe. \ No newline at end of file +In addition, some sample code using SparseML is given to integrate the exported sparsification recipe. diff --git a/sparsify/api/modules.html b/sparsify/api/modules.html index 0fde0a09252..0214c2f4b5f 100644 --- a/sparsify/api/modules.html +++ b/sparsify/api/modules.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -237,8 +238,7 @@

    sparsifysparsify.workers package -

    Help and Support

    +

    Help

    diff --git a/sparsify/api/sparsify.blueprints.html b/sparsify/api/sparsify.blueprints.html index b49271c2dfc..9ae170f8ea0 100644 --- a/sparsify/api/sparsify.blueprints.html +++ b/sparsify/api/sparsify.blueprints.html @@ -136,10 +136,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/api/sparsify.blueprints.utils.html b/sparsify/api/sparsify.blueprints.utils.html index 32c53b3c5b7..a4c0a972083 100644 --- a/sparsify/api/sparsify.blueprints.utils.html +++ b/sparsify/api/sparsify.blueprints.utils.html @@ -136,10 +136,11 @@ -

    Help and Support

    +

    Help

    @@ -650,7 +651,7 @@

    Submodules
    -MAX_NODE_SPARSITY = 0.975
    +MAX_NODE_SPARSITY = 0.95
    @@ -706,180 +707,6 @@

    Submodules -
    -class sparsify.blueprints.utils.projects_optimizations_pruning.PruningNodeEvaluator(node_id: str, model_analysis: Dict, perf_analysis: Union[None, Dict], loss_analysis: Union[None, Dict])[source]
    -

    Bases: object

    -

    Evaluator for a model’s node for pruning. -Able to estimate the effect of pruning on the node for performance, loss, etc

    -
    -
    Parameters
    -
      -
    • node_id – id of the node to create the evaluator for

    • -
    • model_analysis – analysis of the model

    • -
    • perf_analysis – performance analysis of the model, if any

    • -
    • loss_analysis – loss analysis of the model, if any

    • -
    -
    -
    -
    -
    -eval_dict(sparsity: Optional[float], baseline_sparsity: Optional[float], overridden: bool) → Dict[str, Any][source]
    -
    - -
    -
    -property flops
    -

    the flops pruning series for the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property loss
    -

    the loss measurements pruning series for the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property loss_estimated
    -

    the estimated loss measurements pruning series for the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property loss_metric
    -

    the available loss metric, -falls back on estimated loss if loss sensitivity is not available

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property node_id
    -

    id of the node the evaluator is created for

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property params
    -

    the params pruning series for the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property performance
    -

    the performance timings pruning series for the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property performance_metric
    -

    the available performance metric, -falls back on flops if perf sensitivity is not available

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property prunable_params
    -

    number of prunable params in the node

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -recovery(sparsity: Optional[float], baseline_sparsity: Optional[float]) → Optional[float][source]
    -
    -
    Parameters
    -
      -
    • sparsity – the sparsity to get recovery for

    • -
    • baseline_sparsity – the baseline sparsity to use for recovery

    • -
    -
    -
    Returns
    -

    the estimated confidence of recovery for the given sparsity -as compared to the baseline

    -
    -
    -
    - -
    -
    -sparse_costs(balance_perf_loss: float, perf_rescaler: sparsify.blueprints.utils.projects_optimizations_pruning.ValueRescaler, loss_rescaler: sparsify.blueprints.utils.projects_optimizations_pruning.ValueRescaler) → List[Tuple[str, float, Optional[float]]][source]
    -
    -
    Parameters
    -
      -
    • balance_perf_loss – the weight [0.0, 1.0] for balancing perf vs loss; -0.0 for all performance, 1.0 for all loss

    • -
    • perf_rescaler – rescaler to use to rescale vales for performance -before calculating cost

    • -
    • loss_rescaler – rescaler to use to rescale vales for loss -before calculating cost

    • -
    -
    -
    Returns
    -

    a list of tuples containing the sparsities from 0% to 99% and -their associated cost for pruning the node to that sparsity

    -
    -
    -
    - -
    -
    -property structurally_pruned
    -

    True if the node is structurally pruned (group convolutions), -False otherwise

    -
    -
    Type
    -

    return

    -
    -
    -
    - -

    -
    class sparsify.blueprints.utils.projects_optimizations_pruning.PruningSettings(mask_type, sparsity, balance_perf_loss, filter_min_sparsity, filter_min_perf_gain, filter_min_recovery)
    diff --git a/sparsify/api/sparsify.html b/sparsify/api/sparsify.html index ef5c8446e9c..4dbadd236e7 100644 --- a/sparsify/api/sparsify.html +++ b/sparsify/api/sparsify.html @@ -120,10 +120,11 @@ -

    Help and Support

    +

    Help

    @@ -274,8 +275,7 @@

    Subpackagessparsify.workers package -

    Help and Support

    +

    Help

    @@ -263,6 +264,12 @@

    Submodulesid = <AutoField: BaseModel.id>

    +
    +
    +refresh()[source]
    +

    Refresh the data for the model instance from the DB

    +
    +
    @@ -446,6 +453,11 @@

    Submodulestype_ = <CharField: Job.type_>

    +
    +
    +worker_ack = <BooleanField: Job.worker_ack>
    +
    +
    worker_args = <JSONField: Job.worker_args>
    diff --git a/sparsify/api/sparsify.schemas.html b/sparsify/api/sparsify.schemas.html index eaacd2dfd1c..08ffd2d704c 100644 --- a/sparsify/api/sparsify.schemas.html +++ b/sparsify/api/sparsify.schemas.html @@ -135,10 +135,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/api/sparsify.utils.html b/sparsify/api/sparsify.utils.html index 0f8c5cda912..bd542b32f33 100644 --- a/sparsify/api/sparsify.utils.html +++ b/sparsify/api/sparsify.utils.html @@ -125,10 +125,11 @@ -

    Help and Support

    +

    Help

    diff --git a/sparsify/api/sparsify.workers.html b/sparsify/api/sparsify.workers.html index d61fa7a5340..385b9e1a824 100644 --- a/sparsify/api/sparsify.workers.html +++ b/sparsify/api/sparsify.workers.html @@ -112,8 +112,7 @@
  • sparsify.workers package
  • -

    Help and Support

    +

    Help

    @@ -212,8 +212,8 @@

    Submodules

    sparsify.workers.base module

    Code related to the base implementations for job workers

    -
    -class sparsify.workers.base.BaseJobWorker(job_id: str, project_id: str)[source]
    +
    +class sparsify.workers.base.JobWorker(job_id: str, project_id: str)[source]

    Bases: object

    The base job worker instance all job workers must extend

    @@ -225,8 +225,8 @@

    Submodules -
    -abstract classmethod format_args(**kwargs) → Dict[str, Any][source]
    +
    +abstract classmethod format_args(**kwargs) → Dict[str, Any][source]

    Format a given args into proper args to be stored for later use in the constructor for the job worker.

    @@ -240,8 +240,8 @@

    Submodules -
    -classmethod get_type() → str[source]
    +
    +classmethod get_type() → str[source]
    Returns

    the type of job worker

    @@ -250,8 +250,8 @@

    Submodules -
    -property job_id
    +
    +property job_id

    the id of the job the worker is being run for

    Type
    @@ -261,8 +261,8 @@

    Submodules -
    -property project_id
    +
    +property project_id

    the id of the project the job belongs to

    Type
    @@ -272,8 +272,8 @@

    Submodules -
    -abstract run() → Iterator[Dict[str, Any]][source]
    +
    +abstract run() → Iterator[Dict[str, Any]][source]

    Perform the work for the job. Must be implemented as an iterator that returns a dictionary containing the progress object on each progress step.

    @@ -287,216 +287,90 @@

    Submodules -
    -class sparsify.workers.base.JobWorkerRegistryHolder(name, bases, attrs)[source]
    +
    +class sparsify.workers.base.JobWorkerRegistry(name, bases, attrs)[source]

    Bases: type

    Registry class for handling and storing BaseJobWorker sub class instances. All subclasses are added to the the REGISTRY property

    -
    -REGISTRY = {'BaseJobWorker': <class 'sparsify.workers.base.BaseJobWorker'>, 'BaseProfileJobWorker': <class 'sparsify.workers.projects_profiles.BaseProfileJobWorker'>, 'CreateBenchmarkJobWorker': <class 'sparsify.workers.projects_benchmark.CreateBenchmarkJobWorker'>, 'CreateLossProfileJobWorker': <class 'sparsify.workers.projects_profiles.CreateLossProfileJobWorker'>, 'CreatePerfProfileJobWorker': <class 'sparsify.workers.projects_profiles.CreatePerfProfileJobWorker'>, 'DataFromPathJobWorker': <class 'sparsify.workers.projects_data.DataFromPathJobWorker'>, 'DataFromRepoJobWorker': <class 'sparsify.workers.projects_data.DataFromRepoJobWorker'>, 'ModelFromPathJobWorker': <class 'sparsify.workers.projects_model.ModelFromPathJobWorker'>, 'ModelFromRepoJobWorker': <class 'sparsify.workers.projects_model.ModelFromRepoJobWorker'>, '_DataLoaderJobWorker': <class 'sparsify.workers.projects_data._DataLoaderJobWorker'>, '_ModelLoaderJobWorker': <class 'sparsify.workers.projects_model._ModelLoaderJobWorker'>}
    +
    +REGISTRY = {'BaseProfileJobWorker': <class 'sparsify.workers.projects_profiles.BaseProfileJobWorker'>, 'CreateBenchmarkJobWorker': <class 'sparsify.workers.projects_benchmark.CreateBenchmarkJobWorker'>, 'CreateLossProfileJobWorker': <class 'sparsify.workers.projects_profiles.CreateLossProfileJobWorker'>, 'CreatePerfProfileJobWorker': <class 'sparsify.workers.projects_profiles.CreatePerfProfileJobWorker'>, 'DataFromPathJobWorker': <class 'sparsify.workers.projects_data.DataFromPathJobWorker'>, 'DataFromRepoJobWorker': <class 'sparsify.workers.projects_data.DataFromRepoJobWorker'>, 'JobWorker': <class 'sparsify.workers.base.JobWorker'>, 'ModelFromPathJobWorker': <class 'sparsify.workers.projects_model.ModelFromPathJobWorker'>, 'ModelFromRepoJobWorker': <class 'sparsify.workers.projects_model.ModelFromRepoJobWorker'>, '_DataLoaderJobWorker': <class 'sparsify.workers.projects_data._DataLoaderJobWorker'>, '_ModelLoaderJobWorker': <class 'sparsify.workers.projects_model._ModelLoaderJobWorker'>}
    +
    + +
    +
    +static create_worker(job)[source]

    -
    -

    sparsify.workers.base_manager module

    +
    +

    sparsify.workers.manager module

    Code related to managing jobs in the server

    -
    -exception sparsify.workers.base_manager.JobCancelationFailureError(*args: object)[source]
    +
    +exception sparsify.workers.manager.JobCancelationFailureError(*args: object)[source]

    Bases: Exception

    Error raised if a job could not be canceled

    -
    -exception sparsify.workers.base_manager.JobNotFoundError(*args: object)[source]
    +
    +exception sparsify.workers.manager.JobNotFoundError(*args: object)[source]

    Bases: Exception

    Error raised if a job is not found in the database

    -
    -class sparsify.workers.base_manager.JobWorkerManager(*args, **kwargs)[source]
    +
    +class sparsify.workers.manager.JobWorkerManager(*args, **kwargs)[source]

    Bases: object

    Manager class for handling running job workers in the background. Only one job worker can run at once. Once one completes, the next oldest one marked as pending in the db is launched.

    +
    +
    Parameters
    +

    max_workers – The maximum number of workers to allow the ThreadPoolExecutor +to work with in parallel

    +
    +
    -
    -app_startup()[source]
    -

    Handle app startup to clear uncompleted state for jobs and begin running

    -
    - -
    -
    -cancel_job(job_id: str)[source]
    -

    Cancel a job with the given job_id so it won’t be run. -Blocks until the job can be canceled.

    +
    +cancel_job(job_id: str)[source]
    +

    Cancel a job with the given job_id so it won’t be run.

    Parameters

    job_id – the job_id to cancel

    Raises
    -
    -refresh()[source]
    -

    Refresh the available jobs. -If a new job is marked as pending and no current job is running, -will start the new job.

    +
    +refresh()[source]
    +

    Refresh the available jobs and put any pending ones since last refresh +onto the ThreadPoolExecutor.

    Otherwise will exit out without doing anything and subsequent jobs will be launched after the current one completes.

    -
    - -
    -
    -

    sparsify.workers.base_wrapper module

    -

    Code related to wrappers for the job worker to handle running them -through the proper flow and update state to the manager and the dataabase.

    -
    -
    -exception sparsify.workers.base_wrapper.JobCancelError(*args: object)[source]
    -

    Bases: Exception

    -

    Error raised if a job was canceled

    -
    - -
    -
    -class sparsify.workers.base_wrapper.JobWorkerWrapper(worker: sparsify.workers.base.BaseJobWorker)[source]
    -

    Bases: object

    -

    The wrapper for a job worker to handle running an instance -through the proper flow and update state to the manager and the database.

    -
    -
    Parameters
    -

    worker – the worker instance to run

    -
    -
    -
    -
    -cancel()[source]
    -

    Cancel the running job. start must have been called first

    -
    -
    -
    -property canceled
    -

    True if the job is canceled, False otherwise

    -
    -
    Type
    -

    return

    -
    -
    +
    +shutdown()[source]
    +

    Shutdown the JobWorkerManager to stop processing any background jobs

    -
    -property canceling
    -

    True if the job is being canceled, False otherwise

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property completed
    -

    True if the job is completed, False otherwise

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property error
    -

    The error, if any, encountered while running the job worker

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property errored
    -

    True if the job has errored, False otherwise

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property job_id
    -

    the job id

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property progress
    -

    current progress, if any, for the running job worker

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -start(done_callback: Callable[None])[source]
    -

    Start running the contained job worker in a separate thread

    -
    -
    Parameters
    -

    done_callback – the callback to invoke once completed running

    -
    -
    -
    - -
    -
    -property started
    -

    True if start has been called, False otherwise

    -
    -
    Type
    -

    return

    -
    -
    -
    - -
    -
    -property worker
    -

    the worker instance to run

    -
    -
    Type
    -

    return

    -
    -
    +
    +start()[source]
    +

    Start the JobWorkerManager to begin processing any background jobs present

    @@ -508,7 +382,7 @@

    Submodules
    class sparsify.workers.projects_benchmark.CreateBenchmarkJobWorker(job_id: str, project_id: str, model_id: str, benchmark_id: str, core_counts: List[int], batch_sizes: List[int], instruction_sets: List[str], inference_models: List[Dict[str, Optional[str]]], warmup_iterations_per_check: int, iterations_per_check: int)[source]
    -

    Bases: sparsify.workers.base.BaseJobWorker

    +

    Bases: sparsify.workers.base.JobWorker

    A job worker for running and saving a benchmark for a given project and configuration.

    diff --git a/sparsify/genindex.html b/sparsify/genindex.html index 111fe6c712c..5ebcc01bb0c 100644 --- a/sparsify/genindex.html +++ b/sparsify/genindex.html @@ -104,10 +104,11 @@ -

    Help and Support

    +

    Help

    @@ -216,8 +217,6 @@

    A

    -
  • project_id() (sparsify.workers.base.BaseJobWorker property) +
  • project_id() (sparsify.workers.base.JobWorker property)
  • ProjectAvailableModelModificationsSchema (class in sparsify.schemas.projects_optimizations)
  • @@ -1405,14 +1364,14 @@

    P

  • ProjectOptimization (class in sparsify.models.projects_optimizations)
  • - - +
    • ProjectOptimizationModifierLRExponentialArgsSchema (class in sparsify.schemas.projects_optimizations)
    • ProjectOptimizationModifierLRMultiStepArgsSchema (class in sparsify.schemas.projects_optimizations) @@ -1472,8 +1431,6 @@

      P

    • ProjectProfileSchema (class in sparsify.schemas.projects_profiles)
    • ProjectSchema (class in sparsify.schemas.projects) -
    • -
    • prunable_params() (sparsify.blueprints.utils.projects_optimizations_pruning.PruningNodeEvaluator property)
    • pruning_end_epoch() (sparsify.blueprints.utils.projects_optimizations.OptimEpochs property)
    • @@ -1506,8 +1463,6 @@

      P

    • pruning_update_frequency() (sparsify.blueprints.utils.projects_optimizations.OptimEpochs property)
    • PruningModelEvaluator (class in sparsify.blueprints.utils.projects_optimizations_pruning) -
    • -
    • PruningNodeEvaluator (class in sparsify.blueprints.utils.projects_optimizations_pruning)
    • PruningSettings (class in sparsify.blueprints.utils.projects_optimizations_pruning)
    • @@ -1553,11 +1508,13 @@

      Q

      R

      + - - - - diff --git a/sparsify/quicktour.html b/sparsify/quicktour.html index 6800c62adbd..cf8c0dcd964 100644 --- a/sparsify/quicktour.html +++ b/sparsify/quicktour.html @@ -112,10 +112,11 @@ -

      Help and Support

      +

      Help

      @@ -215,15 +216,15 @@

      Quick Tour0.0.0.0. Additionally, confirm that the networking rules on your server allow for access to port 5543.

      -

      After visiting http://0.0.0.0:5543 in a web browser, the home page for Sparsify will load if configured correctly: -SparseZoo main page Icon

      -

      A quick start flow is given below. For a more in-depth read, check out the Sparsify User Guide.

      +

      After visiting http://0.0.0.0:5543 in a web browser, the home page for Sparsify will load if configured correctly:

      +


      +

      A quick start flow is given below. For a more in-depth read, check out Sparsify documentation.

      New Project

      -

      To begin optimizing a model, a new project must be created. +

      To begin sparsifying a model, a new project must be created. The New Project button is located in the lower right of Sparsify’s home screen. -After clicking, the create project popup will be displayed: -Sparsify new project popup

      +After clicking, the create project popup will be displayed:

      +


      Sparsify only accepts ONNX model formats currently. To easily convert to ONNX from common ML frameworks, see the SparseML repository.

      To begin creating a project use one of the following flows:

      @@ -236,36 +237,36 @@

      New Project

      Analyzing a Model

      -

      After model creation, optimization sensitivity analysis for the model are shown under the Performance Profiles and Loss Profiles in the left navigation.

      -

      The profiles will show the effects that different types of optimizations and degrees of those optimizations have on both the models inference speed and the baseline loss.

      -

      Performance Profiles: -Sparsify performance profiles

      -

      Loss Profiles: -Sparsify loss profiles

      +

      After model creation, sensitivity analysis for the model are shown under the Performance Profiles and Loss Profiles in the left navigation.

      +

      The profiles will show the effects that different types of algorithms and degrees of those algorithms have on both the models inference speed and the baseline loss.

      +

      Performance Profiles:

      +


      +

      Loss Profiles:

      +


      Optimizing a Model

      -

      Click on the Optimization in the left navigation or the Start Optimizing button on the analyzing pages to begin optimizing your model. After clicking, the optimization creation popup will be displayed: -Sparsify loss profiles

      +

      Click on the Optimization in the left navigation or the Start Optimizing button on the analyzing pages to begin sparsifying your model. +After clicking, the sparsification creation popup will be displayed:

      +


      Fill in the information as required in the modal. Once completed, Sparsify’s autoML algorithms will choose the best settings it can find for optimizing your model. The resulting recipe will be displayed along with estimated metrics for the optimized model. -The recipe can then be further edited if desired: -Sparsify loss profiles

      +The recipe can then be further edited if desired:

      +


      Exporting a Recipe

      -

      Currently Sparsify is focused on training-aware optimizations; -these allow much better loss recovery for a given target performance. -A future release will enable the option of one-shot optimizations with limited to no retraining.

      -

      Given that the optimization recipe is created with training-aware optimizations, it must be exported for inclusion in your original training pipeline using SparseML. +

      Currently Sparsify is focused on training-aware methods; these allow much better loss recovery for a given target performance. +A future release will enable the option of one-shot sparsification with limited to no retraining.

      +

      Given that the recipe is created with training-aware algorithms, it must be exported for inclusion in your original training pipeline using SparseML. SparseML enables this inclusion with only a few lines of code for most training workflows.

      On the optimization page, click the Export button in the bottom right. -This will open up the export popup: -Sparsify loss profiles

      +This will open up the export popup:

      +


      Select the framework the model was originally trained in on the upper right of the popup. Once selected, either copy or download the recipe for use with SparseML. -In addition, some sample code using SparseML is given to integrate the exported optimization recipe.

      +In addition, some sample code using SparseML is given to integrate the exported sparsification recipe.

      diff --git a/sparsify/search.html b/sparsify/search.html index 488302c6c12..cebb3d82c76 100644 --- a/sparsify/search.html +++ b/sparsify/search.html @@ -107,10 +107,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/searchindex.js b/sparsify/searchindex.js index ff33cc25f18..63b2d88f1ab 100644 --- a/sparsify/searchindex.js +++ b/sparsify/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["api/modules","api/sparsify","api/sparsify.blueprints","api/sparsify.blueprints.code_samples","api/sparsify.blueprints.utils","api/sparsify.models","api/sparsify.schemas","api/sparsify.utils","api/sparsify.workers","index","installation","quicktour","userguide/01-intro","userguide/02-install-sparsify","userguide/03-sparsify-overview","userguide/04-analyze","userguide/04a-profiling-your-model","userguide/04b-reviewing-performance-profiles","userguide/04c-reviewing-loss-profiles","userguide/05-optimize","userguide/05a-benchmark","userguide/06-integrate","userguide/06a-optimize-config","userguide/07-settings","userguide/08-key-terms","userguide/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["api/modules.rst","api/sparsify.rst","api/sparsify.blueprints.rst","api/sparsify.blueprints.code_samples.rst","api/sparsify.blueprints.utils.rst","api/sparsify.models.rst","api/sparsify.schemas.rst","api/sparsify.utils.rst","api/sparsify.workers.rst","index.rst","installation.md","quicktour.md","userguide/01-intro.md","userguide/02-install-sparsify.md","userguide/03-sparsify-overview.md","userguide/04-analyze.md","userguide/04a-profiling-your-model.md","userguide/04b-reviewing-performance-profiles.md","userguide/04c-reviewing-loss-profiles.md","userguide/05-optimize.md","userguide/05a-benchmark.md","userguide/06-integrate.md","userguide/06a-optimize-config.md","userguide/07-settings.md","userguide/08-key-terms.md","userguide/index.rst"],objects:{"":{sparsify:[1,0,0,"-"]},"sparsify.app":{main:[1,1,1,""],run:[1,1,1,""]},"sparsify.blueprints":{code_samples:[3,0,0,"-"],errors:[2,0,0,"-"],jobs:[2,0,0,"-"],model_repo:[2,0,0,"-"],projects:[2,0,0,"-"],projects_benchmarks:[2,0,0,"-"],projects_data:[2,0,0,"-"],projects_model:[2,0,0,"-"],projects_optimizations:[2,0,0,"-"],projects_profiles:[2,0,0,"-"],system:[2,0,0,"-"],ui:[2,0,0,"-"],utils:[4,0,0,"-"]},"sparsify.blueprints.code_samples":{pytorch__training:[3,0,0,"-"]},"sparsify.blueprints.code_samples.pytorch__training":{train:[3,1,1,""],train_setup:[3,1,1,""]},"sparsify.blueprints.utils":{helpers:[4,0,0,"-"],projects:[4,0,0,"-"],projects_benchmark:[4,0,0,"-"],projects_data:[4,0,0,"-"],projects_optimizations:[4,0,0,"-"],projects_optimizations_pruning:[4,0,0,"-"]},"sparsify.blueprints.utils.helpers":{HTTPNotFoundError:[4,2,1,""]},"sparsify.blueprints.utils.projects":{get_project_by_id:[4,1,1,""],get_project_model_by_project_id:[4,1,1,""]},"sparsify.blueprints.utils.projects_benchmark":{get_project_benchmark_by_ids:[4,1,1,""]},"sparsify.blueprints.utils.projects_data":{get_project_data_by_ids:[4,1,1,""],validate_model_data:[4,1,1,""]},"sparsify.blueprints.utils.projects_optimizations":{OptimEpochs:[4,3,1,""],create_config:[4,1,1,""],default_epochs_distribution:[4,1,1,""],default_pruning_settings:[4,1,1,""],get_profiles_by_id:[4,1,1,""],get_project_optimizer_by_ids:[4,1,1,""],optim_lr_sched_default_mods:[4,1,1,""],optim_lr_sched_updater:[4,1,1,""],optim_pruning_updater:[4,1,1,""],optim_trainable_default_nodes:[4,1,1,""],optim_trainable_updater:[4,1,1,""],optim_updater:[4,1,1,""],optim_validate_and_get_project_by_id:[4,1,1,""],sparse_training_available:[4,1,1,""],validate_pruning_nodes:[4,1,1,""]},"sparsify.blueprints.utils.projects_optimizations.OptimEpochs":{end_epoch:[4,4,1,""],fine_tuning_epochs:[4,4,1,""],fine_tuning_start_epoch:[4,4,1,""],pruning_end_epoch:[4,4,1,""],pruning_epochs:[4,4,1,""],pruning_start_epoch:[4,4,1,""],pruning_update_frequency:[4,4,1,""],stabilization_epochs:[4,4,1,""],start_epoch:[4,4,1,""],training_epochs:[4,4,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning":{PruningModelEvaluator:[4,3,1,""],PruningNodeEvaluator:[4,3,1,""],PruningSettings:[4,3,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning.PruningModelEvaluator":{EVAL_SENSITIVITY_SPARSITY:[4,5,1,""],MAX_NODE_SPARSITY:[4,5,1,""],apply_node_overrides:[4,4,1,""],eval_baseline:[4,4,1,""],eval_pruning:[4,4,1,""],to_dict_values:[4,4,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning.PruningNodeEvaluator":{eval_dict:[4,4,1,""],flops:[4,4,1,""],loss:[4,4,1,""],loss_estimated:[4,4,1,""],loss_metric:[4,4,1,""],node_id:[4,4,1,""],params:[4,4,1,""],performance:[4,4,1,""],performance_metric:[4,4,1,""],prunable_params:[4,4,1,""],recovery:[4,4,1,""],sparse_costs:[4,4,1,""],structurally_pruned:[4,4,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning.PruningSettings":{balance_perf_loss:[4,4,1,""],filter_min_perf_gain:[4,4,1,""],filter_min_recovery:[4,4,1,""],filter_min_sparsity:[4,4,1,""],mask_type:[4,4,1,""],sparsity:[4,4,1,""]},"sparsify.log":{get_main_logger:[1,1,1,""],get_root_logger:[1,1,1,""],set_logging_level:[1,1,1,""]},"sparsify.models":{base:[5,0,0,"-"],jobs:[5,0,0,"-"],projects:[5,0,0,"-"],projects_benchmark:[5,0,0,"-"],projects_data:[5,0,0,"-"],projects_model:[5,0,0,"-"],projects_optimizations:[5,0,0,"-"],projects_profiles:[5,0,0,"-"],utils:[5,0,0,"-"]},"sparsify.models.base":{BaseCreatedModifiedModel:[5,3,1,""],BaseModel:[5,3,1,""],CSVField:[5,3,1,""],CSVFloatField:[5,3,1,""],CSVIntField:[5,3,1,""],FileStorage:[5,3,1,""],ListObjField:[5,3,1,""]},"sparsify.models.base.BaseCreatedModifiedModel":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],id:[5,5,1,""],modified:[5,5,1,""],save:[5,4,1,""]},"sparsify.models.base.BaseModel":{DoesNotExist:[5,5,1,""],id:[5,5,1,""]},"sparsify.models.base.CSVField":{db_value:[5,4,1,""],python_value:[5,4,1,""]},"sparsify.models.base.CSVFloatField":{python_value:[5,4,1,""]},"sparsify.models.base.CSVIntField":{python_value:[5,4,1,""]},"sparsify.models.base.FileStorage":{init:[5,4,1,""],root_path:[5,4,1,""]},"sparsify.models.base.ListObjField":{db_value:[5,4,1,""],python_value:[5,4,1,""]},"sparsify.models.jobs":{Job:[5,3,1,""],JobStatus:[5,3,1,""],JobStatusField:[5,3,1,""]},"sparsify.models.jobs.Job":{DoesNotExist:[5,5,1,""],baseprojectprofile_set:[5,5,1,""],created:[5,5,1,""],error:[5,5,1,""],job_id:[5,5,1,""],modified:[5,5,1,""],progress:[5,5,1,""],project_id:[5,5,1,""],projectbenchmark_set:[5,5,1,""],projectdata_set:[5,5,1,""],projectlossprofile_set:[5,5,1,""],projectmodel_set:[5,5,1,""],projectperfprofile_set:[5,5,1,""],save:[5,4,1,""],status:[5,5,1,""],type_:[5,5,1,""],worker_args:[5,5,1,""]},"sparsify.models.jobs.JobStatus":{canceled:[5,5,1,""],canceling:[5,5,1,""],completed:[5,5,1,""],error:[5,5,1,""],pending:[5,5,1,""],started:[5,5,1,""]},"sparsify.models.jobs.JobStatusField":{db_value:[5,4,1,""],field_type:[5,5,1,""],python_value:[5,4,1,""]},"sparsify.models.projects":{BaseProjectModel:[5,3,1,""],Project:[5,3,1,""]},"sparsify.models.projects.BaseProjectModel":{DoesNotExist:[5,5,1,""],delete_filesystem:[5,4,1,""],id:[5,5,1,""],setup_filesystem:[5,4,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects.Project":{DoesNotExist:[5,5,1,""],benchmarks:[5,5,1,""],created:[5,5,1,""],data:[5,5,1,""],delete_filesystem:[5,4,1,""],description:[5,5,1,""],dir_path:[5,4,1,""],dir_size:[5,4,1,""],models:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],optims:[5,5,1,""],profiles_loss:[5,5,1,""],profiles_perf:[5,5,1,""],project_id:[5,5,1,""],save:[5,4,1,""],setup_filesystem:[5,4,1,""],training_epochs:[5,5,1,""],training_lr_final:[5,5,1,""],training_lr_init:[5,5,1,""],training_optimizer:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_benchmark":{ProjectBenchmark:[5,3,1,""]},"sparsify.models.projects_benchmark.ProjectBenchmark":{DoesNotExist:[5,5,1,""],batch_sizes:[5,5,1,""],benchmark_id:[5,5,1,""],core_counts:[5,5,1,""],created:[5,5,1,""],inference_models:[5,5,1,""],instruction_sets:[5,5,1,""],iterations_per_check:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],result:[5,5,1,""],source:[5,5,1,""],warmup_iterations_per_check:[5,5,1,""]},"sparsify.models.projects_data":{ProjectData:[5,3,1,""]},"sparsify.models.projects_data.ProjectData":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],data_id:[5,5,1,""],delete_filesystem:[5,4,1,""],dir_path:[5,4,1,""],file:[5,5,1,""],file_path:[5,4,1,""],job:[5,5,1,""],job_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],setup_filesystem:[5,4,1,""],source:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_model":{ProjectModel:[5,3,1,""]},"sparsify.models.projects_model.ProjectModel":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],delete_filesystem:[5,4,1,""],dir_path:[5,4,1,""],file:[5,5,1,""],file_path:[5,4,1,""],job:[5,5,1,""],job_id:[5,5,1,""],model_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],setup_filesystem:[5,4,1,""],source:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_optimizations":{ProjectOptimization:[5,3,1,""],ProjectOptimizationModifierLRSchedule:[5,3,1,""],ProjectOptimizationModifierPruning:[5,3,1,""],ProjectOptimizationModifierQuantization:[5,3,1,""],ProjectOptimizationModifierTrainable:[5,3,1,""]},"sparsify.models.projects_optimizations.ProjectOptimization":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],lr_schedule_modifiers:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],notes:[5,5,1,""],optim_id:[5,5,1,""],profile_loss:[5,5,1,""],profile_loss_id:[5,5,1,""],profile_perf:[5,5,1,""],profile_perf_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],pruning_modifiers:[5,5,1,""],quantization_modifiers:[5,5,1,""],start_epoch:[5,5,1,""],trainable_modifiers:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierLRSchedule":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],final_lr:[5,5,1,""],init_lr:[5,5,1,""],lr_mods:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierPruning":{DoesNotExist:[5,5,1,""],balance_perf_loss:[5,5,1,""],compression:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],est_loss_sensitivity:[5,5,1,""],est_perf_sensitivity:[5,5,1,""],est_recovery:[5,5,1,""],est_time:[5,5,1,""],est_time_baseline:[5,5,1,""],est_time_gain:[5,5,1,""],filter_min_perf_gain:[5,5,1,""],filter_min_recovery:[5,5,1,""],filter_min_sparsity:[5,5,1,""],flops:[5,5,1,""],flops_baseline:[5,5,1,""],flops_gain:[5,5,1,""],mask_type:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],params:[5,5,1,""],params_baseline:[5,5,1,""],sparsity:[5,5,1,""],start_epoch:[5,5,1,""],update_frequency:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierQuantization":{DoesNotExist:[5,5,1,""],balance_perf_loss:[5,5,1,""],compression:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],est_loss_sensitivity:[5,5,1,""],est_perf_sensitivity:[5,5,1,""],est_recovery:[5,5,1,""],est_time:[5,5,1,""],est_time_baseline:[5,5,1,""],est_time_gain:[5,5,1,""],filter_min_perf_gain:[5,5,1,""],filter_min_recovery:[5,5,1,""],flops:[5,5,1,""],flops_baseline:[5,5,1,""],flops_gain:[5,5,1,""],level:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],params:[5,5,1,""],params_baseline:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierTrainable":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_profiles":{BaseProjectProfile:[5,3,1,""],ProjectLossProfile:[5,3,1,""],ProjectPerfProfile:[5,3,1,""]},"sparsify.models.projects_profiles.BaseProjectProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],source:[5,5,1,""]},"sparsify.models.projects_profiles.ProjectLossProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],projectoptimization_set:[5,5,1,""],pruning_estimation_type:[5,5,1,""],pruning_estimations:[5,5,1,""],pruning_structure:[5,5,1,""],quantized_estimation_type:[5,5,1,""],quantized_estimations:[5,5,1,""],source:[5,5,1,""]},"sparsify.models.projects_profiles.ProjectPerfProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],batch_size:[5,5,1,""],core_count:[5,5,1,""],created:[5,5,1,""],instruction_sets:[5,5,1,""],iterations_per_check:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],projectoptimization_set:[5,5,1,""],pruning_estimations:[5,5,1,""],quantized_estimations:[5,5,1,""],source:[5,5,1,""],warmup_iterations_per_check:[5,5,1,""]},"sparsify.models.utils":{database_setup:[5,1,1,""]},"sparsify.schemas":{errors:[6,0,0,"-"],helpers:[6,0,0,"-"],jobs:[6,0,0,"-"],model_repo:[6,0,0,"-"],projects:[6,0,0,"-"],projects_benchmarks:[6,0,0,"-"],projects_data:[6,0,0,"-"],projects_model:[6,0,0,"-"],projects_optimizations:[6,0,0,"-"],projects_profiles:[6,0,0,"-"],system:[6,0,0,"-"]},"sparsify.schemas.errors":{ErrorSchema:[6,3,1,""]},"sparsify.schemas.errors.ErrorSchema":{opts:[6,5,1,""]},"sparsify.schemas.helpers":{EnumField:[6,3,1,""],data_dump_and_validation:[6,1,1,""]},"sparsify.schemas.helpers.EnumField":{deserialize:[6,4,1,""]},"sparsify.schemas.jobs":{JobProgressSchema:[6,3,1,""],JobSchema:[6,3,1,""],ResponseJobSchema:[6,3,1,""],ResponseJobsSchema:[6,3,1,""],SearchJobsSchema:[6,3,1,""]},"sparsify.schemas.jobs.JobProgressSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.JobSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.ResponseJobSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.ResponseJobsSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.SearchJobsSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo":{ModelRepoArchitectureSchema:[6,3,1,""],ModelRepoDatasetSchema:[6,3,1,""],ModelRepoDomainSchema:[6,3,1,""],ModelRepoModelDescSchema:[6,3,1,""],ModelRepoModelMetricSchema:[6,3,1,""],ModelRepoModelPerfSchema:[6,3,1,""],ModelRepoModelSchema:[6,3,1,""],ResponseModelRepoModels:[6,3,1,""],SearchModelRepoModels:[6,3,1,""]},"sparsify.schemas.model_repo.ModelRepoArchitectureSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoDatasetSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoDomainSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelDescSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelMetricSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelPerfSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ResponseModelRepoModels":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.SearchModelRepoModels":{opts:[6,5,1,""]},"sparsify.schemas.projects":{CreateUpdateProjectSchema:[6,3,1,""],DeleteProjectSchema:[6,3,1,""],ProjectExtSchema:[6,3,1,""],ProjectSchema:[6,3,1,""],ResponseProjectDeletedSchema:[6,3,1,""],ResponseProjectExtSchema:[6,3,1,""],ResponseProjectSchema:[6,3,1,""],ResponseProjectsSchema:[6,3,1,""],SearchProjectsSchema:[6,3,1,""]},"sparsify.schemas.projects.CreateUpdateProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.DeleteProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ProjectExtSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectExtSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.SearchProjectsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks":{CreateProjectBenchmarkSchema:[6,3,1,""],ProjectBenchmarkResultSchema:[6,3,1,""],ProjectBenchmarkResultsSchema:[6,3,1,""],ProjectBenchmarkSchema:[6,3,1,""],ResponseProjectBenchmarkDeletedSchema:[6,3,1,""],ResponseProjectBenchmarkSchema:[6,3,1,""],ResponseProjectBenchmarksSchema:[6,3,1,""],SearchProjectBenchmarksSchema:[6,3,1,""]},"sparsify.schemas.projects_benchmarks.CreateProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkResultSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkResultsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarkDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarksSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.SearchProjectBenchmarksSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data":{CreateUpdateProjectDataSchema:[6,3,1,""],ProjectDataSchema:[6,3,1,""],ResponseProjectDataDeletedSchema:[6,3,1,""],ResponseProjectDataSchema:[6,3,1,""],ResponseProjectDataSingleSchema:[6,3,1,""],SearchProjectDataSchema:[6,3,1,""],SetProjectDataFromSchema:[6,3,1,""]},"sparsify.schemas.projects_data.CreateUpdateProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataSingleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.SearchProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.SetProjectDataFromSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model":{CreateUpdateProjectModelSchema:[6,3,1,""],DeleteProjectModelSchema:[6,3,1,""],ProjectModelAnalysisSchema:[6,3,1,""],ProjectModelSchema:[6,3,1,""],ResponseProjectModelAnalysisSchema:[6,3,1,""],ResponseProjectModelDeletedSchema:[6,3,1,""],ResponseProjectModelSchema:[6,3,1,""],SetProjectModelFromSchema:[6,3,1,""]},"sparsify.schemas.projects_model.CreateUpdateProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.DeleteProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ProjectModelAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.SetProjectModelFromSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations":{CreateProjectOptimizationSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersLRScheduleSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersPruningSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersQuantizationSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersTrainableSchema:[6,3,1,""],GetProjectOptimizationBestEstimatedResultsSchema:[6,3,1,""],ProjectAvailableModelModificationsSchema:[6,3,1,""],ProjectOptimizationModifierLRExponentialArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRMultiStepArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRScheduleSchema:[6,3,1,""],ProjectOptimizationModifierLRSchema:[6,3,1,""],ProjectOptimizationModifierLRSetArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRStepArgsSchema:[6,3,1,""],ProjectOptimizationModifierPruningNodeSchema:[6,3,1,""],ProjectOptimizationModifierPruningSchema:[6,3,1,""],ProjectOptimizationModifierQuantizationNodeSchema:[6,3,1,""],ProjectOptimizationModifierQuantizationSchema:[6,3,1,""],ProjectOptimizationModifierTrainableNodeSchema:[6,3,1,""],ProjectOptimizationModifierTrainableSchema:[6,3,1,""],ProjectOptimizationSchema:[6,3,1,""],ResponseProjectOptimizationDeletedSchema:[6,3,1,""],ResponseProjectOptimizationFrameworksAvailableSamplesSchema:[6,3,1,""],ResponseProjectOptimizationFrameworksAvailableSchema:[6,3,1,""],ResponseProjectOptimizationModifierDeletedSchema:[6,3,1,""],ResponseProjectOptimizationModifiersAvailable:[6,3,1,""],ResponseProjectOptimizationModifiersBestEstimated:[6,3,1,""],ResponseProjectOptimizationSchema:[6,3,1,""],ResponseProjectOptimizationsSchema:[6,3,1,""],SearchProjectOptimizationsSchema:[6,3,1,""],UpdateProjectOptimizationSchema:[6,3,1,""]},"sparsify.schemas.projects_optimizations.CreateProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersLRScheduleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersPruningSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersQuantizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersTrainableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.GetProjectOptimizationBestEstimatedResultsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectAvailableModelModificationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRExponentialArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRMultiStepArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRScheduleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRSetArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRStepArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierPruningNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierPruningSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierQuantizationNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierQuantizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierTrainableNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierTrainableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationFrameworksAvailableSamplesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationFrameworksAvailableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifierDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifiersAvailable":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifiersBestEstimated":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.SearchProjectOptimizationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.UpdateProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles":{CreateProjectLossProfileSchema:[6,3,1,""],CreateProjectPerfProfileSchema:[6,3,1,""],ProjectLossProfileSchema:[6,3,1,""],ProjectPerfProfileSchema:[6,3,1,""],ProjectProfileAnalysisSchema:[6,3,1,""],ProjectProfileMeasurementSchema:[6,3,1,""],ProjectProfileMeasurementsSchema:[6,3,1,""],ProjectProfileModelOpsBaselineMeasurementsSchema:[6,3,1,""],ProjectProfileModelOpsMeasurementsSchema:[6,3,1,""],ProjectProfileOpBaselineMeasurementSchema:[6,3,1,""],ProjectProfileOpMeasurementsSchema:[6,3,1,""],ProjectProfileOpSchema:[6,3,1,""],ProjectProfileSchema:[6,3,1,""],ResponseProjectLossProfileSchema:[6,3,1,""],ResponseProjectLossProfilesSchema:[6,3,1,""],ResponseProjectPerfProfileSchema:[6,3,1,""],ResponseProjectPerfProfilesSchema:[6,3,1,""],ResponseProjectProfileDeletedSchema:[6,3,1,""],SearchProjectProfilesSchema:[6,3,1,""]},"sparsify.schemas.projects_profiles.CreateProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.CreateProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileMeasurementSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileModelOpsBaselineMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileModelOpsMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpBaselineMeasurementSchema":{dump_fields:[6,5,1,""],fields:[6,5,1,""],load_fields:[6,5,1,""],opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpMeasurementsSchema":{dump_fields:[6,5,1,""],fields:[6,5,1,""],load_fields:[6,5,1,""],opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectLossProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectPerfProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectProfileDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.SearchProjectProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.system":{ResponseSystemInfo:[6,3,1,""],SystemInfo:[6,3,1,""],VersionInfoSchema:[6,3,1,""]},"sparsify.schemas.system.ResponseSystemInfo":{opts:[6,5,1,""]},"sparsify.schemas.system.SystemInfo":{opts:[6,5,1,""]},"sparsify.schemas.system.VersionInfoSchema":{opts:[6,5,1,""]},"sparsify.utils":{system:[7,0,0,"-"]},"sparsify.utils.system":{available_ml_engines:[7,1,1,""],get_ml_sys_info:[7,1,1,""],ml_engines_errors:[7,1,1,""]},"sparsify.workers":{base:[8,0,0,"-"],base_manager:[8,0,0,"-"],base_wrapper:[8,0,0,"-"],projects_benchmark:[8,0,0,"-"],projects_data:[8,0,0,"-"],projects_model:[8,0,0,"-"],projects_profiles:[8,0,0,"-"]},"sparsify.workers.base":{BaseJobWorker:[8,3,1,""],JobWorkerRegistryHolder:[8,3,1,""]},"sparsify.workers.base.BaseJobWorker":{format_args:[8,4,1,""],get_type:[8,4,1,""],job_id:[8,4,1,""],project_id:[8,4,1,""],run:[8,4,1,""]},"sparsify.workers.base.JobWorkerRegistryHolder":{REGISTRY:[8,5,1,""]},"sparsify.workers.base_manager":{JobCancelationFailureError:[8,2,1,""],JobNotFoundError:[8,2,1,""],JobWorkerManager:[8,3,1,""]},"sparsify.workers.base_manager.JobWorkerManager":{app_startup:[8,4,1,""],cancel_job:[8,4,1,""],refresh:[8,4,1,""]},"sparsify.workers.base_wrapper":{JobCancelError:[8,2,1,""],JobWorkerWrapper:[8,3,1,""]},"sparsify.workers.base_wrapper.JobWorkerWrapper":{cancel:[8,4,1,""],canceled:[8,4,1,""],canceling:[8,4,1,""],completed:[8,4,1,""],error:[8,4,1,""],errored:[8,4,1,""],job_id:[8,4,1,""],progress:[8,4,1,""],start:[8,4,1,""],started:[8,4,1,""],worker:[8,4,1,""]},"sparsify.workers.projects_benchmark":{CreateBenchmarkJobWorker:[8,3,1,""]},"sparsify.workers.projects_benchmark.CreateBenchmarkJobWorker":{batch_sizes:[8,4,1,""],benchmark_id:[8,4,1,""],core_counts:[8,4,1,""],format_args:[8,4,1,""],inference_models:[8,4,1,""],instruction_sets:[8,4,1,""],iterations_per_check:[8,4,1,""],model_id:[8,4,1,""],run:[8,4,1,""],warmup_iterations_per_check:[8,4,1,""]},"sparsify.workers.projects_data":{DataFromPathJobWorker:[8,3,1,""],DataFromRepoJobWorker:[8,3,1,""]},"sparsify.workers.projects_data.DataFromPathJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_data.DataFromRepoJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_model":{ModelFromPathJobWorker:[8,3,1,""],ModelFromRepoJobWorker:[8,3,1,""]},"sparsify.workers.projects_model.ModelFromPathJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_model.ModelFromRepoJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_profiles":{CreateLossProfileJobWorker:[8,3,1,""],CreatePerfProfileJobWorker:[8,3,1,""]},"sparsify.workers.projects_profiles.CreateLossProfileJobWorker":{format_args:[8,4,1,""],model_id:[8,4,1,""],profile_id:[8,4,1,""],pruning_estimation_type:[8,4,1,""],pruning_estimations:[8,4,1,""],pruning_structure:[8,4,1,""],quantized_estimations:[8,4,1,""],run:[8,4,1,""]},"sparsify.workers.projects_profiles.CreatePerfProfileJobWorker":{batch_size:[8,4,1,""],core_count:[8,4,1,""],format_args:[8,4,1,""],iterations_per_check:[8,4,1,""],pruning_estimations:[8,4,1,""],quantized_estimations:[8,4,1,""],run:[8,4,1,""],warmup_iterations_per_check:[8,4,1,""]},sparsify:{app:[1,0,0,"-"],blueprints:[2,0,0,"-"],log:[1,0,0,"-"],models:[5,0,0,"-"],schemas:[6,0,0,"-"],utils:[7,0,0,"-"],workers:[8,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","exception","Python exception"],"3":["py","class","Python class"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:exception","3":"py:class","4":"py:method","5":"py:attribute"},terms:{"100":4,"404":4,"5543":11,"975":4,"abstract":[5,8],"case":[15,16,19,24],"class":[4,5,6,8],"default":[4,5,11,16,17],"enum":[5,6],"export":[9,14,15,21,22,24,25],"final":[4,12,19],"float":[4,5,16,17,24],"function":[4,5,7],"import":[7,18],"int":[1,3,4,8],"long":[17,24],"new":[4,8,9,14,16,20,25],"null":5,"public":[8,11],"return":[1,4,5,6,7,8,15,16,22],"true":[4,8],"try":[18,22],"while":[6,8,14,17,19,24],Adding:[9,16,25],And:[15,24],For:[11,14,15,16,17,18,19,20,22,24],One:24,Such:7,The:[6,8,11,13,15,16,17,18,19,20,21,22,24],Then:[16,17,18,20,22],There:[18,19],These:[16,19,21],Use:[6,12,14],Used:5,Using:20,Will:4,_dataloaderjobwork:8,_hidden:5,_modelloaderjobwork:8,abl:4,about:[9,13,17,18,25],acceler:12,accept:[11,15,22],access:[8,11,19,23],accordingli:21,accuraci:[9,12,19,24],achiev:[9,12,17,24],across:[17,19,24],activ:[14,19,24],add:[4,17,18,19,20],added:8,addit:[8,11,14,16,19,24,25],addition:[9,11],address:11,adjust:19,advanc:12,affect:[14,15,16,17,18,19,24],after:[4,6,8,11,14,18,19,20,21,22,24],again:[14,20],algorithm:[9,11,14,15],alia:[4,5],all:[1,4,5,6,8,12,16,17,19,20,22,24],allow:[11,23],along:[1,11],alpha:12,alphanumer:15,alreadi:[18,19,20],also:[16,17,18,20,24],alwai:[4,17],amount:24,analysi:[4,5,6,8,11,13,14,15,24],analyz:[9,12,13,19,25],ani:[3,4,6,7,8,9,12,14,15,16,21,23,24],anoth:20,anyth:[6,8],anywher:15,api:[2,9],app:[0,5,6,8,9],app_startup:8,appear:17,appli:[4,14,16,17,19,24],applic:2,apply_node_overrid:4,appropri:[8,20],approxim:[16,18,24],architect:17,architectur:[6,16,18,24],area:[13,17],arg:[4,5,6,8],argument:6,art:9,artifici:15,assign:4,associ:[4,6],attr:[6,8],attribut:[6,24],autofield:5,automat:[4,14,15,19],automl:[9,11],avail:[4,6,7,8,11,13,17,24],available_ml_engin:7,averag:[18,19,20,24],avoid:12,avx2:24,avx512:24,awai:24,awar:11,back:[4,15,16,17],background:8,balanc:[4,19],balance_perf_loss:[4,5],bar:[13,14,15,17,18,23],base:[0,1,4,6,7,15,17,20,21],base_manag:[0,1],base_wrapp:[0,1],basecreatedmodifiedmodel:5,basecreatedmodifiedmodeldoesnotexist:5,basejobwork:8,baselin:[4,6,11,17,18,20,24],baseline_spars:4,basemodel:5,basemodeldoesnotexist:5,baseprofilejobwork:8,baseprojectmodel:5,baseprojectmodeldoesnotexist:5,baseprojectprofil:5,baseprojectprofile_set:5,baseprojectprofiledoesnotexist:5,basi:[17,19],basic:12,batch:[8,15,16,17,20,24],batch_siz:[3,5,8],batchnorm:24,becaus:[16,18],been:[8,24],befor:[4,8,15,24],begin:[8,11,12,14,15,24],being:[8,16],belong:8,below:[11,19,20],benchmark:[1,2,4,5,6,8,9,12,14,16,19,24,25],benchmark_id:[4,5,8],best:[4,6,9,11,12,19],better:[11,17,19,24],between:[9,12,18,19],bit:24,black:13,block:8,block_4:8,blog:9,blueprint:[0,1],bool:[1,4,6,8],booleanfield:5,both:[11,16,17],bottom:11,brows:[11,15],browser:[11,15],bug:[9,12],build:9,busi:[20,22],button:[11,13,19,20,21,23],calcul:4,call:[4,8],callabl:[3,8],callback:8,can:[1,5,8,9,11,14,15,16,17,18,19,20,21,22,23,24,25],cancel:[5,8,15],cancel_job:8,cannot:11,chanc:[18,19,24],chang:[14,15,16,17,19,20,21,23],charact:15,charfield:5,check:[8,10,11,12,20],choic:[5,19],choos:[11,21],chronolog:20,classif:16,classmethod:8,clear:8,click:[11,15,16,17,18,19,20,21,23],clipboard:22,close:[19,24],code:[1,6,8,9,11,14,19,21,24,25],code_sampl:[1,2],collat:5,color:14,column_nam:5,combin:[9,12],come:17,command:[11,13,15],common:[11,16],compar:[4,9,19,24,25],comparison:[8,20],compat:13,complet:[5,8,11,15,16,18,24],compress:[5,12,14,18],comput:[15,17,24],concept:[9,22,23,25],condit:20,confid:[4,18,19,24],config:[4,9,21,25],config_path:3,configur:[8,11,14,15,19,21,22],confirm:11,consid:16,consider:16,consist:[1,17,18,19],consol:11,constant:17,constraint:5,constructor:8,consult:15,contain:[4,5,6,7,8,9,12],content:[0,9],context:6,continu:[11,15,16,17,18,19,20,24],contribut:[15,24],control:[19,22,24],conv:24,convers:17,convert:11,convolut:[4,17,24],copi:[8,11,22],core:[7,8,15,16,17,20,24],core_count:[5,8],correct:5,correctli:[4,11],correl:18,correspond:[18,19,21],cost:[4,24],could:8,count:[8,9,16,17,20,24,25],cpu:[9,16,17,20,24],creat:[1,4,5,6,9,11,13,14,19,20,25],create_config:4,createbenchmarkjobwork:8,createlossprofilejobwork:8,createperfprofilejobwork:8,createprojectbenchmarkschema:6,createprojectlossprofileschema:6,createprojectoptimizationschema:6,createprojectperfprofileschema:6,createupdateprojectdataschema:6,createupdateprojectmodelschema:6,createupdateprojectoptimizationmodifierslrscheduleschema:6,createupdateprojectoptimizationmodifierspruningschema:6,createupdateprojectoptimizationmodifiersquantizationschema:6,createupdateprojectoptimizationmodifierstrainableschema:6,createupdateprojectschema:6,creation:11,criteria:[20,22],csv:5,csvfield:5,csvfloatfield:5,csvintfield:5,current:[4,6,7,8,11,12,14,15,17,18,19,21,24],custom:[6,19],cut:[15,24],data:[2,3,4,5,6,8,15,24],data_dump_and_valid:6,data_id:[4,5,8],data_path:4,dataabas:8,databas:[5,6,8],database_setup:5,datafrompathjobwork:8,datafromrepojobwork:8,dataset:[3,6],date:5,datetimefield:5,db_column:5,db_valu:5,debian:10,debug:1,deep:[9,12],deeper:[13,17],deepspars:[7,9,13,15,17,24],default_epochs_distribut:4,default_pruning_set:4,default_train:4,defin:[17,18,24],degre:11,delet:[5,6,23],delete_filesystem:5,deleteprojectmodelschema:6,deleteprojectschema:6,deliv:9,dens:17,depend:[16,17,20],deploi:[9,12,16],deploy:[12,16],depth:[10,11,24],desc:6,describ:[16,19,20,22],descript:[5,15,21],deseri:6,desir:11,detail:[4,12,13,14,16,19,24],detect:16,determin:[15,16,17,19,20,24],dev:9,devic:3,dialog:[15,16,17,18,19,23],dict:[4,6,7,8],dictionari:[4,6,7,8],did:[18,22,24],differ:[11,17,19,20,22],differenti:15,dir_path:5,dir_siz:5,directori:5,disabl:[16,20],discuss:12,disk:22,displai:[11,15,16,17,19,20,23,24,25],distribut:4,document:[9,11,15],doe:[15,24],doesnotexist:5,doing:[8,20],domain:[6,16],done:[18,19,24],done_callback:8,down:[17,20],download:[8,11],drag:15,dramat:24,drill:17,drop:20,dump:6,dump_field:6,dump_onli:6,duplic:12,dure:[13,14,15,18,19,21,22,24],each:[4,8,14,16,17,18,19,24],easi:[11,12],easili:[11,15],ecosystem:15,edit:[11,19,23],editor:19,effect:[4,11,14,15,16,17,18],effici:17,either:[8,11,15,17,20],emgin:15,emploi:24,empti:15,enabl:[9,11,14,15,17,20,24],encod:22,encount:[4,6,7,8],end:[4,9,15,19,24],end_epoch:[4,5],engin:[7,9,12,13,17,24,25],ensur:13,enter:[11,15,16,17,18,19,23],entir:[17,18],entri:11,enum_class:6,enumer:5,enumfield:6,environ:[10,11,12],epoch:[4,19,24],equat:17,error:[0,1,4,5,7,8,12],errorschema:6,est_loss_sensit:5,est_perf_sensit:5,est_recoveri:5,est_tim:5,est_time_baselin:5,est_time_gain:5,establish:19,estim:[4,6,11,14,15,17,18,19,20,24],etc:[4,7],eval_baselin:4,eval_dict:4,eval_prun:4,eval_sensitivity_spars:4,evalu:4,even:17,event:6,eventu:16,everi:19,exact:18,examin:20,exampl:[12,14,15,16,17,18,19,20,22,24],except:[4,7,8],exchang:[15,24],exclud:6,execut:[16,24],exist:[5,9,12,14,20,21,25],exit:8,expect:[4,5,6,19],experi:[10,12],explor:[21,22],exponenti:6,extend:[5,8],extens:17,extern:1,extract:8,factor:17,fall:4,fals:[4,5,6,8],fast:[9,16,17,24],faster:[14,17,19,24],fastest:17,featur:[9,12,15,22,23,25],fed:24,feedback:[9,19,25],few:[9,11],fewer:[17,18,24],field:[4,5,6,8,11,15],field_nam:6,field_typ:5,file:[1,2,5,6,8,9,11,12,14,15,19,21,25],file_path:5,filestorag:5,fill:11,filter:[6,19],filter_min_perf_gain:[4,5],filter_min_recoveri:[4,5],filter_min_spars:[4,5],final_lr:5,find:11,fine:[4,19],fine_tuning_epoch:4,fine_tuning_start_epoch:4,finish:11,first:8,five:14,fix:20,flask:[2,4,5,6],floatfield:5,flop:[4,5,16,17,19,24],flops_baselin:5,flops_gain:5,flow:[8,11,14,21,22,24],focus:[11,24],folder:5,follow:[11,12,13,15,17,18,19,24],foreignkeyfield:5,format:[1,8,11,15,22],format_arg:8,found:[4,8,9],framework:[4,6,11,12,17,21],frequenc:19,from:[1,4,5,6,8,9,10,11,12,15,16,17,18,19,20,23,24,25],further:[11,15,16,18],futur:[11,14,18,19,24],gemm:24,gener:[4,9,14,16,17,19,21,22,23,24],get:[4,6,13,14,15,17,19,20],get_main_logg:1,get_ml_sys_info:7,get_profiles_by_id:4,get_project_benchmark_by_id:4,get_project_by_id:4,get_project_data_by_id:4,get_project_model_by_project_id:4,get_project_optimizer_by_id:4,get_root_logg:1,get_typ:8,getprojectoptimizationbestestimatedresultsschema:6,github:[9,12],give:19,given:[4,5,8,11,24],global_end_epoch:4,global_start_epoch:4,globalaveragepool:24,goal:[12,14,15,19,21],going:[15,17,24],good:5,grai:16,grain:19,graph:[17,18,19,20,24],greater:[4,19,24],group:4,guid:[9,10,11,15],handl:[1,2,5,6,8],happen:[11,19],has:[8,17,18,24],have:[4,5,8,11,18,20,24],held:17,help:[9,17,19,25],help_text:5,helper:[0,1,2],here:[20,24],higher:[19,24],highli:9,home:11,host:[1,9,11],how:[14,15,16,17,18,19,21,24],howev:19,http:11,httpnotfounderror:4,icon:[17,18,19],identifi:[16,17,18],ids:4,imag:16,implement:[8,24],improv:[12,14],includ:[5,6,7,8,9,12,14,17,18,21,22,23,24],inclus:11,increas:17,increasingli:19,independ:24,index:5,index_typ:5,indic:[14,16,17,18,19,20,24],individu:24,industri:[9,12],infer:[7,8,9,11,14,15,16,17,24,25],inference_engin:8,inference_model:[5,8],inference_model_optim:8,info:[1,4,6,7],inform:[8,9,11,12,14,15,16,17,18,19,20,22,23,24,25],init:5,init_lr:5,initi:[4,5,13,19,21],input:[4,6,16,24],insight:[9,12],instal:[9,11,12,25],instanc:8,instant:19,instead:[4,17,19],instruct:[7,8,15,17,24],instruction_set:[5,8],integ:5,integerfield:5,integr:[9,11,12,13,19,20,22,25],intellig:15,intens:[17,24],interact:11,intern:24,invalid:6,invok:[4,8],involv:14,issu:12,item:[17,24],iter:8,iterations_per_check:[5,8],its:[4,6,11],job:[0,1,8],job_id:[5,8],jobcancelationfailureerror:8,jobcancelerror:8,jobdoesnotexist:5,jobnotfounderror:8,jobprogressschema:6,jobschema:6,jobstatu:5,jobstatusfield:5,jobworkermanag:8,jobworkerregistryhold:8,jobworkerwrapp:8,join:4,json_dump:5,json_load:5,jsonfield:5,just:[15,16],keep:10,kei:[6,9,22,23,25],keyword:6,know:[15,24],kwarg:[5,6,8],lai:19,larg:[5,16],larger:[17,24],last:18,latenc:16,later:[8,19],latest:[12,14,19,24],launch:[8,9,11,25],layer:[9,14,15,16,19,24,25],learn:[5,12,14,22,24,25],least:18,left:[11,13,15,19,23],less:[4,19],level:[1,4,5,19],librari:9,light:12,like:16,limit:[11,17],line:[9,11],linux:10,list:[4,5,7,8,13,14,15,17,18,19,24],listobjfield:5,load:[5,6,9,11,15,17],load_field:6,load_onli:6,loadabl:6,local:[5,8,9,11,15],locat:[5,11],log:[0,9,24],logger:1,logging_level:1,longer:[17,24],look:[15,16,17,24],loss:[2,3,4,5,6,8,9,11,12,14,15,16,17,19,24,25],loss_analysi:4,loss_estim:4,loss_metr:4,loss_rescal:4,losswrapp:3,low:24,lower:[11,22],lr_mod:[4,5],lr_sched:4,lr_schedule_modifi:5,ma_field:6,machin:[11,24],magic:[8,9,12,13,17,24],mai:[5,11,12,16,17,18,20,24],main:[1,11],maintain:12,major:17,make:[2,14,18,19,23,24],manag:[8,24],mani:[6,14,16,18,24],map:6,mark:8,marshmallow:6,mask_typ:[4,5],matter:4,max_node_spars:4,maxim:[4,13],maximum:8,maxpool:24,mean:24,measur:[4,6,8,14,16,17,18,19,20,24],memori:24,mention:[22,23],menu:20,messag:[12,16],metadata:[6,24],metric:[4,6,11,16,20],might:[14,16,17,18,20],millisecond:[17,24],minim:[14,21],minimum:19,minut:9,miss:6,ml_engines_error:7,mod:4,mod_end_epoch:4,mod_start_epoch:4,modal:11,model:[0,1,2,3,4,6,8,9,12,13,14,15,20,21,22,24,25],model_analysi:4,model_id:[5,8],model_path:4,model_repo:[0,1],modelfrompathjobwork:8,modelfromrepojobwork:8,modelrepoarchitectureschema:6,modelrepodatasetschema:6,modelrepodomainschema:6,modelrepomodeldescschema:6,modelrepomodelmetricschema:6,modelrepomodelperfschema:6,modelrepomodelschema:6,modif:19,modifi:[2,4,5,6,14,21,22,24,25],modifier_id:5,modul:[0,9],more:[11,13,17,18,19,24],most:[11,17,18,20],move:[11,19],much:[11,15,16,18,19,24],multi:6,multipl:[5,6,13,15,16,19,20],must:[4,5,8,11,19],name:[4,5,8,15,16,17,18,24],namespac:1,navig:[11,13,14,15,17,18,23],need:[9,11,12,14,15,19,21],nest:5,network:[1,9,11,12,15,18,24],neural:[1,8,9,12,13,15,17,24],next:[8,12,13,14,15,16,17,18,19,20,21,22,23,24],nightli:9,node:[4,5,6,17,24],node_id:4,node_overrid:4,none:[4,5,6,8],note:[5,11,15,16,17,18,19,20],notic:19,npz:8,number:[4,7,8,16,18,19,24],numer:16,object:[4,5,6,8,16],occur:[6,19],offici:9,offlin:16,often:19,oldest:8,onc:[8,11,14,15,19],one:[5,8,11,15,19,24],one_shot:8,onli:[4,5,6,8,11,15,19],onlin:16,onnx:[7,8,11,14,15,17,20,24],onscreen:12,open:[9,11,14,19,24,25],oper:[9,12,16,17,24],ops:[6,24],opt:[6,16],optim:[1,2,3,4,5,6,9,12,13,15,16,17,18,20,21,24,25],optim_const:3,optim_id:[4,5],optim_lr_sched_default_mod:4,optim_lr_sched_updat:4,optim_pruning_updat:4,optim_trainable_default_nod:4,optim_trainable_updat:4,optim_updat:4,optim_validate_and_get_project_by_id:4,optimepoch:4,option:[1,4,5,6,8,11,12,13,14,16,17,19,20],order:[10,20,24],origin:[4,11,15,17,18,19,20,23,24],ort:[17,24],ort_cpu:7,ort_gpu:7,other:[1,17,19,24],otherwis:[4,8,19],out:[8,10,11,15,16,19,24],overrid:[4,5,22],overridden:4,overview:[13,25],own:10,packag:[0,9,11],page:[11,13,15],param:[4,5,9,19,24,25],paramet:[1,4,5,6,8,14,16,18,24],params_baselin:5,part:[15,21,24],partial:6,pass:[6,15,24],path:[5,6,8,11,12,15],peewe:5,pend:[5,8],per:[16,17,19,24],percentag:[17,24],perf:[4,5,6,8],perf_analysi:4,perf_rescal:4,perform:[2,4,5,6,8,9,11,12,13,14,15,16,18,19,24,25],performance_metr:4,perhap:22,pip:[10,13],pipelin:[9,11],place:[11,19],plan:12,platform:21,playhous:5,pleas:12,point:[8,11,16,17,24],pool:24,popup:11,port:[1,11],portion:[1,17],possibl:[17,19,24],post:12,potenti:[7,9,12,14,17],practic:14,practition:[9,12],present:24,preset:19,previou:15,primary_kei:5,problem:17,procedur:15,process:[9,12,19,21,22,24],product:12,profil:[2,4,5,6,8,9,11,14,15,19,24,25],profile_id:[5,8],profile_loss:[4,5],profile_loss_id:[4,5],profile_perf:[4,5],profile_perf_id:[4,5],profiles_loss:5,profiles_perf:5,program:24,progress:[5,6,8],project:[0,1,8,9,14,16,17,18,22,23,24,25],project_data:8,project_id:[4,5,8],projectavailablemodelmodificationsschema:6,projectbenchmark:[4,5],projectbenchmark_set:5,projectbenchmarkdoesnotexist:5,projectbenchmarkresultschema:6,projectbenchmarkresultsschema:6,projectbenchmarkschema:6,projectdata:[4,5],projectdata_set:5,projectdatadoesnotexist:5,projectdataschema:6,projectdoesnotexist:5,projectextschema:6,projectlossprofil:[4,5],projectlossprofile_set:5,projectlossprofiledoesnotexist:5,projectlossprofileschema:6,projectmodel:[4,5],projectmodel_set:5,projectmodelanalysisschema:6,projectmodeldoesnotexist:5,projectmodelschema:6,projectoptim:[4,5],projectoptimization_set:5,projectoptimizationdoesnotexist:5,projectoptimizationmodifierestimationsschema:6,projectoptimizationmodifierlrexponentialargsschema:6,projectoptimizationmodifierlrmultistepargsschema:6,projectoptimizationmodifierlrschedul:[4,5],projectoptimizationmodifierlrscheduledoesnotexist:5,projectoptimizationmodifierlrscheduleschema:6,projectoptimizationmodifierlrschema:6,projectoptimizationmodifierlrsetargsschema:6,projectoptimizationmodifierlrstepargsschema:6,projectoptimizationmodifierprun:[4,5],projectoptimizationmodifierpruningdoesnotexist:5,projectoptimizationmodifierpruningnodemetadataschema:6,projectoptimizationmodifierpruningnodeschema:6,projectoptimizationmodifierpruningschema:6,projectoptimizationmodifierquant:5,projectoptimizationmodifierquantizationdoesnotexist:5,projectoptimizationmodifierquantizationnodeschema:6,projectoptimizationmodifierquantizationschema:6,projectoptimizationmodifiertrain:[4,5],projectoptimizationmodifiertrainabledoesnotexist:5,projectoptimizationmodifiertrainablenodeschema:6,projectoptimizationmodifiertrainableschema:6,projectoptimizationschema:6,projectperfprofil:[4,5],projectperfprofile_set:5,projectperfprofiledoesnotexist:5,projectperfprofileschema:6,projectprofileanalysisschema:6,projectprofilemeasurementschema:6,projectprofilemeasurementsschema:6,projectprofilemodelopsbaselinemeasurementsschema:6,projectprofilemodelopsmeasurementsschema:6,projectprofileopbaselinemeasurementschema:6,projectprofileopmeasurementsschema:6,projectprofileopschema:6,projectprofileschema:6,projects_benchmark:[0,1],projects_data:[0,1],projects_model:[0,1,4],projects_optim:[0,1],projects_optimizations_prun:[1,2],projects_profil:[0,1,4],projectschema:6,proper:[8,11],properli:11,properti:[4,5,8],provid:[4,7,11,12,14,16,17,18,19,22],prunabl:[4,18],prunable_param:4,prune:[4,5,6,8,14,16,17,18,22,24,25],pruning_end_epoch:4,pruning_epoch:4,pruning_estim:[5,8],pruning_estimation_typ:[5,8],pruning_modifi:5,pruning_set:4,pruning_start_epoch:4,pruning_structur:[5,8],pruning_update_frequ:4,pruningmodelevalu:4,pruningnodeevalu:4,pruningset:4,put:14,pypi:9,python:10,python_valu:5,pytorch:[3,15,17,21],pytorch__integr:[1,2],pytorch__train:[1,2],quantiz:[5,6,8,14,18,19,24],quantization_modifi:5,quantized_estim:[5,8],quantized_estimation_typ:5,queri:6,quick:9,quickli:[14,16],rais:[4,6,8],raise_not_found:4,ran:[17,19,20,24],rang:[18,19,24],rapidli:[9,12],rate:[5,22,24,25],rather:[14,15,19,20,24],raw:6,read:11,readi:[16,17,18,19],real:16,recent:20,recip:9,recommend:[4,10],recov:[18,19,22,24],recoveri:[4,11,18,19,24],redistribut:19,reduc:[18,24],reduct:[18,24],redund:18,refer:15,referenc:16,reflect:23,refresh:8,registri:8,rel:[18,19],relat:[2,6,8],releas:[11,12,18],relev:24,relu:24,remot:[11,15],remov:[9,19,24,25],repo:[2,6,8],report:6,repositori:[9,10,11],repres:[17,19],reproduc:12,request:[2,9,12],requir:[6,11,12,16,19,24],rescal:4,research:[9,12],respond:[14,18,24],respons:6,responsejobschema:6,responsejobsschema:6,responsemodelrepomodel:6,responseprojectbenchmarkdeletedschema:6,responseprojectbenchmarkschema:6,responseprojectbenchmarksschema:6,responseprojectdatadeletedschema:6,responseprojectdataschema:6,responseprojectdatasingleschema:6,responseprojectdeletedschema:6,responseprojectextschema:6,responseprojectlossprofileschema:6,responseprojectlossprofilesschema:6,responseprojectmodelanalysisschema:6,responseprojectmodeldeletedschema:6,responseprojectmodelschema:6,responseprojectoptimizationdeletedschema:6,responseprojectoptimizationframeworksavailablesamplesschema:6,responseprojectoptimizationframeworksavailableschema:6,responseprojectoptimizationmodifierdeletedschema:6,responseprojectoptimizationmodifiersavail:6,responseprojectoptimizationmodifiersbestestim:6,responseprojectoptimizationschema:6,responseprojectoptimizationsschema:6,responseprojectperfprofileschema:6,responseprojectperfprofilesschema:6,responseprojectprofiledeletedschema:6,responseprojectschema:6,responseprojectsschema:6,responsesysteminfo:6,restructur:24,result:[4,5,6,9,11,15,18,19,20,22,25],retain:16,retrain:[11,14,17,18,19,24],retriev:[4,8],review:[9,14,16,22,23,25],rewrit:21,right:[11,13,19,20],root:[1,5],root_path:5,rough:18,rout:[2,6],rule:11,run:[1,6,8,9,11,13,14,15,16,17,18,22,24,25],runtim:[17,20,24],same:[15,20],sampl:[5,6,11,24],satisfi:[14,19],save:[5,8,19,22,23],scale:[9,12,20],scenario:20,schedul:[4,5,6,19,24],schema:[0,1],schemaopt:6,scheme:16,screen:[9,11,15,17,19,21,25],screenshot:12,script:[1,11],scroll:19,search:6,searchjobsschema:6,searchmodelrepomodel:6,searchprojectbenchmarksschema:6,searchprojectdataschema:6,searchprojectoptimizationsschema:6,searchprojectprofilesschema:6,searchprojectsschema:6,second:[16,17,24],section:[14,17,18,19,23],see:[11,16,17,18,19,20,24],select:[11,15,16,17,19,20,24],sens:19,sensit:[4,9,11,14,24,25],separ:[8,11,24],sequenc:[5,6,24],sequenti:24,seri:4,serial:6,serv:2,server:[1,2,5,6,8,11,15],set:[1,4,5,6,7,8,9,11,14,15,17,18,19,20,22,24,25],set_logging_level:1,setprojectdatafromschema:6,setprojectmodelfromschema:6,setup:[1,2,3,4,5,16,17,18,24],setup_filesystem:5,sever:15,share:12,shot:11,should:[4,8,16,19,22,24],show:[9,11,14,16,17,18,19,20,24],shown:[11,17],shuffl:[17,24],side:15,signific:[17,18],significantli:[18,24],simpl:[9,14],simpli:[15,24],simplifi:[9,12],singl:[6,9,13,24,25],size:[5,8,9,12,15,16,17,18,20,24],slide:[9,12],slider:19,smaller:[14,17,24],smallest:24,softmax:24,softwar:12,some:[6,11],sort:20,sourc:[1,3,4,5,6,7,8,15],space:15,spars:[9,14,17,19],sparse_cost:4,sparse_training_avail:4,sparseml:[3,9,11,15,21],sparsezoo:9,sparsif:24,sparsifi:[10,11,15,16,17,18,21,22,23,24,25],sparsiti:[4,5,19,22,24],special:15,specif:[4,6,17,20,24],specifi:[11,18,19,20,24],speed:[9,11,12,17],speedup:[17,19,24],spent:17,sqlite_ext:5,stabil:19,stabilization_epoch:4,stabl:9,stage:19,standard:1,start:[4,5,8,9,11,15,19,20,24,25],start_epoch:[4,5],start_fine_tuning_epoch:4,startup:8,state:[5,8,9],statu:5,step:[4,6,8,12,13,14,16,17,18,19,20,21,22,23,24],storag:5,store:[5,6,8],str:[1,3,4,5,6,7,8],string:[5,6],structur:4,structurally_prun:4,sub:8,subclass:8,subgraph:17,submit:12,submodul:[0,9],subpackag:[0,9],subsequ:8,substitut:11,suggest:12,suit:12,summari:[9,12,24,25],support:[9,12],sure:12,system:[0,1,5,8,10,11,16,19,22,24],systeminfo:6,tabl:19,take:[16,17,19,24],taken:19,tar:8,target:[11,16],techniqu:[12,14,19,24],tell:24,tensor:3,tensorflow:[15,17,21],tensorflow__integr:[1,2],term:[9,22,23,25],termin:11,test:10,textfield:5,than:[4,14,15,19,20,24],thei:[14,16,20,24],them:8,theoret:[16,17,24],therefor:[11,16,17],thi:[4,8,9,10,11,14,15,16,17,18,19,20,21,22,23,24,25],those:[11,17,18,19,24],thread:[8,24],three:[14,17,18,19,20,23],through:[8,11,17,19,24],throughout:[15,16,19,22,23],throughput:[16,17],tied:[17,19],time:[4,8,14,15,16,17,19,24],timestamp:5,to_dict_valu:4,took:[17,24],tool:[9,12,24],tooltip:19,top:19,torch:3,total:[18,24],tour:[9,10],track:5,train:[3,4,9,11,14,21,22,23,24,25],train_dataset:3,train_setup:3,trainabl:[4,5,6],trainable_modifi:5,training_epoch:[4,5],training_final_lr:4,training_init_lr:4,training_lr_fin:5,training_lr_init:5,training_optim:5,transfer:[14,19],tune:[4,19],tupl:4,twice:19,two:[17,18,19,20],type:[4,5,6,8,11,13,17,18,19,24],type_:5,typic:24,ui_path:1,ultim:9,uncomplet:8,under:[8,11],understand:15,unindex:5,union:[3,4,6,8],uniqu:[5,15,24],unknown:6,unpreced:9,unspecifi:15,unstructur:8,unsur:16,until:8,updat:[4,5,6,8,19],update_frequ:[4,5],updateprojectoptimizationschema:6,upload:[6,11,14,15],upper:[11,13],uri:[6,8],url:[6,8,11,15],use:[4,6,8,11,12,15,16,19,20,22,24],used:[1,5,6,11,12,15,16,17,18,19,20,22,24],user:[4,9,10,11,12,24],uses:24,using:[10,11,12,14,15,19,20,24],util:[0,1,2,3,17,24],val_dataset:3,vale:4,valid:[4,5,6,7],validate_filesystem:5,validate_model_data:4,validate_pruning_nod:4,validationerror:6,valu:[4,5,6,7,14,17,18,19,20,22,24],valuabl:[15,24],valuerescal:4,varchar:5,vari:17,variou:[16,17,24],verbose_nam:5,veri:18,version:[12,14,15,20],versioninfoschema:6,via:9,view:[16,24],virtual:10,visit:11,visual:[9,12,17,19],vnni:24,wai:[12,15,16,17,19,24],want:[14,15,16,17,18,19,20,24],warmup:8,warmup_iterations_per_check:[5,8],web:11,websit:9,week:9,weight:[4,17,18,24],weight_magnitud:8,welcom:[9,25],well:[16,17,18,24],went:17,were:[17,18,24],what:[4,17,19,24],when:[4,7,14,15,16,17,18,19,24],where:[5,9,11,17,24],which:[13,15,16,17,18,19,20,24],who:[9,12],width:24,window:11,within:[8,24],without:[8,14,16,17,24],won:8,work:[5,6,8,14,21],worker:[0,1,6],worker_arg:5,workflow:[9,11,14],working_dir:[1,3,5],would:[5,17,18,22],wrapper:8,yaml:4,yet:20,yml:[14,21,22],you:[9,11,12,14,15,16,17,18,19,20,21,22,23,24,25],your:[9,10,11,12,13,14,15,17,18,19,20,21,22,23,24],zero:18},titles:["sparsify","sparsify package","sparsify.blueprints package","sparsify.blueprints.code_samples package","sparsify.blueprints.utils package","sparsify.models package","sparsify.schemas package","sparsify.utils package","sparsify.workers package","Sparsify 0.1","Installation","Quick Tour","Welcome to Sparsify","Installing and Launching Sparsify","Sparsify Overview","Analyze","Profiling Your Model","Reviewing Performance Profiles","Reviewing Loss Profiles","Optimize","Benchmarking","Integrate","Optimization Config File and Code for Optimization","Settings","Key Concepts/Features/Terms","User Guide"],titleterms:{"export":[11,19],"new":[11,13,15,17,18],Adding:[17,18],about:12,addit:13,analyz:[11,14,15],app:1,base:[5,8],base_manag:8,base_wrapp:8,benchmark:20,blueprint:[2,3,4],can:13,code:22,code_sampl:3,compar:20,concept:24,config:22,content:[1,2,3,4,5,6,7,8],count:18,creat:15,displai:13,engin:20,error:[2,6],exist:[13,15],featur:24,feedback:12,file:22,from:13,guid:[12,25],help:12,helper:[4,6],histori:9,infer:20,inform:13,instal:[10,13],integr:[14,21],job:[2,5,6],kei:24,launch:13,layer:[17,18],learn:[9,19],log:1,loss:18,model:[5,11,16,17,18,19],model_repo:[2,6],modifi:19,modul:[1,2,3,4,5,6,7,8],more:9,open:[13,15],optim:[11,14,19,22],overview:[9,14],packag:[1,2,3,4,5,6,7,8],param:18,perform:17,product:9,profil:[16,17,18],project:[2,4,5,6,11,13,15],projects_benchmark:[2,4,5,6,8],projects_data:[2,4,5,6,8],projects_model:[2,5,6,8],projects_optim:[2,4,5,6],projects_optimizations_prun:4,projects_profil:[2,5,6,8],prune:19,pytorch__integr:3,pytorch__train:3,quick:11,rate:19,recip:11,relat:9,releas:9,remov:20,resourc:9,result:17,review:[17,18],run:[19,20],schema:6,screen:13,sensit:18,set:23,singl:20,sparsifi:[0,1,2,3,4,5,6,7,8,9,12,13,14,19],start:13,submodul:[1,2,3,4,5,6,7,8],subpackag:[1,2],summari:[17,18,19],system:[2,6,7],tensorflow__integr:3,term:24,thi:12,tour:11,train:19,user:25,util:[4,5,7],welcom:12,worker:8,you:13,your:16}}) \ No newline at end of file +Search.setIndex({docnames:["api/modules","api/sparsify","api/sparsify.blueprints","api/sparsify.blueprints.code_samples","api/sparsify.blueprints.utils","api/sparsify.models","api/sparsify.schemas","api/sparsify.utils","api/sparsify.workers","index","installation","quicktour","userguide/01-intro","userguide/02-install-sparsify","userguide/03-sparsify-overview","userguide/04-analyze","userguide/04a-profiling-your-model","userguide/04b-reviewing-performance-profiles","userguide/04c-reviewing-loss-profiles","userguide/05-optimize","userguide/05a-benchmark","userguide/06-integrate","userguide/06a-optimize-config","userguide/07-settings","userguide/08-key-terms","userguide/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["api/modules.rst","api/sparsify.rst","api/sparsify.blueprints.rst","api/sparsify.blueprints.code_samples.rst","api/sparsify.blueprints.utils.rst","api/sparsify.models.rst","api/sparsify.schemas.rst","api/sparsify.utils.rst","api/sparsify.workers.rst","index.rst","installation.md","quicktour.md","userguide/01-intro.md","userguide/02-install-sparsify.md","userguide/03-sparsify-overview.md","userguide/04-analyze.md","userguide/04a-profiling-your-model.md","userguide/04b-reviewing-performance-profiles.md","userguide/04c-reviewing-loss-profiles.md","userguide/05-optimize.md","userguide/05a-benchmark.md","userguide/06-integrate.md","userguide/06a-optimize-config.md","userguide/07-settings.md","userguide/08-key-terms.md","userguide/index.rst"],objects:{"":{sparsify:[1,0,0,"-"]},"sparsify.app":{main:[1,1,1,""],run:[1,1,1,""]},"sparsify.blueprints":{code_samples:[3,0,0,"-"],errors:[2,0,0,"-"],jobs:[2,0,0,"-"],model_repo:[2,0,0,"-"],projects:[2,0,0,"-"],projects_benchmarks:[2,0,0,"-"],projects_data:[2,0,0,"-"],projects_model:[2,0,0,"-"],projects_optimizations:[2,0,0,"-"],projects_profiles:[2,0,0,"-"],system:[2,0,0,"-"],ui:[2,0,0,"-"],utils:[4,0,0,"-"]},"sparsify.blueprints.code_samples":{pytorch__training:[3,0,0,"-"]},"sparsify.blueprints.code_samples.pytorch__training":{train:[3,1,1,""],train_setup:[3,1,1,""]},"sparsify.blueprints.utils":{helpers:[4,0,0,"-"],projects:[4,0,0,"-"],projects_benchmark:[4,0,0,"-"],projects_data:[4,0,0,"-"],projects_optimizations:[4,0,0,"-"],projects_optimizations_pruning:[4,0,0,"-"]},"sparsify.blueprints.utils.helpers":{HTTPNotFoundError:[4,2,1,""]},"sparsify.blueprints.utils.projects":{get_project_by_id:[4,1,1,""],get_project_model_by_project_id:[4,1,1,""]},"sparsify.blueprints.utils.projects_benchmark":{get_project_benchmark_by_ids:[4,1,1,""]},"sparsify.blueprints.utils.projects_data":{get_project_data_by_ids:[4,1,1,""],validate_model_data:[4,1,1,""]},"sparsify.blueprints.utils.projects_optimizations":{OptimEpochs:[4,3,1,""],create_config:[4,1,1,""],default_epochs_distribution:[4,1,1,""],default_pruning_settings:[4,1,1,""],get_profiles_by_id:[4,1,1,""],get_project_optimizer_by_ids:[4,1,1,""],optim_lr_sched_default_mods:[4,1,1,""],optim_lr_sched_updater:[4,1,1,""],optim_pruning_updater:[4,1,1,""],optim_trainable_default_nodes:[4,1,1,""],optim_trainable_updater:[4,1,1,""],optim_updater:[4,1,1,""],optim_validate_and_get_project_by_id:[4,1,1,""],sparse_training_available:[4,1,1,""],validate_pruning_nodes:[4,1,1,""]},"sparsify.blueprints.utils.projects_optimizations.OptimEpochs":{end_epoch:[4,4,1,""],fine_tuning_epochs:[4,4,1,""],fine_tuning_start_epoch:[4,4,1,""],pruning_end_epoch:[4,4,1,""],pruning_epochs:[4,4,1,""],pruning_start_epoch:[4,4,1,""],pruning_update_frequency:[4,4,1,""],stabilization_epochs:[4,4,1,""],start_epoch:[4,4,1,""],training_epochs:[4,4,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning":{PruningModelEvaluator:[4,3,1,""],PruningSettings:[4,3,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning.PruningModelEvaluator":{EVAL_SENSITIVITY_SPARSITY:[4,5,1,""],MAX_NODE_SPARSITY:[4,5,1,""],apply_node_overrides:[4,4,1,""],eval_baseline:[4,4,1,""],eval_pruning:[4,4,1,""],to_dict_values:[4,4,1,""]},"sparsify.blueprints.utils.projects_optimizations_pruning.PruningSettings":{balance_perf_loss:[4,4,1,""],filter_min_perf_gain:[4,4,1,""],filter_min_recovery:[4,4,1,""],filter_min_sparsity:[4,4,1,""],mask_type:[4,4,1,""],sparsity:[4,4,1,""]},"sparsify.log":{get_main_logger:[1,1,1,""],get_root_logger:[1,1,1,""],set_logging_level:[1,1,1,""]},"sparsify.models":{base:[5,0,0,"-"],jobs:[5,0,0,"-"],projects:[5,0,0,"-"],projects_benchmark:[5,0,0,"-"],projects_data:[5,0,0,"-"],projects_model:[5,0,0,"-"],projects_optimizations:[5,0,0,"-"],projects_profiles:[5,0,0,"-"],utils:[5,0,0,"-"]},"sparsify.models.base":{BaseCreatedModifiedModel:[5,3,1,""],BaseModel:[5,3,1,""],CSVField:[5,3,1,""],CSVFloatField:[5,3,1,""],CSVIntField:[5,3,1,""],FileStorage:[5,3,1,""],ListObjField:[5,3,1,""]},"sparsify.models.base.BaseCreatedModifiedModel":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],id:[5,5,1,""],modified:[5,5,1,""],save:[5,4,1,""]},"sparsify.models.base.BaseModel":{DoesNotExist:[5,5,1,""],id:[5,5,1,""],refresh:[5,4,1,""]},"sparsify.models.base.CSVField":{db_value:[5,4,1,""],python_value:[5,4,1,""]},"sparsify.models.base.CSVFloatField":{python_value:[5,4,1,""]},"sparsify.models.base.CSVIntField":{python_value:[5,4,1,""]},"sparsify.models.base.FileStorage":{init:[5,4,1,""],root_path:[5,4,1,""]},"sparsify.models.base.ListObjField":{db_value:[5,4,1,""],python_value:[5,4,1,""]},"sparsify.models.jobs":{Job:[5,3,1,""],JobStatus:[5,3,1,""],JobStatusField:[5,3,1,""]},"sparsify.models.jobs.Job":{DoesNotExist:[5,5,1,""],baseprojectprofile_set:[5,5,1,""],created:[5,5,1,""],error:[5,5,1,""],job_id:[5,5,1,""],modified:[5,5,1,""],progress:[5,5,1,""],project_id:[5,5,1,""],projectbenchmark_set:[5,5,1,""],projectdata_set:[5,5,1,""],projectlossprofile_set:[5,5,1,""],projectmodel_set:[5,5,1,""],projectperfprofile_set:[5,5,1,""],save:[5,4,1,""],status:[5,5,1,""],type_:[5,5,1,""],worker_ack:[5,5,1,""],worker_args:[5,5,1,""]},"sparsify.models.jobs.JobStatus":{canceled:[5,5,1,""],canceling:[5,5,1,""],completed:[5,5,1,""],error:[5,5,1,""],pending:[5,5,1,""],started:[5,5,1,""]},"sparsify.models.jobs.JobStatusField":{db_value:[5,4,1,""],field_type:[5,5,1,""],python_value:[5,4,1,""]},"sparsify.models.projects":{BaseProjectModel:[5,3,1,""],Project:[5,3,1,""]},"sparsify.models.projects.BaseProjectModel":{DoesNotExist:[5,5,1,""],delete_filesystem:[5,4,1,""],id:[5,5,1,""],setup_filesystem:[5,4,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects.Project":{DoesNotExist:[5,5,1,""],benchmarks:[5,5,1,""],created:[5,5,1,""],data:[5,5,1,""],delete_filesystem:[5,4,1,""],description:[5,5,1,""],dir_path:[5,4,1,""],dir_size:[5,4,1,""],models:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],optims:[5,5,1,""],profiles_loss:[5,5,1,""],profiles_perf:[5,5,1,""],project_id:[5,5,1,""],save:[5,4,1,""],setup_filesystem:[5,4,1,""],training_epochs:[5,5,1,""],training_lr_final:[5,5,1,""],training_lr_init:[5,5,1,""],training_optimizer:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_benchmark":{ProjectBenchmark:[5,3,1,""]},"sparsify.models.projects_benchmark.ProjectBenchmark":{DoesNotExist:[5,5,1,""],batch_sizes:[5,5,1,""],benchmark_id:[5,5,1,""],core_counts:[5,5,1,""],created:[5,5,1,""],inference_models:[5,5,1,""],instruction_sets:[5,5,1,""],iterations_per_check:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],result:[5,5,1,""],source:[5,5,1,""],warmup_iterations_per_check:[5,5,1,""]},"sparsify.models.projects_data":{ProjectData:[5,3,1,""]},"sparsify.models.projects_data.ProjectData":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],data_id:[5,5,1,""],delete_filesystem:[5,4,1,""],dir_path:[5,4,1,""],file:[5,5,1,""],file_path:[5,4,1,""],job:[5,5,1,""],job_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],setup_filesystem:[5,4,1,""],source:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_model":{ProjectModel:[5,3,1,""]},"sparsify.models.projects_model.ProjectModel":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],delete_filesystem:[5,4,1,""],dir_path:[5,4,1,""],file:[5,5,1,""],file_path:[5,4,1,""],job:[5,5,1,""],job_id:[5,5,1,""],model_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],setup_filesystem:[5,4,1,""],source:[5,5,1,""],validate_filesystem:[5,4,1,""]},"sparsify.models.projects_optimizations":{ProjectOptimization:[5,3,1,""],ProjectOptimizationModifierLRSchedule:[5,3,1,""],ProjectOptimizationModifierPruning:[5,3,1,""],ProjectOptimizationModifierQuantization:[5,3,1,""],ProjectOptimizationModifierTrainable:[5,3,1,""]},"sparsify.models.projects_optimizations.ProjectOptimization":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],lr_schedule_modifiers:[5,5,1,""],modified:[5,5,1,""],name:[5,5,1,""],notes:[5,5,1,""],optim_id:[5,5,1,""],profile_loss:[5,5,1,""],profile_loss_id:[5,5,1,""],profile_perf:[5,5,1,""],profile_perf_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],pruning_modifiers:[5,5,1,""],quantization_modifiers:[5,5,1,""],start_epoch:[5,5,1,""],trainable_modifiers:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierLRSchedule":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],final_lr:[5,5,1,""],init_lr:[5,5,1,""],lr_mods:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierPruning":{DoesNotExist:[5,5,1,""],balance_perf_loss:[5,5,1,""],compression:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],est_loss_sensitivity:[5,5,1,""],est_perf_sensitivity:[5,5,1,""],est_recovery:[5,5,1,""],est_time:[5,5,1,""],est_time_baseline:[5,5,1,""],est_time_gain:[5,5,1,""],filter_min_perf_gain:[5,5,1,""],filter_min_recovery:[5,5,1,""],filter_min_sparsity:[5,5,1,""],flops:[5,5,1,""],flops_baseline:[5,5,1,""],flops_gain:[5,5,1,""],mask_type:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],params:[5,5,1,""],params_baseline:[5,5,1,""],sparsity:[5,5,1,""],start_epoch:[5,5,1,""],update_frequency:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierQuantization":{DoesNotExist:[5,5,1,""],balance_perf_loss:[5,5,1,""],compression:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],est_loss_sensitivity:[5,5,1,""],est_perf_sensitivity:[5,5,1,""],est_recovery:[5,5,1,""],est_time:[5,5,1,""],est_time_baseline:[5,5,1,""],est_time_gain:[5,5,1,""],filter_min_perf_gain:[5,5,1,""],filter_min_recovery:[5,5,1,""],flops:[5,5,1,""],flops_baseline:[5,5,1,""],flops_gain:[5,5,1,""],level:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],params:[5,5,1,""],params_baseline:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_optimizations.ProjectOptimizationModifierTrainable":{DoesNotExist:[5,5,1,""],created:[5,5,1,""],end_epoch:[5,5,1,""],modified:[5,5,1,""],modifier_id:[5,5,1,""],nodes:[5,5,1,""],optim:[5,5,1,""],optim_id:[5,5,1,""],start_epoch:[5,5,1,""]},"sparsify.models.projects_profiles":{BaseProjectProfile:[5,3,1,""],ProjectLossProfile:[5,3,1,""],ProjectPerfProfile:[5,3,1,""]},"sparsify.models.projects_profiles.BaseProjectProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],source:[5,5,1,""]},"sparsify.models.projects_profiles.ProjectLossProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],created:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],projectoptimization_set:[5,5,1,""],pruning_estimation_type:[5,5,1,""],pruning_estimations:[5,5,1,""],pruning_structure:[5,5,1,""],quantized_estimation_type:[5,5,1,""],quantized_estimations:[5,5,1,""],source:[5,5,1,""]},"sparsify.models.projects_profiles.ProjectPerfProfile":{DoesNotExist:[5,5,1,""],analysis:[5,5,1,""],batch_size:[5,5,1,""],core_count:[5,5,1,""],created:[5,5,1,""],instruction_sets:[5,5,1,""],iterations_per_check:[5,5,1,""],job:[5,5,1,""],job_id:[5,5,1,""],name:[5,5,1,""],profile_id:[5,5,1,""],project:[5,5,1,""],project_id:[5,5,1,""],projectoptimization_set:[5,5,1,""],pruning_estimations:[5,5,1,""],quantized_estimations:[5,5,1,""],source:[5,5,1,""],warmup_iterations_per_check:[5,5,1,""]},"sparsify.models.utils":{database_setup:[5,1,1,""]},"sparsify.schemas":{errors:[6,0,0,"-"],helpers:[6,0,0,"-"],jobs:[6,0,0,"-"],model_repo:[6,0,0,"-"],projects:[6,0,0,"-"],projects_benchmarks:[6,0,0,"-"],projects_data:[6,0,0,"-"],projects_model:[6,0,0,"-"],projects_optimizations:[6,0,0,"-"],projects_profiles:[6,0,0,"-"],system:[6,0,0,"-"]},"sparsify.schemas.errors":{ErrorSchema:[6,3,1,""]},"sparsify.schemas.errors.ErrorSchema":{opts:[6,5,1,""]},"sparsify.schemas.helpers":{EnumField:[6,3,1,""],data_dump_and_validation:[6,1,1,""]},"sparsify.schemas.helpers.EnumField":{deserialize:[6,4,1,""]},"sparsify.schemas.jobs":{JobProgressSchema:[6,3,1,""],JobSchema:[6,3,1,""],ResponseJobSchema:[6,3,1,""],ResponseJobsSchema:[6,3,1,""],SearchJobsSchema:[6,3,1,""]},"sparsify.schemas.jobs.JobProgressSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.JobSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.ResponseJobSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.ResponseJobsSchema":{opts:[6,5,1,""]},"sparsify.schemas.jobs.SearchJobsSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo":{ModelRepoArchitectureSchema:[6,3,1,""],ModelRepoDatasetSchema:[6,3,1,""],ModelRepoDomainSchema:[6,3,1,""],ModelRepoModelDescSchema:[6,3,1,""],ModelRepoModelMetricSchema:[6,3,1,""],ModelRepoModelPerfSchema:[6,3,1,""],ModelRepoModelSchema:[6,3,1,""],ResponseModelRepoModels:[6,3,1,""],SearchModelRepoModels:[6,3,1,""]},"sparsify.schemas.model_repo.ModelRepoArchitectureSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoDatasetSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoDomainSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelDescSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelMetricSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelPerfSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ModelRepoModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.ResponseModelRepoModels":{opts:[6,5,1,""]},"sparsify.schemas.model_repo.SearchModelRepoModels":{opts:[6,5,1,""]},"sparsify.schemas.projects":{CreateUpdateProjectSchema:[6,3,1,""],DeleteProjectSchema:[6,3,1,""],ProjectExtSchema:[6,3,1,""],ProjectSchema:[6,3,1,""],ResponseProjectDeletedSchema:[6,3,1,""],ResponseProjectExtSchema:[6,3,1,""],ResponseProjectSchema:[6,3,1,""],ResponseProjectsSchema:[6,3,1,""],SearchProjectsSchema:[6,3,1,""]},"sparsify.schemas.projects.CreateUpdateProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.DeleteProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ProjectExtSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectExtSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.ResponseProjectsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects.SearchProjectsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks":{CreateProjectBenchmarkSchema:[6,3,1,""],ProjectBenchmarkResultSchema:[6,3,1,""],ProjectBenchmarkResultsSchema:[6,3,1,""],ProjectBenchmarkSchema:[6,3,1,""],ResponseProjectBenchmarkDeletedSchema:[6,3,1,""],ResponseProjectBenchmarkSchema:[6,3,1,""],ResponseProjectBenchmarksSchema:[6,3,1,""],SearchProjectBenchmarksSchema:[6,3,1,""]},"sparsify.schemas.projects_benchmarks.CreateProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkResultSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkResultsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarkDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarkSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.ResponseProjectBenchmarksSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_benchmarks.SearchProjectBenchmarksSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data":{CreateUpdateProjectDataSchema:[6,3,1,""],ProjectDataSchema:[6,3,1,""],ResponseProjectDataDeletedSchema:[6,3,1,""],ResponseProjectDataSchema:[6,3,1,""],ResponseProjectDataSingleSchema:[6,3,1,""],SearchProjectDataSchema:[6,3,1,""],SetProjectDataFromSchema:[6,3,1,""]},"sparsify.schemas.projects_data.CreateUpdateProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.ResponseProjectDataSingleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.SearchProjectDataSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_data.SetProjectDataFromSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model":{CreateUpdateProjectModelSchema:[6,3,1,""],DeleteProjectModelSchema:[6,3,1,""],ProjectModelAnalysisSchema:[6,3,1,""],ProjectModelSchema:[6,3,1,""],ResponseProjectModelAnalysisSchema:[6,3,1,""],ResponseProjectModelDeletedSchema:[6,3,1,""],ResponseProjectModelSchema:[6,3,1,""],SetProjectModelFromSchema:[6,3,1,""]},"sparsify.schemas.projects_model.CreateUpdateProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.DeleteProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ProjectModelAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.ResponseProjectModelSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_model.SetProjectModelFromSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations":{CreateProjectOptimizationSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersLRScheduleSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersPruningSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersQuantizationSchema:[6,3,1,""],CreateUpdateProjectOptimizationModifiersTrainableSchema:[6,3,1,""],GetProjectOptimizationBestEstimatedResultsSchema:[6,3,1,""],ProjectAvailableModelModificationsSchema:[6,3,1,""],ProjectOptimizationModifierLRExponentialArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRMultiStepArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRScheduleSchema:[6,3,1,""],ProjectOptimizationModifierLRSchema:[6,3,1,""],ProjectOptimizationModifierLRSetArgsSchema:[6,3,1,""],ProjectOptimizationModifierLRStepArgsSchema:[6,3,1,""],ProjectOptimizationModifierPruningNodeSchema:[6,3,1,""],ProjectOptimizationModifierPruningSchema:[6,3,1,""],ProjectOptimizationModifierQuantizationNodeSchema:[6,3,1,""],ProjectOptimizationModifierQuantizationSchema:[6,3,1,""],ProjectOptimizationModifierTrainableNodeSchema:[6,3,1,""],ProjectOptimizationModifierTrainableSchema:[6,3,1,""],ProjectOptimizationSchema:[6,3,1,""],ResponseProjectOptimizationDeletedSchema:[6,3,1,""],ResponseProjectOptimizationFrameworksAvailableSamplesSchema:[6,3,1,""],ResponseProjectOptimizationFrameworksAvailableSchema:[6,3,1,""],ResponseProjectOptimizationModifierDeletedSchema:[6,3,1,""],ResponseProjectOptimizationModifiersAvailable:[6,3,1,""],ResponseProjectOptimizationModifiersBestEstimated:[6,3,1,""],ResponseProjectOptimizationSchema:[6,3,1,""],ResponseProjectOptimizationsSchema:[6,3,1,""],SearchProjectOptimizationsSchema:[6,3,1,""],UpdateProjectOptimizationSchema:[6,3,1,""]},"sparsify.schemas.projects_optimizations.CreateProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersLRScheduleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersPruningSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersQuantizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.CreateUpdateProjectOptimizationModifiersTrainableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.GetProjectOptimizationBestEstimatedResultsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectAvailableModelModificationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRExponentialArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRMultiStepArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRScheduleSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRSetArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierLRStepArgsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierPruningNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierPruningSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierQuantizationNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierQuantizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierTrainableNodeSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationModifierTrainableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationFrameworksAvailableSamplesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationFrameworksAvailableSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifierDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifiersAvailable":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationModifiersBestEstimated":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.ResponseProjectOptimizationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.SearchProjectOptimizationsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_optimizations.UpdateProjectOptimizationSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles":{CreateProjectLossProfileSchema:[6,3,1,""],CreateProjectPerfProfileSchema:[6,3,1,""],ProjectLossProfileSchema:[6,3,1,""],ProjectPerfProfileSchema:[6,3,1,""],ProjectProfileAnalysisSchema:[6,3,1,""],ProjectProfileMeasurementSchema:[6,3,1,""],ProjectProfileMeasurementsSchema:[6,3,1,""],ProjectProfileModelOpsBaselineMeasurementsSchema:[6,3,1,""],ProjectProfileModelOpsMeasurementsSchema:[6,3,1,""],ProjectProfileOpBaselineMeasurementSchema:[6,3,1,""],ProjectProfileOpMeasurementsSchema:[6,3,1,""],ProjectProfileOpSchema:[6,3,1,""],ProjectProfileSchema:[6,3,1,""],ResponseProjectLossProfileSchema:[6,3,1,""],ResponseProjectLossProfilesSchema:[6,3,1,""],ResponseProjectPerfProfileSchema:[6,3,1,""],ResponseProjectPerfProfilesSchema:[6,3,1,""],ResponseProjectProfileDeletedSchema:[6,3,1,""],SearchProjectProfilesSchema:[6,3,1,""]},"sparsify.schemas.projects_profiles.CreateProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.CreateProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileAnalysisSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileMeasurementSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileModelOpsBaselineMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileModelOpsMeasurementsSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpBaselineMeasurementSchema":{dump_fields:[6,5,1,""],fields:[6,5,1,""],load_fields:[6,5,1,""],opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpMeasurementsSchema":{dump_fields:[6,5,1,""],fields:[6,5,1,""],load_fields:[6,5,1,""],opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileOpSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ProjectProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectLossProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectLossProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectPerfProfileSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectPerfProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.ResponseProjectProfileDeletedSchema":{opts:[6,5,1,""]},"sparsify.schemas.projects_profiles.SearchProjectProfilesSchema":{opts:[6,5,1,""]},"sparsify.schemas.system":{ResponseSystemInfo:[6,3,1,""],SystemInfo:[6,3,1,""],VersionInfoSchema:[6,3,1,""]},"sparsify.schemas.system.ResponseSystemInfo":{opts:[6,5,1,""]},"sparsify.schemas.system.SystemInfo":{opts:[6,5,1,""]},"sparsify.schemas.system.VersionInfoSchema":{opts:[6,5,1,""]},"sparsify.utils":{system:[7,0,0,"-"]},"sparsify.utils.system":{available_ml_engines:[7,1,1,""],get_ml_sys_info:[7,1,1,""],ml_engines_errors:[7,1,1,""]},"sparsify.workers":{base:[8,0,0,"-"],manager:[8,0,0,"-"],projects_benchmark:[8,0,0,"-"],projects_data:[8,0,0,"-"],projects_model:[8,0,0,"-"],projects_profiles:[8,0,0,"-"]},"sparsify.workers.base":{JobWorker:[8,3,1,""],JobWorkerRegistry:[8,3,1,""]},"sparsify.workers.base.JobWorker":{format_args:[8,4,1,""],get_type:[8,4,1,""],job_id:[8,4,1,""],project_id:[8,4,1,""],run:[8,4,1,""]},"sparsify.workers.base.JobWorkerRegistry":{REGISTRY:[8,5,1,""],create_worker:[8,4,1,""]},"sparsify.workers.manager":{JobCancelationFailureError:[8,2,1,""],JobNotFoundError:[8,2,1,""],JobWorkerManager:[8,3,1,""]},"sparsify.workers.manager.JobWorkerManager":{cancel_job:[8,4,1,""],refresh:[8,4,1,""],shutdown:[8,4,1,""],start:[8,4,1,""]},"sparsify.workers.projects_benchmark":{CreateBenchmarkJobWorker:[8,3,1,""]},"sparsify.workers.projects_benchmark.CreateBenchmarkJobWorker":{batch_sizes:[8,4,1,""],benchmark_id:[8,4,1,""],core_counts:[8,4,1,""],format_args:[8,4,1,""],inference_models:[8,4,1,""],instruction_sets:[8,4,1,""],iterations_per_check:[8,4,1,""],model_id:[8,4,1,""],run:[8,4,1,""],warmup_iterations_per_check:[8,4,1,""]},"sparsify.workers.projects_data":{DataFromPathJobWorker:[8,3,1,""],DataFromRepoJobWorker:[8,3,1,""]},"sparsify.workers.projects_data.DataFromPathJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_data.DataFromRepoJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_model":{ModelFromPathJobWorker:[8,3,1,""],ModelFromRepoJobWorker:[8,3,1,""]},"sparsify.workers.projects_model.ModelFromPathJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_model.ModelFromRepoJobWorker":{run:[8,4,1,""]},"sparsify.workers.projects_profiles":{CreateLossProfileJobWorker:[8,3,1,""],CreatePerfProfileJobWorker:[8,3,1,""]},"sparsify.workers.projects_profiles.CreateLossProfileJobWorker":{format_args:[8,4,1,""],model_id:[8,4,1,""],profile_id:[8,4,1,""],pruning_estimation_type:[8,4,1,""],pruning_estimations:[8,4,1,""],pruning_structure:[8,4,1,""],quantized_estimations:[8,4,1,""],run:[8,4,1,""]},"sparsify.workers.projects_profiles.CreatePerfProfileJobWorker":{batch_size:[8,4,1,""],core_count:[8,4,1,""],format_args:[8,4,1,""],iterations_per_check:[8,4,1,""],pruning_estimations:[8,4,1,""],quantized_estimations:[8,4,1,""],run:[8,4,1,""],warmup_iterations_per_check:[8,4,1,""]},sparsify:{app:[1,0,0,"-"],blueprints:[2,0,0,"-"],log:[1,0,0,"-"],models:[5,0,0,"-"],schemas:[6,0,0,"-"],utils:[7,0,0,"-"],workers:[8,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","exception","Python exception"],"3":["py","class","Python class"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:exception","3":"py:class","4":"py:method","5":"py:attribute"},terms:{"100":4,"404":4,"5543":11,"960px":9,"abstract":[5,8],"case":[15,16,19,24],"class":[4,5,6,8],"default":[4,5,11,16,17],"enum":[5,6],"export":[9,14,15,21,22,24,25],"final":[4,9,12,19],"float":[4,5,16,17,24],"function":[4,5,7],"import":[7,18],"int":[1,3,4,8],"long":[17,24],"new":[4,9,14,16,20,25],"null":5,"public":[8,11],"return":[1,4,5,6,7,8,15,16,22],"static":8,"true":[4,8],"try":[18,22],"while":[6,9,14,17,19,24],Adding:[9,16,25],And:[15,24],For:[9,11,14,15,16,17,18,19,20,22,24],One:24,Such:7,The:[6,8,9,11,13,15,16,17,18,19,20,21,22,24],Then:[16,17,18,20,22],There:[18,19],These:[16,19,21],Use:[6,12,14],Used:5,Using:20,Will:4,_dataloaderjobwork:8,_hidden:5,_modelloaderjobwork:8,abl:4,about:[9,13,17,18,25],acceler:12,accept:[11,15,22],access:[8,11,19,23],accordingli:21,accuraci:[9,12,19,24],achiev:[9,12,17,24],across:[17,19,24],activ:[9,14,19,24],add:[4,17,18,19,20],added:8,addit:[8,11,14,16,19,24,25],addition:[9,11],address:11,adjust:19,advanc:12,affect:[14,15,16,17,18,19,24],after:[4,6,8,11,14,18,19,20,21,22,24],again:[14,20],algorithm:[11,14,15],alia:[4,5],all:[1,4,5,6,8,9,12,16,17,19,20,22,24],allow:[8,11,23],along:[1,11],alpha:12,alphanumer:15,alreadi:[18,19,20],also:[16,17,18,20,24],altern:9,alwai:[4,17],amount:24,analysi:[4,5,6,8,11,13,14,15,24],analyz:[9,12,13,19,25],ani:[3,4,6,7,8,12,14,15,16,21,23,24],anoth:20,anyth:[6,8],anywher:15,api:[2,9],app:[0,5,6,9],appear:17,appli:[4,9,14,16,17,19,24],applic:2,apply_node_overrid:4,approach:9,appropri:[8,20],approxim:[16,18,24],architect:17,architectur:[6,16,18,24],area:[13,17],arg:[4,5,6,8],argument:6,artifici:15,assign:4,associ:6,attr:[6,8],attribut:[6,24],autofield:5,automat:[4,9,14,15,19],automl:11,avail:[6,7,8,11,13,17,24],available_ml_engin:7,averag:[18,19,20,24],avoid:12,avx2:24,avx512:24,awai:24,awar:11,back:[15,16,17],background:8,balanc:19,balance_perf_loss:[4,5],bar:[13,14,15,17,18,23],base:[0,1,4,6,7,15,17,20,21],basecreatedmodifiedmodel:5,basecreatedmodifiedmodeldoesnotexist:5,basejobwork:8,baselin:[4,6,9,11,17,18,20,24],baseline_spars:4,basemodel:5,basemodeldoesnotexist:5,baseprofilejobwork:8,baseprojectmodel:5,baseprojectmodeldoesnotexist:5,baseprojectprofil:5,baseprojectprofile_set:5,baseprojectprofiledoesnotexist:5,basi:[17,19],basic:12,batch:[8,15,16,17,20,24],batch_siz:[3,5,8],batchnorm:24,becaus:[16,18],been:24,befor:[4,8,15,24],begin:[8,11,12,14,15,24],being:[8,16],belong:8,below:[11,19,20],benchmark:[1,2,4,5,6,8,9,12,14,16,19,24,25],benchmark_id:[4,5,8],best:[4,6,9,11,12,19],better:[9,11,17,19,24],between:[9,12,18,19],bit:24,black:13,block_4:8,blog:9,blueprint:[0,1],bool:[1,4,6,8],booleanfield:5,both:[11,16,17],bottom:11,brows:[11,15],browser:[11,15],bug:[9,12],build:9,busi:[20,22],button:[11,13,19,20,21,23],call:4,callabl:3,can:[1,5,8,9,11,14,15,16,17,18,19,20,21,22,23,24,25],cancel:[5,8,15],cancel_job:8,cannot:11,chanc:[18,19,24],chang:[14,15,16,17,19,20,21,23],charact:15,charfield:5,check:[8,10,11,12,20],choic:[5,19],choos:[11,21],chronolog:20,classif:16,classmethod:8,click:[11,15,16,17,18,19,20,21,23],clipboard:22,close:[19,24],code:[1,6,8,9,11,14,19,21,24,25],code_sampl:[1,2],collat:5,color:14,column_nam:5,com:9,combin:[9,12],come:17,command:[11,13,15],common:[11,16],compar:[9,19,24,25],comparison:[8,20],compat:13,complet:[5,8,11,15,16,18,24],compress:[5,12,14,18],comput:[15,17,24],concept:[9,22,23,25],condit:20,confid:[18,19,24],config:[4,9,21,25],config_path:3,configur:[8,11,14,15,19,21,22],confirm:11,consid:16,consider:16,consist:[1,17,18,19],consol:11,constant:17,constraint:5,constructor:8,consult:15,contain:[4,5,6,7,8,9,12],content:[0,9],context:6,continu:[11,15,16,17,18,19,20,24],contribut:[15,24],control:[19,22,24],conv:24,convers:17,convert:11,convolut:[17,24],copi:[8,11,22],core:[7,8,15,16,17,20,24],core_count:[5,8],correct:5,correctli:[4,9,11],correl:18,correspond:[18,19,21],cost:24,could:8,count:[8,9,16,17,20,24,25],cpu:[9,16,17,20,24],creat:[1,4,5,6,9,11,13,14,19,20,25],create_config:4,create_work:8,createbenchmarkjobwork:8,createlossprofilejobwork:8,createperfprofilejobwork:8,createprojectbenchmarkschema:6,createprojectlossprofileschema:6,createprojectoptimizationschema:6,createprojectperfprofileschema:6,createupdateprojectdataschema:6,createupdateprojectmodelschema:6,createupdateprojectoptimizationmodifierslrscheduleschema:6,createupdateprojectoptimizationmodifierspruningschema:6,createupdateprojectoptimizationmodifiersquantizationschema:6,createupdateprojectoptimizationmodifierstrainableschema:6,createupdateprojectschema:6,creation:11,criteria:[20,22],csv:5,csvfield:5,csvfloatfield:5,csvintfield:5,current:[4,6,7,8,11,12,14,15,17,18,19,21,24],custom:[6,19],cut:[15,24],data:[2,3,4,5,6,8,15,24],data_dump_and_valid:6,data_id:[4,5,8],data_path:4,databas:[5,6,8],database_setup:5,datafrompathjobwork:8,datafromrepojobwork:8,dataset:[3,6,9],date:5,datetimefield:5,db_column:5,db_valu:5,debian:10,debug:1,deep:[9,12],deeper:[13,17],deepspars:[7,9,13,15,17,24],default_epochs_distribut:4,default_pruning_set:4,default_train:4,defin:[17,18,24],degre:11,delet:[5,6,23],delete_filesystem:5,deleteprojectmodelschema:6,deleteprojectschema:6,dens:17,depend:[16,17,20],deploi:[9,12,16],deploy:[12,16],depth:[10,11,24],desc:6,describ:[16,19,20,22],descript:[5,15,21],deseri:6,desir:11,detail:[4,12,13,14,16,19,24],detect:16,determin:[15,16,17,19,20,24],dev:9,devic:3,dialog:[15,16,17,18,19,23],dict:[4,6,7,8],dictionari:[4,6,7,8],did:[18,22,24],differ:[11,17,19,20,22],differenti:15,dir_path:5,dir_siz:5,direct:9,directori:5,disabl:[16,20],discuss:12,disk:22,displai:[11,15,16,17,19,20,23,24,25],distribut:4,doc:9,document:[9,11,15],doe:[15,24],doesnotexist:5,doing:[8,20],domain:[6,16],done:[18,19,24],down:[17,20],download:[8,9,11],drag:15,dramat:24,drill:17,driven:9,drop:20,dump:6,dump_field:6,dump_onli:6,duplic:12,dure:[13,14,15,18,19,21,22,24],each:[4,8,14,16,17,18,19,24],easi:[9,11,12],easili:[9,11,15],ecosystem:15,edit:[9,11,19,23],editor:19,effect:[4,9,11,14,15,16,17,18],effici:17,either:[8,11,15,17,20],emgin:15,emploi:24,empti:15,enabl:[9,11,14,15,17,20,24],encod:[9,22],encompass:9,encount:[4,6,7],end:[4,9,15,19,24],end_epoch:[4,5],engin:[7,9,12,13,17,24,25],ensur:13,enter:[11,15,16,17,18,19,23],entir:[17,18],entri:11,enum_class:6,enumer:5,enumfield:6,environ:[10,11,12],epoch:[4,19,24],equat:17,error:[0,1,4,5,7,8,12],errorschema:6,est_loss_sensit:5,est_perf_sensit:5,est_recoveri:5,est_tim:5,est_time_baselin:5,est_time_gain:5,establish:19,estim:[4,6,11,14,15,17,18,19,20,24],etc:[4,7],eval_baselin:4,eval_prun:4,eval_sensitivity_spars:4,evalu:4,even:17,event:6,eventu:16,everi:19,everyth:9,exact:18,examin:20,exampl:[9,12,14,15,16,17,18,19,20,22,24],except:[4,7,8],exchang:[15,24],exclud:6,execut:[16,24],exist:[5,9,12,14,20,21,25],exit:8,expect:[4,5,6,19],experi:[10,12],explor:[21,22],exponenti:6,extend:[5,8],extens:17,extern:1,extract:8,factor:17,fals:[4,5,6,8],fast:[9,16,17,24],faster:[9,14,17,19,24],fastest:17,featur:[9,12,15,22,23,25],fed:24,feedback:[9,19,25],few:[9,11],fewer:[17,18,24],fft:9,field:[4,5,6,8,11,15],field_nam:6,field_typ:5,file:[1,2,5,6,8,9,11,12,14,15,19,21,25],file_path:5,filestorag:5,fill:11,filter:[6,19],filter_min_perf_gain:[4,5],filter_min_recoveri:[4,5],filter_min_spars:[4,5],final_lr:5,find:11,fine:[4,19],fine_tuning_epoch:4,fine_tuning_start_epoch:4,finish:11,five:14,fix:20,flask:[2,4,5,6],floatfield:5,flop:[5,16,17,19,24],flops_baselin:5,flops_gain:5,flow:[9,11,14,21,22,24],focus:[11,24],folder:5,follow:[11,12,13,15,17,18,19,24],footprint:9,foreignkeyfield:5,format:[1,8,9,11,15,22],format_arg:8,found:[4,8,9],framework:[4,6,11,12,17,21],frequenc:19,from:[1,4,5,6,8,9,10,11,12,15,16,17,18,19,20,23,24,25],full:9,further:[11,15,16,18],futur:[11,14,18,19,24],gemm:24,gener:[4,9,14,16,17,19,21,22,23,24],get:[4,6,13,14,15,17,19,20],get_main_logg:1,get_ml_sys_info:7,get_profiles_by_id:4,get_project_benchmark_by_id:4,get_project_by_id:4,get_project_data_by_id:4,get_project_model_by_project_id:4,get_project_optimizer_by_id:4,get_root_logg:1,get_typ:8,getprojectoptimizationbestestimatedresultsschema:6,github:[9,12],give:[9,19],given:[4,5,8,11,24],global_end_epoch:4,global_start_epoch:4,globalaveragepool:24,goal:[12,14,15,19,21],going:[15,17,24],good:5,gpu:9,grai:16,grain:19,graph:[17,18,19,20,24],greater:[4,19,24],guid:[9,10,15],handl:[1,2,5,6,8],happen:[11,19],has:[17,18,24],have:[4,5,11,18,20,24],held:17,help:[9,17,19,25],help_text:5,helper:[0,1,2],here:[20,24],higher:[19,24],home:11,host:[1,9,11],how:[9,14,15,16,17,18,19,21,24],howev:19,http:[9,11],httpnotfounderror:4,icon:[17,18,19],identifi:[16,17,18],ids:4,imag:16,img:9,implement:[8,9,24],improv:[9,12,14],includ:[5,6,7,8,9,12,14,17,18,21,22,23,24],inclus:11,increas:17,increasingli:19,independ:24,index:5,index_typ:5,indic:[14,16,17,18,19,20,24],individu:24,induc:9,industri:[9,12],infer:[7,8,9,11,14,15,16,17,24,25],inference_engin:8,inference_model:[5,8],inference_model_optim:8,info:[1,4,6,7],inform:[8,9,11,12,14,15,16,17,18,19,20,22,23,24,25],init:5,init_lr:5,initi:[4,5,13,19,21],input:[4,6,16,24],insight:[9,12],instal:[9,11,12,25],instanc:[5,8],instant:19,instead:[4,17,19],instruct:[7,8,15,17,24],instruction_set:[5,8],integ:5,integerfield:5,integr:[9,11,12,13,19,20,22,25],intellig:15,intens:[17,24],interact:11,intern:24,invalid:6,invok:4,involv:14,issu:12,item:[17,24],iter:8,iterations_per_check:[5,8],its:[4,6,11],job:[0,1,8],job_id:[5,8],jobcancelationfailureerror:8,jobdoesnotexist:5,jobnotfounderror:8,jobprogressschema:6,jobschema:6,jobstatu:5,jobstatusfield:5,jobwork:8,jobworkermanag:8,jobworkerregistri:8,join:4,json_dump:5,json_load:5,jsonfield:5,just:[15,16],keep:10,kei:[6,9,22,23,25],keyword:6,know:[15,24],kwarg:[5,6,8],lai:19,larg:[5,16],larger:[17,24],last:[8,18],latenc:16,later:[8,19],latest:[12,14,19,24],launch:[8,9,11,25],layer:[9,14,15,16,19,24,25],learn:[5,12,14,22,24,25],least:18,left:[11,13,15,19,23],less:[4,19],level:[1,4,5,9,19],light:12,like:16,limit:[9,11,17],line:[9,11],linux:10,list:[4,5,7,8,13,14,15,17,18,19,24],listobjfield:5,load:[5,6,9,11,15,17],load_field:6,load_onli:6,loadabl:6,local:[5,8,9,11,15],locat:[5,11],log:[0,9,24],logger:1,logging_level:1,longer:[17,24],look:[15,16,17,24],loss:[2,3,4,5,6,8,9,11,12,14,15,16,17,19,24,25],loss_analysi:4,losswrapp:3,low:24,lower:[11,22],lr_mod:[4,5],lr_sched:4,lr_schedule_modifi:5,ma_field:6,machin:[11,24],magic:[8,9,12,13,17,24],mai:[5,11,12,16,17,18,20,24],main:[1,11],maintain:12,major:17,make:[2,14,18,19,23,24],manag:[0,1,24],mani:[6,14,16,18,24],map:6,mark:8,marshmallow:6,mask_typ:[4,5],matter:4,max_node_spars:4,max_work:8,maxim:[4,13],maximum:8,maxpool:24,mean:24,measur:[6,8,14,16,17,18,19,20,24],memori:24,mention:[22,23],menu:20,messag:[12,16],metadata:[6,24],method:11,metric:[4,6,9,11,16,20],might:[14,16,17,18,20],millisecond:[17,24],minim:[14,21],minimum:19,minut:9,miss:6,ml_engines_error:7,mod:4,mod_end_epoch:4,mod_start_epoch:4,modal:11,model:[0,1,2,3,4,6,8,9,12,13,14,15,20,21,22,24,25],model_analysi:4,model_id:[5,8],model_path:4,model_repo:[0,1],modelfrompathjobwork:8,modelfromrepojobwork:8,modelrepoarchitectureschema:6,modelrepodatasetschema:6,modelrepodomainschema:6,modelrepomodeldescschema:6,modelrepomodelmetricschema:6,modelrepomodelperfschema:6,modelrepomodelschema:6,modif:19,modifi:[2,4,5,6,14,21,22,24,25],modifier_id:5,modul:[0,9],more:[11,13,17,18,19,24],most:[11,17,18,20],move:[11,19],much:[11,15,16,18,19,24],multi:6,multipl:[5,6,13,15,16,19,20],must:[4,5,8,11,19],name:[4,5,8,15,16,17,18,24],namespac:1,natur:9,navig:[11,13,14,15,17,18,23],nearli:9,need:[9,11,12,14,15,19,21],nest:5,network:[1,9,11,12,15,18,24],neural:[1,8,9,12,13,15,17,24],neuralmag:9,next:[8,12,13,14,15,16,17,18,19,20,21,22,23,24],nightli:9,node:[4,5,6,17,24],node_overrid:4,none:[4,5,6,8],note:[5,11,15,16,17,18,19,20],notic:19,npz:8,number:[4,7,8,16,18,19,24],numer:16,object:[4,5,6,8,16],occur:[6,9,19],offici:9,offlin:16,often:19,oldest:8,onc:[8,11,14,15,19],one:[5,8,11,15,19,24],one_shot:8,ones:8,onli:[4,5,6,8,9,11,15,19],onlin:16,onnx:[7,8,11,14,15,17,20,24],onscreen:12,onto:8,open:[9,11,14,19,24,25],oper:[9,12,16,17,24],ops:[6,24],opt:[6,16],optim:[1,2,3,4,5,6,9,12,13,15,16,17,18,20,21,24,25],optim_const:3,optim_id:[4,5],optim_lr_sched_default_mod:4,optim_lr_sched_updat:4,optim_pruning_updat:4,optim_trainable_default_nod:4,optim_trainable_updat:4,optim_updat:4,optim_validate_and_get_project_by_id:4,optimepoch:4,option:[1,4,5,6,8,11,12,13,14,16,17,19,20],order:[10,20,24],origin:[4,11,15,17,18,19,20,23,24],ort:[17,24],ort_cpu:7,ort_gpu:7,other:[1,17,19,24],otherwis:[4,8,19],out:[8,10,11,15,16,19,24],over:9,overprecis:9,overrid:[4,5,22],overview:[13,25],own:10,packag:[0,9,11],page:[11,13,15],parallel:8,param:[5,9,19,24,25],paramet:[1,4,5,6,8,14,16,18,24],parameter:9,params_baselin:5,part:[15,21,24],partial:6,pass:[6,15,24],path:[5,6,8,11,12,15],peewe:5,pend:[5,8],per:[16,17,19,24],percentag:[17,24],perf:[4,5,6,8],perf_analysi:4,perform:[2,4,5,6,8,9,11,12,13,14,15,16,18,19,24,25],perhap:22,pip:[10,13],pipelin:11,place:[11,19],plan:12,platform:21,playhous:5,pleas:12,plu:9,point:[8,11,16,17,24],pool:24,popup:11,port:[1,11],portion:[1,17],possibl:[17,19,24],post:12,potenti:[7,9,12,14,17],practic:14,practition:[9,12],present:[8,24],preset:19,previou:15,primary_kei:5,problem:17,procedur:15,process:[8,9,12,19,21,22,24],product:[9,12],profil:[2,4,5,6,8,9,11,14,15,19,24,25],profile_id:[5,8],profile_loss:[4,5],profile_loss_id:[4,5],profile_perf:[4,5],profile_perf_id:[4,5],profiles_loss:5,profiles_perf:5,program:24,progress:[5,6,8],project:[0,1,8,9,14,16,17,18,22,23,24,25],project_data:8,project_id:[4,5,8],projectavailablemodelmodificationsschema:6,projectbenchmark:[4,5],projectbenchmark_set:5,projectbenchmarkdoesnotexist:5,projectbenchmarkresultschema:6,projectbenchmarkresultsschema:6,projectbenchmarkschema:6,projectdata:[4,5],projectdata_set:5,projectdatadoesnotexist:5,projectdataschema:6,projectdoesnotexist:5,projectextschema:6,projectlossprofil:[4,5],projectlossprofile_set:5,projectlossprofiledoesnotexist:5,projectlossprofileschema:6,projectmodel:[4,5],projectmodel_set:5,projectmodelanalysisschema:6,projectmodeldoesnotexist:5,projectmodelschema:6,projectoptim:[4,5],projectoptimization_set:5,projectoptimizationdoesnotexist:5,projectoptimizationmodifierestimationsschema:6,projectoptimizationmodifierlrexponentialargsschema:6,projectoptimizationmodifierlrmultistepargsschema:6,projectoptimizationmodifierlrschedul:[4,5],projectoptimizationmodifierlrscheduledoesnotexist:5,projectoptimizationmodifierlrscheduleschema:6,projectoptimizationmodifierlrschema:6,projectoptimizationmodifierlrsetargsschema:6,projectoptimizationmodifierlrstepargsschema:6,projectoptimizationmodifierprun:[4,5],projectoptimizationmodifierpruningdoesnotexist:5,projectoptimizationmodifierpruningnodemetadataschema:6,projectoptimizationmodifierpruningnodeschema:6,projectoptimizationmodifierpruningschema:6,projectoptimizationmodifierquant:5,projectoptimizationmodifierquantizationdoesnotexist:5,projectoptimizationmodifierquantizationnodeschema:6,projectoptimizationmodifierquantizationschema:6,projectoptimizationmodifiertrain:[4,5],projectoptimizationmodifiertrainabledoesnotexist:5,projectoptimizationmodifiertrainablenodeschema:6,projectoptimizationmodifiertrainableschema:6,projectoptimizationschema:6,projectperfprofil:[4,5],projectperfprofile_set:5,projectperfprofiledoesnotexist:5,projectperfprofileschema:6,projectprofileanalysisschema:6,projectprofilemeasurementschema:6,projectprofilemeasurementsschema:6,projectprofilemodelopsbaselinemeasurementsschema:6,projectprofilemodelopsmeasurementsschema:6,projectprofileopbaselinemeasurementschema:6,projectprofileopmeasurementsschema:6,projectprofileopschema:6,projectprofileschema:6,projects_benchmark:[0,1],projects_data:[0,1],projects_model:[0,1,4],projects_optim:[0,1],projects_optimizations_prun:[1,2],projects_profil:[0,1,4],projectschema:6,proper:[8,11],properli:11,properti:[4,5,8],provid:[4,7,11,12,14,16,17,18,19,22],prunabl:[4,18],prune:[4,5,6,8,9,14,16,17,18,22,24,25],pruning_end_epoch:4,pruning_epoch:4,pruning_estim:[5,8],pruning_estimation_typ:[5,8],pruning_modifi:5,pruning_set:4,pruning_start_epoch:4,pruning_structur:[5,8],pruning_update_frequ:4,pruningmodelevalu:4,pruningset:4,put:[8,14],pypi:9,python:10,python_valu:5,pytorch:[3,15,17,21],pytorch__integr:[1,2],pytorch__train:[1,2],quantiz:[5,6,8,9,14,18,19,24],quantization_modifi:5,quantized_estim:[5,8],quantized_estimation_typ:5,queri:6,quick:9,quickli:[14,16],rais:[4,6,8],raise_not_found:4,ran:[17,19,20,24],rang:[18,19,24],rapidli:[9,12],rate:[5,22,24,25],rather:[14,15,19,20,24],raw:6,read:11,readi:[16,17,18,19],real:16,recent:20,recip:9,recommend:[4,10],recov:[9,18,19,22,24],recoveri:[4,9,11,18,19,24],redistribut:19,reduc:[18,24],reduct:[18,24],redund:[9,18],refer:15,referenc:16,reflect:23,refresh:[5,8],registri:8,rel:[18,19],relat:[2,6,8],releas:[11,12,18],relev:24,relu:24,remot:[11,15],remov:[9,19,24,25],repo:[2,6,8],report:6,repositori:[9,10,11],repres:[17,19],reproduc:12,request:[2,9,12],requir:[6,11,12,16,19,24],research:[9,12],respond:[14,18,24],respons:6,responsejobschema:6,responsejobsschema:6,responsemodelrepomodel:6,responseprojectbenchmarkdeletedschema:6,responseprojectbenchmarkschema:6,responseprojectbenchmarksschema:6,responseprojectdatadeletedschema:6,responseprojectdataschema:6,responseprojectdatasingleschema:6,responseprojectdeletedschema:6,responseprojectextschema:6,responseprojectlossprofileschema:6,responseprojectlossprofilesschema:6,responseprojectmodelanalysisschema:6,responseprojectmodeldeletedschema:6,responseprojectmodelschema:6,responseprojectoptimizationdeletedschema:6,responseprojectoptimizationframeworksavailablesamplesschema:6,responseprojectoptimizationframeworksavailableschema:6,responseprojectoptimizationmodifierdeletedschema:6,responseprojectoptimizationmodifiersavail:6,responseprojectoptimizationmodifiersbestestim:6,responseprojectoptimizationschema:6,responseprojectoptimizationsschema:6,responseprojectperfprofileschema:6,responseprojectperfprofilesschema:6,responseprojectprofiledeletedschema:6,responseprojectschema:6,responseprojectsschema:6,responsesysteminfo:6,restructur:24,result:[4,5,6,9,11,15,18,19,20,22,25],retain:16,retrain:[11,14,17,18,19,24],retriev:[4,8],review:[9,14,16,22,23,25],rewrit:21,right:[11,13,19,20],root:[1,5],root_path:5,rough:18,rout:[2,6],rule:11,run:[1,6,8,9,11,13,14,15,16,17,18,22,24,25],runtim:[17,20,24],same:[9,15,20],sampl:[5,6,11,24],satisfi:[14,19],save:[5,8,19,22,23],scale:[9,12,20],scenario:20,schedul:[4,5,6,19,24],schema:[0,1],schemaopt:6,scheme:16,screen:[9,11,15,17,19,21,25],screenshot:12,script:[1,11],scroll:19,search:6,searchjobsschema:6,searchmodelrepomodel:6,searchprojectbenchmarksschema:6,searchprojectdataschema:6,searchprojectoptimizationsschema:6,searchprojectprofilesschema:6,searchprojectsschema:6,second:[16,17,24],section:[14,17,18,19,23],see:[11,16,17,18,19,20,24],select:[11,15,16,17,19,20,24],sens:19,sensit:[9,11,14,24,25],separ:[11,24],sequenc:[5,6,24],sequenti:24,serial:6,serv:2,server:[1,2,5,6,8,11,15],set:[1,4,5,6,7,8,9,11,14,15,17,18,19,20,22,24,25],set_logging_level:1,setprojectdatafromschema:6,setprojectmodelfromschema:6,setup:[1,2,3,4,5,16,17,18,24],setup_filesystem:5,sever:15,share:12,shot:11,should:[4,8,16,19,22,24],show:[9,11,14,16,17,18,19,20,24],shown:[11,17],shuffl:[17,24],shutdown:8,side:15,signific:[17,18],significantli:[9,18,24],simpl:[9,14],simpli:[15,24],simplifi:[9,12],sinc:8,singl:[6,9,13,24,25],size:[5,8,9,12,15,16,17,18,20,24],slide:[9,12],slider:19,smaller:[9,14,17,24],smallest:24,softmax:24,softwar:12,some:[6,11],sort:20,sourc:[1,3,4,5,6,7,8,9,15],space:15,spars:[9,14,17,19],sparse_training_avail:4,sparseml:[3,9,11,15,21],sparsezoo:9,sparsif:[11,24],sparsifi:[10,11,15,16,17,18,21,22,23,24,25],sparsiti:[4,5,9,19,22,24],special:15,specif:[4,6,17,20,24],specifi:[11,18,19,20,24],speed:[9,11,12,17],speedup:[17,19,24],spent:17,sqlite_ext:5,src:9,stabil:19,stabilization_epoch:4,stabl:9,stage:19,standard:1,start:[4,5,8,9,11,15,19,20,24,25],start_epoch:[4,5],start_fine_tuning_epoch:4,state:5,statu:5,step:[4,6,8,12,13,14,16,17,18,19,20,21,22,23,24],stop:8,storag:5,store:[5,6,8],str:[1,3,4,5,6,7,8],string:[5,6],sub:8,subclass:8,subgraph:17,submit:12,submodul:[0,9],subpackag:[0,9],subsequ:8,substitut:11,suggest:12,suit:[9,12],summari:[9,12,24,25],support:[9,12],sure:12,svg:9,system:[0,1,5,8,10,11,16,19,22,24],systeminfo:6,tabl:19,take:[9,16,17,19,24],taken:19,tar:8,target:[11,16],techniqu:[9,12,14,19,24],tell:24,tensor:3,tensorflow:[15,17,21],tensorflow__integr:[1,2],term:[9,22,23,25],termin:11,test:10,textfield:5,than:[4,14,15,19,20,24],thei:[14,16,20,24],theoret:[16,17,24],therefor:[11,16,17],thi:[4,8,9,10,11,14,15,16,17,18,19,20,21,22,23,24,25],those:[11,17,18,19,24],thread:24,threadpoolexecutor:8,three:[14,17,18,19,20,23],through:[8,11,17,19,24],throughout:[15,16,19,22,23],throughput:[16,17],tied:[17,19],time:[4,8,14,15,16,17,19,24],timestamp:5,to_dict_valu:4,took:[17,24],tool:[9,12,24],tooltip:19,top:[9,19],torch:3,total:[18,24],tour:[9,10],track:5,train:[3,4,9,11,14,21,22,23,24,25],train_dataset:3,train_setup:3,trainabl:[4,5,6],trainable_modifi:5,training_epoch:[4,5],training_final_lr:4,training_init_lr:4,training_lr_fin:5,training_lr_init:5,training_optim:5,transfer:[14,19],tune:[4,19],tupl:4,twice:19,two:[17,18,19,20],type:[5,6,8,11,13,17,18,19,24],type_:5,typic:24,ui_path:1,ultim:9,under:[8,11],understand:15,unindex:5,union:[3,4,6,8],uniqu:[5,15,24],unknown:6,unspecifi:15,unstructur:8,unsur:16,updat:[4,5,6,8,19],update_frequ:[4,5],updateprojectoptimizationschema:6,upload:[6,11,14,15],upper:[11,13],uri:[6,8],url:[6,8,11,15],use:[4,6,8,9,11,12,15,16,19,20,22,24],used:[1,5,6,11,12,15,16,17,18,19,20,22,24],user:[4,9,10,12,24],uses:24,using:[9,10,11,12,14,15,19,20,24],util:[0,1,2,3,17,24],val_dataset:3,valid:[4,5,6,7],validate_filesystem:5,validate_model_data:4,validate_pruning_nod:4,validationerror:6,valu:[4,5,6,7,14,17,18,19,20,22,24],valuabl:[15,24],varchar:5,vari:17,variou:[16,17,24],verbose_nam:5,veri:18,version:[12,14,15,20],versioninfoschema:6,via:9,view:[16,24],virtual:10,visit:11,visual:[9,12,17,19],vnni:24,wai:[12,15,16,17,19,24],want:[14,15,16,17,18,19,20,24],warmup:8,warmup_iterations_per_check:[5,8],web:11,websit:9,week:9,weight:[17,18,24],weight_magnitud:8,welcom:[9,25],well:[16,17,18,24],went:17,were:[17,18,24],what:[4,17,19,24],when:[4,7,9,14,15,16,17,18,19,24],where:[5,9,11,17,24],which:[13,15,16,17,18,19,20,24],who:[9,12],width:[9,24],window:11,winograd:9,within:[8,24],without:[8,14,16,17,24],won:8,work:[5,6,8,14,21],worker:[0,1,6],worker_ack:5,worker_arg:5,workflow:[9,11,14],working_dir:[1,3,5],would:[5,17,18,22],yaml:4,yet:20,yml:[14,21,22],you:[9,11,12,14,15,16,17,18,19,20,21,22,23,24,25],your:[9,10,11,12,13,14,15,17,18,19,20,21,22,23,24],zero:18},titles:["sparsify","sparsify package","sparsify.blueprints package","sparsify.blueprints.code_samples package","sparsify.blueprints.utils package","sparsify.models package","sparsify.schemas package","sparsify.utils package","sparsify.workers package","Sparsify 0.1","Installation","Quick Tour","Welcome to Sparsify","Installing and Launching Sparsify","Sparsify Overview","Analyze","Profiling Your Model","Reviewing Performance Profiles","Reviewing Loss Profiles","Optimize","Benchmarking","Integrate","Optimization Config File and Code for Optimization","Settings","Key Concepts/Features/Terms","User Guide"],titleterms:{"export":[11,19],"new":[11,13,15,17,18],Adding:[17,18],about:12,addit:13,analyz:[11,14,15],app:1,base:[5,8],benchmark:20,blueprint:[2,3,4],can:13,code:22,code_sampl:3,compar:20,concept:24,config:22,content:[1,2,3,4,5,6,7,8],count:18,creat:15,displai:13,engin:20,error:[2,6],exist:[13,15],featur:24,feedback:12,file:22,from:13,guid:[12,25],help:12,helper:[4,6],histori:9,infer:20,inform:13,instal:[10,13],integr:[14,21],job:[2,5,6],kei:24,launch:13,layer:[17,18],learn:[9,19],log:1,loss:18,manag:8,model:[5,11,16,17,18,19],model_repo:[2,6],modifi:19,modul:[1,2,3,4,5,6,7,8],more:9,open:[13,15],optim:[11,14,19,22],overview:[9,14],packag:[1,2,3,4,5,6,7,8],param:18,perform:17,profil:[16,17,18],project:[2,4,5,6,11,13,15],projects_benchmark:[2,4,5,6,8],projects_data:[2,4,5,6,8],projects_model:[2,5,6,8],projects_optim:[2,4,5,6],projects_optimizations_prun:4,projects_profil:[2,5,6,8],prune:19,pytorch__integr:3,pytorch__train:3,quick:11,rate:19,recip:11,releas:9,remov:20,resourc:9,result:17,review:[17,18],run:[19,20],schema:6,screen:13,sensit:18,set:23,singl:20,sparsif:9,sparsifi:[0,1,2,3,4,5,6,7,8,9,12,13,14,19],start:13,submodul:[1,2,3,4,5,6,7,8],subpackag:[1,2],summari:[17,18,19],system:[2,6,7],tensorflow__integr:3,term:24,thi:12,tour:11,train:19,user:25,util:[4,5,7],welcom:12,worker:8,you:13,your:16}}) \ No newline at end of file diff --git a/sparsify/userguide/01-intro.html b/sparsify/userguide/01-intro.html index 180aa6eec90..58b71d3c719 100644 --- a/sparsify/userguide/01-intro.html +++ b/sparsify/userguide/01-intro.html @@ -124,10 +124,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/02-install-sparsify.html b/sparsify/userguide/02-install-sparsify.html index 60210611fb1..6bed7c9d425 100644 --- a/sparsify/userguide/02-install-sparsify.html +++ b/sparsify/userguide/02-install-sparsify.html @@ -128,10 +128,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/03-sparsify-overview.html b/sparsify/userguide/03-sparsify-overview.html index 97ba218a770..df372a099f2 100644 --- a/sparsify/userguide/03-sparsify-overview.html +++ b/sparsify/userguide/03-sparsify-overview.html @@ -125,10 +125,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/04-analyze.html b/sparsify/userguide/04-analyze.html index 8af3cd40853..e6f3f096b48 100644 --- a/sparsify/userguide/04-analyze.html +++ b/sparsify/userguide/04-analyze.html @@ -124,10 +124,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/04a-profiling-your-model.html b/sparsify/userguide/04a-profiling-your-model.html index 93a408c222c..42951dfb669 100644 --- a/sparsify/userguide/04a-profiling-your-model.html +++ b/sparsify/userguide/04a-profiling-your-model.html @@ -104,10 +104,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/04b-reviewing-performance-profiles.html b/sparsify/userguide/04b-reviewing-performance-profiles.html index 1dfa973338e..cc551a82802 100644 --- a/sparsify/userguide/04b-reviewing-performance-profiles.html +++ b/sparsify/userguide/04b-reviewing-performance-profiles.html @@ -126,10 +126,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/04c-reviewing-loss-profiles.html b/sparsify/userguide/04c-reviewing-loss-profiles.html index c829450020c..6392d9a1dfb 100644 --- a/sparsify/userguide/04c-reviewing-loss-profiles.html +++ b/sparsify/userguide/04c-reviewing-loss-profiles.html @@ -128,10 +128,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/05-optimize.html b/sparsify/userguide/05-optimize.html index 86a00dbc401..2ae8e8e4484 100644 --- a/sparsify/userguide/05-optimize.html +++ b/sparsify/userguide/05-optimize.html @@ -129,10 +129,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/05a-benchmark.html b/sparsify/userguide/05a-benchmark.html index 42b57cedf42..bd6b6de3025 100644 --- a/sparsify/userguide/05a-benchmark.html +++ b/sparsify/userguide/05a-benchmark.html @@ -126,10 +126,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/06-integrate.html b/sparsify/userguide/06-integrate.html index 0bfc0eee805..f875a440be8 100644 --- a/sparsify/userguide/06-integrate.html +++ b/sparsify/userguide/06-integrate.html @@ -120,10 +120,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/06a-optimize-config.html b/sparsify/userguide/06a-optimize-config.html index db07c422fff..bd6cb3dd3c1 100644 --- a/sparsify/userguide/06a-optimize-config.html +++ b/sparsify/userguide/06a-optimize-config.html @@ -120,10 +120,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/07-settings.html b/sparsify/userguide/07-settings.html index 5c9d5948be5..b7c18e2b296 100644 --- a/sparsify/userguide/07-settings.html +++ b/sparsify/userguide/07-settings.html @@ -120,10 +120,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/08-key-terms.html b/sparsify/userguide/08-key-terms.html index b3b4bcbe0b9..7f8958adcc0 100644 --- a/sparsify/userguide/08-key-terms.html +++ b/sparsify/userguide/08-key-terms.html @@ -120,10 +120,11 @@ -

      Help and Support

      +

      Help

      diff --git a/sparsify/userguide/images/image_1.jpg b/sparsify/userguide/images/image_1.jpg deleted file mode 100644 index e42bc9bcbab..00000000000 Binary files a/sparsify/userguide/images/image_1.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_14.jpg b/sparsify/userguide/images/image_14.jpg deleted file mode 100644 index c326763208e..00000000000 Binary files a/sparsify/userguide/images/image_14.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_20.jpg b/sparsify/userguide/images/image_20.jpg deleted file mode 100644 index a36271df839..00000000000 Binary files a/sparsify/userguide/images/image_20.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_26.jpg b/sparsify/userguide/images/image_26.jpg deleted file mode 100644 index c45363b5b9b..00000000000 Binary files a/sparsify/userguide/images/image_26.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_28.jpg b/sparsify/userguide/images/image_28.jpg deleted file mode 100644 index 0c649672b60..00000000000 Binary files a/sparsify/userguide/images/image_28.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_34.jpg b/sparsify/userguide/images/image_34.jpg deleted file mode 100644 index 4880a6cf717..00000000000 Binary files a/sparsify/userguide/images/image_34.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_60.jpg b/sparsify/userguide/images/image_60.jpg deleted file mode 100644 index 368c65a1dde..00000000000 Binary files a/sparsify/userguide/images/image_60.jpg and /dev/null differ diff --git a/sparsify/userguide/images/image_7.jpg b/sparsify/userguide/images/image_7.jpg deleted file mode 100644 index d9f0506950c..00000000000 Binary files a/sparsify/userguide/images/image_7.jpg and /dev/null differ diff --git a/sparsify/userguide/index.html b/sparsify/userguide/index.html index 481f8c32edb..342aeca7ca3 100644 --- a/sparsify/userguide/index.html +++ b/sparsify/userguide/index.html @@ -120,10 +120,11 @@ -

      Help and Support

      +

      Help

      +
      • sparsify.models.base @@ -1889,8 +1848,6 @@

        S

      • module
      -
      • sparsify.models.jobs @@ -2060,17 +2017,10 @@

        S

    • - sparsify.workers.base_manager - -
    • -
    • - sparsify.workers.base_wrapper + sparsify.workers.manager
    • @@ -2107,7 +2057,7 @@

      S

    • stabilization_epochs() (sparsify.blueprints.utils.projects_optimizations.OptimEpochs property)
    • -
    • start() (sparsify.workers.base_wrapper.JobWorkerWrapper method) +
    • start() (sparsify.workers.manager.JobWorkerManager method)
    • start_epoch (sparsify.models.projects_optimizations.ProjectOptimization attribute) @@ -2124,12 +2074,8 @@

      S

    • start_epoch() (sparsify.blueprints.utils.projects_optimizations.OptimEpochs property)
    • started (sparsify.models.jobs.JobStatus attribute) -
    • -
    • started() (sparsify.workers.base_wrapper.JobWorkerWrapper property)
    • status (sparsify.models.jobs.Job attribute) -
    • -
    • structurally_pruned() (sparsify.blueprints.utils.projects_optimizations_pruning.PruningNodeEvaluator property)
    • SystemInfo (class in sparsify.schemas.system)
    • @@ -2217,7 +2163,7 @@

      W

        -
      • worker() (sparsify.workers.base_wrapper.JobWorkerWrapper property) +
      • worker_ack (sparsify.models.jobs.Job attribute)
      • worker_args (sparsify.models.jobs.Job attribute)
      • diff --git a/sparsify/index.html b/sparsify/index.html index d5c03549c68..7942c310faa 100644 --- a/sparsify/index.html +++ b/sparsify/index.html @@ -105,10 +105,11 @@ -

        Help and Support

        +

        Help

        @@ -178,7 +179,7 @@

        Sparsify 0.1

        -

        Neural network model repository for highly sparse models and optimization recipes

        +

        Easy-to-use UI for automatically sparsifying neural networks and creating sparsification recipes for better inference performance and a smaller footprint

        GitHub @@ -203,39 +204,45 @@

        Sparsify 0.1

        Overview

        -

        Sparsify is a deep learning autoML tool that simplifies the model optimization process to rapidly achieve the best combination of size, speed, and accuracy on any deep learning model. Sparsify optimizes and benchmarks models informed by industry research insights for ML practitioners, including ML engineers and operators, who need to deploy performant deep learning models fast and at scale. Sparsify shows visual performance potential for your model, including a sliding scale between performance and loss sensitivity, ultimately speeding up the model optimization process from weeks to minutes.

        -

        This repository contains the package to locally launch Sparsify where you can create projects to load and optimize your deep learning models. At the end, you can export optimization recipes to integrate with your training workflow.

        +

        Sparsify is an easy-to-use UI tool that simplifies the deep learning model optimization process to rapidly achieve the best combination of size, speed, and accuracy. +Sparsify sparsifies and benchmarks models informed by industry research insights for ML practitioners, including ML engineers and operators, who need to deploy performant deep learning models fast and at scale. +Sparsify shows visual performance potential for your model, including a sliding scale between performance and recovery, ultimately speeding up the model sparsification process from weeks to minutes.

        +

        This repository contains the package to locally launch Sparsify where you can create projects to load and sparsify your deep learning models. +At the end, you can export sparsification recipes to integrate with your training workflow.

        -
          - sparsify.workers.base_manager -
          - sparsify.workers.base_wrapper + sparsify.workers.manager