§
    Ÿ²ÅjgA  ã                   ó¨  — d dl Z d dlZd dlmZmZmZmZmZ d dlZd dl	m
Z ddlmZmZ ddlmZmZ g d¢Z e j        ddd	g¦  «        Zd
„ ZdZ ej        di ¬¦  «        aet2          _        t2          j        ret2          _        d„ Zd„ Zej        ej        fd„Z d„ Z!d„ Z"ej#        ddfd„Z$d„ Z%d„ Z&	 dd„Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z, ede$e,¦  «         dS )é    N)ÚcastÚDictÚListÚSetÚTupleé   )ÚapiÚ	constants)Ú_group_membership_managementÚ_update_group_membership)Úbackend_registeredÚregister_backendÚconstruct_rpc_backend_optionsÚinit_backendÚBackendValueÚBackendTyper   Ú%construct_rpc_backend_options_handlerÚinit_backend_handlerc                 ó   — d| j         z   S )NzBackendType.)Úname)Úselfs    úWC:\Projects\Historical\venv\Lib\site-packages\torch/distributed/rpc/backend_registry.pyÚ_backend_type_reprr      s   € Ø˜DœIÑ%Ð%ó    zï
    An enum class of available backends.

    PyTorch ships with a builtin ``BackendType.TENSORPIPE`` backend.
    Additional ones can be registered using the
    :func:`~torch.distributed.rpc.backend_registry.register_backend` function.
r   ©ÚvalueÚnamesc                 óB   — | t           j                             ¦   «         v S )zø
    Checks if backend_name is registered as an RPC backend.

    Args:
        backend_name (str): string to identify the RPC backend.
    Returns:
        True if the backend has been registered with ``register_backend``, else
        False.
    )r   Ú__members__Úkeys)Úbackend_names    r   r   r   3   s   € ð �;Ô2×7Ò7Ñ9Ô9Ð9Ð9r   c                 óF  — t          | ¦  «        rt          d| › d�¦  «        ‚d„ t          D ¦   «         }t          | t	          ||¬¦  «        ifi |¤Ž}t          j        d|¬¦  «        at          t          _        t          j	        rt          t          _	        t          |          S )aÐ  Registers a new RPC backend.

    Args:
        backend_name (str): backend string to identify the handler.
        construct_rpc_backend_options_handler (function):
            Handler that is invoked when
            rpc_backend.construct_rpc_backend_options(**dict) is called.
        init_backend_handler (function): Handler that is invoked when the
            `_init_rpc_backend()` function is called with a backend.
             This returns the agent.
    zRPC backend z: already registeredc                 ó(   — i | ]}|j         |j        “ŒS © )r   r   )Ú.0Úmembers     r   ú
