+
    ˜°³jeù  ã                   óÐ  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RI Ht ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtHtHt ^ R	IHt ^ RIt^ RIHt ^ RIHt ^ RIHu H t! ^ R
I"H#t# ^ RI$H%t% ^ RI&H't'H(t(H)t* ^ RI+H,t, ^ RI-H.t.H/t/ ^ RI0H1t1 ^ RI2H3t3H4t4H5t5 ^ RI6H7t7 ^ RI8H9t9H:t:H;t; ^ RI<H=t=H>t>H?t? ^ RI@HAtAHBtBHCtCHDtD ^ RIHEtEHFtF ^ RIGHHtI ^ RIJHKtKHLtLHMtMHNtNHOtO ^ RIPHQtQHRtRHStSHTtTHUtUHVtVHWtW ^ RIXHYtY ]V'       d*   ]Z! ^][! ^]P¸                  P»                  4       4      4      t^M^t^]T'       d    Rt_Rt`]P¸                  P»                  4       t^M:]U'       d   Rt_Rt`M-]W'       d    Rt_Rt`]PÂ                  P»                  4       t^MR t_R!t`^t^ ! R" R#]4      tb ! R$ R%]4      tc ! R& R']PÈ                  ]4      teR( R) ltfR* tgRtR+ R, llthRuR- ltiR. tjR/ tkRvR0 R1 lltlR2 R3 ltmR4 R5 ltn ! R6 R74      to ! R8 R9]e4      tp ! R: R;]e4      tq ! R< R=]q4      tr ! R> R?]q4      ts ! R@ RA]e4      tt ! RB RC]t4      tu ! RD RE]PÈ                  4      tv ! RF RG]q4      tw ! RH RI]PÈ                  4      tx ! RJ RK]Pò                  4      tz ! RL RM]PÈ                  4      t{] Pø                  RN RO l4       t}] Pø                  RP RQ l4       t~] Pø                  RR RS l4       t] Pø                  RT RU l4       t€] Pø                  RV RW l4       t�]] Pø                  RX RY l4       4       t‚]] Pø                  RZ R[ l4       4       tƒ]] Pø                  R\ R] l4       4       t„]] Pø                  R^ R_ l4       4       t…R` Ra lt†RwRb Rc llt‡ ! Rd Re]M4      tˆ ! Rf Rg4      t‰ ! Rh Ri]‰]L4      tŠ ! Rj Rk]‰]K4      t‹RxRl Rm lltŒ ! Rn Ro]PÈ                  4      t� ! Rp Rq]PÈ                  4      tŽ ! Rr Rs]PÈ                  4      t�R# )yé    N)ÚABCÚabstractmethod©ÚCallable)Únullcontext)Údeepcopy)ÚautoÚEnum©Úwraps)ÚAnyÚcastÚno_type_check)Úmock)Ú
checkpoint)Ú
DeviceMesh)Ú
CPUOffloadÚfully_shardÚFullyShardedDataParallel)ÚTrainingState)ÚFSDPParamGroupÚRegisterPostBackwardFunction)Ú#NO_RESHARD_AFTER_FORWARD_STRATEGIES)ÚBackwardPrefetchÚMixedPrecisionÚShardingStrategy)ÚShardedGradScaler)Úalways_wrap_policyÚModuleWrapPolicyÚwrap)Údistribute_tensorÚDTensorÚShard)ÚColwiseParallelÚparallelize_moduleÚRowwiseParallelÚSequenceParallel)ÚTransformerDecoderLayerÚTransformerEncoderLayer)ÚDistributedDataParallel)ÚMultiProcContinuousTestÚMultiProcessTestCaseÚMultiThreadedTestCaseÚrun_subtestsÚ
TEST_SKIPS)ÚFILE_SCHEMAÚget_cycles_per_msÚset_rng_seedÚ	TEST_CUDAÚTEST_HPUÚTEST_WITH_ROCMÚTEST_XPU)Ú
has_tritonÚcudaÚncclzhpu:0ÚhcclÚxpuÚxcclÚcpuÚglooc                   ó2   € ] tR t^]t]! 4       t]! 4       tRtR# )ÚFSDPInitMode© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r	   ÚNO_FSDPÚ	RECURSIVEÚ__static_attributes__rA   ó    Úd/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/testing/_internal/common_fsdp.pyr@   r@   ]   s   † á‹f€Gá“„IrI   r@   c                   ó@   € ] tR t^ft]! 4       t]! 4       t]! 4       tRtR# )ÚDEVICEInitModerA   N)	rB   rC   rD   rE   r	   ÚDEVICE_BEFOREÚDEVICE_AFTERÚDEVICE_NEVERrH   rA   rI   rJ   rL   rL   f   s   † á“F€Má“6€Lá“6„LrI   rL   c                   óž   a € ] tR t^ot o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]	]V 3R lR	 l4       4       t
R
tV tR# )ÚFSDPTestModelzVThis defines the interface expected from all models used commonly for
FSDP unit tests.c                óH   <€ V ^8„  d   QhRS[ S[P                  R3,          /# )é   Úreturn.)ÚtupleÚtorchÚTensor)ÚformatÚ__classdict__s   "€rJ   Ú__annotate__ÚFSDPTestModel.__annotate__t   s"   ø€ ÷ ñ ¡5©¯©°sÐ):Õ#;ñ rI   c                ó   € R# )z*Returns an input for the model as a tuple.NrA   ©ÚselfÚdevices   &&rJ   Ú	get_inputÚFSDPTestModel.get_inputs   ó   € ñ 	rI   c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©rS   rT   ©rV   rW   )rX   rY   s   "€rJ   rZ   r[   y   s   ø€ ÷ ñ ©¯©ñ rI   c                ó   € R# )z,Returns the loss given the input and output.NrA   )r^   ÚinputÚoutputs   &&&rJ   Úget_lossÚFSDPTestModel.get_lossx   rb   rI   c                ó   <€ V ^8„  d   QhRR/# ©rS   rT   NrA   )rX   rY   s   "€rJ   rZ   r[   ~   s   ø€ ÷ ñ  Dñ rI   c                ó   € R# )z<Runs the backward pass (e.g. including ``loss.backward()``).NrA   ©r^   Úlosss   &&rJ   Úrun_backwardÚFSDPTestModel.run_backward}   rb   rI   c                ó@   <€ V ^8„  d   QhRS[ RS[ RS[P                  /# )rS   ÚargsÚkwargsrT   )r   ÚnnÚModule)rX   rY   s   "€rJ   rZ   r[   „   s&   ø€ ÷ ñ ‘Cð ¡3ð ©2¯9©9ñ rI   c                 ó   € R# )z&Initializes an instance of this model.NrA   )rs   rt   s   *,rJ   ÚinitÚFSDPTestModel.init‚   s   € ñ 	rI   rA   N)rB   rC   rD   rE   Ú__doc__r   r`   ri   rp   Ústaticmethodrx   rH   Ú__classdictcell__©rY   s   @rJ   rQ   rQ   o   sb   ø‡ € ñð ÷ó ðð ÷ó ðð ÷ó ðð Ø÷ó ó örI   rQ   c                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# )rS   ÚmodelÚprocess_groupÚ	assert_fn)ru   rv   ÚdistÚProcessGroupr   )rX   s   "rJ   rZ   rZ   ‰   s0   € ÷ ñ Ü�9‰9ðä×$Ñ$ðô ñrI   c                ó|  € V P                  4        UUu. uF$  w  r4W4P                  4       P                  4       3NK&  	  pppTV P                  4        UUu. uF$  w  rgWgP                  4       P                  4       3NK&  	  upp,          p\        P
                  ! V4      p\        V4       U	u. uF  p	RNK  	  p
p	\        P                  ! W¥VR7       V
^ ,          pVf   \        R4      hV
R,           F5  pVf   \        R4      h\        W¼RR7       F  w  w  r�w  ržV! WÞ4       K  	  K7  	  R# u uppi u uppi u up	i )zþ
All-gathers module states across ranks and calls ``assert_fn`` on each pair
of corresponding states from rank 0 and a nonzero rank. For example, if
``assert_fn`` is ``self.assertEqual()``, then this checks that all module
states are equal across ranks.
N©Úgroupz$Expected rank0_states to not be None:é   NNzExpected state to not be NoneT©Ústrict)
Únamed_parametersÚdetachr=   Únamed_buffersr‚   Úget_world_sizeÚrangeÚall_gather_objectÚAssertionErrorÚzip)r   r€   r�   Ú
param_nameÚparamÚnamed_module_statesÚbuffer_nameÚbufferÚ
world_sizeÚ_ÚolistÚrank0_statesÚstateÚp1Úp2s   &&&            rJ   Ú_assert_module_statesrž   ‰   s3  € ð "'×!7Ñ!7Ô!9ôá!9ÑˆJð 
—\‘\“^×'Ñ'Ó)Ó*Ù!9ð ñ ð à#(×#6Ñ#6Ô#8ôá#8ÑˆKð 
—m‘m“o×)Ñ)Ó+Ó,Ù#8òõ Ðô ×$Ò$ ]Ó3€JÜ  Ô,Ó-Ñ,�a‹TÑ,€EÐ-Ü×Ò˜5¸]ÕKØ˜•8€LØÒÜÐCÓDÐDØ�r—�ˆØŠ=Ü Ð!@ÓAÐAÜ # LÀ× EÑ‰GˆQ‘W�aÙ�bÖó !Fó ùóùóùò
 .s   ”*D-Á*D3Â,D9c                  ó6   € \         P                  ! \        4      # ©N)rV   r_   ÚDEVICE_TYPErA   rI   rJ   Úget_devtyper¢   ª   s   € Ü�<Š<œÓ$Ð$rI   c                óD   € V ^8„  d   QhR\         P                  R\        /# )rS   r   Úzero_buffers©ru   rv   Úbool)rX   s   "rJ   rZ   rZ   ®   s    € ÷ #ñ #Ü�9‰9ð#äñ#rI   c           
     ó8  € V'       d   \         P                  ! V 4      M	\        4       pT;_uu_ 4        V P                  4        F9  p\        P
                  ! 4       ;_uu_ 4        VP                  4        RRR4       K;  	  V'       dN   V P                  4        F9  p\        P
                  ! 4       ;_uu_ 4        VP                  4        RRR4       K;  	  RRR4       R#   + '       g   i     K­  ; i  + '       g   i     Kl  ; i  + '       g   i     R# ; i)zBZeros the parameters and optionally buffers of ``model`` in place.N)ÚFSDPÚsummon_full_paramsr   Ú
parametersrV   Úno_gradÚzero_Úbuffers)r   r¤   Úsummon_fullÚctxr“   r–   s   &&&   rJ   Ú_zero_modelr°   ®   s    € ÷ -8Œ$×
!Ò
! %Ô
(¼[»]€Cß	ŠØ×%Ñ%Ö'ˆEÜ—’—•Ø—‘”÷ !‘ñ (÷ ØŸ-™-ž/�Ü—]’]—_•_Ø—L‘L”N÷ %‘_ñ *÷ 
‰ç —�ú÷ %—_�_ú÷ 
�ˆúsA   ³1DÁ$C Á5DÂ	0DÂ9C4Ã
DÃ C1Ã+	DÃ4DÃ?	DÄD	c                 óŒ   € V'       g   V P                  \        4      p V'       d   V P                  4        V P                  4       # r    )Útor¡   ÚhalfÚ
state_dict)r   Úcpu_offloadr³   s   &&&rJ   Ú_get_state_dictr¶   ¿   s.   € ßØ—‘œÓ%ˆßØ�
‰
Œà×ÑÓÐrI   c           	      óx   € R P                  V Uu. uF  q"e   V \        V4      ,          MRNK  	  up4      # u upi )r˜   Únone)ÚjoinÚstr)Útest_name_mappingrs   Úss   &* rJ   Úsubtest_namer½   È   s9   € Ø�8‰8ÙIMÓNÉÀA¢mÐ	œ3˜q›6Ö	"¸Ò	?ÉÑNóð ùÚNs   � 7c                 óž  € VP                  4        F>  w  r#VP                  \        P                  ! R 4      8w  g   K,  VP                  4       W&   K@  	  V ^ 8X  d   TMR.p\        P
                  ! V4       \        \        \        \        P                  3,          V^ ,          4      pV F   pW,          P                  \        4      W&   K"  	  V# )r=   N)Úitemsr_   rV   r=   r‚   Úbroadcast_object_listr   Údictrº   rW   r²   r¡   )Úrankr´   r’   r“   r™   s   &&   rJ   Ú_broadcast_state_dictrÃ   Î   s¡   € ð (×-Ñ-Ö/Ñˆ
