U
    yh%                     @   s  U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlZd dlmZ eeZd ae ZdgZedddZe rej sede rd d	lmZ d d
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZB ddl@T d dlCZCd dlDm  mEZF ddlAmGZG ddlHmIZI ddlJmKZK eeeeLeLf ddf eMd< edddg7 Zee@j eAj ZdddZNdd ZOeGjPdddddfddZQe@jRdd ZSdS )    )	timedeltaN)	GeneratorTuple)urlparseis_available)returnc                   C   s   t tjdS )N	_rpc_init)hasattrtorch_C r   r   P/var/www/html/venv/lib/python3.8/site-packages/torch/distributed/rpc/__init__.pyr      s    z*Failed to initialize torch.distributed.rpc)Store)!_disable_jit_rref_pickle_enable_jit_rref_pickle'_disable_server_process_global_profiler&_enable_server_process_global_profiler_set_and_start_rpc_agent_reset_current_rpc_agent)_delete_all_user_and_unforked_owner_rrefs_destroy_rref_context_set_profiler_node_id_is_current_rpc_agent_set_rref_context_get_debug_info_cleanup_python_rpc_handler_invoke_rpc_builtin_invoke_rpc_python_udf_invoke_rpc_torchscript_invoke_remote_builtin_invoke_remote_python_udf_invoke_remote_torchscript_set_rpc_timeout_get_current_rpc_agentget_rpc_timeoutenable_gil_profilingRpcBackendOptions _TensorPipeRpcBackendOptionsBaseRpcAgentPyRRefTensorPipeAgentRemoteProfilerManager
WorkerInfo_DEFAULT_INIT_METHOD_DEFAULT_NUM_WORKER_THREADS_UNSET_RPC_TIMEOUT_DEFAULT_RPC_TIMEOUT_SEC   )apibackend_registry	functions)*)BackendType)TensorPipeRpcBackendOptions)_server_process_global_profilerendezvous_iteratorinit_rpcr5   r6   c              	   C   sZ  t jd |dk	r(t|tjs(td|dk	rBt|tsBtd|dkr|dk	rtD ] }t|tt	|rV|} qqVtd| |tj
krtdd|i |dkrtj
}|dkrt	|}|st||}n tj|j||datt\}}}|t|jd	 t$ ttd
t |}td7 aW 5 Q R X t| t| t||| ||| dS )ak  
        Initializes RPC primitives such as the local RPC agent
        and distributed autograd, which immediately makes the current
        process ready to send and receive RPCs.

        Args:
            name (str): a globally unique name of this node. (e.g.,
                ``Trainer3``, ``ParameterServer2``, ``Master``, ``Worker1``)
                Name can only contain number, alphabet, underscore, colon,
                and/or dash, and must be shorter than 128 characters.
            backend (BackendType, optional): The type of RPC backend
                implementation. Supported values is
                ``BackendType.TENSORPIPE`` (the default).
                See :ref:`rpc-backends` for more information.
            rank (int): a globally unique id/rank of this node.
            world_size (int): The number of workers in the group.
            rpc_backend_options (RpcBackendOptions, optional): The options
                passed to the RpcAgent constructor. It must be an agent-specific
                subclass of :class:`~torch.distributed.rpc.RpcBackendOptions`
                and contains agent-specific initialization configurations. By
                default, for all agents, it sets the default timeout to 60
                seconds and performs the rendezvous with an underlying process
                group initialized using ``init_method = "env://"``,
                meaning that environment variables ``MASTER_ADDR`` and
                ``MASTER_PORT`` need to be set properly. See
                :ref:`rpc-backends` for more information and find which options
                are available.
        ztorch.distributed.init_rpcNz0Argument backend must be a member of BackendTypezEArgument rpc_backend_options must be an instance of RpcBackendOptionsz$Could not infer backend for options zRPC was initialized with no explicit backend but with options corresponding to %(backend)s, hence that backend will be used instead of the default BackendType.TENSORPIPE. To silence this warning pass `backend=%(backend)s` explicitly.backend)rank
world_size)secondsZrpc_prefix_r0   )r
   r   Z_log_api_usage_once
isinstancer2   r5   	TypeErrorr%   typeZconstruct_rpc_backend_options
TENSORPIPEloggerwarningdistZ_create_store_from_optionsZ
rendezvousZinit_methodr8   nextZset_timeoutr   Zrpc_timeout_init_counter_lockZPrefixStorestr_init_counterdist_autograd_initr   _init_rpc_backend)namer;   r<   r=   rpc_backend_optionsZcandidate_backendstore_r   r   r   r9   T   sl    #
 
 
  
c           	      C   sj   | t j|tj|t|tj|tjtd f|ti}|	 D ]0\}}t
||s4td| d| dt| q4d S )Nz	Argument z must be of type z but got type )r2   r5   rE   r   rH   numbersIntegralrA   r%   itemsr?   RuntimeError)	r;   rO   rM   r<   r=   rN   Ztype_mappingargZarg_typer   r   r   _validate_rpc_args   s$          	
rV   c                 C   sD   t | ||||| t r tdtj| |||||d}t| d S )NzRPC is already initialized)rO   rM   r<   r=   rN   )rV   r   rT   r2   Zinit_backendr1   Z_init_rpc_states)r;   rO   rM   r<   r=   rN   Z	rpc_agentr   r   r   rL      s    		rL   c                  C   s*   t  } | t   | t  | S )N)r   updater1   r"   Zget_debug_inforJ   _get_debug_info)infor   r   r   rX      s    rX   )Nr:   NN)Tdatetimer   loggingos	threadingwarningstypingr   r   urllib.parser   r
   Ztorch.distributeddistributedrE   	getLogger__name__rC   rI   LockrG   __all__boolr   r   r   rT   Ztorch._C._distributed_c10dr   Ztorch._C._distributed_rpcr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/    r1   r2   r3   rQ   Ztorch.distributed.autogradZautogradrJ   r5   optionsr6   Zserver_process_global_profilerr7   int__annotations__r9   rV   rB   rL   Z_require_initializedrX   r   r   r   r   <module>   sX    
$    
w
