CoolFace
Apppublic

xdecoder/Instruct-X-Decoder

sourceHugging Faceafl-3.0updated 3y agoView on Hugging Face
163likes
distributed.cpython-38.pyc54 linesDownload Raw Back to __pycache__
1U

2E$�c��@szddlZddlZddlZddlZddlmZdd�Zdd�Zdd�Z	dd	�Z3d4d�Zdd
�Zddd�Z
dd�Zdd�ZdS)�NcCs�|�dd�otj��|d<dtjkr^d|d<d|d<d|d<d	|d5<d	|d<d|d
<d|d<nHttjd�|d<ttjd�|d<ttjd�|d6<ttjd�|d<|ds�|ddks�td��t�d�|d<n$tj�	|d�t�d|d�|d<|S)N�CUDAT�OMPI_COMM_WORLD_SIZEzno MPIZenv_info��7world_size�8local_sizer�rankZ9local_rankz	127.0.0.1Zmaster_addressZ8673�master_portZOMPI_COMM_WORLD_LOCAL_SIZE�OMPI_COMM_WORLD_RANKZOMPI_COMM_WORLD_LOCAL_RANKz[multi-GPU training without CUDA is not supported since we use NCCL as communication backend�cpu�device�cuda)10�get�torchr�is_available�os�environ�int�AssertionErrorr�11set_device)�opt�r�*/data/arXiv/demo/Demo/utils/distributed.py�init_distributeds&1213rcCs$d}dtjkrttjd�}|dkS)Nrrr	)rrr�rrrr�is_main_process%s14rcCs t��sdSt��sdSt��S)Nr)�distr�is_initialized�get_world_sizerrrrr,s15rcCs t��sdSt��sdSt��S)Nr)rrr�get_rankrrrrr3s16rcsTt��sdSt��sdSt��}t���|dkr4dS�fdd�}|d�|d�dS)zj17    Helper function to synchronize (barrier) among all processes when18    using distributed training19    NrcsN�|krtjddd�}ntjddd�}t�||�|��dkrJt�d�q2dS)Nrr�rr)r�tensorr�	broadcast�item�time�sleep)�rr rrr�_send_and_waitIsz#synchronize.<locals>._send_and_waitr)rrrrr)rr&rrr�synchronize;s	r'c
Cs.t�}|dkr|gSt�|�}tj�|�}t�|��d�}t�|�	�g��d�}dd�t20|�D�}t�||�dd�|D�}t
|�}g}|D]}	|�tj|fd��d��q�||kr�tj||fd��d�}21tj||22fdd�}t�||�g}t||�D]0\}}|������d	|�}|�t�|��q�|S)23z�24    Run all_gather on arbitrary picklable data (not necessarily tensors)25    Args:26        data: any picklable object27    Returns:28        list[data]: list of data gathered from each rank29    rrcSsg|]}t�dg��d��qS)rr)r�	IntTensor�to)�.0�_rrr�30<listcomp>jszall_gather.<locals>.<listcomp>cSsg|]}t|����qSr)rr")r*�sizerrrr,ls)r-r��dimN)r�pickle�dumpsr�ByteStorage�from_buffer�31ByteTensorr)r(�numel�ranger�32all_gather�max�append�cat�zipr33�numpy�tobytes�loads)
�datar�buffer�storager r�	size_list�max_size�tensor_listr+�padding�	data_listr-rrrr7Ws.34r7Tc	Cs�t�}|dkr|St����g}g}t|���D]}|�|�|�||�q0tj|dd�}tj|dd�t�	�dkr�|r�||}dd�t35||�D�}W5QRX|S)a;36    Args:37        input_dict (dict): all the values will be reduced38        average (bool): whether to do average or sum39    Reduce the values in the dictionary from all processes so that process with rank40    0 has the averaged results. Returns a dict with the same fields as41    input_dict, after reduction.42    �rr.)�dstcSsi|]\}}||�qSrr)r*�k�vrrr�43<dictcomp>�szreduce_dict.<locals>.<dictcomp>)rr�no_grad�sorted�keysr9�stackr�reducerr;)�44input_dict�averager�names�valuesrI�reduced_dictrrr�reduce_dict�s	4546rVcCs�tj��s|St��}|dkr4tj|dgdd�}ntj|dgdd�}tj�|d�|����ddkrvt	�47d�qV|������dd�S)Nrrrr�����)r�distributedrrrr r!r48r<r#r$�tolist)r?rZdata_tensorrrr�broadcast_data�s49rZcCs,t�dkr|S|��}tj|tjjd�|S)Nr)�op)r�cloner�50all_reduce�ReduceOp�SUM)r rrr�51reduce_sum�s5253r`)T)rr#rr0Ztorch.distributedrXrrrrrr'r7rVrZr`rrrr�<module>s+54