Ë
    g^(hV$  ã                   óZ  — d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ ddlmZmZ dZ G d	„ d
e«      Zdededefd„Z G d„ d«      Z ee¬«      	 dde	j(                  deeej                  j(                        de	j(                  fd„«       Zde	j(                  defd„Zy)é    N)ÚIterable)ÚAnyÚNoReturnÚOptional)Ú_State)ÚDistributedDataParallelé   )Ú_get_registryÚcontractÚ c                   ó°  ‡ — e Zd ZU ej                  ed<   dˆ fd„Zefdej                  de
ej                     de
ej                     deddf
d	„Zdd
„Zdej                  de
ej                     ddfd„Zdd„Zdd„Zdej                  deedf   deeef   defd„Zdej                  deej.                     dej.                  dej.                  fd„Zˆ xZS )Ú_ReplicateStateÚ_ddp_weakrefÚreturnNc                 óü   •— t         ‰| �  «        t        j                  «       | _        d| _        t        j                  «       | _        | j                  | _        g | _        d| _	        d | _
        i | _        g | _        y )NF)ÚsuperÚ__init__ÚnnÚParameterListÚmoduleÚhas_initializedÚ_param_listÚ_orig_moduleÚ_param_namesÚ_no_syncÚ
_init_argsÚ_init_kwargsÚ_comm_hook_args)ÚselfÚ	__class__s    €úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/_composable/replicate.pyr   z_ReplicateState.__init__   sk   ø€ Ü‰ÑÔÜ!#×!1Ñ!1Ó!3ˆŒØ%*ˆÔÜ-/×-=Ñ-=Ó-?ˆÔð !ŸK™KˆÔØ')ˆÔØ#ˆŒØ59ˆŒØ,.ˆÔØ*,ˆÕó    r   Úignored_modulesÚignored_paramsÚprefixc                 ób  — t        |«      ry ||v ry |t        k7  r|› d�nt        }|j                  d¬«      D ]D  \  }}||vsŒ| j                  j	                  |«       | j
                  j	                  |› |› �«       ŒF |j                  «       D ]  \  }}	| j                  |	|||› |› �¬«       Œ  y )Nú.F)Úrecurse)r%   )Ú_is_fully_shardedÚ_ROOT_MODULE_PREFIXÚnamed_parametersr   Úappendr   Únamed_childrenÚ_collect_params)
r   r   r#   r$   r%   Úrecurse_prefixÚnÚpÚnameÚchild_modules
             r!   r.   z_ReplicateState._collect_params"   sÞ   € ô ˜VÔ$Øð �_Ñ$Øð #Ô&9Ò9ˆvˆh�a‰LÔ?Rð 	ð ×+Ñ+°EÐ+Ó:ò 	A‰DˆAˆqØ˜Ò&Ø× Ñ ×'Ñ'¨Ô*Ø×!Ñ!×(Ñ(¨NÐ+;¸A¸3Ð)?Õ@ð	Að
 #)×"7Ñ"7Ó"9ò 	ÑˆD�,Ø× Ñ ØØØØ(Ð)¨$¨Ð0ð	 !õ ñ	r"   c                 óP   ‡ — t        j                  d¬«      ˆ fd„«       } |«        y )NT)Ú	recursivec                  óª   •— ‰ j                   €J ‚ ‰ j                  ‰ j                   i ‰ j                  ¤Ž ‰ j                  «        d‰ _         i ‰ _        y )N© )r   Úinitr   Úregister_comm_hook)r   s   €r!   Ú
