§
    ‚Štj=  ã                   óÒ   — 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dS )é    )Ú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          ¦   «         j        |fi |¤Ž d S )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_higgs.pyr   zHiggsHfQuantizer.__init__+   s)   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ð7Ð7ó    c                 óÔ  — t           j                             ¦   «         st          d¦  «        ‚t	          ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚|€t          d¦  «        ‚t          |t          ¦  «        r;d|                     ¦   «         v sd|                     ¦   «         v rt          d¦  «        ‚d S d S )	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×&Ò&Ñ(Ô(ð 	xÝ%Ð&vÑwÔwÐwå&Ñ(Ô(ð 	jÝÐhÑiÔiÐiå!Ñ#Ô#ð 	nÝÐlÑmÔmÐmå$Ñ&Ô&ð 	ÝØtñô ð ð ÐÝðFñô ð õ ˜
¥DÑ)Ô)ð 	Ø˜
×)Ò)Ñ+Ô+Ð+Ð+¨v¸×9JÒ9JÑ9LÔ9LÐ/LÐ/LÝ ðhñô ð ð	ð 	Ø/LÐ/Lr   Údtypeútorch.dtypeÚreturnc                 ól   — |t           j        k    r#|t           j        k    rt          d|› d�¦  «        ‚|S )NzInvalid `dtype` zS. HIGGS quantization only supports `dtype=torch.float16` or `dtype=torch.bfloat16`.)r   Úfloat16Úbfloat16r$   )r   r*   s     r   Úupdate_dtypezHiggsHfQuantizer.update_dtypeI   sB   € Ø•E”MÒ!Ð! e­u¬~Ò&=Ð&=ÝØ} 5Ð}Ð}Ð}ñô ð ð ˆr   Úmodelr	   c                 ó˜   — ddl m} |                      || j        j        |j        ¦  «        | _         ||| j        | j        ¬¦  «         d S )Nr   )Úreplace_with_higgs_linear)r   Úmodules_to_not_convert)Úintegrationsr3   Úget_modules_to_not_convertr   r4   Ú_keep_in_fp32_modules)r   r1   r   r3   s       r   Ú$_process_model_before_weight_loadingz5HiggsHfQuantizer._process_model_before_weight_loadings   ss   € ð
 	=Ð<Ð<Ð<Ð<Ð<à&*×&EÒ&EØ�4Ô+ÔBÀEÔD_ñ'
ô '
ˆÔ#ð 	"Ð!ØØ $Ô 8Ø#'Ô#>ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ój  ‡
— ddl m}m} ddlm} ddlmŠ
 i }ˆ
fd„|                     ¦   «         D ¦   «         }t          | 	                    ¦   «         dd¬	¦  «        D ]Ö\  }}	|	j
        j        |vr# ||	j
        j        ¬
¦  «        ||	j
        j        <   ||	j
        j                 |	_        |                     | j        j        |         ¦  «        |	_         ||	j
        j        |	j        j        |	j        ¬¦  «        \  |	j
        _        |	_        |	j                             ¦   «         | j        j        |<   Œ×d S )Nr   )ÚTuneMetaDataÚmaybe_tune_and_repack)Úmake_workspace_streamkr   ©ÚHiggsLinearc                 ó<   •— i | ]\  }}t          |‰¦  «        ¯||“ŒS © )r%   )Ú.0ÚnameÚmoduler>   s      €r   ú
