Ë
    Hêñ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      €úi/var/www/pod-logistic/pod-ai/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Údiskz¯You 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¾   € Ü�z‰z×&Ñ&Ô(Ü%Ð&vÓwÐwä&Ô(ÜÐhÓiÐiä!Ô#ÜÐlÓmÐmä$Ô&ÜØtóð ð ÐÜðFóð ô ˜
¤DÔ)Ø˜
×)Ñ)Ó+Ñ+¨v¸×9JÑ9JÓ9LÑ/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:   € Ø”E—M‘MÒ! e¬u¯~©~Ò&=ÜØ" 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ÑBÀE×D_Ñ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]Ð^dÐfqÕSr˜˜v™ÐsˆÑsÜ  ×!4Ñ!4Ó!6Ð=VÐ^cÔdó 	Z‰LˆD�&ð �}‰}×#Ñ#Ð+;Ñ;Ù9OÐW]×WdÑWd×WkÑWkÔ9lÐ  §¡×!5Ñ!5Ñ6Ø/°·±×0DÑ0DÑEˆFÔð $0×#9Ñ#9¸$×:RÑ:R×:`Ñ:`ÐaeÑ:fÓ#gˆFÔ Ù7LØ—}‘}×)Ñ)Ø—}‘}×)Ñ)Ø×-Ñ-ô8Ñ4ˆF�M‰MÔ Ô 4ð
 <B×;OÑ;O×;WÑ;WÓ;YˆD×$Ñ$×2Ñ2°4Ó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-   € Ý.ä2°5¸*ÓEÑˆ�Ü�f˜kÔ*¨{¸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   