
    Wj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)d0d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/Z7dS )1    N)ABCabstractmethod)CallableIterable)ThreadPoolExecutor)	dataclass)BaseHTTPRequestHandlerThreadingHTTPServer)parse_qsurlparse)
DictLoaderEnvironment)get_world_sizetcpstore_clientloggerT)slotsc                   0    e Zd ZU eed<   eed<   d Zd ZdS )Responsestatus_codetextc                 Z    | j         dk    rt          d| j          d| j                   d S )N   zHTTP z: )r   RuntimeErrorr   selfs    f/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/distributed/debug/_frontend.pyraise_for_statuszResponse.raise_for_status!   s<    s""Ft'7FF49FFGGG #"    c                 4    t          j        | j                  S N)jsonloadsr   r   s    r   r!   zResponse.json%   s    z$)$$$r   N)__name__
__module____qualname__int__annotations__strr   r!    r   r   r   r      sL         
IIIH H H% % % % %r   r   c                   $    e Zd ZU eed<   eed<   dS )NavLinkpathlabelN)r#   r$   r%   r(   r'   r)   r   r   r+   r+   )   s"         
IIIJJJJJr   r+   c                   6    e Zd ZU eed<   edgef         ed<   dS )Router,   HTTPRequestHandlerhandlerN)r#   r$   r%   r(   r'   r   bytesr)   r   r   r/   r/   /   s5         
III+,e3444444r   r/   c                       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dS )DebugHandlerreturnc                     d S r    r)   r   s    r   routeszDebugHandler.routes6   s    %(Sr   c                     d S 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                     d S r    r)   r   s    r   dumpzDebugHandler.dump?   s    tr   c                 N    t          |           j                                        S r    )typer#   lowerr   s    r   dump_filenamezDebugHandler.dump_filenameB   s    Dzz"((***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 }|                    ||           }d d d            n# 1 swxY w Y   |S )Nr      urlr5   c                 b                         |           }t          |j        |j                  S r    )postr   r   r   )rG   resprequestss     r   getzfetch_thread_pool.<locals>.getQ   s)    }}S!!($)444r   )max_workers)rK   r(   r   r   map)rD   rM   rL   executorrespsrK   s        @r   fetch_thread_poolrQ   K   s    OOOK5 5 5 5 5 5 5 5 
	4	4	4 (S$''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( Ls   A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   |                      |          4 d {V }|                                 d {V }t          |j        |          cd d d           d {V  S # 1 d {V swxY w Y   d S r    )rI   r   r   status)rS   rG   rJ   r   s       r   fetchzfetch_aiohttp.<locals>.fetch`   s     <<$$ 	/ 	/ 	/ 	/ 	/ 	/ 	/$$$$$$DDK..	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   /A  
A*-A*rD   c                    K                                    4 d {V t          j        fd| D               d {V cd d d           d {V  S # 1 d {V swxY w Y   d S )Nc                 (    g | ]} |          S r)   r)   ).0rG   rV   rS   s     r   
<listcomp>z1fetch_aiohttp.<locals>.gather.<locals>.<listcomp>g   s%    )N)N)N#%%*=*=)N)N)Nr   )ClientSessionasynciogather)rD   rS   aiohttprV   s    @r   r]   zfetch_aiohttp.<locals>.gathere   s.     ((** 	P 	P 	P 	P 	P 	P 	Pg )N)N)N)N)N)N)N)NOOOOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   !A
A A)r^   r[   r(   r   rB   r   r\   run)rD   r]   r^   rV   s     @@r   fetch_aiohttpr`   [   s     NNN/W2 / / / / / /
P49 P(); P P P P P P P ;vvd||$$$r    endpointargsc                     t                      }d t          t                                D             }|                    |          } fd|D             }	 t	          |          }n# t
          $ r t          |          }Y nw xY w||fS )Nc                     g | ]}d | S )rankr)   )rY   rs     r   rZ   zfetch_all.<locals>.<listcomp>n   s    8881J1JJ888r   c                 H    g | ]}|                                  d  d S )z	/handler/?)decode)rY   addrrc   rb   s     r   rZ   zfetch_all.<locals>.<listcomp>p   s7    LLLd9999499LLLr   )r   ranger   	multi_getr`   ImportErrorrQ   )rb   rc   storekeysaddrsrP   s   ``    r   	fetch_allrr   l   s    E88n&6&6 7 7888DOOD!!ELLLLLeLLLE)e$$ ) ) )!%(() %<s   A+ +BBblobc                 V    t          j        |           }t          j        |d          S )N   )indent)r!   r"   dumps)rs   parseds     r   format_jsonry   z   s&    Z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            	       N    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
