§
    ŠŠtj†$  ã                   óD  — d dl Z d dlmZ d dl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j        j                 dz  dej        fd„¦   «         Zdej        defd„ZdS )é    N)ÚIterable)ÚAnyÚNoReturn)Ú_State)ÚDistributedDataParallelé   )Ú_get_registryÚcontractÚ c                   óf  ‡ — 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 | _        d S )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/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributed/_composable/replicate.pyr   z_ReplicateState.__init__   sz   ø€ Ý‰Œ×ÒÑÔÐÝ!#Ô!1Ñ!3Ô!3ˆŒØ%*ˆÔÝ-/Ô-=Ñ-?Ô-?ˆÔð !œKˆÔØ')ˆÔØ#ˆŒØ26ˆŒØ,.ˆÔØ*,ˆÔÐÐó    r   Úignored_modulesÚignored_paramsÚprefixc                 ó€  — t          |¦  «        rd S ||v rd S |t          k    r|› d�nt          }|                     d¬¦  «        D ]A\  }}||vr8| j                             |¦  «         | j                             |› |› �¦  «         ŒB|                     ¦   «         D ]"\  }}	|                      |	|||› |› �¬¦  «         Œ#d S )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Ñ$Ô$ð 	ØˆFð �_Ð$Ð$ØˆFð #Õ&9Ò9Ð9ˆvˆLˆLˆLˆLÕ?Rð 	ð ×+Ò+°EÐ+Ñ:Ô:ð 	Að 	A‰DˆAˆqØ˜Ð&Ð&ØÔ ×'Ò'¨Ñ*Ô*Ð*ØÔ!×(Ò(¨NÐ)?¸AÐ)?Ð)?Ñ@Ô@Ð@øà"(×"7Ò"7Ñ"9Ô"9ð 	ð 	ÑˆD�,Ø× Ò ØØØØ(Ð0¨$Ð0Ð0ð	 !ñ ô ð ð ð	ð 	r!   c                 ó\   ‡ — t          j        d¬¦  «        ˆ fd„¦   «         } |¦   «          d S )NT)Ú	recursivec                  ó–   •— ‰ j         €t          ‚ ‰ j        ‰ j         i ‰ j        ¤Ž ‰                      ¦   «          d‰ _         i ‰ _        d S )N© )r   ÚAssertionErrorÚinitr   Úregister_comm_hook)r   s   €r    Ú
