Ë
    ÛÓ^jë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"                  j6                  «      Z G d„ dej:                  «      Z ed¬«      d„ «       Z	 dde e!   dz  fd„Z"y)é    )Ú	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y)ÚFbgemmFp8Quantizec                 ó   — || _         y ©N)Úhf_quantizer)Úselfr   s     úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/fbgemm_fp8.pyÚ__init__zFbgemmFp8Quantize.__init__-   s
   € Ø(ˆÕó    NÚ
input_dictÚmodelÚreturnc                 ó<  — t        |j                  «       «      d   \  }}|d   }ddlm} t	        ||«      \  }}t        ||«      �r.|dk(  r’|j                  dd«      }	|	j                  }
|	j                  d|
d   «      }t        |«      5  t        |«      \  }}d d d «       j                  |
«      }|j                  dd«      }j                  |
d   d|
d   «      }nõ|dk(  rð|j                  dd«      }	|	j                  }
|	j                  d|
d   «      }t        |«      5  t        |«      \  }}d d d «       j                  |
«      }|j                  dd«      }j                  |
d   |
d   d«      }n^t        |«      5  t        |«      \  }}d d d «       t        j                  j                  j                  |j                  d   d«      «      }|t        j                  j                  «      |› d�iS # 1 sw Y   �ŒbxY w# 1 sw Y   Œ×xY w# 1 sw Y   Œ„xY w)	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   s8  € ô " *×"2Ñ"2Ó"4Ó5°aÑ8Ñˆ
�EØ�a‘ˆå=ä2°5¸*ÓEÑˆ�ä�fÐ8Õ9Ø˜nÒ,ð $)§?¡?°1°aÓ#8Ð ð "2×!7Ñ!7�Ø"2×":Ñ":¸2¸~ÈbÑ?QÓ"R�ô ˜Ó/ñ ^Ü8LÈ_Ó8]Ñ5�NÐ$5÷^ð +×2Ñ2°>ÓB�	Ø%×/Ñ/°°1Ó5�	Ø0×8Ñ8¸ÈÑ9JÈAÈ~Ð^_ÑO`Óa‘Ø Ò+ð $)§?¡?°1°aÓ#8Ð ð "2×!7Ñ!7�Ø"2×":Ñ":¸2¸~ÈbÑ?QÓ"R�ô ˜Ó/ñ ^Ü8LÈ_Ó8]Ñ5�NÐ$5÷^ð +×2Ñ2°>ÓB�	Ø%×/Ñ/°°1Ó5�	Ø0×8Ñ8¸ÈÑ9JÈNÐ[\ÑL]Ð_`Óa‘ä˜5Ó!ñ FÜ*>¸uÓ*EÑ'�	˜<÷Fä Ÿ8™8×-Ñ-¨l×.?Ñ.?À×@RÑ@RÐSTÑ@UÐWXÓ.YÓZˆLàœEŸH™H×.Ñ.¨yÓ9¸j¸\ÈÐ;PÐR^Ð_Ð_÷;^ñ ^ú÷"^ð ^ú÷Fð Fús$   Â
G9Ä!HÆ HÇ9HÈHÈHr   )Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrr,   ÚTensorÚlistr   ÚModuler;   © r   r   r   r   ,   sh   „ ò)ð )-ñ5`à˜˜eŸl™l¨T°%·,±,Ñ-?Ñ?Ð?Ñ@ð5`ð �x‰x�‰ Ñ%ð5`ð
 
ˆc�5—<‘<ÐÑ	 ô5`r   r   c                   ó<   ‡ — e Zd Zej                  fˆ fd„	Zd„ Zˆ xZS )ÚFbgemmFp8Linearc                 ór  •— t         ‰| �  |||«       || _        || _        t        j
                  j                  t	        j                  ||f|¬«      «      | _        t        j
                  j                  t	        j                  |dft        j                  ¬«      «      | _
        | j                  dt	        j                  dgt        j                  ¬«      d¬«       |rRt        j
                  j                  t	        j                  | j                  t        j                  ¬«      «      | _        y d | _        y )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Ø&ˆÔØ(ˆÔä—h‘h×(Ñ(¬¯©°lÀKÐ5PÐX]Ô)^Ó_ˆŒÜ!ŸH™H×.Ñ.¬u¯{©{¸LÈ!Ð;LÔTY×TaÑTaÔ/bÓcˆÔØ×ÑÐ-¬u¯{©{¸A¸3ÄeÇkÁkÔ/RÐ_dÐÔeáÜŸ™×*Ñ*¬5¯;©;¸×8IÑ8IÔRW×R_ÑR_Ô+`ÓaˆD�IàˆD�Ir   c                 óò  — g |j                   d d ¢d‘­}t        |«      5  t        |j                  d|j                   d   «      j	                  «       | j
                  ¬«      \  }}d d d «       | j                  j                  t        j                  «      }t        ret        j                  | j                  j                  «       j                  d«      |j                  «       |j                  | j                   ¬«      }nUt        j"                  j$                  j'                  | j                  |d¬«      }| j                   �|| j                   z   n|}|j)                  |«      }~~|S # 1 sw Y   �ŒxY w)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™7 2™;Ó'×2Ñ2Ó4¸t×?RÑ?Rô$Ñ ˆK˜÷	ð
  $×0Ñ0×3Ñ3´E·M±MÓBÐÝ"Ü×%Ñ%ØØ—‘—‘“Ø×)Ñ)¨"Ó-Ø,×.Ñ.Ó0ØŸ'™'Ø—Y‘Yô‰Fô —Y‘Y×%Ñ%×6Ñ6Ø˜TŸ[™[¨'Ð3GÐX\ð 7ó ˆFð ,0¯9©9Ð+@�V˜dŸi™iÒ'ÀfˆFØ—‘ Ó-ˆØ˜Øˆ÷-	ñ 	ús    AE,Å,E6)r<   r=   r>   r,   Úfloat8_e4m3fnr   rm   Ú__classcell__©rV   s   @r   rF   rF   h   s   ø„ Ø>C×>QÑ>Qõ ör   rF   c                   ó<   ‡ — e Zd Zej                  fˆ fd„	Zd„ Zˆ xZS )r   c                 ón  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        | j                  | _        t        |j                     | _	        t        j                  j                  t        j                  | j                  | j
                  d| j                  z  ft        j                  ¬«      «      | _        t        j                  j                  t        j                  | j                  d| j                  dz  ft        j                   ¬«      «      | _        t        j                  j                  t        j                  | j                  | j                  | j
                  ft        j                  ¬«      «      | _        t        j                  j                  t        j                  | j                  | j
                  dft        j                   ¬«      «      | _        | j)                  dt        j                  dgt        j*                  ¬«      d¬«       y )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Ñ3ˆÔØ!'×!9Ñ!9ˆÔØ!×-Ñ-ˆÔØ×0Ñ0ˆŒÜ˜V×.Ñ.Ñ/ˆŒä!ŸH™H×.Ñ.Ü�K‰K˜×)Ñ)¨4×+;Ñ+;¸QÀÇÁÑ=PÐQÔY^×YlÑYlÔmó
ˆÔô #(§(¡(×"4Ñ"4Ü�K‰K˜×)Ñ)¨1¨d¯o©oÀÑ.AÐBÌ%Ï-É-ÔXó#
ˆÔô Ÿ™×+Ñ+Ü�K‰K˜×)Ñ)¨4¯?©?¸D×<LÑ<LÐMÔUZ×UhÑUhÔió
ˆŒô  %Ÿx™x×1Ñ1Ü�K‰K˜×)Ñ)¨4×+;Ñ+;¸QÐ?ÄuÇ}Á}ÔUó 
ˆÔð 	×ÑÐ-¬u¯{©{¸A¸3ÄeÇkÁkÔ/RÐ_dÐÕer   c           
      ó*
  — |j                  | j                  d| j                  «      }d}t        j                  |«      }t        | j                  «      D �]l  }||   }|j                  d| j                  «      }t        |«      5  t        ||| j                  «      \  }}ddd«       | j                  j                  d   dz  }	| j                  j                  t        j                  «      }
t        �rJt        j                   | j                  |   j#                  dd«      d|	 j%                  «       j'                  «       j)                  d«      |
|   d   d|	 j                  dd«      j%                  «       j'                  «       |j*                  ¬«      }t        j                   || j                  |   j#                  dd«      |	d j%                  «       j'                  «       |j)                  d«      |
|   d   |	d j                  dd«      j%                  «       j'                  «       |j*                  ¬«      }�nt        j,                  j.                  j1                  | j                  |   j#                  dd«      d|	 j%                  «       |
|   d   d|	 j                  dd«      j%                  «       d¬«      }t        j,                  j.                  j1                  || j                  |   j#                  dd«      |	d j%                  «       ||
|   d   |	d j                  dd«      j%                  «       d¬«      }|| j3                  |«      z  }t        |«      5  t        ||| j                  «      \  }}ddd«       | j4                  j                  t        j                  «      }t        rŽt        j                   | j6                  |   j#                  dd«      j%                  «       j)                  d«      ||   j                  dd«      j%                  «       j'                  «       |j*                  ¬«      }nzt        j,                  j.                  j1                  | j6                  |   j#                  dd«      j%                  «       ||   j                  dd«      j%                  «       d¬«      }|||<   �Œo |j                  |j8                  «      }|j                  d| j                  «      S # 1 sw Y   �Œ^xY w# 1 sw Y   �Œ�xY w)	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ÑAQÓRˆØˆ
ô ×&Ñ& }Ó5ˆä�t×'Ñ'Ó(ó B	+ˆAà)¨!Ñ,ˆMØ%2×%:Ñ%:¸2¸t×?OÑ?OÓ%PÐ"äÐ1Ó2ñ Ü1EØ*¨J¸×8KÑ8Kó2Ñ.Ð  ,÷ð "&×!2Ñ!2×!8Ñ!8¸Ñ!<ÀÑ!AÐØ)-×)@Ñ)@×)CÑ)CÄEÇMÁMÓ)RÐ&Þ&Ü×'Ñ'Ø$Ø×%Ñ% aÑ(×2Ñ2°1°aÓ8Ð9LÐ:LÐM×XÑXÓZ×\Ñ\Ó^Ø(×2Ñ2°2Ó6Ø6°qÑ9¸!Ñ<Ð=PÐ>PÐQ×VÑVÐWYÐ[\Ó]×hÑhÓj×lÑlÓnØ+×1Ñ1ô�ô ×%Ñ%Ø$Ø×%Ñ% aÑ(×2Ñ2°1°aÓ8Ð9KÐ9LÐM×XÑXÓZ×\Ñ\Ó^Ø(×2Ñ2°2Ó6Ø6°qÑ9¸!Ñ<Ð=OÐ=PÐQ×VÑVÐWYÐ[\Ó]×hÑhÓj×lÑlÓnØ+×1Ñ1ô’ô —y‘y×'Ñ'×8Ñ8Ø$Ø×%Ñ% aÑ(×2Ñ2°1°aÓ8Ð9LÐ:LÐM×XÑXÓZØ Ø.¨qÑ1°!Ñ4Ð5HÐ6HÐI×NÑNÈrÐSTÓU×`Ñ`ÓbØ#'ð 9ó �ô —Y‘Y×%Ñ%×6Ñ6Ø$Ø×%Ñ% aÑ(×2Ñ2°1°aÓ8Ð9KÐ9LÐM×XÑXÓZØ Ø.¨qÑ1°!Ñ4Ð5GÐ5HÐI×NÑNÈrÐSTÓU×`Ñ`ÓbØ#'ð 7ó �ð ˜TŸ[™[¨Ó.Ñ.ˆIä˜9Ó%ñ xÜ7KÈIÐWaÐcg×cvÑcvÓ7wÑ4Ð# _÷xð '+×&:Ñ&:×&=Ñ&=¼e¿m¹mÓ&LÐ#Ý&Ü %× 0Ñ 0Ø'Ø—N‘N 1Ñ%×/Ñ/°°1Ó5×@Ñ@ÓBØ+×5Ñ5°bÓ9Ø3°AÑ6×;Ñ;¸BÀÓB×MÑMÓO×QÑQÓSØ+×1Ñ1ô!‘ô !&§	¡	× 0Ñ 0× AÑ AØ'Ø—N‘N 1Ñ%×/Ñ/°°1Ó5×@Ñ@ÓBØ#Ø+¨AÑ.×3Ñ3°B¸Ó:×EÑEÓGØ#'ð !Bó !�ð +ˆK˜‹NðEB	+ðF "—n‘n ]×%9Ñ%9Ó:ˆØ×Ñ  D×$4Ñ$4Ó5Ð5÷ñ ú÷Pxñ xús   ÂS;Í"TÓ;T	ÔT	)r<   r=   r>   r,   rR   r   rm   ro   rp   s   @r   r   r   –   s   ø„ Ø%*§]¡]õ fö0R6r   r   r    )Úmaxsizec                  óŠ   — 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˜     s2   € åÝ+áÐ8À!ÔD×YÑYÐYÜ�9‰9×Ñ×0Ñ0Ð0r   Úmodules_to_not_convertc                 ót  — t        «       ad}|ri nddi}| j                  «       D ]í  \  }}t        ||«      sŒd}	t	        d¬«      5  |j
                  j                  dk(  r;t        | j                  d| j                  «      }
t        |
xs | j                  «      }	nYt        |t        j                  «      r?t        |j                  |j                  |j                   dufi |¤Ž}	|	j#                  d«       ddd«       |	€ŒÚ| j%                  ||	«       d}Œï |st&        j)                  d«       | S # 1 sw Y   Œ;xY w)	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ÐàÐÙ'‘B¨g°t¨_€Mà$×2Ñ2Ó4ò !Ñˆ�VÜ$ [Ð2HÔIØàˆ
Ü°Ô5ñ 	1Ø×Ñ×(Ñ(Ð,?Ò?ô
 & e§l¡l°MÀ5Ç<Á<ÓP�Ü7¸Ò8SÀuÇ|Á|ÓT‘
Ü˜F¤B§I¡IÔ.Ü,Ø×&Ñ&Ø×'Ñ'Ø—K‘K tÐ+ñð $ñ	�
ð ×)Ñ)¨%Ô0÷	1ð" ÐØà×Ñ˜K¨Ô4Ø Ñð5!ñ8 Ü�‰ðô	
ð €L÷=	1ð 	1ús   ÁB.D.Ä.D7	)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¶      sË   ðõ  å  Ý .ß `Ñ `÷õ ñ ÔÛÝáÔÝ-á0Ó2Ð áÔÑ%<Û)à	ˆ×	Ñ	˜HÓ	%€ô9`˜ô 9`ôx+�e—h‘h—o‘oô +ô\k6 §¡ô k6ñ\ �1Ôñ1ó ð1ð txñ:Ø#'¨¡9¨tÑ#3ô:r   