o
    ip	                     @   sx   d dl mZ ddlmZ erddlmZ ddlmZmZm	Z	m
Z
 ddlmZ e r-d dlZe
eZG d	d
 d
eZdS )    )TYPE_CHECKING   )HfQuantizer   )PreTrainedModel)is_accelerate_availableis_torch_availableis_vptq_availablelogging)QuantizationConfigMixinNc                       sZ   e Zd ZdZdZdef fddZdd Z			dd
dZe	de
fddZdd Z  ZS )VptqHfQuantizerzS
    Quantizer of the VPTQ method. Enables the loading of prequantized models.
    Tquantization_configc                    s   t  j|fi | d S )N)super__init__)selfr   kwargs	__class__ h/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/transformers/quantizers/quantizer_vptq.pyr   '   s   zVptqHfQuantizer.__init__c                 O   s2   t  stdt stdtj stdd S )NzGUsing `vptq` quantization requires Accelerate: `pip install accelerate`zEUsing `vptq` quantization requires VPTQ>=0.0.4: `pip install -U vptq`z,GPU is required to run VTPQ quantized model.)r   ImportErrorr	   torchcudais_availableRuntimeError)r   argsr   r   r   r   validate_environment*   s   
z$VptqHfQuantizer.validate_environmentmodelr   c                 K   s8   ddl m} | || jj|j| _||| j| jd d S )Nr   )replace_with_vptq_linear)r   modules_to_not_convert)integrationsr   get_modules_to_not_convertr   r   _keep_in_fp32_modules)r   r   r   r   r   r   r   $_process_model_before_weight_loading4   s   
z4VptqHfQuantizer._process_model_before_weight_loadingreturnc                 C      dS )NFr   r   r   r   r   is_trainableD   s   zVptqHfQuantizer.is_trainablec                 C   r%   )NTr   r&   r   r   r   is_serializableH   s   zVptqHfQuantizer.is_serializable)r   r   )__name__
__module____qualname____doc__requires_calibrationr   r   r   r#   propertyboolr'   r(   __classcell__r   r   r   r   r       s    

r   )typingr   baser   modeling_utilsr   utilsr   r   r	   r
   utils.quantization_configr   r   
get_loggerr)   loggerr   r   r   r   r   <module>   s   
