
    	i3                        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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j:                  e      Zej@                  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e"   fdZ(de&e'   dee"   fdZ)d/de'de'de*e&e'   ee"   f   fdZ+de'fdZ,dZ-dZ.d Z/ G d! d"      Z0 G d# d$e      Z1 G d% d&e      Z2 G d' d(      Z3d)e4d*e'dz  d+e5d,e&e%   d-e6e'   ddfd.Z7y)0    N)ABCabstractmethod)CallableIterable)ThreadPoolExecutor)	dataclass)BaseHTTPRequestHandlerThreadingHTTPServer)parse_qsurlparse)
DictLoaderEnvironment)get_world_sizetcpstore_clientloggerT)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 z: )r   RuntimeErrorr   selfs    r/var/www/vps2.regionflexible.com/Desarrollo/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   r/   r/   /   s    
I+,e344r   r/   c                   x    e Zd Z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returnc                      y r    r)   r   s    r   routeszDebugHandler.routes6   s    %(r   c                      y r    r)   r   s    r   	nav_linkszDebugHandler.nav_links9   s    *-r   c                     i S r    r)   r   s    r   	templateszDebugHandler.templates<   s    	r   Nc                      y r    r)   r   s    r   dumpzDebugHandler.dump?   s    r   c                 H    t        |       j                  j                         S r    )typer#   lowerr   s    r   dump_filenamezDebugHandler.dump_filenameB   s    Dz""((**r   )r#   r$   r%   r   listr/   r7   r+   r9   dictr(   r;   r=   rA   r)   r   r   r4   r4   5   s`    (U( (-4=- -4S> cDj +s +r   r4   urlsr5   c                     dd l d}dt        dt        ffd}t        |      5 }|j	                  ||       }d d d        |S # 1 sw Y   S xY w)Nr      urlr5   c                 f    j                  |       }t        |j                  |j                        S r    )postr   r   r   )rG   resprequestss     r   getzfetch_thread_pool.<locals>.getQ   s(    }}S!(($))44r   )max_workers)rK   r(   r   r   map)rD   rM   rL   executorrespsrK   s        @r   fetch_thread_poolrQ   K   sX    K5 5 5 
	4 (S$'( L( Ls   AAc                     dd l dj                  dt        dt        fddt        t           dt
        t           ffd}t        j                   ||             S )Nr   sessionrG   r5   c                    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wr    )rI   r   r   status)rS   rG   rJ   r   s       r   fetchzfetch_aiohttp.<locals>.fetch`   sc     <<$ 	/ 	/$DDKK.	/ 	/ 	/$	/ 	/ 	/ 	/sT   A7AA7A"AA"
A7A A7A" A7"A4(A+)A40A7rD   c           
         K   j                         4 d {   }t        j                  | D cg c]  } ||       c}  d {   cd d d       d {    S 7 Dc c}w 7 7 # 1 d {  7  sw Y   y xY wwr    )ClientSessionasynciogather)rD   rS   rG   aiohttprV   s      r   rZ   zfetch_aiohttp.<locals>.gathere   st     ((* 	P 	Pg )N#%*=)NOO	P 	P 	P)NO	P 	P 	P 	Psa   A=AA=A(A
 A(A$A(A=A&A=A(&A=(A:.A1/A:6A=)r[   rX   r(   r   rB   r   rY   run)rD   rZ   r[   rV   s     @@r   fetch_aiohttpr]   [   s\     /W22 / / /
P49 P(); P ;;vd|$$r   endpointargsc                 6   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/?)r   ranger   	multi_getdecoder]   ImportErrorrQ   )r^   r_   storerkeysaddrsaddrrP   s           r   	fetch_allrl   l   s    E %n&6 781d1#J8D8OOD!EFKLdiz4&9LEL)e$ %< 9L  )!%(%<)s   A4A9%A> >BBblobc                 Z    t        j                  |       }t        j                  |d      S )N   )indent)r!   r"   dumps)rm   parseds     r   format_jsonrs   z   s!    ZZF::fQ''r   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_secondsr5   Nc                 n    || _         || _        || _        t        j                         | _        d | _        y r    )	_handlers_output_dir_interval_seconds	threadingEvent_stop_event_thread)r   rv   rw   rx   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   joinr   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_setrz   r=   	Exceptionr   	exceptionrA   timestrftimer   r,   r   r{   openwritewaitr|   )r   r1   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!)g      N@r5   N)r#   r$   r%   rB   r4   r(   floatr   r   r   r   r)   r   r   ru   ru      sF    
 #'	
5|$
5 
5  	
5
 

5 
:r   ru   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   #  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	)r0   FrontendServerfrontendc                 R    t         j                  d| j                  d   ||z         y )Nz%s %sr   )r   infoclient_address)r   formatr_   s      r   log_messagezHTTPRequestHandler.log_message+  s&    "TM	
r   c                 :    | j                   j                  |        y r    )r   _handle_requestr   s    r   do_GETzHTTPRequestHandler.do_GET2  s    %%d+r   r5   c                 @    t        | j                        j                  S r    )r   r,   r   s    r   get_pathzHTTPRequestHandler.get_path5  s    		"'''r   c                 4    t        | j                               S r    )r   get_raw_queryr   s    r   	get_queryzHTTPRequestHandler.get_query8  s    **,--r   c                 @    t        | j                        j                  S r    )r   r,   queryr   s    r   r   z HTTPRequestHandler.get_raw_query;  s    		"(((r   Nr   defaultr?   c                 J    | j                         }||vr|S  |||   d         S )Nr   )r   )r   r   r   r?   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   rC   rB   r   r   objectr?   r   r)   r   r   r0   r0   (  so    
,(# (.4T#Y/ .)s ) ,0c$$"($7;$	$r   r0   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portrv   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_handlers
c              3      K   | ]6  }|j                         D ]!  }d |j                   d|j                   d # 8 yw)z    <a href="z">z</a> <!--@lint-ignore-->N)r9   r,   r-   ).0r1   links      r   	<genexpr>z*FrontendServer.__init__.<locals>.<genexpr>S  sN      
))+
  DII;b4LM
M
s   <>)z	base.htmlzraw_resp.htmlzjson_resp.htmlT)loaderenable_async)ziprs   	enumerater9   r0   r    r)   z distributed.debug.FrontendServer)r   r_   r   r   )'torch.distributed.debug._debug_handlersr   r   BASE_TEMPLATERAW_RESP_TEMPLATEJSON_RESP_TEMPLATEupdater;   r   r   
_jinja_envglobalsr   rs   r   _routesr7   r1   r,   rz   r?   r0   r   _serverr}   r   _server   r   )r   r   rv   r   nav_htmlall_templatesr1   r   routeRequestHandlerClassserver_addresss              r   r   zFrontendServer.__init__H  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   r5   c                     	 | j                   j                          y # t        $ r t        j	                  d       Y y w xY w)Nz got exception in frontend server)r   serve_foreverr   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_errorr   
SystemExitr   r   reprsend_responsesend_headerend_headerswfiler   )r   r   r,   r1   rJ   es         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&   rB   r4   r   r   r   r0   r   r(   r   r2   r   r)   r   r   r   r   G  sf     /3;; |$t+;zA#5 $ .P Pv P% Pr   r   r   dump_dirdump_intervalrv   enabled_dumpsc                    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   rv   z"Frontend server started on port %dz2Periodic dumper started, writing to %s every %.0fs)r   setLevelloggingINFOr   r   r   server_portru   rA   r   r   r   )r   r   r   rv   r   serverdumperr1   s           r   mainr     s     OOGLL!9F
KK4fnn6P6PQ$(F  (((*m; 
 
 	@	
KKM %$ KKM s   (C4C C2)r   )8rY   r!   r   r   r   r}   r   abcr   r   collections.abcr   r   concurrent.futuresr   dataclassesr   http.serverr	   r
   urllib.parser   r   jinja2r   r   torch.distributed.debug._storer   r   	getLoggerr#   r   Loggerr'   r   r+   r/   r4   rB   r(   rQ   r]   tuplerl   rs   r   r   r   ru   r   r0   r   r&   r   r   r   r)   r   r   <module>r     s      	    # . 1 ! C + * J +**84 4 	% 	% 	%   
 5 5 5
+3 +,DI (8*<  %S	 %hx&8 %" 3 d3i(AS6S0T (c (>@ $ 0-: -:j#) #
$/ $>_P _PD"
"Dj" " < 	"
 s8" 
"r   