Ë
    éÓ^j  ã                   óÄ   — d Z ddlZddlZddlmZ ddlZddlmZ ddlm	Z	  ej                  e«      Zd„ Zdd„Zd	„ Zd
„ Zdd„Zd„ Zd„ Zd„ Z	 	 	 ddedee   dee   fd„Zy)zZ Distributed training/validation utils

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚOptional)Údistributedé   )Úunwrap_modelc                 óŽ   — | j                  «       }t        j                  |t        j                  j                  ¬«       ||z  }|S )N©Úop)ÚcloneÚdistÚ
all_reduceÚReduceOpÚSUM)ÚtensorÚnÚrts      úa/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/utils/distributed.pyÚreduce_tensorr      s3   € Ø	�‰‹€BÜ‡O�O�Bœ4Ÿ=™=×,Ñ,Õ-Øˆ!�G€BØ€Ió    c                 ó0  — t        | «      j                  d¬«      D ]x  \  }}d|v sd|v sŒ|rHt        j                  j	                  |t
        j                  j                  ¬«       |t        |«      z  }ŒYt        j                  j                  |d«       Œz y )NT)ÚrecurseÚrunning_meanÚrunning_varr   r   )
r   Únamed_buffersÚtorchr   r   r   r   r   ÚfloatÚ	broadcast)ÚmodelÚ
world_sizeÚreduceÚbn_nameÚbn_bufs        r   Údistribute_bnr"      s„   € ä'¨Ó.×<Ñ<ÀTÐ<ÓJò 7‰ˆ�Ø˜gÑ%¨=¸GÒ+CÙä×!Ñ!×,Ñ,¨V¼¿¹×8IÑ8IÐ,ÔJØœ% 
Ó+Ñ+‘ô ×!Ñ!×+Ñ+¨F°AÕ6ñ7r   c                 ó    — | j                   dk(  S ©Nr   )Úrank©Úargss    r   Úis_global_primaryr(   %   s   € Ø�9‰9˜‰>Ðr   c                 ó    — | j                   dk(  S r$   )Ú
local_rankr&   s    r   Úis_local_primaryr+   )   s   € Ø�?‰?˜aÑÐr   c                 ó2   — |rt        | «      S t        | «      S )N)r+   r(   )r'   Úlocals     r   Ú
is_primaryr.   -   s   € Ù%*Ô˜DÓ!ÐGÔ0AÀ$Ó0GÐGr   c                  óÈ   — dt         j                  v rt        t         j                  d   «      dkD  S dt         j                  v rt        t         j                  d   «      dkD  S y)NÚ
WORLD_SIZEr   ÚSLURM_NTASKSF©ÚosÚenvironÚint© r   r   Úis_distributed_envr7   1   sO   € Ø”r—z‘zÑ!Ü”2—:‘:˜lÑ+Ó,¨qÑ0Ð0ØœŸ™Ñ#Ü”2—:‘:˜nÑ-Ó.°Ñ2Ð2Ør   c                  ób  — d} dD ]2  }|t         j                  v sŒt        t         j                  |   «      }  n d}dD ]2  }|t         j                  v sŒt        t         j                  |   «      } n d}dD ]2  }|t         j                  v sŒt        t         j                  |   «      } n | ||fS )Nr   )Ú
LOCAL_RANKÚMPI_LOCALRANKIDÚSLURM_LOCALIDÚOMPI_COMM_WORLD_LOCAL_RANK)ÚRANKÚPMI_RANKÚSLURM_PROCIDÚOMPI_COMM_WORLD_RANKr   )r0   ÚPMI_SIZEr1   ÚOMPI_COMM_WORLD_SIZEr2   )r*   ÚvÚglobal_rankr   s       r   Úworld_info_from_envrE   9   s±   € Ø€JØ]ò ˆØ”—
‘
Š?ÜœRŸZ™Z¨™]Ó+ˆJÙðð
 €KØIò ˆØ”—
‘
Š?ÜœbŸj™j¨™mÓ,ˆKÙðð
 €JØOò ˆØ”—
