
    9j 9                        U 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Zd dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZ d d	lmZmZ  ej8                  e      Zej>                  e d
<   dZ!e"e d<    ed       G d d             Z# ed       G d d             Z$ ed       G d d             Z% G d de      Z&de'e(   de"de'e#   fdZ)de'e(   de"de'e#   fdZ*	 d6de(de(de"de+e'e(   e'e#   f   fdZ,de(fd Z-d!e'e(   d"e'e#   de(dz  fd#Z.d$Z/d%Z0d&Z1 G d' d(      Z2 G d) d*e      Z3 G d+ d,e      Z4 G d- d.      Z5	 d7d/e6d0e(dz  d1e"d2e'e&   d3e7e(   d4e"ddfd5Z8y)8    N)ABCabstractmethod)Callable)ThreadPoolExecutor)	dataclass)BaseHTTPRequestHandlerThreadingHTTPServer)parse_qsurlparse)
DictLoaderEnvironment)get_world_sizetcpstore_clientlogger      N@_DEFAULT_FETCH_TIMEOUTT)slotsc                   .    e Zd ZU eed<   eed<   d Zd Zy)Responsestatus_codetextc                 l    | j                   dk7  r%t        d| j                    d| j                         y )N   zHTTP : )r   RuntimeErrorr   selfs    a/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/distributed/debug/_frontend.pyraise_for_statuszResponse.raise_for_status#   s8    s"t'7'7&8499+FGG #    c                 @    t        j                  | j                        S N)jsonloadsr   r   s    r   r#   zResponse.json'   s    zz$))$$r    N)__name__
__module____qualname__int__annotations__strr   r#    r    r   r   r      s    
IH%r    r   c                   "    e Zd ZU eed<   eed<   y)NavLinkpathlabelN)r%   r&   r'   r*   r)   r+   r    r   r-   r-   +   s    
IJr    r-   c                   .    e Zd ZU eed<   edgef   ed<   y)Router.   HTTPRequestHandlerhandlerN)r%   r&   r'   r*   r)   r   bytesr+   r    r   r1   r1   1   s    
I+,e344r    r1   c                       e Zd ZU eZeed<   edee	   fd       Z
edee   fd       Zdeeef   fdZdedz  fdZdefdZy)	DebugHandlerfetch_timeoutreturnc                      y r"   r+   r   s    r   routeszDebugHandler.routes:   s    %(r    c                      y r"   r+   r   s    r   	nav_linkszDebugHandler.nav_links=   s    *-r    c                     i S r"   r+   r   s    r   	templateszDebugHandler.templates@   s    	r    Nc                      y r"   r+   r   s    r   dumpzDebugHandler.dumpC   s    r    c                 H    t        |       j                  j                         S r"   )typer%   lowerr   s    r   dump_filenamezDebugHandler.dump_filenameF   s    Dz""((**r    )r%   r&   r'   r   r7   floatr)   r   listr1   r:   r-   r<   dictr*   r>   r@   rD   r+   r    r   r6   r6   7   sj    1M51(U( (-4=- -4S> cDj +s +r    r6   urlstimeoutr8   c                     dd l d}dt        dt        ffd}t        |      5 }t	        |j                  ||             }d d d        |S # 1 sw Y   S xY w)Nr      urlr8   c                    	 j                  |       }t        |j                  |j                        S # j                  j
                  $ r}t        dd|       cY d }~S d }~wj                  j                  $ r}t        dd|       cY d }~S d }~wt        $ r.}t        dt        |      j                   d|       cY d }~S d }~ww xY w)NrI     z	Timeout:   zConnectionError:   r   )
postr   r   r   
exceptionsTimeoutConnectionError	ExceptionrB   r%   )rL   resperequestsrI   s      r   getzfetch_thread_pool.<locals>.getU   s    	===g=6DD,,dii88""** 	2C9QC11""22 	:C#4QC!899 	=CDG$4$4#5Rs!;<<	=s?   26 CA#C#C?BCC#CCC)max_workers)rY   r*   r   r   rF   map)rH   rI   r[   rZ   executorrespsrY   s    `    @r   fetch_thread_poolr_   O   s]    K	= 	= 	= 
	4 .X\\#t,-. L. Ls   AAc                     dd l dj                  dt        dt        ffddt        t           dt        t           ffd}t        j                   ||             S )Nr   sessionrL   r8   c                 4  K   	 | j                  |      4 d {   }|j                          d {   }t        |j                  |      cd d d       d {    S 7 C7 -7 	# 1 d {  7  sw Y   y xY w# t        j
                  $ r}t        dd|       cY d }~S d }~wj                  $ r.}t        dt        |      j                   d|       cY d }~S d }~wt        $ r.}t        dt        |      j                   d|       cY d }~S d }~ww xY ww)NrO   zTimeoutError: rP   r   rQ   )
