o
    پi                     @   s   U d dl 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	Z	d dl
mZ G dd dZdaee ed< dd	 Zd
efddZdS )    N)Path)AnyListOptional)MultiprocessingSerializerc                   @   sr   e Zd ZdededefddZdd Zdd	 Z	
ddej	de
ej	 defddZdede
e fddZdd ZdS )NaiveDistributedrank
world_size
rendezvousc                 C   sT   || _ || _d| _t|| _| jjddd d|  kr!|k s$J  J |   d S )Nr   T)parentsexist_ok)_rank_world_size_operation_indexr   
_directorymkdirbarrier)selfr   r	   r
    r   \/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/distributed/naive_distributed.py__init__   s   
zNaiveDistributed.__init__c                 C      | j S N)r   r   r   r   r   get_rank      zNaiveDistributed.get_rankc                 C   r   r   )r   r   r   r   r   get_world_size   r   zNaiveDistributed.get_world_sizer   tensorscatter_listsrcc                    s   | j  krt|| jksJ n|d u sJ | | j  kr*t fddt|D dnt }|  d | j  }| j  krH|d u sBJ || j  }nt|}|| | 	  d S )Nc                    s&   g | ]\}}| krd nt |qS r   )r   	serialize).0	item_rankitemr   r   r   
<listcomp>(   s    z,NaiveDistributed.scatter.<locals>.<listcomp>)serialized_scatter_listr&   )
r   lenr   all_gather_objectdict	enumerater   deserializecopy_r   )r   r   r   r   gathered_objectsremote_serialized_tensorremote_tensorr   r$   r   scatter   s.   





zNaiveDistributed.scatterobjreturnc                    sv    j d7  _ ddtffdd  jtt|d  dtf fddfd	d
t	j
D S )N   
interesting_rankc                    s    j d|  d j d S )Nr   _opz.txt)r   r   )r5   r   r   r   	_get_pathI   s   z5NaiveDistributed.all_gather_object.<locals>._get_pathzutf-8c                    sR    | }	 |  r#|  }r#ttj|d t  ddS t	d q)NT)validategMbP?)
exists	read_textendswithpickleloadspybase64	b64decoder'   timesleep)r5   ptext)r7   text_postfixr   r   	_read_oneS   s   
z5NaiveDistributed.all_gather_object.<locals>._read_onec                    s   g | ]} |qS r   r   )r!   r5   )rE   r   r   r%   \   s    z6NaiveDistributed.all_gather_object.<locals>.<listcomp>)r   intr   
write_textr>   	b64encoder<   dumpsdecoderanger   )r   r1   r   )r7   rE   r   rD   r   r(   D   s   

	z"NaiveDistributed.all_gather_objectc                 C   s0   |  | j}|tt| jksJ d|d S )Nzactual_objs=)r(   r   listrK   r   )r   actual_objsr   r   r   r   `   s   $zNaiveDistributed.barrierN)r   )__name__
__module____qualname__rF   strr   r   r   torchTensorr   r0   r   r(   r   r   r   r   r   r      s    
&r   	_instancec                   C   s   t d usJ t S r   rT   r   r   r   r   get_naive_distributedi   s   rV   instancec                 C   s   t d u sJ | a d S r   rU   )rW   r   r   r   set_naive_distributedn   s   rX   )r<   r@   pathlibr   typingr   r   r   r>   rR   sglang.srt.utilsr   r   rT   __annotations__rV   rX   r   r   r   r   <module>   s   
 Z