<dictcomp>z$register_backend.<locals>.<dictcomp>R   s   € ÐNÐNÐN¸˜&œ+ v¤|ÐNÐNÐNr   )r   r   r   r   )r   ÚRuntimeErrorr   Údictr   ÚenumÚEnumr   Ú__repr__Ú__doc__Ú_backend_type_doc)r!   r   r   Úexisting_enum_dictÚextended_enum_dicts        r   r   r   @   s¾   € õ ˜,Ñ'Ô'ð NÝÐL¨,ÐLÐLÐLÑMÔMÐMàNÐNÅ+ÐNÑNÔNÐÝà�,Ø6[Ø%9ðñ ô ð	
ðð ð ðð Ðõ ”) -Ð7IÐJÑJÔJ€Kå-…KÔÝÔð 0Ý/�ÔÝ�|Ô$Ð$r   c                 ó*   —  | j         j        ||fi |¤ŽS ©N)r   r   )ÚbackendÚrpc_timeoutÚinit_methodÚkwargss       r   r   r   e   s/   € ð ?ˆ7Œ=Ô>Ø�[ðð Ø$*ðð ð r   c                 ó&   —  | j         j        |i |¤ŽS r2   )r   r   )r3   Úargsr6   s      r   r   r   p   s   € Ø-ˆ7Œ=Ô-¨tÐ>°vÐ>Ð>Ð>r   c                 óx  — t           j        }t          j        | |||¦  «        }|€
J d¦   «         ‚|dk    r?||                     ¦   «         k    r't          d|› d|                     ¦   «         › �¦  «        ‚|dk    r?||                     ¦   «         k    r't          d|› d|                     ¦   «         › �¦  «        ‚|S )Nz*Failed to initialize default ProcessGroup.éÿÿÿÿzrank argument z doesn't match pg rank zworld_size argument z doesn't match pg size )Úrpc_constantsÚDEFAULT_PROCESS_GROUP_TIMEOUTÚdistÚProcessGroupGlooÚrankr(   Úsize)Ústorer?   Ú
world_sizeÚprocess_group_timeoutÚgroups        r   Ú_init_process_grouprE   t   sÌ   € å)ÔGÐõ Ô! %¨¨zÐ;PÑQÔQ€EàÐÐÐJÑÔÐà�Š
ˆ
˜ §¢¡¤Ò-Ð-ÝÐW¨DÐWÐWÈÏÊÉÌÐWÐWÑXÔXÐXØ�bÒÐ˜z¨U¯ZªZ©\¬\Ò9Ð9ÝØT :ÐTÐTÀeÇjÂjÁlÄlÐTÐTñ
ô 
ð 	
ð €Lr   c                 ó.   — ddl m}  || ||||¬¦  «        S )Nr   )ÚTensorPipeRpcBackendOptions)r4   r5   Únum_worker_threadsÚ_transportsÚ	_channels)Ú rG   )r4   r5   rH   rI   rJ   r6   rG   s          r   Ú1_tensorpipe_construct_rpc_backend_options_handlerrL   ‡   s?   € ð .Ð-Ð-Ð-Ð-Ð-à&Ð&ØØØ-ØØðñ ô ð r   c                 ó:   ‡— t          ˆfd„| D ¦   «         ¦  «        S )Nc              3   ón   •K  — | ]/}|j         d k    p|j         dk    od|j        cxk    o‰k     nc V — Œ0dS )ÚcpuÚcudar   N)ÚtypeÚindex)r%   ÚdÚdevice_counts     €r   ú	<genexpr>z/_tensorpipe_validate_devices.<locals>.<genexpr>›   sl   øè è € ð ð àð 	
Œ�%ŠÐM˜AœF fÒ,ÐL°°a´gÐ1LÐ1LÒ1LÐ1LÀÒ1LÐ1LÐ1LÐ1Lðð ð ð ð ð r   )Úall)ÚdevicesrT   s    `r   Ú_tensorpipe_validate_devicesrX   š   s;   ø€ Ýð ð ð ð àðñ ô ñ ô ð r   c                 ó\  — d„ t          |                     ¦   «         ¦  «        D ¦   «         }t          j        || |||f|¦  «         d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }	t	          ||||	¦  «         t          | ||¦  «        }
t          |||
¦  «        }|
|fS )Nc                 ó   — g | ]}d di g f‘Œ	S )rK   r   r$   )r%   Ú_s     r   ú
<listcomp>zB_tensorpipe_exchange_and_check_all_device_maps.<locals>.<listcomp>¨   s    € Ð6Ð6Ð6˜Qˆ"ˆa��RˆÐ6Ð6Ð6r   c                 ó   — g | ]	\  }}}}|‘Œ
S r$   r$   )r%   r   r[   s      r   r\   zB_tensorpipe_exchange_and_check_all_device_maps.<locals>.<listcomp>¬   s    € Ð4Ð4Ð4™-˜$  1 a�Ð4Ð4Ð4r   c                 ó   — i | ]
\  }}}}||“ŒS r$   r$   )r%   r   Úcountr[   s       r   r'   zB_tensorpipe_exchange_and_check_all_device_maps.<locals>.<dictcomp>­   s#   € ÐGÐGÐGÑ):¨¨u°a¸˜˜uÐGÐGÐGr   c                 ó   — i | ]
\  }}}}||“ŒS r$   r$   )r%   r   r[   Úmap_s       r   r'   zB_tensorpipe_exchange_and_check_all_device_maps.<locals>.<dictcomp>®   s#   € ÐCÐCÐCÑ&6 d¨A¨t°Q�t˜TÐCÐCÐCr   c                 ó   — i | ]
\  }}}}||“ŒS r$   r$   )r%   r   r[   rW   s       r   r'   zB_tensorpipe_exchange_and_check_all_device_maps.<locals>.<dictcomp>¯   s#   € ÐEÐEÐEÑ%8 T¨1¨a°�4˜ÐEÐEÐEr   )Úranger@   r=   Úall_gather_objectÚ_validate_device_mapsÚ_create_reverse_mappingÚ_create_device_list)Úmy_nameÚmy_device_countÚmy_device_mapsÚ
my_devicesrD   ÚgatheredÚ	all_namesÚall_device_countsÚall_device_mapsÚall_devicesÚreverse_device_mapss              r   Ú._tensorpipe_exchange_and_check_all_device_mapsrr   £   sæ   € ð
 	7Ð6¥%¨¯
ª
©¬Ñ"5Ô"5Ð6Ñ6Ô6ð õ 	ÔØ�7˜O¨^¸ZÐHÈ%ñô ð ð 5Ð4¨8Ð4Ñ4Ô4€IØGÐG¸hÐGÑGÔGÐØCÐC¸(ÐCÑCÔC€OØEÐE¸HÐEÑEÔE€Kå˜)Ð%6¸ÈÑUÔUÐUõ 2°'¸9ÀoÑVÔVÐÝ$ Z°ÐATÑUÔU€JØ 
Ð*Ð*r   Tc                 ó¾  — | D ]€}||         }t          t          |¦  «        ¦  «        t          |¦  «        k    rt          d|› d|› �¦  «        ‚t          |||         ¦  «        st          d|› d|› d||         › �¦  «        ‚Œ�| D �]U}|rjt          ||                              ¦   «         ¦  «                             | ¦  «        s0t          d|› d||                              ¦   «         › d| › �¦  «        ‚||                              ¦   «         D �]Ê\  }}	t          t          |	                     ¦   «         ¦  «        ¦  «        t          |	¦  «        k    rt          d|› d|› d|	› �¦  «        ‚||         r\t          |	                     ¦   «         ¦  «                             ||         ¦  «        s!t          d|› d	|› d|	› d
||         › �¦  «        ‚nIt          |	                     ¦   «         ||         ¦  «        s!t          d|› d|› d|	› d||         › �¦  «        ‚|                     |g ¦  «        r]t          |	                     ¦   «         ¦  «                             ||         ¦  «        s!t          d|› d|› d|	› d
||         › �¦  «        ‚�Œ}||v rIt          |	                     ¦   «         ||         ¦  «        s!t          d|› d|› d|	› d||         › �¦  «        ‚�ŒÌ�ŒWd S )NzNode z" has duplicated devices
devices = z, has devices with invalid indices
devices = z
device count = z@ has invalid target node names in its device maps
device maps = z
node names = z5 has duplicated target devices in its device map for z
device map = z5 has unexpected source devices in its device map for z
devices = z? has source devices with invalid indices in its device map for z5 has unexpected target devices in its device map for z? has target devices with invalid indices in its device map for )	ÚlenÚsetÚ
ValueErrorrX   r    ÚissubsetÚitemsÚvaluesÚget)
rm   rn   ro   rp   Úis_static_groupÚnoderW   Úsource_nodeÚtarget_nodera   s
             r   re   re   ¹   sG  € ð ð ð ˆØ˜dÔ#ˆÝ�s�7‰|Œ|ÑÔ¥ G¡¤Ò,Ð,ÝØN˜ÐNÐNÀWÐNÐNñô ð õ ,¨GÐ5FÀtÔ5LÑMÔMð 	Ýð<˜ð <ð <Ø$ð<ð <à"3°DÔ"9ð<ð <ñô ð ð	ð !ð 2ñ 2ˆàð 	¥3 °{Ô'C×'HÒ'HÑ'JÔ'JÑ#KÔ#K×#TÒ#TØñ$
ô $
ð 	õ ð,˜ð ,ð ,Ø!0°Ô!=×!BÒ!BÑ!DÔ!Dð,ð ,à )ð,ð ,ñô ð ð
 "1°Ô!=×!CÒ!CÑ!EÔ!Eð (	ñ (	ÑˆK˜Ý•3�t—{’{‘}”}Ñ%Ô%Ñ&Ô&­#¨d©)¬)Ò3Ð3Ý ð+˜Kð +ð +Ø-8ð+ð +à$(ð+ð +ñô ð ð
 ˜;Ô'ð Ý˜4Ÿ9š9™;œ;Ñ'Ô'×0Ò0°¸[Ô1IÑJÔJð Ý$ð@ ð @ð @Ø1<ð@ð @à(,ð@ð @ð &1°Ô%=ð@ð @ñô ð ðõ 2Ø—	’	‘”Ð.¨{Ô;ñô ð õ !ðG˜Kð Gð GØ-8ðGð Gà$(ðGð Gð '8¸Ô&DðGð Gñô ð ð �Š˜{¨BÑ/Ô/ð Ý˜4Ÿ;š;™=œ=Ñ)Ô)×2Ò2°;¸{Ô3KÑLÔLð Ý$ð@ ð @ð @Ø1<ð@ð @à(,ð@ð @ð &1°Ô%=ð@ð @ñô ð ñð Ð 1Ð1Ð1Õ:VØ—’‘”Ð0°Ô=ñ;ô ;Ð1õ !ðG˜Kð Gð GØ-8ðGð Gà$(ðGð Gð '8¸Ô&DðGð Gñô ð ùñG(	ð2ð 2r   c                 ó®  — | sÀt          ¦   «         }|                     ¦   «         D ])}|                     |                     ¦   «         ¦  «         Œ*|                     ¦   «         D ])}|                     |                     ¦   «         ¦  «         Œ*|                     t          j        d¦  «        ¦  «         t          |¦  «        } t          | d„ ¬¦  «        } | S )NrO   c                 ó   — | j         S r2   )rR   )rS   s    r   ú<lambda>z%_create_device_list.<locals>.<lambda>  s   € °!´'€ r   )Úkey)	ru   ry   Úupdater    ÚdiscardÚtorchÚdeviceÚlistÚsorted)rk   rj   rq   Údevices_setra   s        r   rg   rg   þ   sÎ   € Øð 'Ý),©¬ˆØ"×)Ò)Ñ+Ô+ð 	,ð 	,ˆDØ×Ò˜tŸyšy™{œ{Ñ+Ô+Ð+Ð+Ø'×.Ò.Ñ0Ô0ð 	,ð 	,ˆDØ×Ò˜tŸyšy™{œ{Ñ+Ô+Ð+Ð+Ø×Ò�EœL¨Ñ/Ô/Ñ0Ô0Ð0Ý˜+Ñ&Ô&ˆ
Ý˜
Ð(9Ð(9Ð:Ñ:Ô:€JØÐr   c                 ó‚   — i }|D ]9}| ||         v r-d„ ||         |                                ¦   «         D ¦   «         ||<   Œ:|S )Nc                 ó   — i | ]\  }}||“Œ	S r$   r$   )r%   ÚkÚvs      r   r'   z+_create_reverse_mapping.<locals>.<dictcomp>  s+   € ð )ð )ð )Ù˜˜A��1ð)ð )ð )r   )rx   )rh   rm   ro   rq   r|   s        r   rf   rf     sj   € ØGIÐØð ð ˆØ�o dÔ+Ð+Ð+ð)ð )Ø!0°Ô!6°wÔ!?×!EÒ!EÑ!GÔ!Gð)ñ )ô )Ð Ñ%øð Ðr   c                  óX  — ddl m}  t          | t          j        ¦   «         ¦  «        }|                     ¦   «         }t          j                             ¦   «         }t          j         	                    ¦   «         r%|j
        rt          j                             ¦   «          ||j        |j
        fS )Nr   ©ÚTensorPipeAgent)rK   r�   r   r	   Ú_get_current_rpc_agentÚ_get_backend_optionsr…   rP   rT   Úis_availablerW   ÚinitÚdevice_maps)r�   ÚagentÚoptsrT   s       r   Ú_get_device_infosr˜     s“   € Ø!Ð!Ð!Ð!Ð!Ð!å�¥#Ô"<Ñ">Ô">Ñ?Ô?€EØ×%Ò%Ñ'Ô'€DÝ”:×*Ò*Ñ,Ô,€LÝ„z×ÒÑ Ô ð  T¤\ð ÝŒ
�ŠÑÔÐØ˜Ô)¨4¬<Ð7Ð7r   c           	      ó°  — ddl m} t          || ¦  «        } |                      ¦   «         }|j        }|                      ¦   «         }i i i g f\  }}}}|D ]’}	|	j        }
|
|k    rt          j        |
t          ¦  «        \  }}}n@|  	                    ¦   «         }t          j                             ¦   «         |j        |j        }}}|||
<   |||
<   |||
<   |                     |
¦  «         Œ“t!          ||||d¬¦  «         t#          |||¦  «        }|D ]H}
t%          ||
         ||
         |¦  «        ||
<   t          j        |
t&          |||
         |df¬¦  «         ŒId S )Nr   r�   F)r{   T)r8   )rK   r�   r   Úget_worker_infor   Úget_worker_infosr	   Úrpc_syncr˜   r’   r…   rP   rT   r•   rW   Úappendre   rf   rg   r   )r–   r�   Úmy_worker_inforh   Úall_worker_infosrn   ro   rp   rm   Úworker_infoÚworker_namerT   Ú
device_maprW   r—   rq   s                   r   Ú#_set_devices_and_reverse_device_mapr£      sÍ  € Ø!Ð!Ð!Ð!Ð!Ð!å� %Ñ(Ô(€Eð ×*Ò*Ñ,Ô,€NØÔ!€GØ×-Ò-Ñ/Ô/ÐàACÀRÈÈRÀÑ>Ð�¨°YØ'ð &ð &ˆØ!Ô&ˆØ˜'Ò!Ð!å03´ØÕ.ñ1ô 1Ñ-ˆL˜* g gð ×-Ò-Ñ/Ô/ˆDå”
×'Ò'Ñ)Ô)ØÔ Ø”ð '.˜*ˆLð
 *6Ð˜+Ñ&Ø'1ˆ˜Ñ$Ø#*ˆ�KÑ Ø×Ò˜Ñ%Ô%Ð%Ð%åØØØØØðñ ô ð õ 2°'¸9ÀoÑVÔVÐð !ð 	
ð 	
ˆå#6Ø˜Ô$ o°kÔ&BÐDWñ$
ô $
ˆ�KÑ õ 	ŒØÝ$Ø  +¨kÔ":Ð<OÐQUÐVð	
ñ 	
ô 	
ð 	
ð 	
ð	
ð 	
r   c           
      ó²  — ddl m}m} t          | t          j        ¦  «        st          d| › �¦  «        ‚t          ||¦  «        st          d|› �¦  «        ‚t          j         	                    ¦   «         }|rdnd}|r×t          | ||¦  «        }	t          |||j        |j        |	¦  «        \  }
}t          j                             ¦   «         r |rt          j                             ¦   «           || |||||
|¦  «        }t!          j        |¦  «         t!          j        d |j        ¬¦  «         |	                     ¦   «                              ¦   «          |S t-          | |d¦  «        5   || ||||i g ¦  «        }t!          j        |¦  «         	 t/          |¦  «         n"# t0          $ r t!          j        ¦   «          ‚ w xY w|cd d d ¦  «         S # 1 swxY w Y   d S )Nr   )r�   rG   z`store` must be a c10d::Store. z?`rpc_backend_options` must be a `TensorPipeRpcBackendOptions`. TF)Útimeout)rK   r�   rG   Ú
isinstancer=   ÚStoreÚ	TypeErrorr…   rP   rT   rE   rr   r•   rW   r“   r”   r	   Ú_init_rpc_statesÚ_all_gatherr4   ÚbarrierÚwaitr   r£   Ú	ExceptionÚshutdown)rA   r   r?   rB   Úrpc_backend_optionsr�   rG   rT   r{   rD   rq   rW   r–   s                r   Ú _tensorpipe_init_backend_handlerr°   T  s†  € ð ?Ð>Ð>Ð>Ð>Ð>Ð>Ð>å�e�TœZÑ(Ô(ð CÝÐA¸%ÐAÐAÑBÔBÐBåÐ)Ð+FÑGÔGð 
ÝØcÐNaÐcÐcñ
ô 
ð 	
õ ”:×*Ò*Ñ,Ô,€Là(Ð3�d�d¨e€Oàð Dõ $ E¨4°Ñ<Ô<ˆå'UØØØÔ+ØÔ'Øñ(
ô (
Ñ$Ð˜Wõ Œ:×"Ò"Ñ$Ô$ð 	¨ð 	õ ŒJ�OŠOÑÔÐð  �ØØØØØØØñ
ô 
ˆõ 	Ô˜UÑ#Ô#Ð#õ 	Œ˜Ð&9Ô&EÐFÑFÔFÐFð 	�Š‰Œ×ÒÑÔÐàˆõ *¨%°°tÑ<Ô<ð 	ð 	ð $�OØØØØØ#ØØñô ˆEõ Ô  Ñ'Ô'Ð'ðõ 4°EÑ:Ô:Ð:Ð:øÝð ð ð Ý”‘”�Øðøøøð ð+	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s*   Å%&GÆFÆGÆF;Æ;GÇGÇGÚ
TENSORPIPE)T)-Úcollectionsr*   Útypingr   r   r   r   r   r…   Útorch.distributedÚdistributedr=   rK   r	   r
   r;   Ú_utilsr   r   Ú__all__Ú
namedtupler   r   r.   r+   r   r,   r-   r   r   ÚDEFAULT_RPC_TIMEOUT_SECÚDEFAULT_INIT_METHODr   r   rE   ÚDEFAULT_NUM_WORKER_THREADSrL   rX   rr   re   rg   rf   r˜   r£   r°   r$   r   r   ú<module>r¼      sG  ðð Ð Ð Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€Ø  Ð  Ð  Ð  Ð  Ð  à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð €ð &ˆ{Ô%ØÐ<Ð>TÐUñô €ð
&ð &ð &ðÐ ð ˆdŒi˜m°2Ð6Ñ6Ô6€à)…Ô åÔð ,Ø+…KÔð
:ð 
:ð 
:ð"%ð "%ð "%ðN Ô5ØÔ1ðð ð ð ð?ð ?ð ?ðð ð ð, %Ô?ØØðð ð ð ð&ð ð ð+ð +ð +ð. QUðBð Bð Bð BðJ
ð 
ð 
ðð ð ð8ð 8ð 8ð1
ð 1
ð 1
ðhUð Uð Uðp Ð ØØ5Ø$ñô ð ð ð r   