Ø�<‰<œ5Ÿ<š<¨Ó.Ö.Ø%*§Y¡Y£[ˆJÓ"ñ 0ð   1œ9‰Z¨$Ð/€EÜ×Ò˜uÔ%Ü”dœ3¤§¡Ð,Õ-¨u°Q­xÓ8€Jã ˆ
Ø!+Õ!7×!:Ñ!:¼;Ó!Gˆ
Óñ !àÐrI   c                óD   € V ^8„  d   QhR\         P                  R\        /# )rS   r   Úrecurser¥   )rX   s   "rJ   rZ   rZ   ß   s   € ÷ 2ñ 2œ2Ÿ9™9ð 2¬tñ 2rI   c                óÂ   € \         P                  ! WR7      ;_uu_ 4        \        \        V P	                  4       4      4      uuRRR4       #   + '       g   i     R# ; i)a?  
Returns the full unsharded parameters of ``model``. Any FSDP-managed
parameters offloaded to CPU are moved to GPU in the returned list.

Args:
    recurse (bool): If ``False``, only unshards the parameters immediate to
        ``model``; if ``True``, recurses through the module hierarchy
        rooted at ``model``.
)rÅ   N)r¨   r©   r   Úlistrª   )r   rÅ   s   &&rJ   Úget_full_paramsrÈ   ß   s:   € ô 
×	 Ò	  ×	8Ö	8Üœ˜U×-Ñ-Ó/Ó0Ó1÷ 
9×	8×	8Ó	8ús    "AÁA	c                óD   € V ^8„  d   QhR\         P                  R\        /# )rS   r   Úmove_to_devicer¥   )rX   s   "rJ   rZ   rZ   í   s   € ÷ >ñ >œ2Ÿ9™9ð >´dñ >rI   c                 ó@   € V'       d   V P                  \        4      # T # r    )r²   r¡   )r   rÊ   s   &&rJ   Ú_move_to_devicerÌ   í   s   € ß$2ˆ5�8‰8”KÓ Ð=¸Ð=rI   c                óD   € V ^8„  d   QhR\         P                  R\        /# )rS   r   Ú	wrap_fsdpr¥   )rX   s   "rJ   rZ   rZ   ñ   s"   € ÷ Dñ DœBŸI™Ið D´$ñ DrI   c                 ó4   € V'       g   V # \        V .VO5/ VB # r    ©r¨   )r   rÎ   rs   rt   s   &&*,rJ   Ú_maybe_wrap_fsdprÑ   ñ   s   € ß!ˆ5ÐC¤t¨EÐ'C°DÒ'C¸FÑ'CÐCrI   c                   ó\   a € ] tR t^õt o V 3R lR ltV 3R lR ltV 3R lR ltR tRtV t	R	# )
ÚDummyProcessGroupc                ó&   <€ V ^8„  d   QhRS[ RS[ /# )rS   rÂ   Úsize©Úint)rX   rY   s   "€rJ   rZ   ÚDummyProcessGroup.__annotate__ö   s   ø€ ÷ ñ ™Sð ©ñ rI   c                ó   € Wn         W n        R # r    ©Ú_rankÚ_size)r^   rÂ   rÕ   s   &&&rJ   Ú__init__ÚDummyProcessGroup.__init__ö   s   € ØŒ
ØŽ
rI   c                ó    <€ V ^8„  d   QhRS[ /# rd   rÖ   )rX   rY   s   "€rJ   rZ   rØ   ú   ó   ø€ ÷ ñ ‘cñ rI   c                ó   € V P                   # r    )rÛ   ©r^   s   &rJ   rÂ   ÚDummyProcessGroup.rankú   ó   € Ø�z‰zÐrI   c                ó    <€ V ^8„  d   QhRS[ /# rd   rÖ   )rX   rY   s   "€rJ   rZ   rØ   ý   rà   rI   c                ó   € V P                   # r    )rÜ   râ   s   &rJ   rÕ   ÚDummyProcessGroup.sizeý   rä   rI   c                óB   € \         P                  ! 4       pR  pWCn        V# )c                  ód   € \         P                  P                  4       p V P                  ^4       V # )r‡   )rV   ÚfuturesÚFutureÚ
set_result)Úfutures    rJ   Ú
get_futureÚ/DummyProcessGroup.allreduce.<locals>.get_future  s'   € Ü+0¯=©=×+?Ñ+?Ó+AˆFØ×Ñ˜aÔ ØˆMrI   )r   ÚMockrî   )r^   rs   rt   Ú	dist_waitrî   s   &*,  rJ   Ú	allreduceÚDummyProcessGroup.allreduce   s    € Ü—I’I“Kˆ	ò	ð
  *ÔØÐrI   rÚ   N)
rB   rC   rD   rE   rÝ   rÂ   rÕ   rò   rH   r|   r}   s   @rJ   rÓ   rÓ   õ   s-   ø‡ € ÷ð ÷ð ÷ð ÷	ð 	rI   rÓ   c                   ó|   a a€ ] tR tRt oV3R lV 3R lltR tR tR tR t]	RV3R lR	 ll4       t
R
 tRtVtV ;t# )ÚTransformerWithSharedParamsi  c                óF   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[/# )rS   r†   Údevice_init_modeÚadd_bnÚdeterministic)r‚   rƒ   rL   r¦   )rX   rY   s   "€rJ   rZ   Ú(TransformerWithSharedParams.__annotate__  s9   ø€ ÷ (ñ (á× Ñ ð(ñ )ð(ñ ð	(ñ
 ñ(rI   c                óÜ  <€ \         SV `  4        VP                  4       V n        VP                  4       V n        V'       d   \
        P                  ! ^ 4       ^p^p\        P                  ! WV4      V n	        \        P                  ! V^^^RR7      V n        \        P                  ! We4      V n        V P                  P                  V P                  n        V P                  RV P                  P                  P!                  V34      4       V P                  R\
        P"                  ! V P$                  \
        P&                  R7      4       ^V n        V'       d*   \
        P                  P+                  V P(                  4      M\
        P                  P-                  4       V n        V\0        P2                  8X  d   V P5                  \6        4      p V'       d   V P9                  4        R# R# )r   gš™™™™™¹?)Úd_modelÚnum_encoder_layersÚnum_decoder_layersÚdim_feedforwardÚdropoutÚ
vocab_biasÚlong_buffer)ÚdtypeN)ÚsuperrÝ   rÂ   rÕ   r—   rV   Úmanual_seedru   Ú	EmbeddingÚembed_tokensÚTransformerÚtransformerÚLinearÚoutput_projÚweightÚregister_bufferÚnew_onesÚ
zeros_liker  ÚlongÚbsÚBatchNorm1dÚIdentityÚbnrL   rM   r²   r¡   Úeval)r^   r†   r÷   rø   rù   Úd_vocabrü   Ú	__class__s   &&&&&  €rJ   rÝ   Ú$TransformerWithSharedParams.__init__  s]  ø€ ô 	‰ÑÔØ—J‘J“LˆŒ	ØŸ*™*›,ˆŒßÜ×Ò˜aÔ ØˆØˆäŸLšL¨Ó:ˆÔÜŸ>š>ØØ Ø ØØô
ˆÔô Ÿ9š9 WÓ6ˆÔð #'×"3Ñ"3×":Ñ":ˆ×ÑÔØ×ÑØ˜$×+Ñ+×2Ñ2×;Ñ;¸W¸JÓGô	
ð 	×ÑØÜ×Ò˜TŸ_™_´E·J±JÔ?ô	
ð
 ˆŒß39”%—(‘(×&Ñ& t§w¡wÔ/¼u¿x¹x×?PÑ?PÓ?RˆŒØœ~×;Ñ;Ô;Ø—7‘7œ;Ó'ˆDßØ�I‰IŽKñ rI   c                ó@  € \         P                  ! ^V P                  ,           4       \         P                  ! ^VR7      P	                  ^V P
                  4      p\         P                  ! V P
                  ^,          VR7      P	                  ^V P
                  4      pW#3# ©r‡   ©r_   )rV   r  rÂ   ÚarangeÚviewr  )r^   r_   ÚsrcÚtgts   &&  rJ   r`   Ú%TransformerWithSharedParams.get_input7  sj   € Ü×Ò˜!˜dŸi™i�-Ô(Ü�lŠl˜2 fÔ-×2Ñ2°1°d·g±gÓ>ˆÜ�lŠl˜4Ÿ7™7 Q�;¨vÔ6×;Ñ;¸A¸t¿w¹wÓGˆØˆzÐrI   c                ó  € V P                  V4      pW0P                  ,           V P                  P                  V4      ,           pV P                  V4      pV P	                  V4      pV P                  W44      pV P                  V4      # r    )r  r  r  Útype_asr  r	  r  )r^   Úsrc_idsÚtgt_idsr  r  Úxs   &&&   rJ   ÚforwardÚ#TransformerWithSharedParams.forward=  sr   € Ø×Ñ Ó(ˆØ—O‘OÕ# d×&6Ñ&6×&>Ñ&>¸sÓ&CÕCˆØ×Ñ Ó(ˆØ�g‰g�c‹lˆØ×Ñ˜SÓ&ˆØ×Ñ Ó"Ð"rI   c                óª   € Vw  r4\         P                  P                  VP                  RVP	                  R4      4      VP                  R4      RR7      # )r‡   Úsum)Ú	reductionéÿÿÿÿ)ru   Ú
functionalÚcross_entropyr  rÕ   )r^   rg   rh   r˜   r  s   &&&  rJ   ri   Ú$TransformerWithSharedParams.get_lossE  sG   € Ø‰ˆÜ�}‰}×*Ñ*Ø�K‰K˜˜FŸK™K¨›OÓ,¨c¯h©h°r«lÀeð +ó 
ð 	
rI   c                ó&   € VP                  4        R # r    ©Úbackwardrn   s   &&rJ   rp   Ú(TransformerWithSharedParams.run_backwardK  ó   € Ø�‰ŽrI   c                ó    <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[RS[RS[P                  S[
,          /# )	rS   r†   Úfsdp_init_moder÷   Úfsdp_kwargsNrù   rø   rT   )r‚   rƒ   r@   rL   rÁ   rº   r   r¦   ru   rv   r¨   )rX   rY   s   "€rJ   rZ   rú   O  s}   ø€ ÷ KJñ KJÙ× Ñ ðKJá$ðKJñ )ðKJñ ™#™s˜(•^ dÕ*ð	KJñ
 ðKJñ ðKJñ 
�‰‘TÕ	ñKJrI   c                ó¤  € Vf   / pV\         P                  8X  d/   \        V \        4      '       d   V ^ ,          pMT p\	        WbWT4      # V\         P
                  8X  dæ   RV9  d   \        \        \        04      pMVP                  R4      pRV9   dF   VR,          \        P                  \        P                  09   d   \        V \        4      '       g   RpMT p\        V \        4      '       d   V ^ ,          p	MT p	\	        W’WT4      p
\        V
V3RV/VB pV\        P                  8X  d   VP!                  \"        4      pV# \%        RV 24      h)aý  
Initializes a :class:`TransformerWithSharedParams` instance.

Args:
    fsdp_init_mode (FSDPInitMode): If ``NO_FSDP``, then does not wrap
        any modules with FSDP. If ``RECURSIVE``, then wraps with
        top-level FSDP. By default, the top-level FSDP uses the
        ``ModuleWrapPolicy`` for encoder and decoder layers, but a
        different auto wrap policy may be specified via
        ``fsdp_kwargs``.
    device_init_mode (DEVICEInitMode): Determines model movement to DEVICE.
    fsdp_kwargs (Optional[Dict[str, Any]]): Optional keyword arguments
        forwarded to the FSDP constructor.
    deterministic (bool): Whether to make the model deterministic
        across constructions.
    add_bn (bool): Whether to include batch norm in the model.
NÚauto_wrap_policyÚsharding_strategyúUnsupported FSDP init mode: )r@   rF   Ú
isinstancerU   rõ   rG   r   r)   r(   Úpopr   ÚHYBRID_SHARDÚ_HYBRID_SHARD_ZERO2r¨   rL   rN   r²   r¡   Ú
ValueError)r†   r5  r÷   r6  rù   rø   Úpgr8  Úfsdp_pgÚ
tformer_pgÚmÚ
fsdp_models   &&&&&&      rJ   rx   Ú TransformerWithSharedParams.initN  sW  € ð6 ÒØˆKØœ\×1Ñ1Ô1Ü˜%¤×'Ò'Ø˜1•X‘à�Ü.Ø fóð ð œ|×5Ñ5Ô5à!¨Ô4Ü#3ä/Ü/ðó$Ñ ð $/§?¡?Ð3EÓ#FÐ ð $ {Ô2ØÐ 3Õ4Ü$×1Ñ1Ô3C×3WÑ3WÐXôYä" 5¬%×0Ò0à‘à�ä˜%¤×'Ò'Ø" 1�X‘
à"�
ä+Ø¨fóˆAô ØØñð "2ðð ñ	ˆJð  ¤>×#>Ñ#>Ô>Ø'Ÿ]™]¬;Ó7�
ØÐÜÐ7¸Ð7GÐHÓIÐIrI   c                ó   € V P                   .# r    )r	  râ   s   &rJ   Úget_ignored_modulesÚ/TransformerWithSharedParams.get_ignored_modulesœ  s   € Ø× Ñ Ð!Ð!rI   )r  r  r  r  rÂ   r	  r—   )NFT)rB   rC   rD   rE   rÝ   r`   r&  ri   rp   r{   rx   rG  rH   r|   Ú__classcell__©r  rY   s   @@rJ   rõ   rõ     sN   ù‡ € ÷(ó (òTò#ò
òð ÷KJñ KJó ðKJ÷Z"ò "rI   rõ   c                   óv   a a€ ] tR tRt oV3R lV 3R lltR tR tR tR t]	RV3R lR	 ll4       t
R
tVtV ;t# )ÚNestedWrappedModulei   c                óF   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[/# ©rS   r†   rÎ   r÷   rù   ©r‚   rƒ   r¦   rL   )rX   rY   s   "€rJ   rZ   Ú NestedWrappedModule.__annotate__¡  s9   ø€ ÷ 
ñ 
á× Ñ ð
ñ ð
ñ )ð	
ñ
 ñ
