ó
    Eñiq  ã                   óX   • S SK Jr  S SKJr  SSKJrJr  SSKJr  S
S jr	S r
SS jrS	 rg)é    )Ú
MethodTypeNé   )Úis_hpu_availableÚis_transformer_engine_available)ÚGatheredParametersc           	      ó	  • [        5       (       d  [        S5      e[        5       (       a+  SSKn[	        US5      (       d  [
        R                  Ul        OSSKJn  U R                  5        GH÷  u  pV[        U[
        R                  5      (       Ga/  U(       Ga'  U(       Ga  UR                  SLnUR                  /nU(       a  UR                  UR                  5        [        USS9   [!        S UR                  R"                   5       5      (       a   SSS5          gUR                  UR$                  UR&                  XvR                  R(                  S9n	U	R                  R+                  UR                  5        U(       a%  U	R                  R+                  UR                  5        [-        XU	5        SSS5        GMU  [        U[
        R                  5      (       aá  U(       aÚ  U(       aÓ  [        UR                  UR                  /SS9   UR                  SLnUR                  UR.                  S   UR0                  UR                  R(                  S9n	U	R                  R+                  UR                  5        U(       a%  U	R                  R+                  UR                  5        SSS5        [-        XW	5        GMU  [        XdR                  5      (       aº  U(       d³  U(       a¬  UR                  SLn[
        R                  " UR$                  UR&                  XvR                  R(                  S9n
U
R                  R+                  UR                  5        U(       a%  U
R                  R+                  UR                  5        [-        XU
5        GM)  [        XdR                  5      (       a¨  U(       d¡  U(       aš  [
        R                  " UR.                  S   UR0                  UR                  R(                  S9n
U
R                  R+                  UR                  5        U
R                  R+                  UR                  5        [-        XU
5        GMë  [3        UUUUS	9  GMú     g! , (       d  f       GM  = f! , (       d  f       GNÙ= f)
zm
Recursively converts the linear and layernorm layers of a model to their `transformers_engine` counterpart.
zBUsing `convert_model` requires transformer_engine to be installed.r   NÚ	LayerNorm)Úmodifier_rankc              3   ó0   #   • U  H  oS -  S:g  v •  M     g7f)é   r   N© )Ú.0Úps     Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/accelerate/utils/transformer_engine.pyÚ	<genexpr>Ú convert_model.<locals>.<genexpr>2   s   é € Ð@Ò,? q˜2‘v –{Ò,?ùs   ‚)ÚbiasÚparams_dtype)Úepsr   )Úto_transformer_engineÚ_convert_linearÚ_convert_ln)r   ÚImportErrorr   Úintel_transformer_engineÚhasattrÚnnr	   Útransformer_engine.pytorchÚpytorchÚnamed_childrenÚ
isinstanceÚLinearr   ÚweightÚappendr   ÚanyÚshapeÚin_featuresÚout_featuresÚdtypeÚcopy_ÚsetattrÚnormalized_shaper   Úconvert_model)Úmodelr   r   r   ÚteÚnameÚmoduleÚhas_biasÚparams_to_gatherÚ	te_moduleÚ
new_modules              r   r,   r,      s(  € ô +×,Ñ,ÜÐ^Ó_Ð_ä×ÑÛ-ä�r˜;×'Ñ'äŸ<™<ˆBŒLøå/à×,Ñ,×.‰ˆÜ�fœbŸi™i×(Ò(×-BÇØ—{‘{¨$Ð.ˆHØ &§¡˜ÐÞØ ×'Ñ'¨¯©Ô4ä#Ð$4ÀAÓFÜÑ@¨F¯M©M×,?Ò,?Ó@×@Ñ@Ø÷ GÑFð ŸI™IØ×&Ñ&¨×(;Ñ(;À(×YfÑYf×YlÑYlð &ð �	ð × Ñ ×&Ñ& v§}¡}Ô5ÞØ—N‘N×(Ñ(¨¯©Ô5ä˜ YÔ/÷ GÒFô ˜¤§¡×-Ñ-Ö2GÎKÜ# V§]¡]°F·K±KÐ$@ÐPQÓRØ!Ÿ;™;¨dÐ2�ØŸL™L¨×)@Ñ)@ÀÑ)CÈÏÉÐbh×boÑbo×buÑbu˜LÐv�	Ø× Ñ ×&Ñ& v§}¡}Ô5ÞØ—N‘N×(Ñ(¨¯©Ô5÷ Sô �E ×+Ü˜§	¡	×*Ñ*Ö3HÎ_Ø—{‘{¨$Ð.ˆHÜŸšØ×"Ñ" F×$7Ñ$7¸h×UbÑUb×UhÑUhñˆJð ×Ñ×#Ñ# F§M¡MÔ2ÞØ—‘×%Ñ% f§k¡kÔ2ä�E ×,Ü˜§¡×-Ñ-Ö6KÖP[ÜŸš f×&=Ñ&=¸aÑ&@ÀfÇjÁjÐ_e×_lÑ_l×_rÑ_rÑsˆJØ×Ñ×#Ñ# F§M¡MÔ2Ø�O‰O×!Ñ! &§+¡+Ô.ä�E ×,äØØ&;Ø /Ø'õ	ò[ /÷ G×Fú÷ SÖRús    Ã(-Q(ÄBQ(ÈBQ;Ñ(
Q8	Ñ;
R
	c                 ó  • [        5       (       d  [        S5      e[        5       (       a  SSKnUR                  nO)SSKJn  UR                  UR                  UR                  4nU R                  5        H  n[        X25      (       d  M    g   g)zK
Returns whether a given model has some `transformer_engine` layer or not.
zRUsing `has_transformer_engine_layers` requires transformer_engine to be installed.r   NTF)r   r   r   r   r!   r   r   r	   ÚTransformerLayerÚmodulesr    )r-   r.   Úmodule_cls_to_checkÚms       r   Úhas_transformer_engine_layersr:   _   sp   € ô +×,Ñ,ÜÐnÓoÐoä×ÑÛ-à Ÿi™iÑå/à!Ÿ|™|¨R¯Y©Y¸×8KÑ8KÐLÐà�]‰]Ž_ˆÜ�a×-Ó-Ùñ ð ó    c                 óš   ^ ^^^• [        5       (       d  [        S5      e[        5       (       a  SSKJm  OSSKJm  UUU U4S jnT Ul        U$ )zË
Wrapper for a model's forward method to apply FP8 autocast. Is context aware, meaning that by default it will
disable FP8 autocast during eval mode, which is generally better for more accurate metrics.
zLUsing `contextual_fp8_autocast` requires transformer_engine to be installed.r   )Úfp8_autocastc                 ó‚   >• T=(       d    U R                   nT" UTS9   T" U0 UD6sS S S 5        $ ! , (       d  f       g = f)N)ÚenabledÚ
fp8_recipe)Útraining)ÚselfÚargsÚkwargsr?   r=   r@   Úmodel_forwardÚuse_during_evals       €€€€r   ÚforwardÚ(contextual_fp8_autocast.<locals>.forwardƒ   s5   ø€ Ø!×2 T§]¡]ˆÙ '°jÓAÙ  $Ð1¨&Ñ1÷ B×A×Aús   ž0°
>)r   r   r   r   r=   r   Ú__wrapped__)rE   r@   rF   rG   r=   s   ``` @r   Úcontextual_fp8_autocastrJ   v   sB   û€ ô
 +×,Ñ,ÜÐhÓiÐiä×ÑÞ9å;÷2ð 2ð (€GÔà€Nr;   c                 óº  • [        5       (       d  [        S5      e[        5       (       a  SSKJn  SnSnOSSKJs  Jn  SSKJn  U" 5       u  p4Ub  UR                  5       O0 nSU;   a  [        UR                  US   5      US'   UR                  SS5      nUR                  S	S5      nU(       a  U(       d  [        S
U 35      eU(       a5  SU;   a  [        S5      eSU;   a  [        S5      eUR                  " S0 UD6n	OUR                  " S0 UD6n	[!        U R"                  X—5      n
[%        U R"                  S5      (       a  ['        X 5      U l        U $ X l        U $ )z;
Applies FP8 context manager to the model's forward method
zGUsing `apply_fp8_autowrap` requires transformer_engine to be installed.r   NFz,MXFP8 block scaling is not available on HPU.)Úcheck_mxfp8_supportÚ
fp8_formatÚuse_autocast_during_evalÚuse_mxfp8_block_scalingz&MXFP8 block scaling is not available: Úamax_compute_algoz=`amax_compute_algo` is not supported for MXFP8 block scaling.Úamax_history_lenz<`amax_history_len` is not supported for MXFP8 block scaling.Ú__func__r   )r   r   r   Úintel_transformer_engine.recipeÚrecipeÚ transformer_engine.common.recipeÚcommonÚtransformer_engine.pytorch.fp8rL   Ú	to_kwargsÚgetattrÚFormatÚpopÚ
ValueErrorÚMXFP8BlockScalingÚDelayedScalingrJ   rG   r   r   )r-   Úfp8_recipe_handlerÚ	te_recipeÚis_fp8_block_scaling_availableÚmessagerL   rD   rF   rO   r@   Únew_forwards              r   Úapply_fp8_autowraprd   Ž   sO  € ô +×,Ñ,ÜÐcÓdÐdä×ÑÝ;à).Ð&Ø@‰÷ 	=Ð<ÝFá2EÓ2GÑ/Ð&à/AÑ/MÐ×)Ñ)Ô+ÐSU€FØ�vÓÜ& y×'7Ñ'7¸ÀÑ9MÓNˆˆ|ÑØ—j‘jÐ!;¸UÓC€OØ$Ÿj™jÐ)BÀEÓJÐæÖ'EÜÐAÀ'ÀÐKÓLÐLæØ &Ó(ÜÐ\Ó]Ð]Ø Ó'ÜÐ[Ó\Ð\Ø×0Ò0Ñ:°6Ñ:‰
à×-Ò-Ñ7°Ñ7ˆ
ä)¨%¯-©-¸ÓU€Käˆu�}‰}˜j×)Ñ)Ü" ;Ó6ˆŒð €Lð $Œà€Lr;   )TTT)F)Útypesr   Útorch.nnr   Úimportsr   r   Ú
operationsr   r,   r:   rJ   rd   r   r;   r   Ú<module>ri      s)   ðõ å ç FÝ *ôBòJô.ó0,r;   