‘
Š?ÜœRŸZ™Z¨™]Ó+ˆJÙðð
 �{ JÐ.Ð.r   c           	      ó>  — d| _         d| _        d| _        d| _        t	        t        | dd«      t        | dd «      t        | dd «      ¬«      }|d   | _        |d	   | _        |d
   | _        |d   | _        |d   | _         t        j                  | j                  «      }|S )NFr   r   ÚdeviceÚcudaÚdist_backendÚdist_url)rG   rI   rJ   r   rD   r*   r   )r   r   r%   r*   Úinit_distributed_device_soÚgetattrrG   r   )r'   ÚresultrG   s      r   Úinit_distributed_devicerN   O   s¥   € ð €DÔØ€D„OØ€D„IØ€D„OÜ'Ü�t˜X vÓ.Ü˜T >°4Ó8Ü˜˜z¨4Ó0ô€Fð
 ˜Ñ"€D„KØ˜\Ñ*€D„OØ�}Ñ%€D„IØ˜\Ñ*€D„OØ˜mÑ,€DÔÜ�\‰\˜$Ÿ+™+Ó&€FØ€Mr   rG   rI   rJ   c                 ó4  — d}d}d}d}| j                  dd¬«      ^}}|€ddddd	œ}	|	j                  |d
«      }|xs d}t        «       �rdt        j                  v r†t        «       \  }}}t        |«      t        j                  d<   t        |«      t        j                  d<   t        |«      t        j                  d<   t        j                  j                  ||||¬«       nkt        «       \  }}
}
t        j                  j                  ||¬«       t        j                  j                  «       }t        j                  j                  «       }d}|dk(  r)t        j                  j                  «       sJ d| › d�«       ‚|dk(  r)t        j                  j                  «       sJ d| › d�«       ‚|r-| dk7  r(|rt        j!                  d|d   › d| › d�«       |› d|› �} | j#                  d«      rt        j                  j%                  | «       t'        | ||||¬«      S )NFr   r   ú:)ÚmaxsplitÚcclÚhcclÚnccl)ÚxpuÚhpurH   ÚnpuÚgloozenv://r?   r9   r=   r0   )ÚbackendÚinit_methodr   r%   )rY   rZ   TrH   zCUDA is not available but z was specified.rW   z Ascend NPU is not available but Úcpuzdevice index z removed from specified (z).zcuda:)rG   rD   r*   r   r   )ÚsplitÚgetr7   r3   r4   rE   Ústrr   r   Úinit_process_groupÚget_world_sizeÚget_rankrH   Úis_availablerW   Ú_loggerÚwarningÚ
startswithÚ
set_deviceÚdict)rG   rI   rJ   r   r   rD   r*   Údevice_typeÚ
device_idxÚdist_backendsÚ_s              r   rK   rK   d   s  € ð €KØ€JØ€KØ€JØ%Ÿ|™|¨C¸!˜|Ó<Ð€K�*àÐð ØØØñ	
ˆð %×(Ñ(¨°fÓ=ˆØÒ#˜8€Hô ÕØœRŸZ™ZÑ'ä2EÓ2GÑ/ˆJ˜ Zä'*¨:£ŒB�J‰J�|Ñ$Ü!$ [Ó!1ŒB�J‰J�vÑÜ'*¨:£ŒB�J‰J�|Ñ$Ü×Ñ×0Ñ0Ø$Ø$Ø%Ø ð	 1õ ô  3Ó4ÑˆJ˜˜1Ü×Ñ×0Ñ0Ø$Ø$ð 1ô ô ×*Ñ*×9Ñ9Ó;ˆJÜ×+Ñ+×4Ñ4Ó6ˆKØˆà�fÒÜ�z‰z×&Ñ&Ô(Ð^Ð,FÀvÀhÈoÐ*^Ó^Ð(Ø�eÒÜ�y‰y×%Ñ%Ô'ÐcÐ+KÈFÈ8ÐSbÐ)cÓcÐ'á�v ’ñ Ü�O‰O˜m¨J°q©M¨?Ð:SÐTZÐS[Ð[]Ð^Ô_Ø�=  * Ð.ˆà×Ñ˜Ô!Ü�
‰
×Ñ˜fÔ%äØØØØØôð r   )F)rH   NN)Ú__doc__Úloggingr3   Útypingr   r   r   r   r   r   Ú	getLoggerÚ__name__rc   r   r"   r(   r+   r.   r7   rE   rN   r^   rK   r6   r   r   ú<module>rq      s�   ðñó Û 	Ý ã Ý %å à
ˆ'×
Ñ
˜HÓ
%€òó
7òò óHòò/ò,ð, Ø&*Ø"&ñRØðRà˜s‘mðRð ˜3‘-ôRr   