rI   c                ó°  <aaa€ \         SV `  4        SP                  4       V n        SP                  4       V n        V\
        P                  8H  pVVV3R  lpV'       d   \        P                  ! ^ 4       \        P                  ! \        \        P                  ! ^^4      V4      V! \        P                  ! V! \        \        P                  ! ^^4      V4      4      \        \        P                  ! ^^4      V4      4      4      V! \        \        P                  ! ^^4      V4      4      \        \        P                  ! ^^4      V4      4      V n        R# )c                 ó2   <€ S'       d   \        V S3/ SB # V # r    rÐ   ©Úlayerr6  r†   rÎ   s   &€€€rJ   Ú_maybe_wrapÚ1NestedWrappedModule.__init__.<locals>._maybe_wrap®  ó   ø€ ßÜ˜E 5Ñ8¨KÑ8Ð8ØˆLrI   N)r  rÝ   rÂ   rÕ   r—   rL   rM   rV   r  ru   Ú
SequentialrÌ   r
  Úmodule©	r^   r†   rÎ   r÷   rù   r6  rÊ   rU  r  s	   &ff&&l  €rJ   rÝ   ÚNestedWrappedModule.__init__¡  sé   û€ ô 	‰ÑÔØ—J‘J“LˆŒ	ØŸ*™*›,ˆŒØ)¬^×-IÑ-IÑIˆ÷	÷
 Ü×Ò˜aÔ Ü—m’mÜœBŸIšI a¨›O¨^Ó<ÙÜ—’Ù¤´·	²	¸!¸RÓ0@À.Ó QÓRÜ#¤B§I¢I¨b°"Ó$5°~ÓFóóñ œ¬¯	ª	°"°aÓ(8¸.ÓIÓJÜœBŸIšI a¨›O¨^Ó<ó

ˆŽrI   c                ó„   € \         P                  ! ^V P                  ,           4       \         P                  ! ^^VR7      3# r  )rV   r  rÂ   Úrandr]   s   &&rJ   r`   ÚNestedWrappedModule.get_inputÁ  s.   € Ü×Ò˜!˜dŸi™i�-Ô(Ü—
’
˜1˜a¨Ô/Ð1Ð1rI   c                ó$   € V P                  V4      # r    ©rY  ©r^   r%  s   &&rJ   r&  ÚNestedWrappedModule.forwardÅ  ó   € Ø�{‰{˜1‹~ÐrI   c                ó&   € VP                  4       pV# r    )r)  ©r^   rg   rh   ro   s   &&& rJ   ri   ÚNestedWrappedModule.get_lossÈ  s   € Ø�z‰z‹|ˆØˆrI   c                ó&   € VP                  4        R # r    r0  rn   s   &&rJ   rp   Ú NestedWrappedModule.run_backwardÌ  r3  rI   c                óŠ   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[RS[P                  /# )rS   r†   r5  r÷   r6  Nrù   rT   )
r‚   rƒ   r@   rL   rÁ   rº   r   r¦   ru   rv   )rX   rY   s   "€rJ   rZ   rP  Ð  sd   ø€ ÷ +Jñ +JÙ× Ñ ð+Já$ð+Jñ )ð+Jñ ™#™s˜(•^ dÕ*ð	+Jñ
 ð+Jñ 
�‰ñ+JrI   c           	     ó  € Vf   / pV\         P                  8X  d   \        V RVVR7      # V\         P                  8X  d?   \        V 3RRRVRV/VB pV\        P
                  8X  d   VP                  \        4      pV# \        RV 24      h)aŠ  
Initializes a :class:`NestedWrappedModule` instance.

Args:
    fsdp_init_mode (FSDPInitMode): If ``NO_FSDP``, then does not wrap
        any modules with FSDP. If ``RECURSIVE``, then wraps some nested
        modules with FSDP but not the top-level module. The model may
        later be wrapped with a top-level FSDP external to this method
        if desired.
    device_init_mode (DEVICEInitMode): Determines model movement to DEVICE.
    fsdp_kwargs (Optional[Dict[str, Any]]): Optional keyword arguments
        forwarded to the FSDP constructor.
    deterministic (bool): Whether to make the model deterministic
        across constructions.
F©rÎ   r÷   rù   rÎ   Tr÷   rù   r:  )	r@   rF   rL  rG   rL   rN   r²   r¡   r?  )r†   r5  r÷   r6  rù   rD  s   &&&&& rJ   rx   ÚNestedWrappedModule.initÏ  s±   € ð. ÒØˆKØœ\×1Ñ1Ô1Ü&ØØØ!1Ø+ô	ð ð œ|×5Ñ5Ô5ä,Øñàðð "2ðð ,ð	ð
 ñˆJð  ¤>×#>Ñ#>Ô>Ø'Ÿ]™]¬;Ó7�
ØÐÜÐ7¸Ð7GÐHÓIÐIrI   ©rY  rÂ   r—   ©NF)rB   rC   rD   rE   rÝ   r`   r&  ri   rp   r{   rx   rH   r|   rI  rJ  s   @@rJ   rL  rL     sF   ù‡ € ÷
ó 
ò@2òòòð ÷+Jñ +Jó ÷+Jð +JrI   rL  c                   óL   a a€ ] tR tRt o]RV3R lV 3R lll4       tRtVtV ;t# )ÚAlwaysWrapNestedWrappedModuleiþ  c          
      óp   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[/# ©rS   r†   r5  r÷   r6  Nrù   ©r‚   rƒ   r@   rL   rÁ   rº   r   r¦   )rX   rY   s   "€rJ   rZ   Ú*AlwaysWrapNestedWrappedModule.__annotate__   sN   ø€ ÷ ñ Ù× Ñ ðá$ðñ )ðñ ™#™s˜(•^ dÕ*ð	ñ
 ñrI   c                óJ  <€ \         \        \        `   V \        P                  VVVR7      pV\        P                  8X  d   V# V\        P
                  8X  dK   T;'       g    / p\        V3R\        /VB pV\        P                  8X  d   VP                  \        4      pV# R# )zÖ