rR   r   r   statusasyncioTimeoutErrorClientErrorrB   r%   rV   )ra   rL   rW   r   rX   aiohttps        r   fetchzfetch_aiohttp.<locals>.fetchk   s     		=||C( 3 3D!YY[(T23 3 3(3 3 3 3 ## 	7C>!!566"" 	=CDG$4$4#5Rs!;<< 	=CDG$4$4#5Rs!;<<	=s   DA9 AA9 A$A A$A9 A"A9 DA9  A$"A9 $A6*A-+A62A9 5D6A9 9DB DD D2#CDDD'#D
DDDDrH   c                 8  K   j                        }j                  |      4 d {   }t        t        j                  | D cg c]  } ||       c}  d {         cd d d       d {    S 7 Mc c}w 7  7 # 1 d {  7  sw Y   y xY ww)N)totalrN   )ClientTimeoutClientSessionrF   rd   gather)rH   client_timeoutra   rL   rg   rh   rI   s       r   rm   zfetch_aiohttp.<locals>.gatherw   s      ..W.=(((@ 	V 	VGgnnd.SsuWc/B.STTU	V 	V 	V.ST	V 	V 	V 	Vsb   )BA:BB	A<B B
!B(B4B5B<BBBBBB)rg   rl   r*   r   rF   rd   run)rH   rI   rm   rg   rh   s    ` @@r   fetch_aiohttprp   f   s[     
=W22 
= 
= 
=V49 Vh V
 ;;vd|$$r    endpointargsc                >   t               }t        t                     D cg c]  }d| 	 }}|j                  |      }|D cg c]  }|j	                          d|  d|  }}	 t        ||      }||fS c c}w c c}w # t        $ r t        ||      }Y ||fS w xY w)Nrankz	/handler/?rN   )r   ranger   	multi_getdecoderp   ImportErrorr_   )	rq   rr   rI   storerkeysaddrsaddrr^   s	            r   	fetch_allr      s     E %n&6 781d1#J8D8OOD!EFKLdiz4&9LEL:eW5 %< 9L  :!%9%<:s   A6A;%B   BBblobc                 Z    t        j                  |       }t        j                  |d      S )N   )indent)r#   r$   dumps)r   parseds     r   format_jsonr      s!    ZZF::fQ''r    r}   r^   c                 0   t        |      D cg c]  \  }}|j                  dk7  s||f }}}|syt        |       }|t        |      z
  }d| d| dg}|D ]&  \  }}	|j                  d| d|	j                          ( dj                  |      S c c}}w )	zHReturn a summary string if any workers failed, or None if all succeeded.r   NzPARTIAL DATA: /z workers respondedz  Rank r   
)	enumerater   lenappendr   join)
r}   r^   ir{   failedrj   oklinesrt   rW   s
             r   format_fetch_summaryr      s    !*5!1JAQ]]c5Iq!fJFJJE	V	BbT5');<=E 4
dwtfBtyyk23499U Ks
   BBac  
<!doctype html>
<head>
    <title>{% block title %}{% endblock %} - PyTorch Distributed</title>
    <link rel="shortcut icon" type="image/x-icon" href="https://pytorch.org/favicon.ico?">

    <style>
        body {
            margin: 0;
            font-family:
                -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,
                "Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji",
                "Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
            font-size: 1rem;
            font-weight: 400;
            line-height: 1.5;
            color: #212529;
            text-align: left;
            background-color: #fff;
        }
        h1, h2, h2, h4, h5, h6, .h1, .h2, .h2, .h4, .h5, .h6 {
            margin-bottom: .5rem;
            font-weight: 500;
            line-height: 1.2;
        }
        nav {
            background-color: rgba(0, 0, 0, 0.17);
            padding: 10px;
            display: flex;
            align-items: center;
            padding: 16px;
            justify-content: flex-start;
        }
        nav h1 {
            display: inline-block;
            margin: 0;
        }
        nav a {
           margin: 0 8px;
        }
        section {
            max-width: 1280px;
            padding: 16px;
            margin: 0 auto;
        }
        pre {
            white-space: pre-wrap;
            max-width: 100%;
        }
    </style>
</head>

<nav>
    <h1>Torch Distributed Debug Server</h1>

    {{ nav_links | safe }}
</nav>

<section class="content">
  {% block header %}{% endblock %}
  {% block content %}{% endblock %}
</section>
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{title}}{% endblock %}</h1>
{% endblock %}
{% block content %}
    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ resp.text }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{ title }}{% endblock %}</h1>
{% endblock %}
{% block content %}
    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ format_json(resp.text) }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    c            	       F    e Zd Z	 d
dee   dededdfdZddZddZ	dd	Z
y)PeriodicDumperhandlers
output_dirinterval_secondsr8   Nc                 n    || _         || _        || _        t        j                         | _        d | _        y r"   )	_handlers_output_dir_interval_seconds	threadingEvent_stop_event_thread)r   r   r   r   s       r   __init__zPeriodicDumper.__init__  s1     "%!1$??,04r    c                     t        j                  | j                  d       t        j                  | j
                  dd      | _        | j                  j                          y )NT)exist_okz distributed.debug.PeriodicDumper)targetdaemonname)osmakedirsr   r   Thread_runr   startr   s    r   r   zPeriodicDumper.start  sG    
D$$t4 ''993

 	r    c                     | j                   j                          | j                  | j                  j                          y y r"   )r   setr   r   r   s    r   stopzPeriodicDumper.stop&  s3    <<#LL $r    c                    | j                   j                         s| j                  D ]  }	 |j                         }|t        j                  d      }|j                          d| d}t        j                  j                  | j                  |      }	 t        |d      5 }|j                  |       d d d         | j                   j!                  | j"                         | j                   j                         sy y # t        $ r( t
        j                  d|j                                Y w xY w# 1 sw Y   xY w# t        $ r t
        j                  d|       Y 9w xY w)NzFailed to dump %sz%Y%m%d_%H%M%S_z.txtwzFailed to write dump to %s)r   is_setr   r@   rV   r   	exceptionrD   timestrftimer   r.   r   r   openwritewaitr   )r   r3   content	timestampfilenamer.   fs          r   r   zPeriodicDumper._run+  s9   ""))+>> I%llnG ? MM/:	%3356a	{$Gww||D$4$4h?IdC )A()I  !!$"8"89# ""))+ ! $$%8':O:O:QR) )  I$$%A4HIs;   C>D> D22D>>-D/.D/2D;	7D>>E! E!r   r8   N)r%   r&   r'   rF   r6   r*   rE   r   r   r   r   r+   r    r   r   r     sF    
 #'	
5|$
5 
5  	
5
 

5 
:r    r   c                   R    e Zd ZU ej                  Zej                  ed<   dZe	ed<   y)_IPv6HTTPServeraddress_familyi   request_queue_sizeN)
r%   r&   r'   socketAF_INET6r   AddressFamilyr)   r   r(   r+   r    r   r   r   E  s!    +1??NF((:""r    r   c            	       v    e Zd ZU ded<   d Zd ZdefdZdeee	e   f   fdZ
defdZd	efd
edededefdZy	)r2   FrontendServerfrontendc                 R    t         j                  d| j                  d   ||z         y )Nz%s %sr   )r   infoclient_address)r   formatrr   s      r   log_messagezHTTPRequestHandler.log_messageM  s&    "TM	
r    c                 :    | j                   j                  |        y r"   )r   _handle_requestr   s    r   do_GETzHTTPRequestHandler.do_GETT  s    %%d+r    r8   c                 @    t        | j                        j                  S r"   )r   r.   r   s    r   get_pathzHTTPRequestHandler.get_pathW  s    		"'''r    c                 4    t        | j                               S r"   )r
   get_raw_queryr   s    r   	get_queryzHTTPRequestHandler.get_queryZ  s    **,--r    c                 @    t        | j                        j                  S r"   )r   r.   queryr   s    r   r   z HTTPRequestHandler.get_raw_query]  s    		"(((r    Nr   defaultrB   c                 J    | j                         }||vr|S  |||   d         S )Nr   )r   )r   r   r   rB   r   s        r   get_query_argz HTTPRequestHandler.get_query_arg`  s0      uNE$KN##r    )r%   r&   r'   r)   r   r   r*   r   rG   rF   r   r   objectrB   r   r+   r    r   r2   r2   J  so    
