Ë
    @çi´  ã                   ó¨   — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
  ej                  e«      Z edd«      Zd„ Zd„ Zdd	„Zd
„ Zd„ Zd„ Zy)é    )Ú
namedtupleNé   )Úget_xpÚDistribSpecz5rank world_size local_rank node_rank num_nodes sourcec                  óÊ  — t        «       } | j                  dk(  rydt        j                  vr”dt        j                  v sJ d«       ‚t        j                  d   }t	        j
                  dj                  «       |gz   dd¬«      j                  j                  «       j                  «       }|d	   }|t        j                  d<   d
t        j                  vr}t        «       }|j                  }	 t        j                  «       }||j                  z  }t        j                   |«      }|j#                  dd«      }t%        |«      t        j                  d
<   dt        j                  vrst%        | j                  «      t        j                  d<   t%        | j&                  «      t        j                  d<   t%        | j(                  «      t        j                  d<   yy# t        $ r Y ŒÔw xY w)a  Calling this function will set the distributed environement
    including the master addr, master port etc. You shouldn't call
    this if you call `dora.distrib.init`, but it can be useful if you need to let
    some other framework handle the distributed initialization.
    r   NÚMASTER_ADDRÚSLURM_JOB_NODELISTzcase not handledzscontrol show hostnamesT)Úcapture_outputÚcheckr   ÚMASTER_PORTi N  i`ê  Ú
WORLD_SIZEÚRANKÚ
LOCAL_RANK)Úget_distrib_specÚ
world_sizeÚosÚenvironÚspÚrunÚsplitÚstdoutÚdecoder   ÚsigÚsubmititÚJobEnvironmentÚjob_idÚRuntimeErrorÚrandomÚRandomÚrandintÚstrÚrankÚ
local_rank)	ÚspecÚnodelistÚnodesÚmaster_nodeÚxpÚseedÚenvÚrngÚmaster_ports	            úa/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/dora/distrib.pyÚset_distrib_envr.      sz  € ô Ó€DØ‡�˜!ÒØØœBŸJ™JÑ&Ø#¤r§z¡zÑ1ÐEÐ3EÓEÐ1Ü—:‘:Ð2Ñ3ˆÜ—‘Ð0×6Ñ6Ó8¸H¸:ÑEØ&*°$ô8ß8>¹¿v¹v»xÏÉËð 	à˜A‘hˆØ$/Œ�
‰
�=Ñ!ØœBŸJ™JÑ&Ü‹Xˆð �v‰vˆð	Ü×)Ñ)Ó+ˆCð �C—J‘JÑˆDÜ�m‰m˜DÓ!ˆØ—k‘k %¨Ó/ˆÜ$'¨Ó$4Œ�
‰
�=Ñ!Øœ2Ÿ:™:Ñ%Ü#& t§¡Ó#7Œ�
‰
�<Ñ Ü  §¡›^Œ�
‰
�6ÑÜ#& t§¡Ó#7Œ�
‰
�<Ò ð &øô ò 	Ùð	ús   Ã*G Ç	G"Ç!G"c                  ó  — dt         j                  v rpt        t         j                  d   «      } t        t         j                  d   «      }dt         j                  v rt        t         j                  d   «      }n| }d}d}d}nS	 t        j                  «       }|j
                  } |j                  }|j                  }|j                  }|j                  }d}t        | |||||«      S # t        $ r d} d}d}d}d}d}Y Œ'w xY w)	zÉReturn information on the distributed setup, i.e. world size, rank etc.
    This can be used even before distributed training is initialized, which is useful for
    PytorchLightning for instance.
    r   r   r   r   r   r*   r   Úempty)r   r   Úintr   r   Úglobal_rankÚ	num_tasksr#   ÚnodeÚ	num_nodesr   r   )r"   r   r#   Ú	node_rankr5   Úsourcer*   s          r-   r   r   >   sô   € ð
 ”r—z‘zÑ!Ü”2—:‘:˜fÑ%Ó&ˆÜœŸ™ LÑ1Ó2ˆ
Øœ2Ÿ:™:Ñ%ÜœRŸZ™Z¨Ñ5Ó6‰JàˆJØˆ	Øˆ	Ø‰ð	 Ü×)Ñ)Ó+ˆCð —?‘?ˆDØŸ™ˆJØŸ™ˆJØŸ™ˆIØŸ™ˆIØˆFÜ�t˜Z¨°YÀ	È6ÓRÐRøô ò 	ØˆDØˆJØˆJØˆIØˆIØŠFð	ús   ÂC& Ã&C>Ã=C>c                 óš  — t         j                  j                  «       ryt        «       }|j                  dk(  rt
        j                  d«       yt        «       }t         j                  j                  «       r*t         j                  j                  |j                  «       n| dk7  sJ ‚|j                  j                  r-dt        j                  j!                  |j"                  «      z   }nt%        «        d}t         j                  j'                  | ||j                  |j(                  ¬«       t
        j                  d|j(                  |j                  |j                  |j*                  «       |j                  j                  rGt         j                  j-                  «        t)        «       d	k(  r|j"                  j/                  «        yyy)
z
    Initialize DDP.
    Nr   zworld_size is 1, skipping init.Úncclzfile://zenv://)ÚbackendÚinit_methodr   r"   z*Distributed init: %d/%d (local %d) from %sr   )ÚtorchÚdistributedÚis_initializedr   r   ÚloggerÚinfor   ÚcudaÚis_availableÚ
set_devicer#   ÚdoraÚuse_rendezvousr   ÚpathÚabspathÚrendezvous_filer.   Úinit_process_groupr"   r7   ÚbarrierÚunlink)r:   r$   r(   r;   s       r-   ÚinitrL   a   sK  € ô ×Ñ×'Ñ'Ô)ØÜÓ€DØ‡�˜!ÒÜ�‰Ð5Ô6ØÜ	‹€BÜ‡z�z×ÑÔ Ü�
‰
×Ñ˜dŸo™oÕ.à˜&Ò Ð Ð à	‡w�w×ÒØ¤"§'¡'§/¡/°"×2DÑ2DÓ"EÑE‰äÔØˆÜ	×Ñ×(Ñ(ØØØ—?‘?Ø�Y‰Yð	 )ô ô
 ‡K�KØ4Ø�	‰	�4—?‘? D§O¡O°T·[±[ôBð 
‡w�w×ÒÜ×Ñ×!Ñ!Ô#Ü‹6�QŠ;à×Ñ×%Ñ%Õ'ð ð ó    c                  ó   — t        «       dk(  S ©Nr   )r"   © rM   r-   Ú	is_masterrQ   …   s   € Ü‹6�Q‰;ÐrM   c                  ó|   — t         j                  j                  «       rt         j                  j                  «       S yrO   )r<   r=   r>   Úget_rankrP   rM   r-   r"   r"   ‰   s,   € Ü×Ñ×'Ñ'Ô)Ü× Ñ ×)Ñ)Ó+Ð+àrM   c                  ó|   — t         j                  j                  «       rt         j                  j                  «       S y)Nr   )r<   r=   r>   Úget_world_sizerP   rM   r-   r   r   �   s,   € Ü×Ñ×'Ñ'Ô)Ü× Ñ ×/Ñ/Ó1Ð1àrM   )r9   )Úcollectionsr   Úloggingr   r   Ú
subprocessr   r   r<   r(   r   Ú	getLoggerÚ__name__r?   r   r.   r   rL   rQ   r"   r   rP   rM   r-   Ú<module>r[      sf   ðõ #Û Û 	Û Û ã Û å à	ˆ×	Ñ	˜8Ó	$€ñ ØÐJóL€ò"8òJ SóF!(òHòórM   