§
    Þ˜ºhü!  ã                   óÎ   — d dl mZmZ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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ÚAnyÚOptionalé   )Útqdmé   )ÚHfQuantizer)Úget_module_from_name)ÚPreTrainedModel)Úis_accelerate_availableÚis_flute_availableÚis_hadamard_availableÚis_torch_availableÚlogging)ÚQuantizationConfigMixinNc                   óH  ‡ — e Zd ZdZdZdZddgZdefˆ fd„Zd„ Z	d"d„Z
	 d#dddddedddeeef         deee                  fd„Z	 d#dddeee                  fd„Zd$d„Zdee         dedee         fd„Zedefd„¦   «         Zd#d„Zdddddedeeef         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.
    FTzflute-kernelÚfast_hadamard_transformÚquantization_configc                 óJ   •—  t          ¦   «         j        |fi |¤Ž || _        d S ©N)ÚsuperÚ__init__r   )Úselfr   ÚkwargsÚ	__class__s      €úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_higgs.pyr   zHiggsHfQuantizer.__init__+   s1   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ø#6ˆÔ Ð Ð ó    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Ñ)Ô)ð 	¨u¸
×8IÒ8IÑ8KÔ8KÐ/KÐ/KÈvÐYc×YjÒYjÑYlÔYlÐOlÐOlÝðdñô ð ð	ð 	ÐOlÐOlr   Údtypeútorch.dtypeÚreturnc                 ó¾   — |€'t                                d¦  «         t          j        }n3|t          j        k    r#|t          j        k    rt          d|› d�¦  «        ‚|S )NzG`dtype` is None. Setting `dtype=torch.float16` for FLUTE compatibility.zInvalid `dtype` zS. HIGGS quantization only supports `dtype=torch.float16` or `dtype=torch.bfloat16`.)ÚloggerÚinfor"   Úfloat16Úbfloat16r'   )r   r-   s     r   Úupdate_dtypezHiggsHfQuantizer.update_dtypeI   sc   € Øˆ=Ý�KŠKÐaÑbÔbÐbÝ”MˆEˆEØ•e”mÒ#Ð#¨µ´Ò(?Ð(?ÝØ} 5Ð}Ð}Ð}ñô ð ð ˆr   NÚmodelr   Úparam_valueztorch.TensorÚ
param_nameÚtarget_deviceztorch.deviceÚ
state_dictÚunexpected_keysc                 óð  — ddl m} 	  ||                     |¦  «        | j        j        | j        j        | j        j        | j        j        ¦  «        }~t          ||¦  «        \  }	}
d 	                    | 
                    d¦  «        d d…         ¦  «        }|                     ¦   «         D ]¬\  }}||	j        v r*t          j                             |d¬¦  «        |	j        |<   Œ8||	j        v r(t          j                             |¦  «        |	j        |<   Œi|dk    r)||	_        |                     ¦   «         | j        j        |<   Œ˜t)          d|› d	|	› �¦  «        ‚|�||v r|                     |¦  «         d S d S d S )
Nr   )Úquantize_with_higgsú.éÿÿÿÿF)Úrequires_gradÚtune_metadatazUnexpected key z in module )Úintegrationsr=   Útor   ÚbitsÚpÚ
group_sizeÚhadamard_sizer
   ÚjoinÚsplitÚitemsÚ_parametersr"   ÚnnÚ	ParameterÚ_buffersÚBufferrA   Úto_dictr'   Úremove)r   r6   r7   r8   r9   r:   r;   r=   Ú
