Skip to content

llmcompressor.pipelines.independent

IndependentPipeline

Bases: CalibrationPipeline

Source code in src/llmcompressor/pipelines/independent/pipeline.py
@CalibrationPipeline.register("independent")
class IndependentPipeline(CalibrationPipeline):
    @staticmethod
    def __call__(
        model: torch.nn.Module,
        dataloader: DataLoader,
        dataset_args: "DatasetArguments",
    ):
        """
        Data pipeline where each modifier is assigned its own calibration epoch and data
        pipeline

        :param model: model being calibrated
        :param dataloader: loads data for calibration
        :param dataset_args: dataset arguments relevant to pipelines
        """
        _logger = logger.patch(lambda r: r.update(function="IndependentPipeline"))

        session = active_session()
        modifiers = session.get_modifiers()
        with patch_attr(session.lifecycle, "modifiers", None):
            for index, modifier in enumerate(modifiers):
                mod_type = str(type(modifier).__name__)
                session.lifecycle.modifiers = [
                    StageModifiers(modifiers=[modifier], group=mod_type, index=index)
                ]

                pipeline = CalibrationPipeline.from_modifiers([modifier])
                pipeline_name = pipeline.__class__.__name__
                _logger.info(f"Inferred `{pipeline_name}` for `{mod_type}`")

                pipeline(model, dataloader, dataset_args)

__call__(model, dataloader, dataset_args) staticmethod

Data pipeline where each modifier is assigned its own calibration epoch and data pipeline

Parameters:

Name Type Description Default
model Module

model being calibrated

required
dataloader DataLoader

loads data for calibration

required
dataset_args DatasetArguments

dataset arguments relevant to pipelines

required
Source code in src/llmcompressor/pipelines/independent/pipeline.py
@staticmethod
def __call__(
    model: torch.nn.Module,
    dataloader: DataLoader,
    dataset_args: "DatasetArguments",
):
    """
    Data pipeline where each modifier is assigned its own calibration epoch and data
    pipeline

    :param model: model being calibrated
    :param dataloader: loads data for calibration
    :param dataset_args: dataset arguments relevant to pipelines
    """
    _logger = logger.patch(lambda r: r.update(function="IndependentPipeline"))

    session = active_session()
    modifiers = session.get_modifiers()
    with patch_attr(session.lifecycle, "modifiers", None):
        for index, modifier in enumerate(modifiers):
            mod_type = str(type(modifier).__name__)
            session.lifecycle.modifiers = [
                StageModifiers(modifiers=[modifier], group=mod_type, index=index)
            ]

            pipeline = CalibrationPipeline.from_modifiers([modifier])
            pipeline_name = pipeline.__class__.__name__
            _logger.info(f"Inferred `{pipeline_name}` for `{mod_type}`")

            pipeline(model, dataloader, dataset_args)