<dictcomp>zHHiggsHfQuantizer._process_model_after_weight_loading.<locals>.<dictcomp>‹   s1   ø€ ÐsÐsÐs©,¨$°ÕS]Ð^dÐfqÑSrÔSrÐs˜˜vÐsÐsÐsr   zRepacking HIGGS modulesF)ÚdescÚleave)Údevice)ÚweightÚscalesÚmetadata)Ú
flute.tuner:   r;   Úflute.utilsr<   r5   r>   Únamed_modulesr   ÚitemsrH   rG   Ú	workspaceÚ	from_dictr   Útune_metadataÚdatarI   Úto_dict)r   r1   r   r:   r;   r<   Úflute_workspacesÚflute_modulesrB   rC   r>   s             @r   Ú#_process_model_after_weight_loadingz4HiggsHfQuantizer._process_model_after_weight_loading„   su  ø€ ØBÐBÐBÐBÐBÐBÐBÐBØ6Ð6Ð6Ð6Ð6Ð6à.Ð.Ð.Ð.Ð.Ð.àÐØsÐsÐsÐs¸%×:MÒ:MÑ:OÔ:OÐsÑsÔsˆÝ  ×!4Ò!4Ñ!6Ô!6Ð=VÐ^cÐdÑdÔdð 	Zð 	Z‰LˆD�&ð Œ}Ô#Ð+;Ð;Ð;Ø9OÐ9OÐW]ÔWdÔWkÐ9lÑ9lÔ9lÐ  ¤Ô!5Ñ6Ø/°´Ô0DÔEˆFÔð $0×#9Ò#9¸$Ô:RÔ:`ÐaeÔ:fÑ#gÔ#gˆFÔ Ø7LÐ7LØ”}Ô)Ø”}Ô)ØÔ-ð8ñ 8ô 8Ñ4ˆFŒMÔ Ô 4ð
 <BÔ;O×;WÒ;WÑ;YÔ;YˆDÔ$Ô2°4Ñ8Ð8ð	Zð 	Zr   c                 ó   — dS )NFr@   ©r   s    r   Úis_trainablezHiggsHfQuantizer.is_trainable�   s   € àˆur   c                 ó   — dS )NTr@   rX   s    r   Úis_serializablez HiggsHfQuantizer.is_serializable¡   s   € Øˆtr   Ú
param_namec                 óh   — ddl m} t          ||¦  «        \  }}t          ||¦  «        r|dk    rdS dS )Nr   r=   rH   TF)r5   r>   r   r%   )r   r1   r\   r   r>   rC   Útensor_names          r   Úparam_needs_quantizationz)HiggsHfQuantizer.param_needs_quantization¤   sN   € Ø.Ð.Ð.Ð.Ð.Ð.å2°5¸*ÑEÔEÑˆ�Ý�f˜kÑ*Ô*ð 	¨{¸hÒ/FÐ/Fà�4à�5r   c                 ó(   — ddl m}  ||¦  «        }|S )Nr   )Údequantize_higgs)r5   ra   )r   r1   ra   s      r   Ú_dequantizezHiggsHfQuantizer._dequantize®   s)   € Ø3Ð3Ð3Ð3Ð3Ð3à Ð  Ñ'Ô'ˆØˆr   )r*   r+   r,   r+   )r1   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r)   r0   r8   rV   ÚpropertyÚboolrY   r[   Ústrr_   rb   Ú__classcell__)r   s   @r   r   r   #   s-  ø€ € € € € € ðð ð !ÐØ&Ð&Ð&Ñ&ð8Ð,Cð 8ð 8ð 8ð 8ð 8ð 8ðð ð ð6ð ð ð ðT
à ð
ð 
ð 
ð 
ð"Zð Zð Zð Zð2 ð˜dð ð ð ñ „Xððð ð ðÐ.?ð ÈSð Ð_cð ð ð ð ðð ð ð ð ð ð r   r   )Útypingr   Úutils.loggingr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr	   Úutils.quantization_configr
   Úutilsr   r   r   r   r   r   r   Ú
get_loggerrc   Úloggerr   r@   r   r   ú<module>rv      s%  ðð !Ð  Ð  Ð  Ð  Ð  à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ð 8Ø0Ð0Ð0Ð0Ð0Ð0Ø7Ð7Ð7Ð7Ð7Ð7à sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sØ ?Ð ?Ð ?Ð ?Ð ?Ð ?ð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ðOð Oð Oð Oð O�{ñ Oô Oð Oð Oð Or   