,(# (.4T#Y/ .)s ) ,0c$$"($7;$	$r    r2   c                   `    e Zd Z	 ddedee   dz  fdZddZddZde	ddfd	Z
d
ededefdZy)r   Nportr   c                    |ddl m}  |       }dj                  d |D              }t        t        t
        d}|D ]!  }|j                  |j                                # t        |      }t        |d      | _
        | j                  j                  j                  t        t        t        |       i | _        |D ]:  }|j!                         D ]%  }|j"                  | j                  |j$                  <   ' < || _        t)        d	t*        fd
| i      }	d|f}
t-        |
|	      | _        t1        j2                  | j4                  ddd      | _        | j6                  j9                          y )Nr   )default_handlersr   c              3      K   | ]6  }|j                         D ]!  }d |j                   d|j                   d # 8 yw)z    <a href="z">z</a> <!--@lint-ignore-->N)r<   r.   r/   ).0r3   links      r   	<genexpr>z*FrontendServer.__init__.<locals>.<genexpr>u  sN      
))+
  DII;b4LM
M
s   <>)z	base.htmlzraw_resp.htmlzjson_resp.htmlT)loaderenable_async)zipr   r   r<   r2   r    r+   z distributed.debug.FrontendServer)r   rr   r   r   )'torch.distributed.debug._debug_handlersr   r   BASE_TEMPLATERAW_RESP_TEMPLATEJSON_RESP_TEMPLATEupdater>   r   r   
_jinja_envglobalsr   r   r   _routesr:   r3   r.   r   rB   r2   r   _serverr   r   _server   r   )r   r   r   r   nav_htmlall_templatesr3   r   routeRequestHandlerClassserver_addresss              r   r   zFrontendServer.__init__j  sj   
 P')H 99 