flute_dictÚmoduleÚ_Úmodule_nameÚkeyÚvalues                 r   Úcreate_quantized_paramz'HiggsHfQuantizer.create_quantized_paramT   s¦  € ð 	7Ð6Ð6Ð6Ð6Ð6ð	ð )Ð(Ø�NŠN˜=Ñ)Ô)ØÔ$Ô)ØÔ$Ô&ØÔ$Ô/ØÔ$Ô2ñ
ô 
ˆ
ð å(¨°
Ñ;Ô;‰	ˆ�Ø—h’h˜z×/Ò/°Ñ4Ô4°S°b°SÔ9Ñ:Ô:ˆØ$×*Ò*Ñ,Ô,ð 		Mð 		M‰JˆC�Ø�fÔ(Ð(Ð(Ý*/¬(×*<Ò*<¸UÐRWÐ*<Ñ*XÔ*X�Ô" 3Ñ'Ð'Ø˜œÐ'Ð'Ý',¤x§¢°uÑ'=Ô'=�” Ñ$Ð$Ø˜Ò'Ð'Ø',�Ô$ØFKÇmÂmÁoÄo�Ô(Ô6°{ÑCÐCå Ð!K°3Ð!KÐ!KÀ6Ð!KÐ!KÑLÔLÐLàÐ&¨:¸Ð+HÐ+HØ×"Ò" :Ñ.Ô.Ð.Ð.Ð.ð 'Ð&Ð+HÐ+Hr   Úkeep_in_fp32_modulesc                 ó°   — ddl m} |                      || j        j        |¦  «        | _         ||| j        | j        ¬¦  «         | j        |j        _        d S )Nr   )Úreplace_with_higgs_linear)r   Úmodules_to_not_convert)rB   r[   Úget_modules_to_not_convertr   r\   Úconfig)r   r6   rY   r   r[   s        r   Ú$_process_model_before_weight_loadingz5HiggsHfQuantizer._process_model_before_weight_loading{   s|   € ð 	=Ð<Ð<Ð<Ð<Ð<à&*×&EÒ&EØ�4Ô+ÔBÐDXñ'
ô '
ˆÔ#ð 	"Ð!ØØ $Ô 8Ø#'Ô#>ð	
ñ 	
ô 	
ð 	
ð
 ,0Ô+CˆŒÔ(Ð(Ð(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ÚnamerS   re   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.tunera   rb   Úflute.utilsrc   rB   re   Únamed_modulesr   rJ   rp   ro   Ú	workspaceÚ	from_dictr   rA   Údatarq   rP   )r   r6   r   ra   rb   rc   Úflute_workspacesÚflute_modulesrk   rS   re   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   Úmissing_keysÚprefixc                 óœ   ‡‡‡‡— ddl mŠ ˆfd„|                     ¦   «         D ¦   «         Šdt          dt          fˆˆfd„Šˆfd„|D ¦   «         S )Nr   rd   c                 ó:   •— h | ]\  }}t          |‰¦  «        ¯|’ŒS rg   rh   ri   s      €r   ú	<setcomp>z7HiggsHfQuantizer.update_missing_keys.<locals>.<setcomp>ª   s.   ø€ ÐiÐiÐi¡  fÍÐTZÐ\gÑIhÔIhÐi�tÐiÐiÐir   rV   r/   c                 ó¦   •‡ ‡— ‰                       d¦  «        s‰                       d¦  «        rdS ‰› d‰ › �Št          ˆˆ fd„‰D ¦   «         ¦  «        S )Nz.weightz.biasFr>   c              3   ó(   •K  — | ]}|‰v p|‰v V — Œd S r   rg   )rj   rk   Úfull_keyrV   s     €€r   ú	<genexpr>zNHiggsHfQuantizer.update_missing_keys.<locals>.should_update.<locals>.<genexpr>°   s1   øè è € ÐOÐO¸4�t˜s�{Ð6 d¨hÐ&6ÐOÐOÐOÐOÐOÐOr   )ÚendswithÚany)rV   rƒ   Úhiggs_namesr}   s   `@€€r   Úshould_updatez;HiggsHfQuantizer.update_missing_keys.<locals>.should_update¬   sj   øøø€ Ø�|Š|˜IÑ&Ô&ð ¨#¯,ª,°wÑ*?Ô*?ð Ø�uØ Ð(Ð( 3Ð(Ð(ˆHÝÐOÐOÐOÐOÐOÀ;ÐOÑOÔOÑOÔOÐOr   c                 ó*   •— g | ]} ‰|¦  «        °|‘ŒS rg   rg   )rj   rV   rˆ   s     €r   ú
<listcomp>z8HiggsHfQuantizer.update_missing_keys.<locals>.<listcomp>²   s(   ø€ ÐFÐFÐF˜°=°=ÀÑ3EÔ3EÐF�ÐFÐFÐFr   )rB   re   ru   ÚstrÚbool)r   r6   r|   r}   re   r‡   rˆ   s      `@@@r   Úupdate_missing_keysz$HiggsHfQuantizer.update_missing_keys§   s”   øøøø€ Ø.Ð.Ð.Ð.Ð.Ð.àiÐiÐiÐi°×0CÒ0CÑ0EÔ0EÐiÑiÔiˆð	P�sð 	P¥tð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð GÐFÐFÐF˜|ÐFÑFÔFÐFr   c                 ó   — dS )NFrg   )r   s    r   Úis_trainablezHiggsHfQuantizer.is_trainable´   s   € àˆur   c                 ó   — dS )NTrg   )r   Úsafe_serializations     r   Úis_serializablez HiggsHfQuantizer.is_serializable¸   s   € Øˆtr   c                 ó’   — ddl m} t          ||¦  «        \  }}t          ||¦  «        r|dk    r|j        t
          j        k    rdS dS )Nr   rd   rp   TF)rB   re   r
   r(   r-   r"   Úint16)	r   r6   r7   r8   r:   r   re   rS   Útensor_names	            r   Úcheck_quantized_paramz&HiggsHfQuantizer.check_quantized_param»   sa   € ð 	/Ð.Ð.Ð.Ð.Ð.å2°5¸*ÑEÔEÑˆ�Ý�f˜kÑ*Ô*ð 	¨{¸hÒ/FÐ/FÈ;ÔK\Õ`eÔ`kÒKkÐKkà�4à�5r   c                 ó(   — ddl m}  ||¦  «        }|S )Nr   )Údequantize_higgs)rB   r˜   )r   r6   r˜   s      r   Ú_dequantizezHiggsHfQuantizer._dequantizeÌ   s)   € Ø3Ð3Ð3Ð3Ð3Ð3à Ð  Ñ'Ô'ˆØˆr   )r-   r.   r/   r.   r   )r6   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ requires_parameters_quantizationÚrequired_packagesr   r   r,   r5   r‹   r)   r   r   ÚlistrX   r_   r{   r�   ÚpropertyrŒ   r�   r’   r–   r™   Ú__classcell__)r   s   @r   r   r   "   s  ø€ € € € € ðð ð !ÐØ'+Ð$Ø'Ð)BÐCÐð7Ð,Cð 7ð 7ð 7ð 7ð 7ð 7ðð ð ð4	ð 	ð 	ð 	ð$ 04ð%/ð %/à ð%/ð $ð%/ð ð	%/ð
 &ð%/ð ˜˜c˜”Nð%/ð " $ s¤)Ô,ð%/ð %/ð %/ð %/ðT 59ðDð Dà ðDð ' t¨C¤yÔ1ðDð Dð Dð Dð&Zð Zð Zð Zð2G°t¸C´yð GÈ#ð GÐRVÐWZÔR[ð Gð Gð Gð Gð ð˜dð ð ð ñ „Xððð ð ð ðà ðð $ðð ð	ð
 ˜˜c˜”Nðð 
ðð ð ð ð"ð ð ð ð ð ð r   r   )Útypingr   r   r   Úutils.loggingr   Úbaser	   Úquantizers_utilsr
   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úutils.quantization_configr   r"   Ú
get_loggerrš   r1   r   rg   r   r   ú<module>r¬      s  ðð 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0à sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sÐ sØ ?Ð ?Ð ?Ð ?Ð ?Ð ?ð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ðnð nð nð nð n�{ñ nô nð nð nð nr   