dS )PeriodicDumper      N@handlers
output_dirinterval_secondsr5   Nc                 n    || _         || _        || _        t          j                    | _        d | _        d S r    )	_handlers_output_dir_interval_seconds	threadingEvent_stop_event_thread)r   r}   r~   r   s       r   __init__zPeriodicDumper.__init__   s6     "%!1$?,,04r   c                     t          j        | j        d           t          j        | j        dd          | _        | j                                         d S )NT)exist_okz distributed.debug.PeriodicDumper)targetdaemonname)osmakedirsr   r   Thread_runr   startr   s    r   r   zPeriodicDumper.start   sZ    
D$t4444 '93
 
 

 	r   c                 |    | j                                          | j        | j                                         d S d S r    )r   setr   joinr   s    r   stopzPeriodicDumper.stop  sA    <#L $#r   c                    | j                                         sY| j        D ]}	 |                                }n=# t          $ r0 t
                              d|                                           Y Rw xY w|Yt          j	        d          }|                                 d| d}t          j                            | j        |          }	 t          |d          5 }|                    |           d d d            n# 1 swxY w Y   # t          $ r t
                              d|           Y w xY w| j                             | j                   | j                                         Wd S d S )NzFailed to dump %sz%Y%m%d_%H%M%S_z.txtwzFailed to write dump to %s)r   is_setr   r=   	Exceptionr   	exceptionrA   timestrftimer   r,   r   r   openwritewaitr   )r   r1   content	timestampfilenamer,   fs          r   r   zPeriodicDumper._run	  s   "))++ 	:> I I%llnnGG    $$%8':O:O:Q:QRRRH ? M/::	%3355GG	GGGw||D$4h??IdC )A((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  I I I$$%A4HHHHHI!!$"8999# "))++ 	: 	: 	: 	: 	:sE   ;7A54A5DD5DD	DD		D%D65D6)r|   r5   N)r#   r$   r%   rB   r4   r(   floatr   r   r   r   r)   r   r   r{   r{      s        
 #'	
5 
5|$
5 
5  	
5
 

5 
5 
5 
5          
: : : : : :r   r{   c                   @    e Zd ZU ej        Zej        ed<   dZe	ed<   dS )_IPv6HTTPServeraddress_familyi   request_queue_sizeN)
r#   r$   r%   socketAF_INET6r   AddressFamilyr'   r   r&   r)   r   r   r   r   #  s8         +1?NF(:::""""""r   r   c            	           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d	S )r0   FrontendServerfrontendc                 Z    t                               d| j        d         ||z             d S )Nz%s %sr   )r   infoclient_address)r   formatrc   s      r   log_messagezHTTPRequestHandler.log_message+  s7    "TM	
 	
 	
 	
 	
r   c                 :    | j                             |            d S r    )r   _handle_requestr   s    r   do_GETzHTTPRequestHandler.do_GET2  s    %%d+++++r   r5   c                 4    t          | j                  j        S r    )r   r,   r   s    r   get_pathzHTTPRequestHandler.get_path5  s    	""''r   c                 D    t          |                                           S r    )r   get_raw_queryr   s    r   	get_queryzHTTPRequestHandler.get_query8  s    **,,---r   c                 4    t          | j                  j        S r    )r   r,   queryr   s    r   r   z HTTPRequestHandler.get_raw_query;  s    	""((r   Nr   defaultr?   c                 d    |                                  }||vr|S  |||         d                   S )Nr   )r   )r   r   r   r?   r   s        r   get_query_argz HTTPRequestHandler.get_query_arg>  s;       uNtE$KN###r   )r#   r$   r%   r'   r   r   r(   r   rC   rB   r   r   objectr?   r   r)   r   r   r0   r0   (  s         
 
 
, , ,(# ( ( ( (.4T#Y/ . . . .)s ) ) ) ) ,0c$ $$"($7;$	$ $ $ $ $ $r   r0   c                   h    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dS )r   Nportr}   c                    |ddl m}  |            }d                    d |D                       }t          t          t
          d}|D ])}|                    |                                           *t          |          }t          |d          | _
        | j
        j                            t          t          t          |           i | _        |D ]-}|                                D ]}|j        | j        |j        <   .|| _        t)          d	t*          fd