_lazy_initz-_ReplicateState.lazy_init.<locals>._lazy_initC   sK   ø€ à—?‘?Ð.Ð.Ð.ØˆD�I‰I�t—‘Ð<¨$×*;Ñ*;Ò<Ø×#Ñ#Ô%Ø ˆDŒOØ "ˆDÕr"   )ÚtorchÚ_disable_dynamo)r   r:   s   ` r!   Ú	lazy_initz_ReplicateState.lazy_initB   s'   ø€ Ü	×	Ñ	¨Ô	.ó	#ó 
/ð	#ñ 	�r"   c                 óÄ  — | j                   ry d| _         || _        |D ��ch c]  }|j                  «       D ]  }|’Œ Œ }}}|j                  «       D ]-  }t	        |«      sŒ|j                  |j                  «       «       Œ/ ddlm}  |||¬«       | j                  |||«       d|v rV|d   �;|d   }	t        |	t        j                  «      r|	j                  dk(  rd |d<   n|	g|d<   nd |d<   |j                  d«       t        | j                  fi |¤Ž| _        t#        j$                  | j                   «      t&        j)                  | j                  «      _        y c c}}w )NTr   )Ú_localize_dtensor)r$   Ú	device_idÚcpuÚ
device_ids)r   r   Ú
parametersÚmodulesr)   ÚupdateÚ%torch.distributed.tensor.parallel.ddpr?   r.   Ú
isinstancer;   ÚdeviceÚtypeÚpopr   r   Ú_ddpÚweakrefÚrefÚ	replicateÚstater   )
r   r   r#   ÚkwargsÚmr1   r$   Ú	submoduler?   r@   s
             r!   r8   z_ReplicateState.initM   s@  € ð ×ÒØà#ˆÔØˆŒØ%4×M ¸a¿l¹l»nÒM¸š!ÐM˜!ÐMˆÑMØŸ™Ó)ò 	>ˆIÜ  Õ+Ø×%Ñ% i×&:Ñ&:Ó&<Õ=ð	>õ 	Lá˜&°Õ@Ø×Ñ˜V _°nÔEà˜&Ñ ð
 �kÑ"Ð.Ø" ;Ñ/�	ä˜i¬¯©Ô6¸9¿>¹>ÈUÒ;Rà+/�F˜<Ò(ð -6¨;�F˜<Ò(à'+��|Ñ$Ø�J‰J�{Ô#ä+¨D×,<Ñ,<ÑGÀÑGˆŒ	ä4;·K±KÀÇ	Á	Ó4JŒ	�‰˜Ÿ™Ó$Õ1ùó; Ns   ¡Ec                 ó˜   — | j                   D ]!  \  }} | j                  j                  |i |¤Ž Œ# | j                   j                  «        y ©N)r   rK   r9   Úclear)r   Ú	comm_argsÚcomm_kwargss      r!   r9   z"_ReplicateState.register_comm_hookw   sI   € Ø&*×&:Ñ&:ò 	DÑ"ˆI�{Ø(ˆD�I‰I×(Ñ(¨)ÐC°{ÓCð	Dà×Ñ×"Ñ"Õ$r"   c                 ó    — || _         || _        y rT   )r   r   ©r   ÚargsrP   s      r!   Úrecord_init_argsz _ReplicateState.record_init_args|   s   € ØˆŒØ"ˆÕr"   rZ   .rP   c                 óÂ   — | j                   s| j                  r| j                  «        | j                   | j                  _         | j                  j                  |i |¤ŽS rT   )r   r   r=   r   rK   Úrequire_backward_grad_syncÚ_pre_forward)r   r   rZ   rP   s       r!   Úforward_pre_hookz _ReplicateState.forward_pre_hook€   sL   € ð �?Š?˜d×/Ò/Ø�N‰NÔØ37·=±=Ð/@ˆ�	‰	Ô,Ø%ˆt�y‰y×%Ñ% tÐ6¨vÑ6Ð6r"   ÚinputÚoutputc                 ó8   — | j                   j                  |«      S rT   )rK   Ú_post_forward)r   r   r`   ra   s       r!   Úforward_post_hookz!_ReplicateState.forward_post_hookˆ   s   € ð �y‰y×&Ñ& vÓ.Ð.r"   ©r   N)Ú__name__Ú
__module__Ú__qualname__rL   rM   Ú__annotations__r   r*   r   ÚModuleÚsetÚ	ParameterÚstrr.   r=   r8   r9   r[   Útupler   Údictr_   r;   ÚTensorrd   Ú__classcell__)r    s   @r!   r   r      s  ø… Ø—+‘+Óõ-ð& *ñà—	‘	ðð ˜RŸY™Y™ðð ˜BŸL™LÑ)ð	ð
 ðð 
óó@	ð(Kà—	‘	ð(Kð ˜RŸY™Y™ð(Kð
 
ó(KóT%ó
#ð7Ø—i‘ið7Ø',¨S°#¨X¡ð7Ø@DÀSÈ#ÀXÁð7à	ó7ð/à—	‘	ð/ð �U—\‘\Ñ"ð/ð —‘ð	/ð
 
�‰÷/r"   r   rZ   rP   r   c                  ó   — t        d«      ‚)NzGDDP does not support deepcopy. Please use state dict for serialization.)ÚAssertionError)rZ   rP   s     r!   Úunimplemented_deepcopyrt   ‘   s   € Ü
ØQóð r"   c                   ó*   — e Zd Zd„ Zdeddfd„Zdd„Zy)ÚDDPc                 óL   — | j                   d   } |j                  |g|¢­i |¤ŽS )z¡
        Override ``__new__`` to remove the DDP class and directly construct
        the original class for cases like indexing into a container module.
        é   )Ú__mro__Ú__new__)ÚclsrZ   rP   Úorig_clss       r!   rz   zDDP.__new__™   s.   € ð —;‘;˜q‘>ˆØˆx×Ñ Ð:¨4Ò:°6Ñ:Ð:r"   Úrequires_gradient_syncr   Nc                 ó:   — | t         j                  | «      _        y)a  
        Sets if the module should sync gradients. This can be used to implement
        gradient accumulation without communication.

        Args:
            requires_gradient_sync (bool): Whether to reduce gradients for the
                module's parameters.
        N)rN   rO   r   )r   r}   s     r!   Úset_requires_gradient_synczDDP.set_requires_gradient_sync£   s   € ð .DÐ)CŒ	�‰˜ÓÕ&r"   c                 ód   — t         j                  | «      j                  j                  ||f«       y rT   )rN   rO   r   r,   rY   s      r!   r9   zDDP.register_comm_hook®   s#   € Ü�‰˜Ó×-Ñ-×4Ñ4°d¸F°^ÕDr"   re   )rf   rg   rh   rz   Úboolr   r9   r7   r"   r!   rv   rv   ˜   s#   „ ò;ð	DÀð 	DÈ$ó 	DôEr"   rv   )Ú	state_clsr   r#   c                 óþ  — t         j                  j                  d«       d|v r=t        |d   t        t         j
                  f«      st        dt        |d   «      › �«      ‚t        | «      rt        d«      ‚|€i }nt        |«      }t        j                  | «      }| j                  |j                  d¬«       |j                  dd«      }|�Fd	d
