§
    ‚Štjë7  ã                   ó´  — d dl mZ ddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZ  e¦   «         r
d dlZd dlmZ  e¦   «         rd d	lmZ  e¦   «         Z e¦   «         resd dlZ ej        e¦  «        Z G d
„ de¦  «        Z G d„ dej        j        ¦  «        Z G d„ dej        ¦  «        Z ed¬¦  «        d„ ¦   «         Z	 dde e!         dz  fd„Z"dS )é    )Ú	lru_cacheé   )ÚACT2FN)ÚConversionOps)Úget_module_from_nameÚ	on_deviceÚshould_convert_module)Úis_accelerate_availableÚis_fbgemm_gpu_availableÚis_torch_availableÚis_torch_xpu_availableÚloggingN)Únn)Úinit_empty_weightsc            	       ó–   — e Zd Zd„ Z	 ddeeej        eej                 z  f         dej	        j
        dz  deeej        f         fd„ZdS )ÚFbgemmFp8Quantizec                 ó   — || _         d S ©N)Úhf_quantizer)Úselfr   s     úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/fbgemm_fp8.pyÚ__init__zFbgemmFp8Quantize.__init__-   s   € Ø(ˆÔÐÐó    NÚ
input_dictÚmodelÚreturnc                 ó  — t          |                     ¦   «         ¦  «        d         \  }}|d         }ddlm} t	          ||¦  «        \  }}t          ||¦  «        �r�|dk    rÂ|                     dd¦  «        }	|	j        }
|	                     d|
d         ¦  «        }t          |¦  «        5  t          |¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   |                     |
¦  «        }|                     dd¦  «        }|                     |
d         d|
d         ¦  «        }�n>|dk    rÀ|                     dd¦  «        }	|	j        }
|	                     d|
d         ¦  «        }t          |¦  «        5  t          |¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   |                     |
¦  «        }|                     dd¦  «        }|                     |
d         |
d         d¦  «        }nwt          |¦  «        5  t          |¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   t          j                             |                     |j        d         d¦  «        ¦  «        }|t          j                             |¦  «        |› d�|iS )	Nr   r   )ÚFbgemmFp8Llama4TextExpertsÚgate_up_projé   éÿÿÿÿÚ	down_projÚ_scale)ÚtupleÚitemsÚintegrationsr   r   Ú
isinstanceÚ	transposeÚshapeÚreshaper   Úquantize_fp8_per_rowÚtorchr   Ú	ParameterÚview)r   r   r   ÚkwargsÚ
target_keyÚvaluer   ÚmoduleÚtensor_nameÚtransposed_paramÚoriginal_shapeÚflattened_paramÚnew_value_flatÚweight_scale_flatÚ	new_valueÚweight_scales                   r   ÚconvertzFbgemmFp8Quantize.convert0   s€  € õ " *×"2Ò"2Ñ"4Ô"4Ñ5Ô5°aÔ8Ñˆ
�EØ�a”ˆà=Ð=Ð=Ð=Ð=Ð=å2°5¸*ÑEÔEÑˆ�å�fÐ8Ñ9Ô9ñ &	[Ø˜nÒ,Ð,ð $)§?¢?°1°aÑ#8Ô#8Ð ð "2Ô!7�Ø"2×":Ò":¸2¸~ÈbÔ?QÑ"RÔ"R�õ ˜Ñ/Ô/ð ^ð ^Ý8LÈ_Ñ8]Ô8]Ñ5�NÐ$5ð^ð ^ð ^ñ ^ô ^ð ^ð ^ð ^ð ^ð ^ð ^øøøð ^ð ^ð ^ð ^ð +×2Ò2°>ÑBÔB�	Ø%×/Ò/°°1Ñ5Ô5�	Ø0×8Ò8¸ÈÔ9JÈAÈ~Ð^_ÔO`ÑaÔa�‘Ø Ò+Ð+ð $)§?¢?°1°aÑ#8Ô#8Ð ð "2Ô!7�Ø"2×":Ò":¸2¸~ÈbÔ?QÑ"RÔ"R�õ ˜Ñ/Ô/ð ^ð ^Ý8LÈ_Ñ8]Ô8]Ñ5�NÐ$5ð^ð ^ð ^ñ ^ô ^ð ^ð ^ð ^ð ^ð ^ð ^øøøð ^ð ^ð ^ð ^ð +×2Ò2°>ÑBÔB�	Ø%×/Ò/°°1Ñ5Ô5�	Ø0×8Ò8¸ÈÔ9JÈNÐ[\ÔL]Ð_`ÑaÔa�øå˜5Ñ!Ô!ð Fð FÝ*>¸uÑ*EÔ*EÑ'�	˜<ðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Få œ8×-Ò-¨l×.?Ò.?ÀÔ@RÐSTÔ@UÐWXÑ.YÔ.YÑZÔZˆLà�EœH×.Ò.¨yÑ9Ô9¸jÐ;PÐ;PÐ;PÐR^Ð_Ð_s6   Â+C
Ã
CÃCÅ3FÆFÆFÇ;HÈHÈ!Hr   )Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrr,   ÚTensorÚlistr   ÚModuler;   © r   r   r   r   ,   s”   € € € € € ð)ð )ð )ð )-ð5`ð 5`à˜˜eœl¨T°%´,Ô-?Ñ?Ð?Ô@ð5`ð ŒxŒ Ñ%ð5`ð
 