| i          }	d|f}
t-          |
|	          | _        t1          j        | j        ddd          | _        | j                                         d S )Nr   )default_handlers
c              3   j   K   | ].}|                                 D ]}d |j         d|j         dV  /dS )z    <a href="z">z</a> <!--@lint-ignore-->N)r9   r,   r-   )rY   r1   links      r   	<genexpr>z*FrontendServer.__init__.<locals>.<genexpr>S  sq       
 
))++
 
  NDIMMMMM
 
 
 
 
 
 
r   )z	base.htmlzraw_resp.htmlzjson_resp.htmlT)loaderenable_async)zipry   	enumerater9   r0   r   ra   r)   z distributed.debug.FrontendServer)r   rc   r   r   )'torch.distributed.debug._debug_handlersr   r   BASE_TEMPLATERAW_RESP_TEMPLATEJSON_RESP_TEMPLATEupdater;   r   r   
_jinja_envglobalsr   ry   r   _routesr7   r1   r,   r   r?   r0   r   _serverr   r   _server   r   )r   r   r}   r   nav_htmlall_templatesr1   r   routeRequestHandlerClassserver_addresss              r   r   zFrontendServer.__init__H  s   
 PPPPPP''))H 99 
 
#
 
 
 
 
 '.0)
 )

   	6 	6G  !2!2!4!45555M**%V$GGG&&#	 	' 	
 	
 	
 JL 	9 	9G )) 9 9+0=UZ((9 " # !
 
 d&~7JKK ';3	
 
 
 	r   r5   c                     	 | j                                          d S # t          $ r t                              d           Y d S w xY w)Nz got exception in frontend server)r   serve_foreverr   r   r   r   s    r   r   zFrontendServer._serve  s_    	AL&&((((( 	A 	A 	A?@@@@@@	As    $AAc                 8    | j                                          d S r    )r   r   r   s    r   r   zFrontendServer.join  s    r   reqc                    |                                 }|| j        vr|                    dd|            d S | j        |         }	  ||          }n`# t          t          f$ rL}t
                              d|           |                    ddt          |                      Y d }~d S d }~ww xY w|                    d           |	                    dd           |
                                 |j                            |           d S )	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 <d < <===F,t$		73<<DD:& 	 	 	?   NN3 7d1gg 7 7888FFFFF	 	#444	s   A B0$AB++B0templatekwargsc                 p     | j                             |          j        di |                                S )Nr)   )r   get_templaterenderencode)r   r   r   s      r   render_templatezFrontendServer.render_template  s7    <t++H55<FFvFFMMO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  s         /3; ;; |$t+; ; ; ;zA A A A   #5 $    .P Pv P% P P P P P Pr   r   r   dump_dirdump_intervalr}   enabled_dumpsc                    t                               t          j                   t	          | |          }t                               d|j        j                   d }|Mt          fd|D             ||          }|	                                 t                               d||           	 |
                                 ||                                 d S d S # ||                                 w w xY w)N)r   r}   z"Frontend server started on port %dc                 @    g | ]}|                                 v |S r)   )rA   )rY   r1   r   s     r   rZ   zmain.<locals>.<listcomp>  s:       ((**m;; ;;;r   z2Periodic dumper started, writing to %s every %.0fs)r   setLevelloggingINFOr   r   r   server_portr{   r   r   r   )r   r   r   r}   r   serverdumpers       `  r   mainr     s	    OOGL!!!999F
KK4fn6PQQQ$(F   '  
 
 
 	@	
 	
 	
KKMMMMM 6KKMMMM s   .C C5)ra   )8r\   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`   tuplerr   ry   r   r   r   r{   r   r0   r   r&   r   r   r   r)   r   r   <module>r     s      				       # # # # # # # # . . . . . . . . 1 1 1 1 1 1 ! ! ! ! ! ! C C C C C C C C + + + + + + + + * * * * * * * * J J J J J J J J +*844 4 4 4 	% 	% 	% 	% 	% 	% 	% 	%        
 5 5 5 5 5 5 5 5
+ + + + +3 + + +,DI (8*<     %S	 %hx&8 % % % %"  3 d3i(AS6S0T    (c ( ( ( (>@ $ 0-: -: -: -: -: -: -: -:j# # # # #) # # #
$ $ $ $ $/ $ $ $>_P _P _P _P _P _P _P _PD"
"Dj" " < 	"
 s8" 
" " " " " "r   