#
 
 '.0)

   	6G  !2!2!45	6 M*%V$G&&#	 	' 	
 JL 	9G ) 9+0==UZZ(9	9 " # !
 d&~7JK '';;3	
 	r    r8   c                     	 | j                   j                          y # t        $ r t        j	                  d       Y y w xY w)Nz got exception in frontend server)r   serve_foreverrV   r   r   r   s    r   r   zFrontendServer._serve  s8    	ALL&&( 	A?@	As    >>c                 8    | j                   j                          y r"   )r   r   r   s    r   r   zFrontendServer.join  s    r    reqc                    |j                         }|| j                  vr|j                  dd|        y | j                  |   }	  ||      }|j                  d       |j                  dd       |j                          |j                  j                  |       y # t        t        f$ r>}t
        j                  d|       |j                  ddt        |              Y d }~y d }~ww xY w)	Ni  zHandler not found: z-Exception in frontend server when handling %si  zException: r   zContent-typez	text/html)r   r   
send_errorrV   
SystemExitr   r   reprsend_responsesend_headerend_headerswfiler   )r   r   r.   r3   rW   rX   s         r   r   zFrontendServer._handle_request  s    ||~t||#NN3"5dV <=,,t$		3<D 	#4		 :& 	? NN3+d1gY 78	s   B C)+4C$$C)templatekwargsc                 t     | j                   j                  |      j                  di |j                         S )Nr+   )r   get_templaterenderencode)r   r  r  s      r   render_templatezFrontendServer.render_template  s0    <t++H5<<FvFMMOOr    r"   r   )r%   r&   r'   r(   rF   r6   r   r   r   r2   r   r*   r   r4   r  r+   r    r   r   r   i  sf     /3;; |$t+;zA#5 $ .P Pv P% Pr    r   r   dump_dirdump_intervalr   enabled_dumpsr7   c                    |D ]	  }||_          t        j                  t        j                         t        | |      }t        j                  d|j                  j                         d }|Tt        |D cg c]  }|j                         |v r| c}||      }|j                          t        j                  d||       	 |j                          ||j                          y y c c}w # ||j                          w w xY w)N)r   r   z"Frontend server started on port %dz2Periodic dumper started, writing to %s every %.0fs)r7   r   setLevelloggingINFOr   r   r   server_portr   rD   r   r   r   )	r   r	  r
  r   r  r7   r3   serverdumpers	            r   mainr    s      . -. OOGLL!9F
KK4fnn6P6PQ$(F  (((*m; 
 
 	@	
KKM %$ KKM s   6C&C+ +D )r   r   )9rd   r#   r  r   r   r   r   abcr   r   collections.abcr   concurrent.futuresr   dataclassesr   http.serverr   r	   urllib.parser
   r   jinja2r   r   torch.distributed.debug._storer   r   	getLoggerr%   r   Loggerr)   r   rE   r   r-   r1   r6   rF   r*   r_   rp   tupler   r   r   r   r   r   r   r   r2   r   r(   r   r  r+   r    r   <module>r     s      	    # $ 1 ! C + * J +**84 4 $  $ 	% 	% 	%   
 5 5 5
+3 +0DI  $x. .%S	 %E %d8n %4  "/4
49d8n$% (c (

S	 
$x. 
S4Z 
$>@ $ 0-: -:j#) #
$/ $>_P _PP  &
&Dj& & < 	&
 s8& & 
&r    