
    i=                         d dl mZ ddlmZ 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mZ dd
l
mZ  e       rd dlZ ej(                  e      Z G d de      Zy)    )TYPE_CHECKING   )tqdm   )HfQuantizer)get_module_from_name)PreTrainedModel)HiggsConfig)is_accelerate_availableis_flute_availableis_hadamard_availableis_torch_availablelogging)QuantizationConfigMixinNc                        e Zd ZU dZdZded<   def fdZd ZddZ		 	 ddZ
ddZedefd       Zd Zd	d
dedefdZd Z xZS )HiggsHfQuantizerz
    Quantizer of the HIGGS method. Enables the loading of prequantized models and in-flight quantization of full-precision models.
    Fr
   quantization_configc                 &    t        |   |fi | y )N)super__init__)selfr   kwargs	__class__s      x/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_higgs.pyr   zHiggsHfQuantizer.__init__+   s    ,77    c                 n   t         j                  j                         st        d      t	               st        d      t               st        d      t               st        d      |t        d      t        |t              r0d|j                         v sd|j                         v rt        d      y y )	NzNHIGGS quantization is only supported on GPU. Please use a different quantizer.zHUsing `higgs` quantization requires Accelerate: `pip install accelerate`zLUsing `higgs` quantization requires FLUTE: `pip install flute-kernel>=0.3.0`zbUsing `higgs` quantization requires fast_hadamard_transform: `pip install fast_hadamard_transform`zwYou are attempting to load a HIGGS model without setting device_map. Please set device_map comprised of 'cuda' devices.cpudiskzYou are attempting to load a HIGGS model with a device_map that contains a CPU or disk device. This is not supported. Please remove the CPU or disk device from the device_map.)torchcudais_availableNotImplementedErrorr   ImportErrorr   r   
ValueError
isinstancedictvalues)r   
device_mapr   s      r   validate_environmentz%HiggsHfQuantizer.validate_environment.   s    zz&&(%&vww&(hii!#lmm$&t  F  
D)
))++v9J9J9L/L h  0M *r   returnc                 p    |t         j                  k7  r"|t         j                  k7  rt        d| d      |S )NzInvalid `dtype` zS. HIGGS quantization only supports `dtype=torch.float16` or `dtype=torch.bfloat16`.)r   float16bfloat16r$   )r   dtypes     r   update_dtypezHiggsHfQuantizer.update_dtypeI   s:    EMM!eu~~&="5')|}  r   modelr	   c                     ddl m} | j                  || j                  j                  |j
                        | _         ||| j                  | j                         y )Nr   )replace_with_higgs_linear)r   modules_to_not_convert)integrationsr2   get_modules_to_not_convertr   r3   _keep_in_fp32_modules)r   r0   r   r2   s       r   $_process_model_before_weight_loadingz5HiggsHfQuantizer._process_model_before_weight_loadings   sR    
 	=&*&E&E4++BBED_D_'
# 	" $ 8 8#'#>#>	
r   c                     ddl m}m} ddlm} ddlm} i }|j                         D 	ci c]  \  }}	t        |	|      s||	 }
}}	t        |
j                         dd      D ]"  \  }}	|	j                  j                  |vr4 ||	j                  j                  	      ||	j                  j                  <   ||	j                  j                     |	_        |j                  | j                  j                   |         |	_         ||	j                  j"                  |	j$                  j"                  |	j                   
      \  |	j                  _        |	_        |	j                   j'                         | j                  j                   |<   % y c c}	}w )Nr   )TuneMetaDatamaybe_tune_and_repack)make_workspace_streamkr   HiggsLinearzRepacking HIGGS modulesF)descleave)device)weightscalesmetadata)
flute.tuner9   r:   flute.utilsr;   r4   r=   named_modulesr%   r   itemsrA   r@   	workspace	from_dictr   tune_metadatadatarB   to_dict)r   r0   r   r9   r:   r;   r=   flute_workspacesnamemoduleflute_moduless              r   #_process_model_after_weight_loadingz4HiggsHfQuantizer._process_model_after_weight_loading   sN   B6.:?:M:M:Os,$S]^dfqSrvss !4!4!6=V^cd 	ZLD& }}##+;;9OW]WdWdWkWk9l !5!56/0D0DEF $0#9#9$:R:R:`:`ae:f#gF 7L}}))}}))--84FMM 4
 <B;O;O;W;W;YD$$2248	Z ts
   F
F
c                      y)NF r   s    r   is_trainablezHiggsHfQuantizer.is_trainable   s    r   c                      y)NTrS   rT   s    r   is_serializablez HiggsHfQuantizer.is_serializable   s    r   
param_namec                 R    ddl m} t        ||      \  }}t        ||      r|dk(  ryy)Nr   r<   rA   TF)r4   r=   r   r%   )r   r0   rX   r   r=   rO   tensor_names          r   param_needs_quantizationz)HiggsHfQuantizer.param_needs_quantization   s-    .25*Efk*{h/Fr   c                 "    ddl m}  ||      }|S )Nr   )dequantize_higgs)r4   r]   )r   r0   r]   s      r   _dequantizezHiggsHfQuantizer._dequantize   s    3 'r   )r.   torch.dtyper*   r_   )r0   r	   )__name__
__module____qualname____doc__requires_calibration__annotations__r   r   r)   r/   r7   rQ   propertyboolrU   rW   strr[   r^   __classcell__)r   s   @r   r   r   #   s     !&&8,C 86T
 
"Z2 d  .? S _c r   r   )typingr   utils.loggingr   baser   quantizers_utilsr   modeling_utilsr	   utils.quantization_configr
   utilsr   r   r   r   r   r   r   
get_loggerr`   loggerr   rS   r   r   <module>rs      sR    !    2 07 s s ? 			H	%O{ Or   