lm} |j#                  |«      }||k7  r*d	dlm}m} | j                  |«       | j+                  |«       | j+                  |j,                  «        |j.                  | |fi |¤Ž | j0                  }	dt2        i}
t        d|	j4                  › �t6        |	f|
«      }|| _        | S )zðReplicates a module

    Args:
        module (torch.nn.Module): module to replicate

    Example::
        >>> # xdoctest: +REQUIRES(module:torch._C._distributed_c10d)
        >>> module = nn.Linear(3, 3)
        >>> replicate(module)
    ztorch.distributed.replicater@   z6Expected device_id to be int or torch.device, but got zGCannot apply `replicate()` on a Module already managed by `fully_shard`NT)Úwith_kwargsÚdevice_meshr   )Ú_mesh_resources)r?   Ú_reconstruct_dtensorÚ__deepcopy__rv   )r;   Ú_CÚ_log_api_usage_oncerG   ÚintrH   ÚRuntimeErrorrI   r)   rk   rN   rO   Úregister_forward_pre_hookr_   ÚgetÚtorch.distributed.device_meshr†   Úget_root_meshrF   r?   r‡   Úregister_forward_hookrd   r[   r    rt   rf   rv   )r   r#   rP   rO   r…   r†   Ú	root_meshr?   r‡   r{   ÚdctÚnew_clss               r!   rN   rN   ²   s}  € ô  
‡H�H× Ñ Ð!>Ô?ð �fÑÜ˜& Ñ-´´U·\±\Ð/BÔCÜðÜ  {Ñ 3Ó4Ð5ð7óð ô
 ˜Ô ÜØUó
ð 	
ð ÐØ‰ä˜oÓ.ˆä�O‰O˜FÓ#€EØ
×$Ñ$ U×%;Ñ%;ÈÐ$ÔNØ—*‘*˜]¨DÓ1€KØÐÝAà#×1Ñ1°+Ó>ˆ	ð ˜Ò#÷ð
 ×,Ñ,Ð-AÔBØ×(Ñ(Ð):Ô;à
× Ñ  ×!8Ñ!8Ô9à€E×Ñ˜6 ?Ñ=°fÒ=ð ×
Ñ
€CØÔ1Ð
2€CÜ�S˜Ÿ™˜Ð'¬#¨s¨°SÓ9€GØ€FÔØ€Mr"   c                 ó&   — t        | «      }|€yd|v S )z+Check if module is marked with fully_shard.FÚfully_shard)r
   )r   Úregistrys     r!   r)   r)   û   s    € ä˜VÓ$€HØÐØØ˜HÐ$Ð$r"   rT   )rL   Úcollections.abcr   Útypingr   r   r   r;   Útorch.nnr   Ú#torch.distributed._composable_stater   Útorch.nn.parallelr   r   r
   r*   r   rt   rv   rj   rN   r�   r)   r7   r"   r!   ú<module>r�      sÍ   ðã Ý $ß *Ñ *ã Ý Ý 6Ý 5ç -ð Ð ô}/�fô }/ð@ #ð °ð ¸ó ÷Eñ Eñ4 
�OÔ$ð <@ñEØ�I‰IðEà˜h u§x¡x§¡Ñ7Ñ8ðEð ‡Y�Yò	Eó %ðEðP%˜bŸi™ið %¨Dô %r"   