Initializes a :class:`NestedWrappedModule` instance, but unlike
:meth:`NestedWrappedModule.init`, for the ``RECURSIVE`` init mode, this
wraps with top-level FSDP and the ``always_wrap_policy()`` auto wrap
policy.
)r†   r5  r÷   r6  rù   r8  N)r  rp  rx   r@   rF   rG   r¨   r   rL   rN   r²   r¡   )r†   r5  r÷   r6  rù   r   rD  r  s   &&&&&  €rJ   rx   Ú"AlwaysWrapNestedWrappedModule.initÿ  s¦   ø€ ô Ü)Ô+Hñà
ØÜ'×/Ñ/Ø-Ø#Ø'ð ó 
ð 	ð œ\×1Ñ1Ô1ØˆLØœ|×5Ñ5Ô5Ø%×+Ð+¨ˆKÜ˜eÑXÔ6HÐXÈKÑXˆJØ¤>×#>Ñ#>Ô>Ø'Ÿ]™]¬;Ó7�
ØÐñ 6rI   rA   rn  )	rB   rC   rD   rE   r{   rx   rH   r|   rI  rJ  s   @@rJ   rp  rp  þ  s!   ù‡ € Ø÷ô ó ÷ð rI   rp  c                   óz   a a€ ] tR tRt oV3R lV 3R llt]V3R lR l4       t]R	V3R lR ll4       tRtVt	V ;t
# )
ÚNonUniformReqGradNWMi   c                óF   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[/# rN  rO  )rX   rY   s   "€rJ   rZ   Ú!NonUniformReqGradNWM.__annotate__!  s9   ø€ ÷ (
ñ (
á× Ñ ð(
ñ ð(
ñ )ð	(
ñ
 ñ(
rI   c                óà  <aaa€ \         \        V `  4        SP                  4       V n        SP	                  4       V n        V\        P                  8H  pVVV3R  lpV'       d   \        P                  ! ^ 4       \        P                  ! \        \        P                  ! ^^4      V4      V! \        P                  ! V! \        \        P                  ! ^^4      V4      4      \        \        P                  ! ^^4      V4      4      4      V! \        P                  ! \        \        P                  ! ^^4      V4      \        \        P                  ! ^^4      V4      4      4      4      V n        R# )c                 ó2   <€ S'       d   \        V S3/ SB # V # r    rÐ   rS  s   &€€€rJ   rU  Ú2NonUniformReqGradNWM.__init__.<locals>._maybe_wrap4  rW  rI   N)r  rL  rÝ   rÂ   rÕ   r—   rL   rM   rV   r  ru   rX  rÌ   r
  rY  rZ  s	   &ff&&l  €rJ   rÝ   ÚNonUniformReqGradNWM.__init__!  sý   û€ ô 	Ô! 4Ñ1Ô3ð —J‘J“LˆŒ	ØŸ*™*›,ˆŒØ)¬^×-IÑ-IÑIˆ÷	÷
 Ü×Ò˜aÔ Ü—m’mÜœBŸIšI a¨›O¨^Ó<ÙÜ—’Ù¤´·	²	¸!¸RÓ0@À.Ó QÓRÜ#¤B§I¢I¨b°"Ó$5°~ÓFóóñ Ü—’Ü#¤B§I¢I¨b°!Ó$4°nÓEÜ#¤B§I¢I¨a°£O°^ÓDóóó
ˆŽrI   c                ó   <€ V ^8„  d   QhRR/# rl   rA   )rX   rY   s   "€rJ   rZ   rz  L  s   ø€ ÷ (ñ (¸$ñ (rI   c                ó–   € V P                  4        F4  w  r#\        P                  ! W4      '       d   K#  VP                  R 4       K6  	  R# )FN)rŠ   ÚreÚmatchÚrequires_grad_)r   Úreq_grad_maskÚnÚps   &&  rJ   Ú_set_nonuniform_req_gradÚ-NonUniformReqGradNWM._set_nonuniform_req_gradK  s4   € à×*Ñ*Ö,‰DˆAÜ—8’8˜M×-Ô-Ø× Ñ  Ö'ó -rI   c          
      óp   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[/# rr  rs  )rX   rY   s   "€rJ   rZ   rz  R  sU   ø€ ÷ +Jñ +JÙ× Ñ ð+Já$ð+Jñ )ð+Jñ ™#™s˜(•^ dÕ*ð	+Jñ
 ñ+JrI   c           	     óœ  € \         P                  ! R4      pV\        P                  8X  d'   \	        V RVVR7      p\        P                  We4       V# V\        P                  8X  dZ   Vf   / p\	        V 3RRRVRV/VB pV\        P                  8X  d   VP                  \        4      p\        P                  Wu4       V# \        RV 24      h)	aÏ  
Initializes a :class:`NestedWrappedModule` instance, but unlike
:meth:`NestedWrappedModule.init`, it wraps a second :class:`torch.nn.Sequential`
container to enable the desired non-uniform ``requires_grad``
``use_orig_params=True`` tests. For both ``RECURSIVE`` and ``NO_FSDP``
init modes, freezes all parameters except the last two to validate
``ShardedGradScaler`` support for ranks with no (non-zero sized) local shards in
FSDP ``use_orig_params=True`` mode.
zmodule\.2.*\.1.*Frk  rÎ   Tr÷   rù   r:  )r�  Úcompiler@   rF   rx  r‡  rG   rL   rN   r²   r¡   r?  )r†   r5  r÷   r6  rù   Úreq_grad_patternÚ	ddp_modelrD  s   &&&&&   rJ   rx   ÚNonUniformReqGradNWM.initQ  sà   € ô( Ÿ:š:Ð&9Ó:ÐØœ\×1Ñ1Ô1Ü,ØØØ!1Ø+ô	ˆIô !×9Ñ9¸)ÔVØÐØœ|×5Ñ5Ô5ØÒ"Ø �Ü-Øñàðð "2ðð ,ð	ð
 ñˆJð  ¤>×#>Ñ#>Ô>Ø'Ÿ]™]¬;Ó7�
Ü ×9Ñ9¸*ÔWØÐÜÐ7¸Ð7GÐHÓIÐIrI   rm  rn  )rB   rC   rD   rE   rÝ   r{   r‡  rx   rH   r|   rI  rJ  s   @@rJ   rx  rx     sF   ù‡ € ÷(
ó (
ðT ÷(ó ð(ð
 ÷+Jñ +Jó ÷+Jð +JrI   rx  c                   óv   a a€ ] tR tRt oRtV3R lV 3R lltR tR tR tR t	]
V3R	 lR
 l4       tRtVtV ;t# )ÚModuleWithDelayi€  z‚This class wraps a :class:`FSDPTestModel` to optionally add a delay
after computing the loss and/or before the gradient reduction.c                ó@   <€ V ^8„  d   QhRS[ P                  RS[RS[/# )rS   rY  Údelay_after_loss_msÚdelay_before_reduction_ms)ru   rv   r×   )rX   rY   s   "€rJ   rZ   ÚModuleWithDelay.__annotate__„  s-   ø€ ÷ 	ñ 	á—	‘	ð	ñ !ð	ñ $'ñ		rI   c                óH   <€ \         SV `  4        W n        W0n        Wn        R # r    )r  rÝ   r’  r“  rY  )r^   rY  r’  r“  r  s   &&&&€rJ   rÝ   ÚModuleWithDelay.__init__„  s!   ø€ ô 	‰ÑÔØ#6Ô Ø)BÔ&ØŽrI   c                ó8   € V P                   P                  V4      # r    )rY  r`   r]   s   &&rJ   r`   ÚModuleWithDelay.get_input�  s   € Ø�{‰{×$Ñ$ VÓ,Ð,rI   c                ó$   € V P                  V4      # r    r`  ra  s   &&rJ   r&  ÚModuleWithDelay.forward’  rc  rI   c                óz  € V P                   P                  W4      pV P                  ^ 8”  d�   \        '       g   \        '       d*   \
        P                  ! V P                  R,          4       V# \        '       dB   \        P                  P                  \        V P                  \        4       ,          4      4       V# ©r   éè  )rY  ri   r’  r4   r6   ÚtimeÚsleepr3   rV   r8   Ú_sleepr×   r1   re  s   &&& rJ   ri   ÚModuleWithDelay.get_loss•  s}   € Ø�{‰{×#Ñ# EÓ2ˆØ×#Ñ# aÔ'ß‹xŸ8›8Ü—
’
˜4×3Ñ3°dÕ:Ô;ð ˆ÷ “Ü—
‘
×!Ñ!¤# d×&>Ñ&>ÔARÓATÕ&TÓ"UÔVàˆrI   c                óú   a a€ \         P                  P                  oVV 3R  lp\        P                  ! RV4      ;_uu_ 4        S P
                  P                  V4       RRR4       R#   + '       g   i     R# ; i)c                  óP  <€ SP                   ^ 8”  dŽ   \        '       dC   \        P                  P	                  \        SP                   \        4       ,          4      4       M?\        '       g   \        '       d(   \        P                  ! SP                   R,          4       S! V / VB # rœ  )r“  r3   rV   r8   r   r×   r1   r4   r6   rž  rŸ  )rs   rt   Úorig_reduce_scatterr^   s   *,€€rJ   Ú_delayed_reduce_scatterÚ=ModuleWithDelay.run_backward.<locals>._delayed_reduce_scatter¢  sq   ø€ Ø×-Ñ-°Ô1ß“9Ü—J‘J×%Ñ%Ü˜D×:Ñ:Ô=NÓ=PÕPÓQõ÷ “X§£Ü—J’J˜t×=Ñ=ÀÕDÔEÙ&¨Ð7°Ñ7Ð7rI   z'torch.distributed.reduce_scatter_singleN)rV   ÚdistributedÚreduce_scatter_singler   ÚpatchrY  rp   )r^   ro   r¥  r¤  s   f& @rJ   rp   ÚModuleWithDelay.run_backwardŸ  s\   ù€ Ü#×/Ñ/×EÑEÐö	8ô �ZŠZØ5Ð7N÷
õ 
ð �K‰K×$Ñ$ TÔ*÷
÷ 
÷ 
ò 
ús   ÁA)Á)A:	c          
      óH   <€ V ^8„  d   QhRS[ S[,          RS[RS[RS[RS[/# )rS   Úmodule_classÚ
model_argsr’  r“  Úmodel_kwargs)ÚtyperQ   r   r×   )rX   rY   s   "€rJ   rZ   r”  ²  s@   ø€ ÷ 
ñ 
Ù™=Õ)ð
áð
ñ !ð
ñ $'ð	
ñ
 ñ
rI   c               ó<   € \        V P                  ! V/ VB VV4      # )aá  
Args:
    module_class (Type[FSDPTestModel]): Wrapped module class to which
        to add delays.
    model_args: Positional arguments forwarded to the ``module_class``
        ``init()``.
    delay_after_loss_ms (int): Delay after computing the loss/before
        the optimizer step (in ms).
    delay_before_reduction_ms (int): Delay before reduce-scattering
        gradients (in ms).
    model_kwargs: Keyword arguments forwarded to the ``module_class``
        ``init()``.
)r�  rx   )r¬  r’  r“  r­  r®  s   &$$*,rJ   rx   ÚModuleWithDelay.init±  s*   € ô* Ø×Ò˜zÐ:¨\Ñ:ØØ%ó
ð 	
rI   )r’  r“  rY  )rB   rC   rD   rE   rz   rÝ   r`   r&  ri   rp   r{   rx   rH   r|   rI  rJ  s   @@rJ   r�  r�  €  sB   ù‡ € ñF÷	ó 	ò-òòò+ð$ ÷
ó ÷
ð 
rI   r�  c                   ó^   a € ] tR tRt o ]]P                  RR^ ^ 3V 3R lR ll4       tRtV t	R# )ÚNestedWrappedModuleWithDelayiÍ  NFc                ó|   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[RS[RS[/# )	rS   r†   r5  r÷   r6  Nrù   r’  r“  ©	r‚   rƒ   r@   rL   rÁ   rº   r   r¦   r×   )rX   rY   s   "€rJ   rZ   Ú)NestedWrappedModuleWithDelay.__annotate__Ï  sb   ø€ ÷ 
ñ 
Ù× Ñ ð
á$ð
ñ )ð
ñ ™#™s˜(•^ dÕ*ð	
ñ
 ð
ñ !ð
ñ $'ñ
rI   c                óD   € \         P                  \        V VVVVVVR 7      # )©r†   r5  r÷   r6  rù   r’  r“  )r�  rx   rL  r¸  s   &&&&&&&rJ   rx   Ú!NestedWrappedModuleWithDelay.initÎ  s4   € ô ×#Ñ#ÜØØ)Ø-Ø#Ø'Ø 3Ø&?ð $ó 	
ð 		
rI   rA   )
rB   rC   rD   rE   r{   rL   rN   rx   rH   r|   r}   s   @rJ   r³  r³  Í  s3   ø‡ € Øð ,:×+FÑ+FØ-1Ø#Ø#$Ø)*÷
ñ 
ó ö
rI   r³  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚDummyDDPiä  c                ó0   <€ \         SV `  4        Wn        R # r    )r  rÝ   rY  )r^   rY  r  s   &&€rJ   rÝ   ÚDummyDDP.__init__å  s   ø€ Ü‰ÑÔØŽrI   c                ó&   € V P                   ! V/ VB # r    r`  ©r^   rs   rt   s   &*,rJ   r&  ÚDummyDDP.forwardé  s   € Ø�{Š{˜DÐ+ FÑ+Ð+rI   r`  ©	rB   rC   rD   rE   rÝ   r&  rH   r|   rI  rJ  s   @@rJ   r»  r»  ä  s   ù‡ € õ÷,ò ,rI   r»  c                   ój   a a€ ] tR tRt oV3R lV 3R lltR tR t]R	V3R lR ll4       tRt	Vt
V ;t# )
ÚMixtureOfExpertsií  c          
      óL   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[RS[/# )rS   r†   rÎ   r÷   Údelay_before_free_msrù   )r‚   rƒ   r¦   rL   r×   )rX   rY   s   "€rJ   rZ   ÚMixtureOfExperts.__annotate__î  sC   ø€ ÷ 2
ñ 2
á× Ñ ð2
ñ ð2
ñ )ð	2
ñ
 "ð2
ñ ñ2
rI   c                óÎ  <€ \         SV `  VVVVR 7       Wn        W@n        W n        V\
        P                  8H  V n        V'       d(   \        P                  ! ^*V P                  ,           4       ^p^p^p	\        \        P                  ! Wx4      V P                  4      p
\        R V
P                  4        4       4      V n        V
P                  4        F
  pRVn        K  	  V'       d   \        P                  ! ^ 4       \        \        P                  ! W‡4      V P                  4      pV'       dG   \        P$                  P'                  VP                  4       .4      p\)        W­3/ VB p
\)        WÁ3/ VB p\        P*                  ! \        \        P                  ! W˜4      V P                  4      VV
\        \        P                  ! W‰4      V P                  4      4      V n        R# ))r†   rÎ   r÷   rù   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir    )Únumel)Ú.0r†  s   & rJ   Ú	<genexpr>Ú,MixtureOfExperts.__init__.<locals>.<genexpr>	  s   é € Ð$LÑ8K°1§W¡W§Y YÓ8Kùó   ‚TN)r  rÝ   r†   rÅ  rÎ   rL   rM   rÊ   rV   r  rÂ   rÌ   ru   r
  r)  rª   Únum_expert_paramsÚexpertr§  Ú	new_groupr¨   rX  rY  )r^   r†   rÎ   r÷   rÅ  rù   r6  Úd_expertÚd_sharedÚd_inputrÏ  r†  ÚsharedÚexpert_groupr  s   &&&&&&,       €rJ   rÝ   ÚMixtureOfExperts.__init__î  s{  ø€ ô 	‰ÑØØØ-Ø'ð	 	ô 	
ð Œ
Ø$8Ô!Ø"ŒØ.´.×2NÑ2NÑNˆÔßä×Ò˜b 4§9¡9�nÔ-ØˆØˆØˆÜ ¤§¢¨8Ó!>À×@SÑ@SÓTˆä!$Ñ$L¸×8IÑ8IÔ8KÓ$LÓ!LˆÔØ×"Ñ"Ö$ˆAØˆAŽHñ %÷ ä×Ò˜aÔ ä ¤§¢¨8Ó!>À×@SÑ@SÓTˆçä ×,Ñ,×6Ñ6Ø—‘“�óˆLô ˜&Ñ>°+Ñ>ˆFÜ˜&Ñ7¨;Ñ7ˆFä—m’mÜœBŸIšI gÓ8¸$×:MÑ:MÓNØØÜœBŸIšI hÓ8¸$×:MÑ:MÓNó	
ˆŽrI   c                ó¢  a a€ S P                   ^ 8”  dš   S P                  ^,          p\        V\        4      '       dq   \        P
                  P                  P                  P                  oVV 3R lp\        P                  ! RV4      ;_uu_ 4        S P                  V4      uuRRR4       # S P                  V4      #   + '       g   i     L!; i)r   c                  ó.  <€ \         '       dC   \        P                  P                  \	        SP
                  \        4       ,          4      4       M?\        '       g   \        '       d(   \        P                  ! SP
                  R ,          4       S! V / VB # )r�  )r3   rV   r8   r   r×   rÅ  r1   r4   r6   rž  rŸ  )rs   rt   Úorig_reshardr^   s   *,€€rJ   Ú_delayed_reshardÚ2MixtureOfExperts.forward.<locals>._delayed_reshard(  sc   ø€ ß “yÜŸ
™
×)Ñ)Ü × 9Ñ 9Ô<MÓ<OÕ OÓPõ÷ "›§X£XÜŸ
š
 4×#<Ñ#<¸tÕ#CÔDá'¨Ð8°Ñ8Ð8rI   z.torch.distributed.fsdp._runtime_utils._reshardN)rÅ  rY  r;  r¨   rV   r§  ÚfsdpÚ_runtime_utilsÚ_reshardr   r©  )r^   r%  rÏ  rÚ  rÙ  s   f&  @rJ   r&  ÚMixtureOfExperts.forward"  s˜   ù€ Ø×$Ñ$ qÔ(Ø—[‘[ •^ˆFÜ˜&¤$×'Ò'Ü$×0Ñ0×5Ñ5×DÑD×MÑM�ö9ô —Z’ZØDÐFV÷õ ð  Ÿ;™; q›>÷ò ð
 �{‰{˜1‹~Ð÷÷ ús   ÂB>Â>C	c                óì  € VP                  4        V P                  '       g¾   \        P                  ! 4       ;_uu_ 4        V P	                  4        F�  p\        VR 4      '       d   K  VP                  f   K'  VP                  P                  V P                  4       \        P                  P                  VP                  V P                  R7       Kƒ  	  RRR4       R# R#   + '       g   i     R# ; i)rÏ  Nr…   )r1  rÎ   rV   r«   rª   ÚhasattrÚgradÚdiv_r—   r§  Ú
all_reducer†   )r^   ro   r†  s   && rJ   rp   ÚMixtureOfExperts.run_backward:  s“   € Ø�‰Œà�~�~ˆ~Ü—’—•ØŸ™Ö*�AÜ˜q (×+Ò+Ù Ø—v‘vÔ)ØŸ™Ÿ™ D§O¡OÔ4Ü×)Ñ)×4Ñ4°Q·V±VÀ4Ç:Á:Ð4ÖNñ +÷ !‘ñ ß —�ús   Á 3C"Á8AC"Ã"C3	c                óv   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[S[S[3,          R,          RS[RS[/# )rS   r†   r5  r÷   r6  Nrù   rÅ  rµ  )rX   rY   s   "€rJ   rZ   rÆ  G  s`   ø€ ÷ 0Jñ 0JÙ× Ñ ð0Já$ð0Jñ )ð0Jñ ™#™s˜(•^ dÕ*ð	0Jñ
 ð0Jñ "ñ0JrI   c                ó  € Vf   / pV\         P                  8X  d   \        V RVVVR7      # V\         P                  8X  dA   \        V 3RRRVRVRV/VB pV\        P
                  8X  d   VP                  \        4      pV# \        RV 24      h)	a  
Initializes a :class:`MixtureOfExperts` instance.

Args:
    fsdp_init_mode (FSDPInitMode): If ``NO_FSDP``, then does not wrap
        any modules with FSDP. If ``RECURSIVE``, then wraps some nested
        modules with FSDP, including the expert and shared layers, but
        not the top-level module. The model may later be wrapped with a
        top-level FSDP external to this method if desired.
    device_init_mode (DEVICEInitMode): Determines model movement to DEVICE.
    fsdp_kwargs (Optional[Dict[str, Any]]): Optional keyword arguments
        forwarded to the FSDP constructor.
    deterministic (bool): Whether to make the model deterministic
        across constructions.
    delay_before_free_ms (int): Delay before resharding expert
        parameters in the forward pass (in ms).
F)rÎ   r÷   rÅ  rù   rÎ   Tr÷   rÅ  rù   r:  )	r@   rF   rÃ  rG   rL   rN   r²   r¡   r?  )r†   r5  r÷   r6  rù   rÅ  rD  s   &&&&&& rJ   rx   ÚMixtureOfExperts.initF  s¾   € ð4 ÒØˆKØœ\×1Ñ1Ô1Ü#ØØØ!1Ø%9Ø+ôð ð œ|×5Ñ5Ô5ä)Øñàðð "2ðð &:ð	ð
 ,ðð ñˆJð  ¤>×#>Ñ#>Ô>Ø'Ÿ]™]¬;Ó7�
ØÐÜÐ7¸Ð7GÐHÓIÐIrI   )rÅ  r†   rY  rÊ   rÎ  rÎ   )NFr   )rB   rC   rD   rE   rÝ   r&  rp   r{   rx   rH   r|   rI  rJ  s   @@rJ   rÃ  rÃ  í  s=   ù‡ € ÷2
ó 2
òhò0
Oð ÷0Jñ 0Jó ÷0Jð 0JrI   rÃ  c                   ój   a a€ ] tR tRt oRRRRRR^/V3R lV 3R lllltV3R	 lR
 ltR tRtVtV ;t	# )ÚMLPiz  ÚbiasTÚwith_bufferFÚdim_multiplierc          
      óZ   <€ V ^8„  d   QhRS[ RS[P                  R,          RS[RS[RS[ /# )rS   Údimr_   Nrë  rì  rí  )r×   rV   r_   r¦   )rX   rY   s   "€rJ   rZ   ÚMLP.__annotate__{  sF   ø€ ÷ ñ áðñ —‘˜tÕ#ðñ
 ðñ ðñ ñrI   c               ó(  <€ \         SV `  4        \        P                  ! WV,          W#R 7      V n        \        P                  ! WQ,          WVR 7      V n        V'       d,   V P                  R\        P                  ! V3VR7      4       R# RV n	        R# ))r_   rë  r–   r  N)
r  rÝ   ru   r
  Úin_projÚout_projr  rV   Úrandnr–   )r^   rï  r_   rë  rì  rí  r  s   &&&$$$€rJ   rÝ   ÚMLP.__init__{  sf   ø€ ô 	‰ÑÔÜ—y’y °sÕ&:À6ÔUˆŒÜŸ	š	 .Õ"6¸ÐQUÔVˆŒßØ× Ñ  ¬5¯;ª;¸°vÀfÔ+MÖNàˆDŽKrI   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©rS   r%  rT   re   )rX   rY   s   "€rJ   rZ   rð  Œ  s#   ø€ ÷ ñ ™Ÿ™ð ©%¯,©,ñ rI   c                óâ   € V P                  V4      p\        P                  ! V4      pV P                  V4      p\        P                  ! V4      pV P                  e   W P                  ,           pV# r    )rò  ÚFÚreluró  r–   )r^   r%  Úzs   && rJ   r&  ÚMLP.forwardŒ  sQ   € Ø�L‰L˜‹OˆÜ�FŠF�1‹IˆØ�M‰M˜!ÓˆÜ�FŠF�1‹IˆØ�;‰;Ò"Ø—K‘K•ˆAØˆrI   c                óŒ   € V P                   e6   \        P                  P                  P	                  V P                   4       R # R # r    )r–   rV   ru   rx   Únormal_râ   s   &rJ   Úreset_parametersÚMLP.reset_parameters•  s+   € Ø�;‰;Ò"Ü�H‰H�M‰M×!Ñ! $§+¡+Ö.ñ #rI   )r–   rò  ró  r    )
rB   rC   rD   rE   rÝ   r&  rÿ  rH   r|   rI  rJ  s   @@rJ   rê  rê  z  sA   ù‡ € ñð
 ðð "ðð  ÷ö ÷"ð ÷/ò /rI   rê  c                   óX   a a€ ] tR tRt oRR/V3R lV 3R llltV3R lR ltRtVtV ;t# )	ÚMLPStackiš  Úwith_seq_parallelFc                ó&   <€ V ^8„  d   QhRS[ RS[/# )rS   Úmlp_dimr  ©r×   r¦   )rX   rY   s   "€rJ   rZ   ÚMLPStack.__annotate__›  s   ø€ ÷ 
3ñ 
3¡ð 
3¹4ñ 
3rI   c               óÖ   <€ \        V^R7      \        V4      \        V^R7      .pV'       d(   VP                  \        P                  ! VRR7      4       \        SV `  ! V!   W n        R# )é   )rí  F©rë  N)rê  Úappendru   Ú	LayerNormr  rÝ   r  )r^   r  r  Úmodulesr  s   &&$ €rJ   rÝ   ÚMLPStack.__init__›  sV   ø€ ô �¨Ô*Ü�‹LÜ�¨Ô*ð	$
ˆ÷ Ø�N‰Nœ2Ÿ<š<¨°eÔ<Ô=Ü‰Ò˜'Ò"Ø!2ÖrI   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# )rS   Útp_meshÚdp_meshÚuse_activation_checkpointingrT   r  )r   r¦   )rX   rY   s   "€rJ   rZ   r  §  s3   ø€ ÷ ñ áðñ ðñ '+ð	ð 
ñrI   c                óô  € R \        RR7      R\        RR7      R\        RR7      R\        RR7      R\        RR7      RV P                  '       d   \        \        ^4      R7      M	\        4       /pV P                  '       d   \	        ^R	7      VR
&   \        WVR7       V  FF  p\        V\        P                  4      '       d   K%  V'       d   \        V4       \        V3RV/VB  KH  	  \        V 3RV/VB  V # )z	0.in_projF)Úuse_local_outputz
0.out_projz	1.in_projz
1.out_projz	2.in_projz
2.out_proj)Úoutput_layouts)Úsequence_dimÚ3)Údevice_meshÚparallelize_planÚmesh)r$   r&   r  r#   r'   r%   r;  ru   r  r   r   )r^   r  r  r  r6  r  rY  s   &&&&,  rJ   ÚparallelizeÚMLPStack.parallelize§  sÞ   € ð œ¸%Ô@Øœ/¸5ÔAØœ¸%Ô@Øœ/¸5ÔAØœ¸%Ô@ØØ×%×%Ð%ô *¼¸q»ÕBä Ó"ð
Ðð ×!×!Ð!Ü$4À!Ô$DÐ˜SÑ!Ü˜4ÐGWÕXÛˆFÜ˜&¤"§,¡,×/Ò/Ùß+Ü˜6Ô"Ü˜Ñ< WÐ<°Ô<ñ ô 	�DÑ6˜wÐ6¨+Ò6ØˆrI   )r  )	rB   rC   rD   rE   rÝ   r  rH   r|   rI  rJ  s   @@rJ   r  r  š  s%   ù‡ € ð
3À%÷ 
3õ 
3÷÷ ð rI   r  c                   óX   a a€ ] tR tRt oRtRV3R lV 3R llltV3R lR ltRtVtV ;t	# )	ÚDoubleLineariÇ  zˆ
This can be used for returning multiple outputs from a module
(``use_second_linear=True``) or for having an unused module (``False``).
c                ó&   <€ V ^8„  d   QhRS[ RS[/# )rS   rï  Úuse_second_linearr  )rX   rY   s   "€rJ   rZ   ÚDoubleLinear.__annotate__Í  s   ø€ ÷ 3ñ 3™Cð 3±Dñ 3rI   c                óÐ   <€ \         SV `  4        \        P                  ! W4      V n        \        P                  ! W4      V n        \        P                  ! 4       V n        W n        R # r    )	r  rÝ   ru   r
  Úlin1Úlin2ÚReLUrú  r   )r^   rï  r   r  s   &&&€rJ   rÝ   ÚDoubleLinear.__init__Í  sA   ø€ Ü‰ÑÔÜ—I’I˜cÓ'ˆŒ	Ü—I’I˜cÓ'ˆŒ	Ü—G’G“IˆŒ	Ø!2ÖrI   c                óœ   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          S[ P                  ,          /# r÷  )rV   rW   rU   )rX   rY   s   "€rJ   rZ   r!  Ô  s<   ø€ ÷ 'ñ 'Ù—‘ð'á	‰u�|‰|™UŸ\™\Ð)Õ	*©U¯\©\Õ	9ñ'rI   c                óæ   € V P                   '       dA   V P                  V P                  V4      4      V P                  V P                  V4      4      3# V P                  V P                  V4      4      # r    )r   rú  r#  r$  ra  s   &&rJ   r&  ÚDoubleLinear.forwardÔ  sT   € ð ×!×!Ð!Ø—9‘9˜TŸY™Y q›\Ó*¨D¯I©I°d·i±iÀ³lÓ,CÐCÐCØ�y‰y˜Ÿ™ 1›Ó&Ð&rI   )r#  r$  rú  r   ©T)
rB   rC   rD   rE   rz   rÝ   r&  rH   r|   rI  rJ  s   @@rJ   r  r  Ç  s#   ù‡ € ñ÷
3õ 3÷'÷ 'ð 'rI   r  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_all_gather_into_tensorr   )rX   s   "rJ   rZ   rZ   ã  s   € ÷ 1ñ 1´ñ 1rI   c              #   ó  "  € \         P                  p\         P                  ! 4        V \         n         R x € \         P                  ! 4        V\         n        R #   \         P                  ! 4        T\         n        i ; i5ir    )r‚   Úall_gather_singleÚbarrier)r,  Úorig_all_gathers   & rJ   Úpatch_all_gatherr1  â  sN   é € ä×,Ñ,€OÜ‡L‚L„NØ7„DÔð1Ûä�ŠŒØ!0ŒÖøô 	�ŠŒØ!0ŒÕüó   ‚1A?´A ¸"A?Á"A<Á<A?c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_foreach_all_gatherr   )rX   s   "rJ   rZ   rZ   ï  s   € ÷ 
ñ 
´Xñ 
rI   c              #   óB  "  € \         P                  P                  P                  P                  P
                  p\        P                  ! 4        V \         P                  P                  P                  P                  n         R x € \        P                  ! 4        V\         P                  P                  P                  P                  n        R #   \        P                  ! 4        T\         P                  P                  P                  P                  n        i ; i5ir    )rV   r§  rÜ  Ú_fully_shardÚ_fsdp_param_groupÚforeach_all_gatherr‚   r/  )r4  Úorig_foreach_all_gathers   & rJ   Úpatch_foreach_all_gatherr:  î  s¾   é € ô 	×Ñ×Ñ×+Ñ+×=Ñ=×PÑPð ô 	‡L‚L„Nàô 
×Ñ×Ñ×'Ñ'×9Ñ9ÔLð
Ûä�ŠŒà#ô 	×Ñ×Ñ×+Ñ+×=Ñ=ÖPøô 	�ŠŒà#ô 	×Ñ×Ñ×+Ñ+×=Ñ=ÕPüó    ‚BDÂC ÂA
DÃA
DÄDc                ó$   € V ^8„  d   QhR\         /# )rS   Únew_foreach_reducer   )rX   s   "rJ   rZ   rZ     s   € ÷ 
ñ 
¬Xñ 
rI   c              #   óB  "  € \         P                  P                  P                  P                  P
                  p\        P                  ! 4        V \         P                  P                  P                  P                  n         R x € \        P                  ! 4        V\         P                  P                  P                  P                  n        R #   \        P                  ! 4        T\         P                  P                  P                  P                  n        i ; i5ir    )rV   r§  rÜ  r6  r7  Úforeach_reducer‚   r/  )r=  Úorig_foreach_foreach_reduces   & rJ   Úpatch_foreach_reducerA     s¾   é € ô 	×Ñ×Ñ×+Ñ+×=Ñ=×LÑLð  ô 	‡L‚L„Nàô 
×Ñ×Ñ×'Ñ'×9Ñ9ÔHð
Ûä�ŠŒà'ô 	×Ñ×Ñ×+Ñ+×=Ñ=ÖLøô 	�ŠŒà'ô 	×Ñ×Ñ×+Ñ+×=Ñ=ÕLür;  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_reduce_scatter_tensorr   )rX   s   "rJ   rZ   rZ     s   € ÷ 9ñ 9´Hñ 9rI   c              #   ó  "  € \         P                  p\         P                  ! 4        V \         n         R x € \         P                  ! 4        V\         n        R #   \         P                  ! 4        T\         n        i ; i5ir    )r‚   r¨  r/  )rC  r¤  s   & rJ   Úpatch_reduce_scatterrE    sO   é € ä×4Ñ4ÐÜ‡L‚L„NØ!:„DÔð9Ûä�ŠŒØ%8ŒÖ"øô 	�ŠŒØ%8ŒÕ"ür2  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_all_reducer   )rX   s   "rJ   rZ   rZ     s   € ÷ *ñ *¤Xñ *rI   c              #   ó  "  € \         P                  p\         P                  ! 4        V \         n         R x € \         P                  ! 4        V\         n        R #   \         P                  ! 4        T\         n        i ; i5ir    )r‚   rä  r/  )rG  Úorig_all_reduces   & rJ   Úpatch_all_reducerJ    sI   é € ä—o‘o€OÜ‡L‚L„NØ$„D„Oð*Ûä�ŠŒØ)ŒŽøô 	�ŠŒØ)Œ�ür2  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_unshardr   )rX   s   "rJ   rZ   rZ   ,  ó   € ÷ .ñ .œxñ .rI   c              #   ó  "  € \         P                  p\        P                  ! 4        V \         n         R x € \        P                  ! 4        V\         n        R #   \        P                  ! 4        T\         n        i ; i5ir    )r   Úunshardr‚   r/  )rL  Úorig_unshards   & rJ   Úpatch_unshardrQ  *  óP   é € ô "×)Ñ)€LÜ‡L‚L„NØ(„NÔð.Ûä�ŠŒØ!-ŒÖøô 	�ŠŒØ!-ŒÕür2  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_reshardr   )rX   s   "rJ   rZ   rZ   9  rM  rI   c              #   ó  "  € \         P                  p\        P                  ! 4        V \         n         R x € \        P                  ! 4        V\         n        R #   \        P                  ! 4        T\         n        i ; i5ir    )r   Úreshardr‚   r/  )rT  rÙ  s   & rJ   Úpatch_reshardrW  7  rR  r2  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_post_backwardr   )rX   s   "rJ   rZ   rZ   F  s   € ÷ :ñ :¬8ñ :rI   c              #   ó  "  € \         P                  p\        P                  ! 4        V \         n         R x € \        P                  ! 4        V\         n        R #   \        P                  ! 4        T\         n        i ; i5ir    )r   Úpost_backwardr‚   r/  )rY  Úorig_post_backwards   & rJ   Úpatch_post_backwardr]  D  sQ   é € ô (×5Ñ5ÐÜ‡L‚L„NØ#4„NÔ ð:Ûä�ŠŒØ'9ŒÖ$øô 	�ŠŒØ'9ŒÕ$ür2  c                ó$   € V ^8„  d   QhR\         /# )rS   Únew_backwardr   )rX   s   "rJ   rZ   rZ   S  s   € ÷ >ñ >¼Xñ >rI   c              #   ó  "  € \         P                  p\        P                  ! 4        V \         n         R x € \        P                  ! 4        V\         n        R #   \        P                  ! 4        T\         n        i ; i5ir    )r   r1  r‚   r/  )r_  Úorig_backwards   & rJ   Ú*patch_register_post_backward_hook_backwardrb  Q  sS   é € ô 1×9Ñ9€MÜ‡L‚L„NØ,8Ô Ô)ð>Ûä�ŠŒØ0=Ô$Ö-øô 	�ŠŒØ0=Ô$Õ-ür2  c                óH   € V ^8„  d   QhR\         R\         R\        R\        /# )rS   r¤  r�   rs   rt   )r   r   )rX   s   "rJ   rZ   rZ   ^  s2   € ÷ 0ñ 0ä!ð0ô ð0ô ð	0ô
 ñ0rI   c                 óš   € \        V4      ^ 8”  d   V^ ,          pM"RV9   d   VR,          pM\        RV RV 24      hV! V4       V! V/ VB # )r   rh   z,Cannot get reduce-scatter output from
args: z	
kwargs: )Úlenr�   )Úclsr¤  r�   rs   rt   rh   s   &&&*, rJ   Úreduce_scatter_with_assertrg  ^  sa   € ô ˆ4ƒy�1„}Ø�a•‰Ø	�VÔ	Ø˜Õ!‰äØ;¸D¸6ÀÈFÈ8ÐTó
ð 	
ñ ˆfÔÙ Ð/¨Ñ/Ð/rI   c                ó~   € V ^8„  d   QhR\         P                  R\         P                  R\        \        R3,          /# )rS   Úreplicated_moduleÚsharded_moduleÚprefixes_to_ignore.)ru   rv   rU   rº   )rX   s   "rJ   rZ   rZ   q  s=   € ÷ "Tñ "Tä—y‘yð"Tô —I‘Ið"Tô œc 3˜h�ñ	"TrI   c                 ó  € \        VP                  4       VP                  4       R R7       EFÐ  w  w  rEw  rgTpV F  p	VP                  V	R4      pK  	  V P                  WH4       V P	                  V\
        4       \        V\
        4      '       g   \        R4      hVP                  VP                  rº\        V4      \        ^ 4      \        ^ 4      38X  d   \        R4      h\        WZV4      pV P                  VP                  4       VP                  4       4       VP                  f   V P                  VP                  4       EK  V P!                  VP                  4       \        VP                  W«4      pV P	                  VP                  \
        4       \        VP                  \
        4      '       g   \        R4      hV P                  VP                  P                  4       VP                  4       4       EKÓ  	  R# )Trˆ   Ú z&Expected sharded_param to be a DTensorzmFSDP's (Shard(0), Shard(0)) layout differs from distribute_tensor(), so we cannot check for equality using itNz+Expected sharded_param.grad to be a DTensor)r‘   rŠ   ÚreplaceÚassertEqualÚassertIsInstancer"   r;  r�   r  Ú
