
    קg?                        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    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/distributed/rpc/backend_registry.py_backend_type_reprr      s    DI%%    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JK-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QEJ

--WDWWWWXXXbzUZZ\\99T:TTejjll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         	
%MAFf,Lag1L1L1L1L1L1L1L1L     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6Q"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-$1a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):ua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&6dAtQtT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%8T1a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  	7O^ZH%   548444IGGhGGGCC(CCCOEEHEEEK)%6UUU 2'9oVV$ZATUUJ
**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#s7||G,,NNNWNN   ,G5Ft5LMM 	< < <$< <"3D"9< <  	 ! 2 2 	3{'C'H'H'J'J#K#K#T#T$
 $
 	 , , ,!0!=!B!B!D!D, , ), ,  
 "1!=!C!C!E!E (	 (	K3t{{}}%%&&#d))33 +K + +-8+ +$(+ +  
 ;' 499;;''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                    | st                      }|                                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tyy{{++++'..00 	, 	,Dtyy{{++++EL//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  od+++) )!0!6w!?!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--//ACRR>Y' & &!&'!!03.1 1-L*gg --//D
''))  '.*L
 *6+&'1$#*K %%%%    2'9oVV ! 	
 	
#6$ok&BDW$
 $
K  	$ +k":<OQUV	
 	
 	
 	
 	
	
 	
r   c           
         ddl m}m} t          | t          j                  st          d|            t          ||          st          d|           t          j        	                                }|rdnd}|rt          | ||          }	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    ?>>>>>>>eTZ(( CA%AABBB)+FGG 
cNacc
 
 	
 :**,,L(3ddeO D $E4<<'U+'(
 (
$W :""$$ 	 	 JOO  
 
 	U### 	&9&EFFFF 	 *%t<< 	 	 $O# E  ''' 4E::::    +	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	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 
& & &  dim2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   