# SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project import torch from vllm.model_executor.layers.quantization.base_config import QuantizeMethodBase class OnlineRequantizationMixin: """Shared lifecycle for converting serialized weights before quantization.""" def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.requantization_source: QuantizeMethodBase | None = None self.requantization_source_parameters: dict[str, torch.nn.Parameter] = {} def set_requantization_source(self, source_method: QuantizeMethodBase) -> None: """Configure serialized-weight conversion before online quantization.""" self.requantization_source = source_method self.uses_meta_device = False def create_requantization_source_weights( self, layer: torch.nn.Module, *weight_args, **extra_weight_attrs ) -> bool: """Delegate weight creation to the source and track its parameters.""" if self.requantization_source is None: return False existing_parameter_names = set(layer._parameters) self.requantization_source.create_weights( layer, *weight_args, **extra_weight_attrs ) self.requantization_source_parameters = { name: parameter for name, parameter in layer._parameters.items() if name not in existing_parameter_names and parameter is not None } return True def release_requantization_source_weights(self, layer: torch.nn.Module) -> None: """Release serialized parameters after successful requantization.""" for name, source_parameter in self.requantization_source_parameters.items(): if layer._parameters.get(name) is source_parameter: delattr(layer, name) self.requantization_source_parameters.clear()