placementsrU   r#   r!   Úto_localrâ  ÚassertIsNoneÚassertIsNotNone)rf  ri  rj  rk  Úreplicated_nameÚreplicated_paramÚsharded_nameÚsharded_paramÚclean_sharded_nameÚprefixr  rq  Úsharded_ref_paramÚsharded_ref_grads   &&&&          rJ   Úcheck_sharded_parityr}  q  s´  € ô ORØ×*Ñ*Ó,Ø×'Ñ'Ó)Ø÷Oð OÑJÑ+ˆÑ-J¨lð
 *ÐÛ(ˆFØ!3×!;Ñ!;¸FÀBÓ!GÒñ )à�‰˜Ô<Ø×Ñ˜]¬GÔ4Ü˜-¬×1Ò1Ü Ð!IÓJÐJØ(×4Ñ4°m×6NÑ6NˆjÜ�Ó¤ q£¬5°«8Ð 4Ô4Ü ð;óð ô .Ð.>ÀjÓQÐØ�‰˜×.Ñ.Ó0Ð2C×2LÑ2LÓ2NÔOØ× Ñ Ò(Ø×Ñ˜]×/Ñ/Ô0ÚØ×Ñ˜M×.Ñ.Ô/Ü,Ð-=×-BÑ-BÀDÓUÐØ×Ñ˜]×/Ñ/´Ô9Ü˜-×,Ñ,¬g×6Ò6Ü Ð!NÓOÐOØ�‰˜×*Ñ*×3Ñ3Ó5Ð7G×7PÑ7PÓ7R×Só9OrI   c                   óT   a a€ ] tR tRt o]R 4       tV 3R ltR tR tR t	Rt
VtV ;t# )ÚFSDPTestMultiThreadi–  c                ó   € \         # r    ©ÚDEVICE_COUNTrâ   s   &rJ   r—   ÚFSDPTestMultiThread.world_size—  ó   € äÐrI   c                óD   <€ \         SV `  4        V P                  4        R # r    )r  ÚsetUpÚ_spawn_threads©r^   r  s   &€rJ   r†  ÚFSDPTestMultiThread.setUp›  s   ø€ Ü‰‰ŒØ×ÑÖrI   c                ó    € \        V .VO5/ VB # r    ©r.   r¿  s   &*,rJ   r.   Ú FSDPTestMultiThread.run_subtestsŸ  ó   € Ü˜DÐ2 4Ò2¨6Ñ2Ð2rI   c                óB   € \         P                  P                  4        R # r    ©rV   Ú_dynamoÚresetrâ   s   &rJ   ÚperThreadSetUpÚ"FSDPTestMultiThread.perThreadSetUp¢  ó   € Ü�‰×ÑÖrI   c                óB   € \         P                  P                  4        R # r    r�  râ   s   &rJ   ÚperThreadTearDownÚ%FSDPTestMultiThread.perThreadTearDown¥  r”  rI   rA   )rB   rC   rD   rE   Úpropertyr—   r†  r.   r’  r–  rH   r|   rI  rJ  s   @@rJ   r  r  –  s0   ù‡ € Øñó ðõò3ò÷ò rI   r  c                   óœ   a € ] tR tRt o RtR tR tR tR t]	R 4       t
RV 3R
 lR lltR^R]! 4       RRRR	R	R	R	RR3V 3R lR lltRtV tR# )ÚFSDPTestMixini©  z‡
Mixin class containing shared test utilities for FSDP tests.
Provides common helper methods for both FSDPTest and FSDPTestContinuous.
c                ó<   € V P                  W!P                  4       R # r    )ro  rµ   )r^   rD  rµ   s   &&&rJ   Ú_check_cpu_offloadÚ FSDPTestMixin._check_cpu_offload¯  s   € Ø×Ñ˜×&<Ñ&<Ö=rI   c                ó<   € V P                  W!P                  4       R # r    )ro  Úbackward_prefetch)r^   rD  rŸ  s   &&&rJ   Ú_check_backward_prefetchÚ&FSDPTestMixin._check_backward_prefetch²  s   € Ø×ÑÐ*×,HÑ,HÖIrI   c                ó<   € V P                  W!P                  4       R # r    )ro  Úforward_prefetch)r^   rD  r£  s   &&&rJ   Ú_check_forward_prefetchÚ%FSDPTestMixin._check_forward_prefetchµ  s   € Ø×ÑÐ)×+FÑ+FÖGrI   c                ó    € \        V .VO5/ VB # r    r‹  r¿  s   &*,rJ   r.   ÚFSDPTestMixin.run_subtests¸  r�  rI   c                ód  € V ! V4      pWn         W6n        VP                  R R4      p\        RVP                    RVP                   24       \
        R8w  df   \        P                  P                  4       VP                  8  d9   \        P                  ! \        RVP                   2,          P                  4        V'       db   \        P                  P                  P                  P                   P#                  4       p\$        P&                  ! RVP                  VVR7       MF\$        P&                  ! VP(                  \*        \-        VP                  4      VP                   R7        Rp