_lazy_initz-_ReplicateState.lazy_init.<locals>._lazy_initC   sT   ø€ àŒÐ&Ý$Ð$ØˆDŒI�t”Ð<¨$Ô*;Ð<Ð<Ð<Ø×#Ò#Ñ%Ô%Ð%Ø ˆDŒOØ "ˆDÔÐÐr!   )ÚtorchÚ_disable_dynamo)r   r:   s   ` r    Ú	lazy_initz_ReplicateState.lazy_initB   sF   ø€ Ý	Ô	¨Ð	.Ñ	.Ô	.ð	#ð 	#ð 	#ð 	#ñ 
/Ô	.ð	#ð 	ˆ
‰Œˆˆˆr!   c                 óž  — | j         rd S d| _         || _        d„ |D ¦   «         }|                     ¦   «         D ]8}t          |¦  «        r'|                     |                     ¦   «         ¦  «         Œ9ddlm}  |||¬¦  «         |                      |||¦  «         d|v r\|d         �:|d         }t          |t          j        ¦  «        r|j        dk    rd |d<   n|g|d<   nd |d<   |                     d¦  «         t          | j        fi |¤Ž| _        t#          j        | j        ¦  «        t&                               | j        ¦  «        _        d S )	NTc                 ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r6   )Ú
parameters)Ú.0Úmr0   s      r    ú	<setcomp>z'_ReplicateState.init.<locals>.<setcomp>Y   s-   € ÐMÐMÐM ¸a¿lºl¹n¼nÐMÐM¸˜!ÐMÐMÐMÐMr!   r   )Ú_localize_dtensor)r#   Ú	device_idÚcpuÚ
device_ids)r   r   Úmodulesr(   Úupdater@   Ú%torch.distributed.tensor.parallel.ddprD   r-   Ú
isinstancer;   ÚdeviceÚtypeÚpopr   r   Ú_ddpÚweakrefÚrefÚ	replicateÚstater   )r   r   r"   Úkwargsr#   Ú	submodulerD   rE   s           r    r8   z_ReplicateState.initN   s~  € ð Ôð 	ØˆFà#ˆÔØˆŒØMÐM _ÐMÑMÔMˆØŸšÑ)Ô)ð 	>ð 	>ˆIÝ  Ñ+Ô+ð >Ø×%Ò% i×&:Ò&:Ñ&<Ô&<Ñ=Ô=Ð=øØKÐKÐKÐKÐKÐKàÐ˜&°Ð@Ñ@Ô@Ð@Ø×Ò˜V _°nÑEÔEÐEà˜&Ð Ð ð
 �kÔ"Ð.Ø" ;Ô/�	å˜i­¬Ñ6Ô6ð 7¸9¼>ÈUÒ;RÐ;Rà+/�F˜<Ñ(Ð(ð -6¨;�F˜<Ñ(Ð(à'+��|Ñ$Ø�JŠJ�{Ñ#Ô#Ð#å+¨DÔ,<ÐGÐGÀÐGÐGˆŒ	å4;´KÀÄ	Ñ4JÔ4J�	�Š˜œÑ$Ô$Ô1Ð1Ð1r!   c                 óv   — | j         D ]\  }} | j        j        |i |¤Ž Œ| j                              ¦   «          d S ©N)r   rO   r9   Úclear)r   Ú	comm_argsÚcomm_kwargss      r    r9   z"_ReplicateState.register_comm_hookx   sS   € Ø&*Ô&:ð 	Dð 	DÑ"ˆI�{Ø(ˆDŒIÔ(¨)ÐC°{ÐCÐCÐCÐCØÔ×"Ò"Ñ$Ô$Ð$Ð$Ð$r!   c                 ó"   — || _         || _        d S rW   )r   r   ©r   ÚargsrT   s      r    Úrecord_init_argsz _ReplicateState.record_init_args}   s   € ØˆŒØ"ˆÔÐÐr!   r]   .rT   c                 ó°   — | j         s| j        r|                      ¦   «          | j         | j        _        | j        t          _         | j        j        |i |¤ŽS rW   )	r   r   r=   r   rO   Úrequire_backward_grad_syncr   Ú_active_ddp_moduleÚ_pre_forward)r   r   r]   rT   s       r    Úforward_pre_hookz _ReplicateState.forward_pre_hook�   s\   € ð Œ?ð 	˜dÔ/ð 	Ø�NŠNÑÔÐØ37´=Ð/@ˆŒ	Ô,Ø59´YÕÔ2Ø%ˆtŒyÔ% tÐ6¨vÐ6Ð6Ð6r!   ÚinputÚoutputc                 óN   — d t           _        | j                             |¦  «        S rW   )r   ra   rO   Ú_post_forward)r   r   rd   re   s       r    Úforward_post_hookz!_ReplicateState.forward_post_hookŠ   s#   € ð 6:ÕÔ2ØŒy×&Ò& vÑ.Ô.Ð.r!   ©r   N)Ú__name__Ú
__module__Ú__qualname__rP   rQ   Ú__annotations__r   r)   r   ÚModuleÚsetÚ	ParameterÚstrr-   r=   r8   r9   r^   Útupler   Údictrc   r;   ÚTensorrh   Ú__classcell__)r   s   @r    r   r      s´  ø€ € € € € € Ø”+ÐÐÑð-ð -ð -ð -ð -ð -ð& *ðð à”	ðð ˜RœYœðð ˜BœLÔ)ð	ð
 ðð 
ðð ð ð ð@
ð 
ð 
ð 
ð(Kà”	ð(Kð ˜RœYœð(Kð
 
ð(Kð (Kð (Kð (KðT%ð %ð %ð %ð
#ð #ð #ð #ð7Ø”ið7Ø',¨S°#¨X¤ð7Ø@DÀSÈ#ÀXÄð7à	ð7ð 7ð 7ð 7ð/à”	ð/ð �U”\Ô"ð/ð ”ð	/ð
 
Œð/ð /ð /ð /ð /ð /ð /ð /r!   r   r]   rT   r   c                  ó    — t          d¦  «        ‚)NzGDDP does not support deepcopy. Please use state dict for serialization.)r7   )r]   rT   s     r    Úunimplemented_deepcopyrw   ”   s   € Ý
ØQñô ð r!   c                   ó,   — e Zd Zd„ Zdeddfd„Zdd„ZdS )ÚDDPc                 ó>   — | j         d         } |j        |g|¢R 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__)Úclsr]   rT   Úorig_clss       r    r}   zDDP.__new__œ   s2   € ð ”;˜q”>ˆØˆxÔ Ð:¨4Ð:Ð:Ð:°6Ð:Ð:Ð:r!   Úrequires_gradient_syncr   Nc                 óF   — | t                                | ¦  «        _        dS )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)rR   rS   r   )r   r€   s     r    Úset_requires_gradient_synczDDP.set_requires_gradient_sync¦   s"   € ð .DÐ)C�	�Š˜ÑÔÔ&Ð&Ð&r!   c                 ón   — t                                | ¦  «        j                             ||f¦  «         d S rW   )rR   rS   r   r+   r\   s      r    r9   zDDP.register_comm_hook±   s/   € Ý�Š˜ÑÔÔ-×4Ò4°d¸F°^ÑDÔDÐDÐDÐDr!   ri   )rj   rk   rl   r}   Úboolr‚   r9   r6   r!   r    ry   ry   ›   se   € € € € € ð;ð ;ð ;ð	DÀð 	DÈ$ð 	Dð 	Dð 	Dð 	DðEð Eð Eð Eð Eð Er!   ry   )Ú	state_clsr   r"   c                 ó:  — t           j                             d¦  «         d|v rLt          |d         t          t           j        f¦  «        s%t          dt          |d         ¦  «        › �¦  «        ‚t          | ¦  «        rt          d¦  «        ‚|€i }nt          |¦  «        }t                               | ¦  «        }|                      |j        d¬¦  «         |                     d¦  «        }|�L|                     ¦   «         }||k    r2d	d
lm}m} |                      |¦  «         |                      |¦  «         |                      |j        ¦  «          |j        | |fi |¤Ž | j        }dt.          i}	t          d|j        › �t2          |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.replicaterE   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   )rD   Ú_reconstruct_dtensorÚ__deepcopy__ry   )r;   Ú_CÚ_log_api_usage_oncerK   ÚintrL   ÚRuntimeErrorrM   r(   ro   rR   rS   Úregister_forward_pre_hookrc   ÚgetÚ_get_root_meshrJ   rD   r‰   Úregister_forward_hookrh   r^   r   rw   rj   ry   )r   r"   rT   rS   rˆ   Ú	root_meshrD   r‰   r~   ÚdctÚnew_clss              r    rR   rR   µ   sæ  € õ  
„H× Ò Ð!>Ñ?Ô?Ð?ð �fÐÐÝ˜& Ô-µµU´\Ð/BÑCÔCð 	Ýð7Ý  {Ô 3Ñ4Ô4ð7ð 7ñô ð õ
 ˜Ñ Ô ð 
ÝØUñ
ô 
ð 	
ð ÐØˆˆå˜oÑ.Ô.ˆå�OŠO˜FÑ#Ô#€EØ
×$Ò$ UÔ%;ÈÐ$ÑNÔNÐNØ—*’*˜]Ñ+Ô+€KØÐØ×.Ò.Ñ0Ô0ˆ	ð ˜Ò#Ð#ðð ð ð ð ð ð ð ð
 ×,Ò,Ð-AÑBÔBÐBØ×(Ò(Ð):Ñ;Ô;Ð;à
× Ò  Ô!8Ñ9Ô9Ð9à€EÔ˜6 ?Ð=Ð=°fÐ=Ð=Ð=ð Ô
€CØÕ1Ð
2€CÝÐ'˜œÐ'Ð'­#¨s¨°SÑ9Ô9€GØ€FÔØ€Mr!   c                 ó0   — t          | ¦  «        }|€dS d|v S )z+Check if module is marked with fully_shard.NFÚfully_shard)r	   )r   Úregistrys     r    r(   r(   ü   s%   € å˜VÑ$Ô$€HØÐØˆuØ˜HÐ$Ð$r!   rW   )rP   Úcollections.abcr   Útypingr   r   r;   Útorch.nnr   Ú#torch.distributed._composable_stater   Útorch.nn.parallelr   r
   r	   r)   r   rw   ry   rn   rR   r„   r(   r6   r!   r    ú<module>rž      s¾  ðà €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à €€€Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð Ð ð@/ð @/ð @/ð @/ð @/�fñ @/ô @/ð @/ðF #ð °ð ¸ð ð ð ð ðEð Eð Eð Eð Eñ Eô Eð Eð4 
€�OÐ$Ñ$Ô$ð 9=ðCð CØŒIðCà˜eœhœoÔ.°Ñ5ðCð „Yð	Cð Cð Cñ %Ô$ðCðL%˜bœið %¨Dð %ð %ð %ð %ð %ð %r!   