ˆc�5”<ÐÔ	 ð5`ð 5`ð 5`ð 5`ð 5`ð 5`r   r   c                   ó2   ‡ — e Zd Zej        fˆ fd„	Zd„ Zˆ xZS )ÚFbgemmFp8Linearc                 óx  •— t          ¦   «                              |||¦  «         || _        || _        t          j                             t	          j        ||f|¬¦  «        ¦  «        | _        t          j                             t	          j        |dft          j	        ¬¦  «        ¦  «        | _
        |                      dt	          j        dgt          j        ¬¦  «        d¬¦  «         |rIt          j                             t	          j        | j        t          j	        ¬¦  «        ¦  «        | _        d S d | _        d S )N©Údtyper    Úinput_scale_ubF©Ú
persistent)Úsuperr   Úin_featuresÚout_featuresr,   r   r-   ÚzerosÚweightÚfloat32r:   Úregister_bufferÚfloatÚbias)r   rN   rO   rU   rI   Ú	__class__s        €r   r   zFbgemmFp8Linear.__init__i   sÿ   ø€ Ý‰Œ×Ò˜ l°DÑ9Ô9Ð9Ø&ˆÔØ(ˆÔå”h×(Ò(­¬°lÀKÐ5PÐX]Ð)^Ñ)^Ô)^Ñ_Ô_ˆŒÝ!œH×.Ò.­u¬{¸LÈ!Ð;LÕTYÔTaÐ/bÑ/bÔ/bÑcÔcˆÔØ×ÒÐ-­u¬{¸A¸3ÅeÄkÐ/RÑ/RÔ/RÐ_dÐÑeÔeÐeàð 	Ýœ×*Ò*­5¬;¸Ô8IÕRWÔR_Ð+`Ñ+`Ô+`ÑaÔaˆDŒIˆIˆIàˆDŒIˆIˆIr   c                 óØ  — g |j         d d…         ¢d‘R }t          |¦  «        5  t          |                     d|j         d         ¦  «                             ¦   «         | j        ¬¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   | j                             t          j	        ¦  «        }t          rat          j        || j                             ¦   «         |                     d¦  «        |                     ¦   «         |j        | j        ¬¦  «        }nAt          j        j                             || j        ||d¬¦  «        }| j        �
|| j        z   n|}|                     |¦  «        }~~|S )Nr!   )Úscale_ub)Úscale_aÚscale_bÚ	out_dtyperU   T©Úuse_fast_accum)r)   r   r+   r.   Ú
contiguousrJ   r:   Útor,   rR   Ú_is_torch_xpu_availableÚ
_scaled_mmrQ   ÚtÚ	unsqueezerI   rU   ÚopsÚfbgemmÚf8f8bf16_rowwiser*   )r   ÚxÚoutput_shapeÚx_quantizedÚx_scaleÚweight_scale_float32Úoutputs          r   ÚforwardzFbgemmFp8Linear.forwardw   sž  € à*˜œ  " œÐ* rÐ*Ð*ˆõ �q‰\Œ\ð 	ð 	Ý#7Ø—’�r˜1œ7 2œ;Ñ'Ô'×2Ò2Ñ4Ô4¸tÔ?Rð$ñ $ô $Ñ ˆK˜ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
  $Ô0×3Ò3µE´MÑBÔBÐÝ"ð 	MÝÔ%ØØ”—’‘”Ø×)Ò)¨"Ñ-Ô-Ø,×.Ò.Ñ0Ô0Øœ'Ø”Yðñ ô ˆFˆFõ ”YÔ%×6Ò6Ø˜Tœ[¨'Ð3GÐX\ð 7ñ ô ˆFð ,0¬9Ð+@�V˜dœiÑ'Ð'ÀfˆFØ—’ Ñ-Ô-ˆØ˜Øˆs   ¤AA;Á;A?ÂA?)r<   r=   r>   r,   Úfloat8_e4m3fnr   rm   Ú__classcell__©rV   s   @r   rF   rF   h   sR   ø€ € € € € Ø>CÔ>Qð ð ð ð ð ð ðð ð ð ð ð ð r   rF   c                   ó2   ‡ — e Zd Zej        fˆ fd„	Zd„ Zˆ xZS )r   c                 óÜ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        | j        | _        t          |j                 | _	        t          j                             t          j        | j        | j        d| j        z  ft          j        ¬¦  «        ¦  «        | _        t          j                             t          j        | j        d| j        dz  ft          j        ¬¦  «        ¦  «        | _        t          j                             t          j        | j        | j        | j        ft          j        ¬¦  «        ¦  «        | _        t          j                             t          j        | j        | j        dft          j        ¬¦  «        ¦  «        | _        |                      dt          j        dgt          j        ¬¦  «        d¬¦  «         d S )Nr   rH   r    rJ   FrK   )rM   r   Únum_local_expertsÚnum_expertsÚintermediate_sizeÚhidden_sizeÚ
expert_dimr   Ú
hidden_actÚact_fnr,   r   r-   rP   rn   r   rR   Úgate_up_proj_scaler"   Údown_proj_scalerS   rT   )r   ÚconfigrI   rV   s      €r   r   z#FbgemmFp8Llama4TextExperts.__init__—   s�  ø€ Ý‰Œ×ÒÑÔÐØ!Ô3ˆÔØ!'Ô!9ˆÔØ!Ô-ˆÔØÔ0ˆŒÝ˜VÔ.Ô/ˆŒå!œH×.Ò.ÝŒK˜Ô)¨4Ô+;¸QÀÄÑ=PÐQÕY^ÔYlÐmÑmÔmñ
ô 
ˆÔõ #(¤(×"4Ò"4ÝŒK˜Ô)¨1¨d¬oÀÑ.AÐBÍ%Ì-ÐXÑXÔXñ#
ô #
ˆÔõ œ×+Ò+ÝŒK˜Ô)¨4¬?¸DÔ<LÐMÕUZÔUhÐiÑiÔiñ
ô 
ˆŒõ  %œx×1Ò1ÝŒK˜Ô)¨4Ô+;¸QÐ?ÅuÄ}ÐUÑUÔUñ 
ô  
ˆÔð 	×ÒÐ-­u¬{¸A¸3ÅeÄkÐ/RÑ/RÔ/RÐ_dÐÑeÔeÐeÐeÐer   c           
      óF  — |                      | j        d| j        ¦  «        }d}t          j        |¦  «        }t          | j        ¦  «        D �] }||         }|                     d| j        ¦  «        }t          |¦  «        5  t          ||| j	        ¦  «        \  }}ddd¦  «         n# 1 swxY w Y   | j
        j        d         dz  }	| j                             t          j        ¦  «        }
t          �r’t          j        || j
        |                              dd¦  «        d|	…                              ¦   «                              ¦   «         |                     d¦  «        |
|         d         d|	…                               dd¦  «                             ¦   «                              ¦   «         |j        ¬¦  «        }t          j        || j
        |                              dd¦  «        |	d…                              ¦   «                              ¦   «         |                     d¦  «        |
|         d         |	d…                               dd¦  «                             ¦   «                              ¦   «         |j        ¬¦  «        }�n8t          j        j                             || j
        |                              dd¦  «        d|	…                              ¦   «         ||
|         d         d|	…                               dd¦  «                             ¦   «         d¬¦  «        }t          j        j                             || j
        |                              dd¦  «        |	d…                              ¦   «         ||
|         d         |	d…                               dd¦  «                             ¦   «         d¬¦  «        }||                      |¦  «        z  }t          |¦  «        5  t          ||| j	        ¦  «        \  }}ddd¦  «         n# 1 swxY w Y   | j                             t          j        ¦  «        }t          r¡t          j        || j        |                              dd¦  «                             ¦   «         |                     d¦  «        ||                               dd¦  «                             ¦   «                              ¦   «         |j        ¬¦  «        }n†t          j        j                             || j        |                              dd¦  «                             ¦   «         |||                               dd¦  «                             ¦   «         d¬¦  «        }|||<   �Œ"|                     |j        ¦  «        }|                      d| j        ¦  «        S )	z¸
        Args:
            hidden_states (torch.Tensor): (batch_size * token_num, hidden_size)
        Returns:
            torch.Tensor: (batch_size * token_num, hidden_size)
        r!   Nr   r   r    )rY   rZ   r[   Tr\   )r.   rt   rv   r,   Ú
empty_likeÚranger*   r   r+   rJ   r   r)   rz   r_   rR   r`   ra   r(   r^   rb   rc   rI   rd   re   rf   ry   r{   r"   Údevice)r   Úhidden_statesÚ
num_tokensÚnext_statesÚiÚexpert_hiddenÚexpert_hidden_reshapedÚexpert_quantizedÚexpert_scaleÚsharded_expert_dimÚgate_up_proj_scale_float32ÚgateÚupÚ	activatedÚactivated_quantizedÚactivated_scaleÚdown_proj_scale_float32Úexpert_outputs                     r   rm   z"FbgemmFp8Llama4TextExperts.forward¯   sÆ  € ð &×*Ò*¨4Ô+;¸RÀÔAQÑRÔRˆØˆ
õ Ô& }Ñ5Ô5ˆå�tÔ'Ñ(Ô(ð B	+ñ B	+ˆAà)¨!Ô,ˆMØ%2×%:Ò%:¸2¸tÔ?OÑ%PÔ%PÐ"åÐ1Ñ2Ô2ð ð Ý1EØ*¨J¸Ô8Kñ2ô 2Ñ.Ð  ,ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð "&Ô!2Ô!8¸Ô!<ÀÑ!AÐØ)-Ô)@×)CÒ)CÅEÄMÑ)RÔ)RÐ&Ý&ñ ÝÔ'Ø$ØÔ% aÔ(×2Ò2°1°aÑ8Ô8Ð9LÐ:LÐ9LÔM×XÒXÑZÔZ×\Ò\Ñ^Ô^Ø(×2Ò2°2Ñ6Ô6Ø6°qÔ9¸!Ô<Ð=PÐ>PÐ=PÔQ×VÒVÐWYÐ[\Ñ]Ô]×hÒhÑjÔj×lÒlÑnÔnØ+Ô1ðñ ô �õ Ô%Ø$ØÔ% aÔ(×2Ò2°1°aÑ8Ô8Ð9KÐ9LÐ9LÔM×XÒXÑZÔZ×\Ò\Ñ^Ô^Ø(×2Ò2°2Ñ6Ô6Ø6°qÔ9¸!Ô<Ð=OÐ=PÐ=PÔQ×VÒVÐWYÐ[\Ñ]Ô]×hÒhÑjÔj×lÒlÑnÔnØ+Ô1ðñ ô �‘õ ”yÔ'×8Ò8Ø$ØÔ% aÔ(×2Ò2°1°aÑ8Ô8Ð9LÐ:LÐ9LÔM×XÒXÑZÔZØ Ø.¨qÔ1°!Ô4Ð5HÐ6HÐ5HÔI×NÒNÈrÐSTÑUÔU×`Ò`ÑbÔbØ#'ð 9ñ ô �õ ”YÔ%×6Ò6Ø$ØÔ% aÔ(×2Ò2°1°aÑ8Ô8Ð9KÐ9LÐ9LÔM×XÒXÑZÔZØ Ø.¨qÔ1°!Ô4Ð5GÐ5HÐ5HÔI×NÒNÈrÐSTÑUÔU×`Ò`ÑbÔbØ#'ð 7ñ ô �ð ˜TŸ[š[¨Ñ.Ô.Ñ.ˆIå˜9Ñ%Ô%ð xð xÝ7KÈIÐWaÐcgÔcvÑ7wÔ7wÑ4Ð# _ðxð xð xñ xô xð xð xð xð xð xð xøøøð xð xð xð xð '+Ô&:×&=Ò&=½e¼mÑ&LÔ&LÐ#Ý&ð Ý %Ô 0Ø'Ø”N 1Ô%×/Ò/°°1Ñ5Ô5×@Ò@ÑBÔBØ+×5Ò5°bÑ9Ô9Ø3°AÔ6×;Ò;¸BÀÑBÔB×MÒMÑOÔO×QÒQÑSÔSØ+Ô1ð!ñ !ô !��õ !&¤	Ô 0× AÒ AØ'Ø”N 1Ô%×/Ò/°°1Ñ5Ô5×@Ò@ÑBÔBØ#Ø+¨AÔ.×3Ò3°B¸Ñ:Ô:×EÒEÑGÔGØ#'ð !Bñ !ô !�ð +ˆK˜‰N‰NØ!—n’n ]Ô%9Ñ:Ô:ˆØ×Ò  DÔ$4Ñ5Ô5Ð5s$   ÂB'Â'B+	Â.B+	Ï$P
Ð
P	ÐP	)r<   r=   r>   r,   rR   r   rm   ro   rp   s   @r   r   r   –   s^   ø€ € € € € Ø%*¤]ð fð fð fð fð fð fð0R6ð R6ð R6ð R6ð R6ð R6ð R6r   r   r    )Úmaxsizec                  ól   — t           rddlm}   | dd¬¦  «        j        S t          j        j        j        S )Nr    ©Ú
get_kernelzkernels-community/fp8-fbgemm)Úversion)r`   Úhub_kernelsr•   r+   r,   rd   re   r”   s    r   Úget_quantize_fp8_per_rowr˜     sD   € åð ZØ+Ð+Ð+Ð+Ð+Ð+àˆzÐ8À!ÐDÑDÔDÔYÐYÝŒ9ÔÔ0Ð0r   FÚmodules_to_not_convertc                 óp  — t          ¦   «         ad}|ri nddi}|                      ¦   «         D ]ì\  }}t          ||¦  «        sŒd}	t	          d¬¦  «        5  |j        j        dk    r2t          | j        d| j        ¦  «        }
t          |
p| j        ¦  «        }	nOt          |t          j        ¦  «        r5t          |j        |j        |j        dufi |¤Ž}	|	                     d¦  «         ddd¦  «         n# 1 swxY w Y   |	€ŒÔ|                      ||	¦  «         d}Œí|st&                               d¦  «         | S )	a  
    A helper function to replace all `torch.nn.Linear` modules by `FbgemmFp8Linear` modules.
    This will enable running your models using high performance fp8 kernel from FBGEMM library.

    Parameters:
        model (`torch.nn.Module`):
            Input model or `torch.nn.Module` as the function is run recursively.
        modules_to_not_convert (`list[`str`]`, *optional*, defaults to `None`):
            Names of the modules to not convert. In practice we keep the `lm_head` in full precision for numerical stability reasons.
        quantization_config (`FbgemmFp8Config`):
            The quantization config object that contains the quantization parameters.
        pre_quantized (`book`, defaults to `False`):
            Whether the model is pre-quantized or not
    FrI   NT)Úinclude_buffersÚLlama4TextExpertsÚtext_configzÇYou are loading your model using FP8 quantization but no linear modules were found in your model. Please double check your model architecture, or submit an issue on github if you think this is a bug.)r˜   r+   Únamed_modulesr	   r   rV   r<   Úgetattrr|   r   r'   r   ÚLinearrF   rN   rO   rU   Úrequires_grad_Úset_submoduleÚloggerÚwarning)r   r™   Úquantization_configÚpre_quantizedÚtp_planÚhas_been_replacedÚmodule_kwargsÚmodule_namer2   Ú
new_moduler�   s              r   Úreplace_with_fbgemm_fp8_linearr¬     sº  € õ$ 4Ñ5Ô5ÐàÐØ'Ð<�B�B¨g°t¨_€Mà$×2Ò2Ñ4Ô4ð !ð !Ñˆ�VÝ$ [Ð2HÑIÔIð 	Øàˆ
Ý°Ð5Ñ5Ô5ð 	1ð 	1ØÔÔ(Ð,?Ò?Ð?õ
 & e¤l°MÀ5Ä<ÑPÔP�Ý7¸Ð8SÀuÄ|ÑTÔT�
�
Ý˜F¥B¤IÑ.Ô.ð 1Ý,ØÔ&ØÔ'Ø”K tÐ+ðð ð $ð	ð �
ð ×)Ò)¨%Ñ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð" ÐØà×Ò˜K¨Ñ4Ô4Ð4Ø ÐÐàð 
Ý�Šðñ	
ô 	
ð 	
ð €Ls   ÁBC3Ã3C7	Ã:C7	)NNFN)#Ú	functoolsr   Úactivationsr   Úcore_model_loadingr   Úquantizers.quantizers_utilsr   r   r	   Úutilsr
   r   r   r   r   r,   r   Ú
accelerater   r`   Úfbgemm_gpu.experimental.gen_aiÚ
fbgemm_gpuÚ
get_loggerr<   r£   r   r    rF   rC   r   r˜   rB   r@   r¬   rD   r   r   ú<module>r¶      s3  ðð  Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø .Ð .Ð .Ð .Ð .Ð .Ø `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ÐÑÔð Ø€L€L€LØÐÐÐÐÐàÐÑÔð .Ø-Ð-Ð-Ð-Ð-Ð-à0Ð0Ñ2Ô2Ð àÐÑÔð *Ð%<ð *Ø)Ð)Ð)Ð)à	ˆÔ	˜HÑ	%Ô	%€ð9`ð 9`ð 9`ð 9`ð 9`˜ñ 9`ô 9`ð 9`ðx+ð +ð +ð +ð +�e”h”oñ +ô +ð +ð\k6ð k6ð k6ð k6ð k6 ¤ñ k6ô k6ð k6ð\ €�1ÐÑÔð1ð 1ñ Ôð1ð txð:ð :Ø#'¨¤9¨tÑ#3ð:ð :ð :ð :ð :ð :r   