VP                   \2        ,          p\4        '       g   \6        '       d    \        P                  P9                  V4       V.p
\$        P:                  ! V
R7       \        P<                  P?                  4        \A        4        VPC                  W$4       \        P<                  P?                  4        \$        P:                  ! V
R7       \$        PD                  ! 4        R#   \.         dJ   p	R	T	P0                  ^ ,          9   d,   \        P                  ! \        R
,          P                  4       h Rp	?	ii ; i)Úfake_pgFúdist init r=ú, world=r=   ú
multi-gpu-Úfake©Úbackendr—   rÂ   Ústore©Úinit_methodr¯  r—   rÂ   Ú	recompileÚbackend_unavailableN©Ú
device_ids)#rÂ   Ú	file_nameÚgetÚprintr—   r¡   rV   ÚacceleratorÚdevice_countÚsysÚexitr/   Ú	exit_codeÚtestingÚ	_internalr§  r©  Ú	FakeStorer‚   Úinit_process_groupr²  ÚDISTRIBUTED_BACKENDr×   ÚRuntimeErrorrs   r‚  r3   r6   Úset_device_indexr/  r�  r‘  r2   Úrun_testÚdestroy_process_group©rf  rÂ   Ú	test_namer·  Úpipert   r^   r©  r°  Úer¶  Ú	device_ids   &&&&&,      rJ   Ú_runÚFSDPTestMixin._run»  sÎ  € á�9‹~ˆØŒ	Ø"ŒØ—*‘*˜Y¨Ó.ˆä�˜TŸY™Y˜K x°·±Ð/@ÐAÔBÜ˜%Ô¤E×$5Ñ$5×$BÑ$BÓ$DÀtÇÁÔ$VÜ�HŠH”Z *¨T¯_©_Ð,=Ð >Õ?×IÑIÔJð	ßÜŸ™×/Ñ/×;Ñ;×CÑC×MÑMÓO�Ü×'Ò'Ø"Ø#Ÿ™ØØö	ô ×'Ò'Ø $× 0Ñ 0Ü/Ü" 4§?¡?Ó3ØŸ™ö	ð ˆ
Ø—I‘I¤Õ,ˆ	ß‹9Ÿ›Ü×Ñ×.Ñ.¨yÔ9Ø�[ˆ
ô
 	�Š 
Õ+ä�‰×ÑÔÜŒØ�‰�iÔ&Ü�‰×ÑÔä�Š 
Õ+ä×"Ò"Ö$øô1 ô 	Ø˜aŸf™f Q�iÔ'Ü—’œÐ$9Õ:×DÑDÔEàûð		ús'   Â=I ÃA I Ä&AI ÉJ/É&AJ*Ê*J/NFc                óª   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[RS[R,          RS[RS[R,          R	S[R
S[RS[S[S[	3,          R,          /
# )rS   r   Ú	num_stepsÚautocastÚlrÚfsdp_cpu_offloadNÚ
save_modelÚmixed_precisionÚenable_sharded_grad_scalerÚuse_pure_fp16Úsharded_grad_scaler_kwargs)
ru   rv   r×   r¦   Úfloatr   r   rÁ   rº   r   )rX   rY   s   "€rJ   rZ   ÚFSDPTestMixin.__annotate__ò  s–   ø€ ÷ Yñ Yá�y‰yðYñ ðYñ ð	Yñ
 ðYñ % tÕ+ðYñ ðYñ (¨$Õ.ðYñ %)ðYñ ðYñ %)©©c¨¥N°TÕ$9ñYrI   c           
     ó*	  € T;'       d    VP                   p\        VP                  4       4      P                  pV
f   / p
\	        R	RV/V
B p\
        P                  P                  VP                  4       VRR7      p\        V4       EF©  pVP                  4        \
        P                  P                  \        VR7      ;_uu_ 4        VP                  P                  \
        P                  ! \        4      4      pV	'       g   V'       dt   \        V\         4      '       g^   \        V\
        P"                  4      '       d   VP%                  4       pM,\&        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      pV! V!  pV'       ds   \        V\         4      '       d]   VP(                  \*        9  dH   VP                  4        F3  pV P-                  VP                  \
        P                  ! R4      4       K5  	  VP                  P/                  VV4      P1                  V4      pR R R 4       VP3                  X4      pV'       g4   V	'       g,   VP4                  \
        P6                  8w  d   \9        R4      hM©V	'       d,   V P-                  VP4                  \
        P:                  4       Mv\        V\         4      '       d7   Vf   \9        R4      hV P-                  VP4                  VP<                  4       M*V P-                  VP4                  \
        P6                  4       VP                  P?                  V4       V'       d^   \        V\         4      '       dH   VP                  4        F3  pV P-                  VP                  \
        P                  ! R4      4       K5  	  VPA                  V4       VPC                  4        V'       g   EKL  VPE                  4       PG                  4        UUu/ uF  w  ppVVPI                  4       bK  	  ppp\K        V4       VPM                  V4       EK¬  	  \        V\         4      '       d    VPO                  \P        PR                  4       XPU                  4       #   + '       g   i     ELY; iu uppi )
NÚenabledgÍÌÌÌÌÌì?)rÒ  Úmomentum)rÜ  c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir    )r³   )rÊ  r%  s   & rJ   rË  Ú9FSDPTestMixin._train_for_several_steps.<locals>.<genexpr>  s   é € Ð%>¹°1§f¡f§h h»ùrÍ  r=   zQloss data type should be float32, as the original parameter data type is float32.z'Expected mixed_precision to not be NonerA   )+Úoffload_paramsÚnextrª   r_   r   rV   ÚoptimÚSGDrŽ   Ú	zero_gradÚamprÑ  r¡   rY  r`   r;  r¨   rW   r³   rU   r9  r   ro  ri   r²   Úscaler  Úfloat32r�   Úfloat16Úparam_dtyperp   ÚstepÚupdater´   r¿   Úcloner°   Úload_state_dictÚ_assert_stater   ÚIDLEr‹   )r^   r   rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  Úcpu_offload_paramsÚmodel_deviceÚsharded_grad_scalerrâ  r˜   rg   rh   r†  ro   ÚkÚvr´   s   &&&&&&&&&&&            rJ   Ú_train_for_several_stepsÚ&FSDPTestMixin._train_for_several_stepsò  sW  € ð .×QÐQÐ2B×2QÑ2QÐä˜E×,Ñ,Ó.Ó/×6Ñ6ˆØ%Ò-Ø)+Ð&Ü/ñ 
Ø.ð
Ø2Lñ
Ðô
 —‘—‘ × 0Ñ 0Ó 2°rÀC�ÓHˆÜ�y×!ˆAØ�O‰OÔÜ—‘×#Ñ#¤K¸Ð#×BÕBàŸ™×.Ñ.¬u¯|ª|¼KÓ/HÓI�ß §_¼ZÈÌt×=TÒ=TÜ! %¬¯©×6Ò6Ø %§
¡
£™ç %¤Ñ%>¹Ó%>§¡Ñ%>¹Ó%>Ó >˜Ù ™�÷ 'Ü" 5¬$×/Ò/ð ×/Ñ/Ü>ô?ð #×-Ñ-Ö/˜à×(Ñ(¨¯©´5·<²<ÀÓ3FÖGñ 0ð —|‘|×,Ñ,¨U°FÓ;×>Ñ>¸|ÓL�÷- Cð. '×,Ñ,¨TÓ2ˆDç"¯=Ø—:‘:¤§¡Ô.Ü(ð:óð ð /÷ !Ø×$Ñ$ T§Z¡Z´·±Õ?ä ¤t×,Ò,Ø&Ò.Ü,ØEóð ð ×$Ñ$ T§Z¡Z°×1LÑ1LÕMà×$Ñ$ T§Z¡Z´·±Ô?Ø�L‰L×%Ñ% dÔ+ç!¤j°¼×&=Ò&=Ø×)Ñ)Ö+�Aà×$Ñ$ Q§X¡X¬u¯|ª|¸EÓ/BÖCñ ,ð  ×$Ñ$ UÔ+à×&Ñ&Ô(çŠzØ7<×7GÑ7GÓ7I×7OÑ7OÔ7QÔRÑ7Q©t¨q°!˜a §¡£šlÑ7Q�
ÑRô ˜EÔ"Ø×%Ñ% j×1ñ{ "ô~ �eœT×"Ò"Ø×Ñ¤× 2Ñ 2Ô3Ø�{‰{‹}Ð÷ C×BÐBüón Ss'   Ã	AQ;ÄAQ;Å.Q;ÆBQ;Ï5RÑ;RTc          "      ó
  <€ V ^8„  d   QhRS[ S[,          RS[RS[RS[R,          RS[RS[RS[R	S[R,          R
S[	R,          RS[
R,          RS[RS[RS[RS[RS[S[S[3,          R,          RS[S[S[3,          R,          /# )rS   Úmodel_classr5  r÷   Úref_init_fnNÚ	num_itersrÔ  rµ   rŸ  r9  rÕ  r£  Úuse_orig_paramsrÖ  r×  Úinit_kwargsrØ  )r¯  rQ   r@   rL   r   r×   r¦   r   r   r   r   rÁ   rº   r   )rX   rY   s   "€rJ   rZ   rÚ  M  sï   ø€ ÷ hñ há™-Õ(ðhñ %ðhñ )ð	hñ
  •_ðhñ ðhñ ðhñ  ðhñ ,¨dÕ2ðhñ ,¨dÕ2ðhñ (¨$Õ.ðhñ ðhñ ðhñ %)ðhñ ðhñ  ™#™s˜(•^ dÕ*ð!hñ" %)©©c¨¥N°TÕ$9ñ#hrI   c                ó²  € V\         P                  8X  d   \        R4      hVf   / pRpV P                  P	                  4       pVP
                  ! V P                  \         P                  \        P                  3RR/VB pVfL   \        '       d   \        V\        .\        R7      pM/\        R8X  d   \        V4      pM\        VV.VR7      pMV! V4      pV'       d   VP                  4       pV P                  VVV
RJVVV
VVVR7	      p\        VP                  4       4      pVP                  R	VR
VRV	RV
RVRV/4        VP
                  ! V P                  VVV3RR/VB p\'        T\(        4      '       g   \)        TT P                  3/ TB pT'       d   TP                  4       pT\        P*                  8X  d   TP-                  \        4      pTRJ;'       d    TP.                  pT;'       d    T\        P*                  8H  pT;'       d    T\        P*                  8g  pT'       dJ   \0        P2                  ! R4      pTP                  4        F  pT P5                  TP2                  T4       K!  	  T'       d   T P7                  \8        R\         24      M	\;        4       pT;_uu_ 4        T P                  TTRTTTT
TTTR7
      p RRR4       T'       d   R# T'       d_   \0        P2                  ! R4      pTP                  4        F  pT P5                  TP2                  T4       K!  	  X P-                  \        4      p \=        T4      p!\0        P>                  PA                  TX RR7       T
f"   T'       g   T P5                  TT!RRR7       R# R# R#   \          d!   p\#        RT R\%        T4       24      ThRp?ii ; i  + '       g   i     EL; i)a…  
Tests FSDP training against a reference, which defaults to DDP but
may be customized with ``ref_init_fn``.

Args:
    model_class (Type[FSDPTestModel]): A model class that inherits from
        ``FSDPTestModel``, which defines the expected interface.
    fsdp_init_mode (FSDPInitMode): The mode to initialize the
        FSDP-wrapped model. This should not be ``NO_FSDP``.
    ref_init_fn (Optional[Callable]): A callable to invoke that wraps a
        non-wrapped model to construct the reference model, where this
        wrapper should provide data parallel semantics. If ``None``,
        then the callable defaults to the DDP constructor.
z.Expects an FSDP init mode that wraps with FSDPNç{®Gáz„?rù   T)r¶  Úoutput_devicer=   )rÑ  rÒ  rÓ  rÕ  rÖ  r×  rØ  rµ   rŸ  r9  rÕ  r£  rû  zInitializing z raised error zOAn FSDP-managed module with parameter CPU offloading enabled has parameters on F)rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  )Úcheck_dtypezFSDP did not match DDP)Úexact_deviceÚmsg)!r@   rF   r�   r€   rÂ   rx   rL   rM   r4   ÚDDPr¡   r³   rõ  rÇ   rª   rë  Ú	Exceptionr?  rº   r;  r¨   rN   r²   rà  rV   r_   ro  ÚassertRaisesRegexrÄ  r   rÈ   r¿  Úassert_close)"r^   rø  r5  r÷   rù  rú  rÔ  rµ   rŸ  r9  rÕ  r£  rû  rÖ  r×  rü  rØ  r6  rÒ  rÂ   r   Ú	ref_modelÚref_lossÚ
ddp_paramsrD  rË  rà  Úexpects_device_errorÚexpects_cpu_deviceÚ
cpu_devicer“   ÚcontextÚ	fsdp_lossÚfsdp_unsharded_paramss"   &&&&&&&&&&&&&&&&&,                rJ   Ú_test_fsdp_parityÚFSDPTestMixin._test_fsdp_parityM  sÑ  € ðD œ\×1Ñ1Ô1Ü Ð!QÓRÐRØÒØˆKØˆØ×!Ñ!×&Ñ&Ó(ˆà× Ò Ø×ÑÜ× Ñ Ü×(Ñ(ñ
ð ð	
ð
 ñ
ˆð Òß‹xÜØ¤{ mÄ;ô‘	ô  Ô%Ü ›J‘	ä °4°&ÈÔM‘	á# EÓ*ˆIßØ!Ÿ™Ó(ˆIØ×0Ñ0ØØØ$¨DÐ0ØØ(Ø+Ø'AØ'Ø'Að 1ó 

ˆô ˜)×.Ñ.Ó0Ó1ˆ
à×Ñà˜{Ø#Ð%6Ø#Ð%6Ø! ?Ø"Ð$4Ø! ?ðô		
ð
	YØ$×)Ò)Ø×"Ñ"ØØ Øñ	ð
 #ðð ñˆJô ˜*¤d×+Ò+ô ˜j¨$×*<Ñ*<ÑLÀÑLˆJßà#Ÿ™Ó*ˆJØœ~×:Ñ:Ô:Ø#Ÿ™¤{Ó3ˆJØ$¨DÐ0×OÐO°[×5OÑ5Oˆð
 ×NÐNÐ/´>×3NÑ3NÑNð 	ð ×NÐNÐ/´>×3NÑ3NÑNð 	÷ ÜŸš eÓ,ˆJØ#×.Ñ.Ö0�Ø× Ñ  §¡¨zÖ:ñ 1÷ $ð ×"Ñ"Üð%Ü%0 Mð3ôô “ð 	÷ ŠWØ×5Ñ5ØØØØØ!,Ø%Ø /Ø+EØ+Ø+Eð 6ó ˆI÷ ÷  Ù÷ ÜŸš eÓ,ˆJØ#×.Ñ.Ö0�Ø× Ñ  §¡¨zÖ:ñ 1à!Ÿ™¤[Ó1ˆIÜ /°
Ó ;Ðô 	�‰×"Ñ" 8¨YÀEÐ"ÔJð Ò"¯=Ø×ÑØØ%Ø!Ø,ð	 ö ñ ,9Ñ"øôK ô 	YÜ˜}¨[¨M¸ÌÈAËÀxÐPÓQÐWXÐXûð	Yú÷F �WˆWús$   Å"N Ê/OÎOÎ"N=Î=OÏO	©r·  rÂ   )rþ  NFNFFN)rB   rC   rD   rE   rz   rœ  r   r¤  r.   ÚclassmethodrÍ  rõ  r   r  rH   r|   r}   s   @rJ   rš  rš  ©  s   ø‡ € ñò
>òJòHò3ð ñ4%ó ð4%÷lYò Yð@ (,ØØÙ",£,Ø59Ø59Ø15Ø!&Ø %Ø+0Ø#Ø-1Ø<@÷#h÷ hð hrI   rš  c                   óŽ   a a€ ] tR tRt oV 3R lt]R 4       t]R 4       t]V3R lR l4       t]R 4       t	]
R 4       tR	tVtV ;t# )
ÚFSDPTestiø  c                ój   <€ \         SV `  4        R \        P                  R&   V P	                  4        R# )Ú0ÚTORCH_NCCL_DESYNC_DEBUGN)r  r†  ÚosÚenvironÚ_spawn_processesrˆ  s   &€rJ   r†  ÚFSDPTest.setUpù  s)   ø€ Ü‰‰Œð 14Œ�
‰
Ð,Ñ-Ø×ÑÖrI   c                ó   € \         # r    r�  râ   s   &rJ   r—   ÚFSDPTest.world_size  r„  rI   c                ó>   € \         P                  P                  4       # r    )r‚   Údistributed_c10dÚ_get_default_grouprâ   s   &rJ   r€   ÚFSDPTest.process_group  s   € ä×$Ñ$×7Ñ7Ó9Ð9rI   c                ó    <€ V ^8„  d   QhRS[ /# rd   )r¦   )rX   rY   s   "€rJ   rZ   ÚFSDPTest.__annotate__
  s   ø€ ÷ ñ ¡dñ rI   c                ó   € R # )FrA   râ   s   &rJ   Údestroy_pg_upon_exitÚFSDPTest.destroy_pg_upon_exit	  s   € ñ rI   c                ó*   € \          V P                   2# r    )r0   r·  râ   s   &rJ   r²  ÚFSDPTest.init_method  s   € ä�˜tŸ~™~Ð.Ð/Ð/rI   c                óN  € V ! V4      pWn         W6n        VP                  R R4      p\        RVP                    RVP                   24       \
        P                  P                  4       VP                  8  d9   \        P                  ! \        RVP                   2,          P                  4        V'       db   \
        P                  P                  P                  P                  P!                  4       p\"        P$                  ! RVP                  VVR7       MF\"        P$                  ! VP&                  \(        \+        VP                  4      VP                   R7        R
p
VP                   \0        ,          p\2        '       g   \4        '       d    \
        P                  P7                  V4       V.p
\"        P8                  ! V
R7       \
        P:                  P=                  4        \?        4        VPA                  W$4       \
        P:                  P=                  4        \"        P8                  ! V
R7       \"        PB                  ! 4        R
#   \,         dJ   p	RT	P.                  ^ ,          9   d,   \        P                  ! \        R	,          P                  4       h R
p	?	ii ; i)r©  Frª  r«  r¬  r­  r®  r±  r³  r´  Nrµ  )"rÂ   r·  r¸  r¹  r—   rV   rº  r»  r¼  r½  r/   r¾  r¿  rÀ  r§  r©  rÁ  r‚   rÂ  r²  rÃ  r×   rÄ  rs   r‚  r3   r6   rÅ  r/  r�  r‘  r2   rÆ  rÇ  rÈ  s   &&&&&,      rJ   rÍ  ÚFSDPTest._run  sÇ  € á�9‹~ˆØŒ	Ø"ŒØ—*‘*˜Y¨Ó.ˆä�˜TŸY™Y˜K x°·±Ð/@ÐAÔBÜ×Ñ×)Ñ)Ó+¨d¯o©oÔ=Ü�HŠH”Z *¨T¯_©_Ð,=Ð >Õ?×IÑIÔJð	ßÜŸ™×/Ñ/×;Ñ;×CÑC×MÑMÓO�Ü×'Ò'Ø"Ø#Ÿ™ØØö	ô ×'Ò'Ø $× 0Ñ 0Ü/Ü" 4§?¡?Ó3ØŸ™ö	ð ˆ
Ø—I‘I¤Õ,ˆ	ß‹9Ÿ›Ü×Ñ×.Ñ.¨yÔ9Ø�[ˆ
ô
 	�Š 
Õ+ä�‰×ÑÔÜŒØ�‰�iÔ&Ü�‰×ÑÔä�Š 
Õ+ä×"Ò"Ö$øô1 ô 	Ø˜aŸf™f Q�iÔ'Ü—’œÐ$9Õ:×DÑDÔEàûð		ús'   Â2I Â:A I ÄAI ÉJ$ÉAJÊJ$r  )rB   rC   rD   rE   r†  r˜  r—   r€   r&  r²  r  rÍ  rH   r|   rI  rJ  s   @@rJ   r  r  ø  ss   ù‡ € õ ð ñó ðð ñ:ó ð:ð ÷ó ðð ñ0ó ð0ð ñ4%ó ÷4%ð 4%rI   r  c                   ó°   a a€ ] tR tRt oRt]t]V3R lR l4       t]V3R lR l4       t	]V 3R l4       t
V 3R ltV 3R	 lt]R
 4       tV3R ltRtVtV ;t# )ÚFSDPTestContinuousiJ  zê
FSDP test base class using MultiProcContinuousTest for faster test execution.
This class reuses worker processes across tests, reducing process spawn overhead.
Use this for tests that don't require fresh process state between tests.
c                ó    <€ V ^8„  d   QhRS[ /# rd   ©rº   )rX   rY   s   "€rJ   rZ   ÚFSDPTestContinuous.__annotate__T  s   ø€ ÷ #ñ #™Cñ #rI   c                ó   € \         # r    )rÃ  ©rf  s   &rJ   Úbackend_strÚFSDPTestContinuous.backend_strS  s   € ä"Ð"rI   c                ó    <€ V ^8„  d   QhRS[ /# rd   r/  )rX   rY   s   "€rJ   rZ   r0  X  s   ø€ ÷ ñ ™Cñ rI   c                ó   € \         # r    )r¡   r2  s   &rJ   Údevice_typeÚFSDPTestContinuous.device_typeW  s   € äÐrI   c                óx  <€ R \         P                  R&   \        P                  P	                  4       V8  d/   \
        P                  ! \        RV 2,          P                  4       V\        ,          p\        '       g   \        '       d    \        P                  P                  V4       \        SV `9  WV4       R# )r  r  r¬  N)r  r  rV   rº  r»  r¼  r½  r/   r¾  r‚  r3   r6   rÅ  r  Ú_init_pg)rf  rÂ   r—   Ú	rdvz_filerÌ  r  s   &&&& €rJ   r:  ÚFSDPTestContinuous._init_pg[  s   ø€ ð
 14Œ�
‰
Ð,Ñ-ä×Ñ×)Ñ)Ó+¨jÔ8Ü�HŠH”Z *¨Z¨LÐ 9Õ:×DÑDÔEàœ<Õ'ˆ	ß‹9Ÿ›Ü×Ñ×.Ñ.¨yÔ9ä‰Ñ˜¨9Ö5rI   c                óÔ   <€ \         SV `  4        V P                  V P                  8w  d   \        P
                  ! 4        \        P                  P                  4        \        4        R # r    )
r  r†  rÂ   ÚMAIN_PROCESS_RANKr‚   r/  rV   r�  r‘  r2   rˆ  s   &€rJ   r†  ÚFSDPTestContinuous.setUpk  s>   ø€ Ü‰‰Œð �9‰9˜×.Ñ.Ô.Ü�LŠLŒNÜ�‰×ÑÔÜŽrI   c                óÀ   <€ V P                   V P                  8w  d   \        P                  ! 4        \        SV `  4        \        P                  P                  4        R # r    )	rÂ   r>  r‚   r/  r  ÚtearDownrV   r�  r‘  rˆ  s   &€rJ   rA  ÚFSDPTestContinuous.tearDownu  s9   ø€ à�9‰9˜×.Ñ.Ô.Ü�LŠLŒNÜ‰ÑÔÜ�‰×ÑÖrI   c                ó.   € V P                   P                  # r    )r  r@  râ   s   &rJ   r€   Ú FSDPTestContinuous.process_group|  s   € à�~‰~× Ñ Ð rI   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rS   r—   rÖ   )rX   rY   s   "€rJ   rZ   r0  J  s   ø‡ ‚ ñ Ñ"ò rI   rA   )rB   rC   rD   rE   rz   r‚  r—   r  r3  r7  r:  r†  rA  r˜  r€   Ú__annotate_func__rH   r|   rI  rJ  s   @@rJ   r-  r-  J  sq   ù‡ € ñð #€Jà÷#ó ð#ð ÷ó ðð ô6ó ð6õõð ñ!ó ð!÷g … rI   r-  c                ó2   € V ^8„  d   QhR\         R,          /# )rS   Úcompile_compute_on_moduleN)r¯  )rX   s   "rJ   rZ   rZ   �  s   € ÷ /ñ /´$¸µ+ñ /rI   c                 óD   a aa€ V 3R  lo ! R R\         4      oVV3R lpV# )c                  óÈ   <€ \         P                  P                  P                  ! V / VB  Se   \	        V ^ ,          S4      '       d   V ^ ,          P                  4        R # R # r    )rV   r§  rÜ  r   r;  r‹  )rs   rt   rH  s   *,€rJ   Ú!fully_shard_with_compiled_computeÚ=compiled_fsdp_test.<locals>.fully_shard_with_compiled_compute‚  sS   ø€ Ü×Ñ×Ñ×*Ò*¨DÐ;°FÒ;Ø$Ò,´
Ø��GÐ.÷1
ò 1
ð ��G�O‰OÖñ1
rI   c                   ó2   € ] tR tRt]! 4       t]! 4       tRtR# )Ú*compiled_fsdp_test.<locals>.FullyShardModei‰  rA   N)rB   rC   rD   rE   r	   ÚEAGERÚCOMPILED_COMPUTErH   rA   rI   rJ   ÚFullyShardModerN  ‰  s   † Ù“ˆÙ›6ÔrI   rQ  c                 ó6   <a € \        S 4      VVV 3R  l4       pV# )c                  óø  <€ \         P                  P                  P                  pS EFM  pVSP                  8w  d+   \        4       '       g   \        P                  ! R ^R7       K?  \         P                  P                  P                  p\         P                  P                  4        VSP                  8X  d   TpMAVSP                  8X  d#   ^\         P                  P                  n
        SpM\        RV 24      hVSP                  VP                  &   S! V / VB  \         P                  P                  4        VSP                  VP                  &   V\         P                  P                  n
        EKP  	  R# )z0Inductor on GPU needs Triton and recent GPU arch)Ú
stacklevelz!Need to implement FullyShardMode=N)rV   r§  rÜ  r   rO  r7   ÚwarningsÚwarnÚ	_inductorÚconfigÚcompile_threadsr/  rP  ÚNotImplementedErrorÚ__globals__rB   )	rs   rt   Úoriginal_fully_shardÚmodeÚoriginal_compile_threadsÚfully_shard_patchrQ  rK  Úfuncs	   *,    €€€rJ   ÚwrapperÚ6compiled_fsdp_test.<locals>.decorator.<locals>.wrapperŽ  s,  ø€ ä(-×(9Ñ(9×(>Ñ(>×(JÑ(JÐ Ü&�Ø˜>×/Ñ/Ô/¼
¿ºÜ—M’MØJÐWXõñ ä+0¯?©?×+AÑ+A×+QÑ+QÐ(Ü×!Ñ!×)Ñ)Ô+à˜>×/Ñ/Ô/Ø(<Ñ%Ø˜^×<Ñ<Ô<Ø=>”E—O‘O×*Ñ*Ô:Ø(IÑ%ä-Ø;¸D¸6ÐBóð ð CT�× Ñ Ð!5×!>Ñ!>Ñ?Ù�dÐ%˜fÒ%ä×!Ñ!×)Ñ)Ô+ØBV�× Ñ Ð!5×!>Ñ!>Ñ?Ø9Q”—‘×&Ñ&×6ó7 'rI   r   )r`  ra  rQ  rK  s   f €€rJ   Ú	decoratorÚ%compiled_fsdp_test.<locals>.decorator�  s"   ù€ Ü	ˆt‹ö	Ró 
ð	Rð> ˆrI   )r
   )rH  rc  rQ  rK  s   f @@rJ   Úcompiled_fsdp_testre  �  s"   ú€ õô"œô "ö!ðF ÐrI   c                   óD   a a€ ] tR tRt oV3R lV 3R lltR tRtVtV ;t# )Ú
SkipModulei³  c                ó   <€ V ^8„  d   QhRR/# rl   rA   )rX   rY   s   "€rJ   rZ   ÚSkipModule.__annotate__´  s   ø€ ÷ 1ñ 1˜$ñ 1rI   c                ó`   <€ \         SV `  4        \        P                  ! ^
^
RR7      V n        R# ©é
   Fr
  N)r  rÝ   ru   r
  Úlinrˆ  s   &€rJ   rÝ   ÚSkipModule.__init__´  s"   ø€ Ü‰ÑÔÜ—9’9˜R ¨%Ô0ˆŽrI   c                ó$   € V P                  V4      # r    ©rm  ra  s   &&rJ   r&  ÚSkipModule.forward¸  s   € Ø�x‰x˜‹{ÐrI   rp  rÁ  rJ  s   @@rJ   rg  rg  ³  s   ù‡ € ÷1ó 1÷ò rI   rg  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚNestedLineari¼  c                ó  <€ \         SV `  4        V'       d=   \        \        P                  ! ^
^
RR7      P                  \        4      4      V n        R# \        P                  ! ^
^
RR7      P                  \        4      V n        R# rk  )r  rÝ   r    ru   r
  r²   r¡   Únested_linear)r^   Ú	fsdp_wrapr  s   &&€rJ   rÝ   ÚNestedLinear.__init__½  sV   ø€ Ü‰ÑÔßÜ!%¤b§i¢i°°B¸UÔ&C×&FÑ&FÄ{Ó&SÓ!TˆDÖä!#§¢¨2¨r¸Ô!>×!AÑ!AÄ+Ó!NˆDÖrI   c                ó$   € V P                  V4      # r    ©ru  ra  s   &&rJ   r&  ÚNestedLinear.forwardÄ  s   € Ø×!Ñ! !Ó$Ð$rI   ry  rÁ  rJ  s   @@rJ   rs  rs  ¼  s   ù‡ € õO÷%ò %rI   rs  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )Ú	SkipModeliÈ  c                ó
  <€ \         SV `  4        \        P                  ! ^
^
RR7      P	                  \
        4      V n        \        4       P	                  \
        4      V n        \        \        VR7      \
        R7      V n        R# )rl  Fr
  )rv  )rÌ  N)r  rÝ   ru   r
  r²   r¡   Úlinearrg  Úlinear_skipr    rs  ru  )r^   Údouble_nestr  s   &&€rJ   rÝ   ÚSkipModel.__init__É  sW   ø€ Ü‰ÑÔÜ—i’i  B¨UÔ3×6Ñ6´{ÓCˆŒÜ%›<Ÿ?™?¬;Ó7ˆÔÜ!Ü ;Ô/¼;ô
ˆÖrI   c                ól   € V P                  V4      pV P                  V4      pV P                  V4      pV# r    ©r~  r  ru  ra  s   &&rJ   r&  ÚSkipModel.forwardÑ  s4   € Ø�K‰K˜‹NˆØ×Ñ˜QÓˆØ×Ñ˜qÓ!ˆØˆrI   rƒ  rÁ  rJ  s   @@rJ   r|  r|  È  s   ù‡ € õ
÷ò rI   r|  )FT)FFr*  )rA   r    )�Ú
contextlibr  r�  r¼  rž  rU  Úabcr   r   Úcollections.abcr   r   Úcopyr   Úenumr	   r
   Ú	functoolsr   Útypingr   r   r   Úunittestr   rV   Útorch.distributedr§  r‚   Útorch.nnru   Útorch.nn.functionalr,  rù  Útorch.distributed._composabler   Útorch.distributed.device_meshr   Útorch.distributed.fsdpr   r   r   r¨   Ú$torch.distributed.fsdp._common_utilsr   Ú5torch.distributed.fsdp._fully_shard._fsdp_param_groupr   r   Ú"torch.distributed.fsdp._init_utilsr   Ú2torch.distributed.fsdp.fully_sharded_data_parallelr   r   r   Ú*torch.distributed.fsdp.sharded_grad_scalerr   Útorch.distributed.fsdp.wrapr   r   r    Útorch.distributed.tensorr!   r"   r#   Ú!torch.distributed.tensor.parallelr$   r%   r&   r'   r(   r)   Útorch.nn.parallel.distributedr*   r  Ú*torch.testing._internal.common_distributedr+   r,   r-   r.   r/   Ú$torch.testing._internal.common_utilsr0   r1   r2   r3   r4   r5   r6   Útorch.utils._tritonr7   ÚminÚmaxr8   r»  r‚  r¡   rÃ  r;   r@   rL   rv   rQ   rž   r¢   r°   r¶   r½   rÃ   rÈ   rÌ   rÑ   rÓ   rõ   rL  rp  rx  r�  r³  r»  rÃ  rê  rX  r  r  Úcontextmanagerr1  r:  rA  rE  rJ  rQ  rW  r]  rb  rg  r}  r  rš  r  r-  re  rg  rs  r|  rA   rI   rJ   Ú<module>r¢     sÒ  ðó Û 	Û 	Û 
Û Û ß #Ý $Ý "Ý ß Ý ß +Ñ +Ý ã Ý  Ý ß Ð Ý 4Ý 4÷ñ õ
 ?÷õ S÷ñ õ
 Iß RÑ Rß FÑ F÷ó ÷ FÝ H÷õ ÷÷ ñ õ +÷ Ù�q™#˜a §¡×!8Ñ!8Ó!:Ó;Ó<�Là€LçØ€KØ ÐØ—:‘:×*Ñ*Ó,�LßØ€KØ ÑßØ€KØ ÐØ—9‘9×)Ñ)Ó+�Là€KØ ÐØ€Lô�4ô ô�Tô ô�B—I‘I˜sô õ4òB%÷#ô"òò÷"2õ>õD÷ñ ô.Q" -ô Q"ôh[J˜-ô [Jô|Ð$7ô ôD]JÐ.ô ]Jô@J
�mô J
ôZ
 ?ô 
ô.,ˆr�y‰yô ,ôJJÐ*ô JJôZ/ˆ"�)‰)ô /ô@*ˆr�}‰}ô *ôZ'�2—9‘9ô 'ð6 ×Ñô1ó ð1ð ×Ñô
ó ð
ð" ×Ñô
ó ð
ð" ×Ñô9ó ð9ð ×Ñô*ó ð*ð Ø×Ñô.ó ó ð.ð Ø×Ñô.ó ó ð.ð Ø×Ñô:ó ó ð:ð Ø×Ñô>ó ó ð>õ0÷&"TôJÐ/ô ÷&Lñ Lô^
O%ˆ}Ð2ô O%ôd4!˜Ð(?ô 4!÷n/ôd�—‘ô ô	%�2—9‘9ô 	%ô�—	‘	ö rI   