
    bi
                         d dl mZ ddlmZ erddlmZ 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j        e          Z G d
 de          Zd	S )    )TYPE_CHECKING   )HfQuantizer   )PreTrainedModel)replace_with_spqr_linear)is_accelerate_availableis_spqr_availableis_torch_availablelogging)QuantizationConfigMixinNc                   b     e Zd ZdZdZdef fdZd Zdd	Z	 	 ddZ	e
d             Zd Z xZS )SpQRHfQuantizerzS
    Quantizer of the SpQR method. Enables the loading of prequantized models.
    Tquantization_configc                 <     t                      j        |fi | d S )N)super__init__)selfr   kwargs	__class__s      a/root/projects/butler/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_spqr.pyr   zSpQRHfQuantizer.__init__(   s)    ,7777777    c                     t           j                                        st          d          t	                      st          d          t                      st          d          d S )Nz,GPU is required to run SpQR quantized model.zGUsing `spqr` quantization requires Accelerate: `pip install accelerate`zFUsing `spqr` quantization requires SpQR: `pip install spqr_quant[gpu]`)torchcudais_availableRuntimeErrorr	   ImportErrorr
   )r   argsr   s      r   validate_environmentz$SpQRHfQuantizer.validate_environment+   sp    z&&(( 	OMNNN&(( 	ighhh "" 	hfggg	h 	hr   dtypetorch.dtypereturnc                 D    |t           j        k    rt          d          |S )NzdYou cannot use any type other than torch.float16 for SpQR. Please set it totorch.float16 explicitly.)r   float16
ValueError)r   r!   s     r   update_dtypezSpQRHfQuantizer.update_dtype5   s+    EM!!v   r   modelr   c                     |                      || j        j        |j                  | _        t	          || j        | j                   d S )N)r   modules_to_not_convert)get_modules_to_not_convertr   r*   _keep_in_fp32_modulesr   )r   r(   r   s      r   $_process_model_before_weight_loadingz4SpQRHfQuantizer._process_model_before_weight_loading<   s^    
 '+&E&E4+BED_'
 '
# 	! $ 8#'#>	
 	
 	
 	
 	
 	
r   c                     dS )NF r   s    r   is_trainablezSpQRHfQuantizer.is_trainableJ   s    ur   c                     dS )NTr/   r0   s    r   is_serializablezSpQRHfQuantizer.is_serializableN   s    tr   )r!   r"   r#   r"   )r(   r   )__name__
__module____qualname____doc__requires_calibrationr   r   r    r'   r-   propertyr1   r3   __classcell__)r   s   @r   r   r   !   s           8,C 8 8 8 8 8 8h h h   
 
 
 
 
   X      r   r   )typingr   baser   modeling_utilsr   integrationsr   utilsr	   r
   r   r   utils.quantization_configr   r   
get_loggerr4   loggerr   r/   r   r   <module>rC      s    !                  1000000 3 3 3 3 3 3 [ [ [ [ [ [ [ [ [ [ [ [ ? ? ? ? ? ?  LLL		H	%	%. . . . .k . . . . .r   