§
    L�’js  ã            	       óÊ	  — 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Zd dlZd dl	m
Z
 d dlmZ d dlmZ  e
d¦  «        Zg d¢ZdQd„Zed„ ¦   «         ZdRd	„Zd
„ Zd„ ZdSd„Zd„ Zefd„Zefd„Zefd„Zd„ Z G d„ d¦  «        Zd„ Zd„ ZdZd ee¦  «        › d�Z d„ Z!d„ Z"dZ#d„ Z$d„ Z%dTd„Z&d„ Z'dSd „Z(dSd!efd"„Z)e*d#k    �rd dl+Zej,         -                    ej,         .                    e/¦  «        ¦  «        Z0e0ej,        v rej,         1                    e0¦  «         d dl2Z2d$Z3d%e3› �Z4 e2j5        d&e3› �¬'¦  «        Z6e6 7                    d(¬)¦  «        Z8d*„ Z9d+Z:e8 ;                    d,e:¬'¦  «        Z<e< =                    d-e4¬.¦  «         d/Z:e8 ;                    d0e:¬'¦  «        Z>e> =                    d-e4¬.¦  «         d1Z:e8 ;                    d2e:¬'¦  «        Z?e? =                    d-e4¬.¦  «          e9e?¦  «         d3Z:e8 ;                    d4e:¬'¦  «        Z@e@ =                    d-e4¬.¦  «          e9e@¦  «         d5Z:e8 ;                    d6e:¬'¦  «        ZAeA =                    d7e4¬.¦  «         eA =                    d8e4¬.¦  «          e9eA¦  «         d9ZBeBD ]¦\  ZCZ:e8 ;                    eCe:¬'¦  «        ZDeD =                    d-e4¬.¦  «         d:ZEeD =                    d;d<eFdeE¬=¦  «         d>ZEeD =                    d?d@dAeE¬B¦  «         eCdCk    r6dDZEeD =                    dEdFdGeE¬H¦  «         dIZEeD =                    dJdKdGeE¬H¦  «         Œ§e6 G                    ¦   «         ZHdL„ ZIdM„ ZJeHjK        d2k    r, eIeHjL        ¦  «        ZM eJeHjN         eeM¦  «        ¦  «         dS eHjK        d4k    r, eIeHjL        ¦  «        ZM eJeHjN         eeM¦  «        ¦  «         dS eHjK        d,k    r& eIeHjL        ¦  «        ZM eO e!eM¦  «        ¦  «         dS eHjK        d0k    r& eIeHjL        ¦  «        ZM eO e"eM¦  «        ¦  «         dS eHjK        d6k    r= eIeHjP        ¦  «        ZP eIeHjQ        ¦  «        ZQ eJeHjN         eePeQ¦  «        ¦  «         dS eHjK        dCk    r? eIeHjL        ¦  «        ZM eJeHjN         e&eMeHjR        eHj        eHjS        ¬N¦  «        ¦  «         dS eHjK        dOk    r5 eIeHjL        ¦  «        ZM eJeHjN         e)eMeHjR        ¬P¦  «        ¦  «         dS dS dS )Ué    N)Ú	lru_cache)Úgroupby)ÚAny)Úformat_flamegraphÚsegmentsÚmemoryÚcompareFc                 ó€   — | d         }| d         }|s|                      d¦  «        d         }| d         }|› d|› d|› �S )NÚlineÚfilenameú/éÿÿÿÿÚnameú:)Úsplit)ÚfÚfull_filenameÚiÚfnameÚfuncs        úDC:\Projects\DSCons\.venv\Lib\site-packages\torch\cuda\_memory_viz.pyÚ
_frame_fmtr      sW   € Ø	ˆ&Œ	€AØˆjŒM€EØð %Ø—’˜CÑ Ô  Ô$ˆØˆVŒ9€DØÐ Ð �aÐ Ð ˜$Ð Ð Ð ó    c                 óF   — g d¢}g d¢}|D ]	}|| v r dS Œ
|D ]	}||v r dS Œ
dS )N)zunwind::unwindzCapturedTraceback::gatherÚgather_with_cppÚ_startÚ__libc_start_mainÚPyEval_Ú	PyObject_ÚPyFunction_)
zcore/boxingz	/Registerz/Redispatchzpythonrun.czModules/main.czObjects/call.czObjects/methodobject.czpycore_ceval.hzceval.czcpython/abstract.hFT© )r   r   Úomit_functionsÚomit_filenamesÚofs        r   Ú_frame_filterr%      ss   € ð	ð 	ð 	€Nðð ð €Nð ð ð ˆØ�ˆ:ˆ:Ø�5�5ð àð ð ˆØ�ˆ>ˆ>Ø�5�5ð àˆ4r   c                 óB   ‡— |rt          | ¦  «        } ˆfd„| D ¦   «         S )Nc                 óh   •— g | ].}t          |d          |d         ¦  «        ¯t          |‰¦  «        ‘Œ/S )r   r   )r%   r   )Ú.0r   r   s     €r   ú
<listcomp>z_frames_fmt.<locals>.<listcomp>B   sK   ø€ ð ð ð àÝ˜˜6œ A j¤MÑ2Ô2ðÝ�1�mÑ$Ô$ðð ð r   )Úreversed)Úframesr   Úreverses    ` r   Ú_frames_fmtr-   ?   sC   ø€ Øð "Ý˜&Ñ!Ô!ˆðð ð ð àðñ ô ð r   c                 ó¼   — d| v r7| d         d                               dg ¦  «        }| d         d         d         }n|                       d| d         ¦  «        }g }||fS )NÚhistoryr   r+   Ú	real_sizeÚrequested_sizeÚsize)Úget)Úbr+   r0   s      r   Ú_block_extra_legacyr5   I   sd   € Ø�A€~€~Ø�9”˜a”×$Ò$ X¨rÑ2Ô2ˆØ�i”L ”O KÔ0ˆ	ˆ	à—E’EÐ*¨A¨f¬IÑ6Ô6ˆ	ØˆØ�9ÐÐr   c                 óH   — d| vrt          | ¦  «        S | d         | d         fS )Nr+   r1   )r5   )r4   s    r   Ú_block_extrar7   S   s0   € Ø�qÐÐå" 1Ñ%Ô%Ð%ØˆXŒ;˜Ð*Ô+Ð+Ð+r   c                 ór  — |€:t           j                             d¦  «        }t          j        |d¬¦  «         |› d�}t           j                             |¦  «        s¯dd l}dd l}t          d|› �¦  «         |                     dd¬	¦  «        5 }|j	         
                    d
|j        ¦  «         	 t          j        |j        d¦  «         t          j        |j        |¦  «         n# t          $ r Y nw xY wd d d ¦  «         n# 1 swxY w Y   |ddg}t          j        |t          j        t          j        d¬¦  «        5 }|j        €t'          d¦  «        ‚|j        €t'          d¦  «        ‚|j                             | ¦  «         |j                             ¦   «          |j                             ¦   «         }|j                             ¦   «          |                     ¦   «          |                     ¦   «         dk    r$t'          d|                     ¦   «         › �¦  «        ‚|cd d d ¦  «         S # 1 swxY w Y   d S )Nz	~/.cache/T)Úexist_okz/flamegraph.plr   zDownloading flamegraph.pl to: Úwbz.pl)ÚmodeÚsuffixzNhttps://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.plií  z--countnameÚbytesúutf-8)ÚstdinÚstdoutÚencodingzp.stdin is Nonezp.stdout is Nonez$flamegraph process exited with code )ÚosÚpathÚ
expanduserÚmakedirsÚexistsÚtempfileÚurllib.requestÚprintÚNamedTemporaryFileÚrequestÚurlretriever   ÚchmodÚrenameÚOSErrorÚ
subprocessÚPopenÚPIPEr?   ÚAssertionErrorr@   ÚwriteÚcloseÚreadÚwait)	Úflamegraph_linesÚflamegraph_scriptÚ	cache_dirrG   Úurllibr   ÚargsÚpÚresults	            r   r   r   Z   sª  € ØÐ Ý”G×&Ò& {Ñ3Ô3ˆ	Ý
Œ�I¨Ð-Ñ-Ô-Ð-Ø(Ð8Ð8Ð8ÐÝŒ7�>Š>Ð+Ñ,Ô,ð ØˆˆˆØÐÐÐåÐBÐ/@ÐBÐBÑCÔCÐCØ×(Ò(¨d¸5Ð(ÑAÔAð 
	ÀQØŒN×&Ò&Ø`Ø”ñô ð ðÝ”˜œ Ñ'Ô'Ð'Ý”	˜!œ&Ð"3Ñ4Ô4Ð4Ð4øÝð ð ð à�ðøøøð
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	ð ˜}¨gÐ6€DÝ	Ô	Ø•J”O­J¬OÀgð
ñ 
ô 
ð à	
ØŒ7ˆ?Ý Ð!2Ñ3Ô3Ð3ØŒ8ÐÝ Ð!3Ñ4Ô4Ð4Ø	Œ�ŠÐ&Ñ'Ô'Ð'Ø	Œ�Š‰ŒˆØ”—’‘”ˆØ	Œ�ŠÑÔÐØ	�Š‰ŒˆØ�6Š6‰8Œ8�qŠ=ˆ=Ý Ð!RÈÏÊÉÌÐ!RÐ!RÑSÔSÐSØðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð sI   Â!D Â/4C$Ã#D Ã$
C1Ã.D Ã0C1Ã1D Ä DÄDÄ<C#H,È,H0È3H0c                 óü  — d„ }|D ]õ}d|vrCt          |¦  «        \  }}|                      |› d|d         › d ||¦  «        › d|› d�¦  «         n{d}|d         D ]p}|d         }||z  }d	|v r9|d	         }|                      |› d|d         › d ||¦  «        › d|› d�¦  «         ŒL|                      |› d|d         › d
|› d�¦  «         Œq|d         |z
  }	|	r$|                      |› d|d         › d|	› d�¦  «         Œöd S )Nc                 óR   — | sdS d                      t          | d¬¦  «        ¦  «        S )Nz<non-python>ú;T)r,   )Újoinr-   )r+   s    r   Úframes_fragmentz&_write_blocks.<locals>.frames_fragment‚   s.   € Øð 	"Ø!�>Ø�xŠx� F°DÐ9Ñ9Ô9Ñ:Ô:Ð:r   r/   ra   Ústateú ú
r   r0   r+   z;<no-context> r2   z;<gaps> )r7   rT   )
r   ÚprefixÚblocksrc   r4   r+   Úaccounted_for_sizeÚhÚszÚgapss
             r   Ú_write_blocksrm   �   s–  € ð;ð ;ð ;ð
 ð >ð >ˆØ˜AÐÐÝ)5°a©¬Ñ&ˆFÐ&Ø�GŠGØÐYÐY˜A˜gœJÐYÐY¨¨¸Ñ)@Ô)@ÐYÐYÐCUÐYÐYÐYñô ð ð ð "#ÐØ�y”\ð Jð J�Ø�{”^�Ø" bÑ(Ð"Ø˜q�=�=Ø˜xœ[�FØ—G’G˜vÐUÐU¨¨'¬
ÐUÐU°_°_ÀVÑ5LÔ5LÐUÐUÈrÐUÐUÐUÑVÔVÐVÐVà—G’G˜vÐHÐH¨¨'¬
ÐHÐHÀ"ÐHÐHÐHÑIÔIÐIÐIØ�ŒyÐ-Ñ-ˆØð 	>Ø�GŠG�vÐ<Ð<  '¤
Ð<Ð<°DÐ<Ð<Ð<Ñ=Ô=Ð=øð%>ð >r   c                 óÎ   — t          j        ¦   «         }| d         D ]-}d|d         › d|d         › �}t          |||d         ¦  «         Œ. ||                     ¦   «         ¦  «        S )Nr   Ústream_Ústreamú;seg_Úaddressrh   ©ÚioÚStringIOrm   Úgetvalue©Úsnapshotr   r   Úsegrg   s        r   r   r   œ   sp   € Ý
Œ‰Œ€AØ˜
Ô#ð 0ð 0ˆØ?˜3˜xœ=Ð?Ð?¨s°9¬~Ð?Ð?ˆÝ�a˜  X¤Ñ/Ô/Ð/Ð/ØÐ˜QŸZšZ™\œ\Ñ*Ô*Ð*r   c                 ó¼   — t          j        ¦   «         }| d         D ]$}d|d         › �}t          |||d         ¦  «         Œ% ||                     ¦   «         ¦  «        S )Nr   ro   rp   rh   rs   rw   s        r   r   r   ¤   sd   € Ý
Œ‰Œ€AØ˜
Ô#ð 0ð 0ˆØ*˜3˜xœ=Ð*Ð*ˆÝ�a˜  X¤Ñ/Ô/Ð/Ð/ØÐ˜QŸZšZ™\œ\Ñ*Ô*Ð*r   c                 óø  ‡— d„ Šd„ }t          j        ¦   «         }ˆfd„| D ¦   «         }ˆfd„|D ¦   «         }t          dd„ ||z
  D ¦   «         › �¦  «         t          dd„ ||z
  D ¦   «         › �¦  «         | D ]2} ‰|¦  «        |vr#t          |d	 ||¦  «        › �|d
         ¦  «         Œ3|D ]2} ‰|¦  «        |vr#t          |d ||¦  «        › �|d
         ¦  «         Œ3 ||                     ¦   «         ¦  «        S )Nc                 ó"   — | d         | d         fS )Nrr   Ú
total_sizer!   ©ry   s    r   Ú_seg_keyzcompare.<locals>._seg_key­   s   € Ø�I”  LÔ 1Ð2Ð2r   c                 ó*   — d| d         › d| d         › �S )Nro   rp   rq   rr   r!   r~   s    r   Ú	_seg_infozcompare.<locals>._seg_info°   s    € Ø=˜˜XœÐ=Ð=¨S°¬^Ð=Ð=Ð=r   c                 ó&   •— h | ]} ‰|¦  «        ’ŒS r!   r!   ©r(   ry   r   s     €r   ú	<setcomp>zcompare.<locals>.<setcomp>µ   s!   ø€ Ð3Ð3Ð3 S�8�8˜C‘=”=Ð3Ð3Ð3r   c                 ó&   •— h | ]} ‰|¦  «        ’ŒS r!   r!   rƒ   s     €r   r„   zcompare.<locals>.<setcomp>¶   s!   ø€ Ð1Ð1Ð1 C�(�(˜3‘-”-Ð1Ð1Ð1r   zonly_before = c                 ó   — g | ]\  }}|‘ŒS r!   r!   ©r(   ÚaÚ_s      r   r)   zcompare.<locals>.<listcomp>¸   s   € ÐEÐEÐE¡$ ! Q˜AÐEÐEÐEr   zonly_after = c                 ó   — g | ]\  }}|‘ŒS r!   r!   r‡   s      r   r)   zcompare.<locals>.<listcomp>¹   s   € ÐDÐDÐD¡  A˜1ÐDÐDÐDr   zonly_before;rh   zonly_after;)rt   ru   rI   rm   rv   )	ÚbeforeÚafterr   r�   r   Úbefore_segsÚ
after_segsry   r   s	           @r   r	   r	   ¬   sg  ø€ ð3ð 3ð 3ð>ð >ð >õ 	Œ‰Œ€Aà3Ð3Ð3Ð3¨FÐ3Ñ3Ô3€KØ1Ð1Ð1Ð1¨5Ð1Ñ1Ô1€Jå	Ð
GÐEÐE¨;¸Ñ+CÐEÑEÔEÐ
GÐ
GÑHÔHÐHÝ	Ð
FÐDÐD¨*°{Ñ*BÐDÑDÔDÐ
FÐ
FÑGÔGÐGàð Mð MˆØˆ8�C‰=Œ= 
Ð*Ð*Ý˜!Ð<¨I¨I°c©N¬NÐ<Ð<¸cÀ(¼mÑLÔLÐLøàð Lð LˆØˆ8�C‰=Œ= Ð+Ð+Ý˜!Ð;¨9¨9°S©>¬>Ð;Ð;¸SÀ¼]ÑKÔKÐKøàÐ˜QŸZšZ™\œ\Ñ*Ô*Ð*r   c                 ó\   — dD ]$}t          | ¦  «        dk     r
| d›|› d�c S | dz  } Œ%| d›d�S )N)Ú ÚKiÚMiÚGiÚTiÚPiÚEiÚZig      �@z3.1fÚBú.1fÚYiB)Úabs)ÚnumÚunits     r   Ú_format_sizerž   Æ   sX   € à>ð ð ˆÝˆs‰8Œ8�fÒÐØÐ'Ð' Ð'Ð'Ð'Ð'Ð'Ð'Øˆv‰ˆˆØˆ?ˆ?ˆ?ˆ?Ðr   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚBytesc                 ó   — || _         d S ©N)Úvalue)Úselfr£   s     r   Ú__init__zBytes.__init__Ð   s   € ØˆŒ
ˆ
ˆ
r   c                 ó0   — t          | j        |z   ¦  «        S r¢   )r    r£   )r¤   Úrhss     r   Ú__add__zBytes.__add__Ó   s   € Ý�T”Z #Ñ%Ñ&Ô&Ð&r   c                 ó*   — t          | j        ¦  «        S r¢   )rž   r£   )r¤   s    r   Ú__repr__zBytes.__repr__Ö   s   € Ý˜DœJÑ'Ô'Ð'r   N)Ú__name__Ú
__module__Ú__qualname__r¥   r¨   rª   r!   r   r   r    r    Ï   sA   € € € € € ðð ð ð'ð 'ð 'ð(ð (ð (ð (ð (r   r    c                 ó@   — t          d„ | d         D ¦   «         ¦  «        S )Nc              3   ó>   K  — | ]}|d          dk    ¯|d         V — ŒdS )rd   Úactive_allocatedr2   Nr!   )r(   r4   s     r   ú	<genexpr>zcalc_active.<locals>.<genexpr>Û   s5   è è € ÐTÐT˜Q°1°W´:ÐASÒ3SÐ3Sˆq�ŒyÐ3SÐ3SÐ3SÐ3SÐTÐTr   rh   )Úsumr~   s    r   Úcalc_activer³   Ú   s#   € ÝÐTÐT # h¤-ÐTÑTÔTÑTÔTÐTr   c                 ó`   — | |z   }d}|dk    r||z  dz  }d|d›d�}t          |¦  «        › |› �S )Nr�   r   éd   z (r™   z% internal))r    )Úfree_externalÚfree_internalÚtotalr<   Úpcts        r   Ú_report_freerº   Þ   sS   € Ø˜MÑ)€EØ€FØ�‚z€zØ˜uÑ$¨Ñ+ˆØ*�cÐ*Ð*Ð*Ð*ˆÝ�E‰lŒlÐ$˜FÐ$Ð$Ð$r   i  @zC
Legend:
    [a     ] - a segment in the allocator
     ^-- a page aU   of memory in the segment
    a-z: pages filled with a single block's content
    ' ': page is completely free
    *: page if completely full with multiple blocks
    0-9: page is partially full with tensors of multiple blocks (9 == 90% full)
    (X% internal) - of the free memory, X% is free because we rounded the size of the allocation.
c                 óð  — t          j        ¦   «         }|                     dt          t          ¦  «        › d�¦  «         d}d}d}d}t          | d         d„ ¬¦  «        D �]£}||d         z  }d}d}d}	g }
d}|d         D ]d}|d	         d
k    }|r>t          |¦  «        \  }}|
                     ||df¦  «         |	|z  }	||d         |z
  z  }n||d         z  }||d         z  }Œe||	z  }||z  }||z  }|d         dz
  t          z  dz   }d„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }d}t          |
¦  «        D ]ç\  }\  }}}||z  }||z   }|t          z  }|dz
  t          z  dz   }t          t          |rdnd¦  «        |dz  z   ¦  «        }t          ||¦  «        D ]ƒ}t          ||t          z  ¦  «        }t          ||dz   t          z  ¦  «        }||xx         ||z
  t          z  z  cc<   ||         dk    r"dt          ||         dz  ¦  «                 ||<   Œ~|||<   Œ„Œè|d         dk    rdn
d|d         › �}d                     |¦  «        }||z   |	z   |d         k    r!t!          d|› d|› d|	› d|d         › �¦  «        ‚|d         dk    rd|d         › �nd}|d         t          k    rC|                     d|› dt          |d         ¦  «        › dt#          ||¦  «        › d |› d!�	¦  «         �Œ¥|                     d"t%          | d         ¦  «        › d!�¦  «         |                     d#t          |¦  «        › d!�¦  «         |                     d$t          |¦  «        › d!�¦  «         |                     d%t#          ||¦  «        › d!�¦  «         |                     t&          ¦  «         ||z   |z   |k    rt!          d&|› d|› d|› d|› �¦  «        ‚|                     ¦   «         S )'aý  Visually reports how the allocator has filled its segments.

    This printout can help debug fragmentation issues since free fragments
    will appear as gaps in this printout.  The amount of free space is reported
    for each segment.
    We distinguish between internal free memory which occurs because the
    allocator rounds the allocation size, and external free memory, which are
    the gaps between allocations in a segment.
    Args:
        data: snapshot dictionary created from _snapshot()
    zSummary of segments >= z	 in size
r   r   c                 ó0   — | d         t          | ¦  «        fS )Nr}   )r³   )Úxs    r   ú<lambda>zsegsum.<locals>.<lambda>  s   € ¨¨<¬½+Àa¹.¼.Ð(I€ r   ©Úkeyr}   rh   rd   r°   Tr2   é   c                 ó   — g | ]}d ‘ŒS )re   r!   ©r(   r‰   s     r   r)   zsegsum.<locals>.<listcomp>"  s   € Ð-Ð-Ð-˜A�CÐ-Ð-Ð-r   c                 ó   — g | ]}d ‘ŒS )g        r!   rÃ   s     r   r)   zsegsum.<locals>.<listcomp>#  s   € Ð)Ð)Ð)˜�Ð)Ð)Ð)r   rˆ   ÚAé   re   z0123456789*é
   rp   r�   z	, stream_zSegment size mismatch: z + z != z stream_ú[z] z allocated, z freerf   z
segments: ztotal_reserved: ztotal_allocated: ztotal_free: zMemory accounting error: )rt   ru   rT   r    Ú	PAGE_SIZEÚsortedr7   ÚappendÚrangeÚ	enumerateÚchrÚordÚmaxÚminÚintrb   rS   rº   ÚlenÚlegendrv   ) ÚdataÚoutÚtotal_reservedÚtotal_allocatedr¶   r·   ry   Úseg_free_externalÚseg_free_internalÚseg_allocatedÚ
all_rangesÚboffsetr4   Úactiver‰   Úallocated_sizeÚnsegÚoccupiedÚfracÚactive_sizer   Ústart_r2   Úfinish_ÚstartÚfinishÚmÚjÚsÚerp   Úbodys                                    r   Úsegsumrí   õ   s  € õ Œ+‰-Œ-€CØ‡I‚IÐD­­iÑ(8Ô(8ÐDÐDÐDÑEÔEÐEØ€NØ€OØ€MØ€MÝØˆZÔÐIÐIðñ ô ð 7ñ 7ˆð 	˜#˜lÔ+Ñ+ˆàÐØÐØˆØˆ
ØˆØ�X”ð 
	!ð 
	!ˆAØ�w”ZÐ#5Ò5ˆFØð /Ý$0°¡O¤OÑ!��>Ø×!Ò! 7¨N¸DÐ"AÑBÔBÐBØ Ñ/�Ø! Q v¤Y°Ñ%?Ñ?Ð!Ð!à! Q v¤YÑ.Ð!à�q˜”yÑ ˆGˆGà˜=Ñ(ˆØÐ*Ñ*ˆØÐ*Ñ*ˆà�LÔ! AÑ%­)Ñ3°aÑ7ˆØ-Ð-¥ t¡¤Ð-Ñ-Ô-ˆØ)Ð)�U 4™[œ[Ð)Ñ)Ô)ˆØˆÝ)2°:Ñ)>Ô)>ð 	$ð 	$Ñ%ˆAÑ%�˜˜fØ˜4ÑˆKØ˜t‘mˆGØ�iÑ'ˆEØ ‘k¥iÑ/°!Ñ3ˆFÝ•C˜vÐ.˜˜¨3Ñ/Ô/°1°r±6Ñ:Ñ;Ô;ˆAÝ˜5 &Ñ)Ô)ð $ð $�Ý˜ ¥I¡Ñ.Ô.�Ý˜ ! a¡%­9Ñ!4Ñ5Ô5�Ø�Q��”˜A ™E¥YÑ.Ñ.��‘Ø˜A”; #Ò%Ð%Ø"/µ°D¸´G¸b±LÑ0AÔ0AÔ"B�H˜Q‘K�Kà"#�H˜Q‘K�Kð$ð ˜8”}¨Ò)Ð)��Ð/J¸3¸x¼=Ð/JÐ/JˆØ�wŠw�xÑ Ô ˆØÐ0Ñ0°=Ñ@ÀCÈÔDUÒUÐUÝ Ø|Ð*;Ð|Ð|Ð@QÐ|Ð|ÐVcÐ|Ð|ÐilÐmyÔizÐ|Ð|ñô ð ð 03°8¬}ÀÒ/AÐ/AÐ+˜C œMÐ+Ð+Ð+ÀrˆØˆ|Ô¥	Ò)Ð)Ø�IŠIðW�Dð Wð W�E # lÔ"3Ñ4Ô4ð Wð WÝÐ 1Ð3DÑEÔEðWð WØLRðWð Wð Wñô ð ùð ‡I‚IÐ4�3˜t JÔ/Ñ0Ô0Ð4Ð4Ð4Ñ5Ô5Ð5Ø‡I‚IÐ:¥ ~Ñ!6Ô!6Ð:Ð:Ð:Ñ;Ô;Ð;Ø‡I‚IÐ<¥%¨Ñ"8Ô"8Ð<Ð<Ð<Ñ=Ô=Ð=Ø‡I‚IÐK�\¨-¸ÑGÔGÐKÐKÐKÑLÔLÐLØ‡I‚I�fÑÔÐØ�}Ñ$ Ñ6¸.ÒHÐHÝØq¨ÐqÐq¸-ÐqÐqÈOÐqÐqÐaoÐqÐqñ
ô 
ð 	
ð �<Š<‰>Œ>Ðr   c                 óâ   ‡ ‡— t          j        ¦   «         Šˆ ˆfd„}t          ‰ d         ¦  «        D ]+\  }}|r$‰                     d|› d�¦  «          ||¦  «         Œ,‰                     ¦   «         S )Nc                 ó¢  •‡‡‡— g Ši }i }g ŠdŠˆˆfd„}ˆˆfd„}d}‰                      t          | ¦  «        › d�¦  «         d}‰d         D ]}||d         z  }Œt          | ¦  «        D �]¿\  }}|d         dk    rp|d	         |d
         }
}	 |¦   «         } ||	¦  «        \  }}|€d}|	}n|	|z
  }‰                      |› d|› d|› dt          |
¦  «        › d�¦  «         ||
|f||	<   ||
z  }Œ‚|d         dk    rW|d	         |d
         }
}	|                     |	|	d d f¦  «        \  }}}‰                      d|› dt          |
¦  «        › d�¦  «         Œå|d         dk    ry|d	         |d
         }
}	||
z  }|                     |	|	d d f¦  «        \  }}}‰                      d|› dt          |
¦  «        › d�¦  «         ||v r‰                     |¦  «         ||= �Œj|d         dk    rd|d	         |d
         }
}	 |¦   «         }‰                      |› d|	› dt          |
¦  «        › d�¦  «         ‰                     ||	|
f¦  «         |||	<   �ŒÚ|d         dk    rm|d	         |d
         }
}	|                     |	|	¦  «        }‰                      d|› dt          |
¦  «        › d�¦  «         ||v r‰                     |¦  «         ||= �ŒS|d         dk    rH|d
         }
|d         }‰                      d t          |
¦  «        › d!t          |¦  «        › d"�¦  «         �Œ§‰                      |› d�¦  «         �ŒÁ‰                      d#t          |¦  «        › �¦  «         d S )$Nr   c                  ó¤   •— ‰r‰                      ¦   «         S ‰dz  ‰dz  }} ‰dz  Št          t          d¦  «        |z   ¦  «        › | dk    rdn| › �S )NrÆ   rÁ   rˆ   r   r�   )ÚpoprÎ   rÏ   )Úrrè   Ú
free_namesÚ	next_names     €€r   Ú_namez$trace.<locals>.format.<locals>._nameV  sd   ø€ àð (Ø!—~’~Ñ'Ô'Ð'Ø ‘? I°¡NˆqˆAØ˜‰NˆIÝ�#˜c™(œ( Q™,Ñ'Ô'Ð>¨q°Aªv¨v¨¨¸1Ð>Ð>Ð>r   c                 óÊ   •— ‰D ]\  }}}| |k    r| ||z   k     r||fc S Œt          ‰d         ¦  «        D ]-\  }}|d         }|d         }| |k    r| ||z   k     r	d|› �|fc S Œ.dS )Nr   rr   rß   Úseg_)NN)rÍ   )Úaddrr   Úsaddrr2   r   ry   rÕ   Úsegment_intervalss         €€r   Úfind_segmentz+trace.<locals>.format.<locals>.find_segment^  s©   ø€ Ø%6ð 'ð 'Ñ!��e˜TØ˜5’=�= T¨E°D©LÒ%8Ð%8Ø ˜;Ð&Ð&Ð&øÝ# D¨Ô$4Ñ5Ô5ð -ð -‘��3Ø˜Iœ�ØÐ+Ô,�Ø˜5’=�= T¨E°D©LÒ%8Ð%8Ø% !˜:˜: uÐ,Ð,Ð,Ð,øØ�:r   z	 entries
r   r}   ÚactionÚallocrø   r2   ÚMEMz = rÈ   r   z]
Úfree_requestedzdel z # rf   Úfree_completedz# free completed for re   Úsegment_allocz = cudaMalloc(z, z)
Úsegment_freez	cudaFree(z) # ÚoomÚdevice_freezraise OutOfMemoryError # z requested, z free in CUDA
zTOTAL MEM: )rT   rÓ   rÍ   r    r3   rË   )ÚentriesÚsegment_addr_to_nameÚallocation_addr_to_namerõ   rû   Úcountr×   ry   rë   rø   r2   ÚnÚseg_nameÚseg_addrÚoffsetr   r‰   Úfreeró   rô   rú   rÕ   rÖ   s                     @@@€€r   Úformatztrace.<locals>.formatN  s@  øøøø€ Ø"$ÐØ!ÐØ"$Ðàˆ
Øˆ	ð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð		ð 		ð 		ð 		ð 		ð 		ð ˆØ�	Š	•S˜‘\”\Ð-Ð-Ð-Ñ.Ô.Ð.àˆØ˜
Ô#ð 	0ð 	0ˆCØ˜c ,Ô/Ñ/ˆNˆNå! 'Ñ*Ô*ð -	$ñ -	$‰HˆE�1Ø�Œ{˜gÒ%Ð%Ø˜vœY¨¨&¬	�d�Ø�E‘G”G�Ø%1 \°$Ñ%7Ô%7Ñ"�˜(ØÐ#Ø$�HØ!�F�Fà! H™_�FØ—	’	˜QÐGÐG 8ÐGÐG¨fÐGÐGµu¸T±{´{ÐGÐGÐGÑHÔHÐHØ12°D¸%Ð0@Ð'¨Ñ-Ø˜‘��Ø�8”Ð 0Ò0Ð0Ø˜vœY¨¨&¬	�d�Ø4×8Ò8¸ÀÀdÈDÐ?QÑRÔR‘
��a˜Ø—	’	Ð9 Ð9Ð9­%°©+¬+Ð9Ð9Ð9Ñ:Ô:Ð:Ð:Ø�8”Ð 0Ò0Ð0Ø˜vœY¨¨&¬	�d�Ø˜‘�Ø4×8Ò8¸ÀÀdÈDÐ?QÑRÔR‘
��a˜Ø—	’	ÐH°$ÐHÐH½¸t¹¼ÐHÐHÐHÑIÔIÐIØÐ2Ð2Ð2Ø×%Ò% dÑ+Ô+Ð+Ø/°Ð5ùØ�8” Ò/Ð/Ø˜vœY¨¨&¬	�d�Ø�u‘w”w�Ø—	’	˜TÐIÐI°ÐIÐI½¸t¹¼ÐIÐIÐIÑJÔJÐJØ!×(Ò(¨$°°dÐ);Ñ<Ô<Ð<Ø-1Ð$ TÑ*Ñ*Ø�8” Ò.Ð.Ø˜vœY¨¨&¬	�d�Ø+×/Ò/°°dÑ;Ô;�Ø—	’	Ð? dÐ?Ð?µ°d±´Ð?Ð?Ð?Ñ@Ô@Ð@ØÐ/Ð/Ð/Ø×%Ò% dÑ+Ô+Ð+Ø,¨TÐ2ùØ�8” Ò%Ð%Ø˜”y�Ø˜Ô'�Ø—	’	Øeµ°d±´ÐeÐeÍÈtÉÌÐeÐeÐeñô ð ñ ð —	’	˜Q˜(˜(˜(Ñ#Ô#Ð#Ñ#Ø�	Š	Ð.¥ e¡¤Ð.Ð.Ñ/Ô/Ð/Ð/Ð/r   Údevice_traceszDevice z ----------------
)rt   ru   rÍ   rT   rv   )rÕ   r  r   ÚdrÖ   s   `   @r   Útracer  K  s˜   øø€ Ý
Œ+‰-Œ-€CðP0ð P0ð P0ð P0ð P0ð P0õd ˜$˜Ô/Ñ0Ô0ð ð ‰ˆˆ1Øð 	Ø�IŠIÐ6 Ð6Ð6Ð6Ñ7Ô7Ð7ØˆF�1‰IŒIˆIøØ�<Š<‰>Œ>Ðr   a  
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="module">
import {add_local_files} from "https://cdn.jsdelivr.net/gh/pytorch/pytorch@main/torch/utils/viz/MemoryViz.js"
const local_files = $SNAPSHOT
add_local_files(local_files, $VIZ_KIND)
</script>
</body>
c                 ó’  — |�t          j        dt          d¬¦  «         t          j        | ¦  «        }|ddt          |¦  «        dz  z
  z  z  }t          j        |¦  «                             d¦  «        }t          j        d|dœg¦  «        }t                               dt          |¦  «        ¦  «                             d	|¦  «        S )
Nz;device argument is deprecated, plots now contain all deviceé   )Ú
stackleveló    r>   zsnapshot.pickle)r   Úbase64z	$VIZ_KINDz	$SNAPSHOT)ÚwarningsÚwarnÚFutureWarningÚpickleÚdumpsrÓ   r  Ú	b64encodeÚdecodeÚjsonÚ_memory_viz_templateÚreplaceÚrepr)rÕ   Úviz_kindÚdeviceÚbufferÚencoded_bufferÚjson_formats         r   Ú_format_vizr'  ¶  sÅ   € ØÐÝŒØIÝØð	
ñ 	
ô 	
ð 	
õ
 Œ\˜$ÑÔ€FØ
ˆg˜�S ™[œ[¨1™_Ñ,Ñ-Ñ-€FåÔ% fÑ-Ô-×4Ò4°WÑ=Ô=€Nå”*Ð'8ÀNÐSÐSÐTÑUÔU€KÝ×'Ò'¨µT¸(±^´^ÑDÔD×LÒLØ�[ñô ð r   c                 óF  ‡— t          t          | d         ¦  «        ¦  «        D �]{}t          ¦   «         Ši }t          ¦   «         }t          | d         |         ¦  «        D �]\  }}|d         dk    r|||d         <   Œ|d         dk    rˆ|                     |d         ¦  «         |                     |d         ¦  «        �Q‰                     |¦  «         ‰                     ||d                  ¦  «         |                     |d         ¦  «         Œ²|d         dk    rM|d         |v r1|                     |d         ¦  «         ‰                     |¦  «         Œùt          d|› �¦  «         �Œ‰r0ˆfd„t          | d         |         ¦  «        D ¦   «         | d         |<   �Œ}| S )	Nr  rü   rý   rø   rÿ   r   z'free_completed without free_requested: c                 ó"   •— g | ]\  }}|‰v¯	|‘ŒS r!   r!   )r(   ÚidxÚeventÚ	filterSets      €r   r)   z+filter_alloc_free_pairs.<locals>.<listcomp>ã  s2   ø€ ð -ð -ð -á�C˜Ø˜iÐ'Ð'ð à'Ð'Ð'r   )	rÌ   rÓ   ÚsetrÍ   Úaddr3   rñ   ÚremoverI   )rÕ   Údev_idÚallocMapÚfreeRequestedr*  r+  r,  s         @r   Úfilter_alloc_free_pairsr3  È  sÁ  ø€ Ý�˜D Ô1Ñ2Ô2Ñ3Ô3ð ñ ˆå‘E”Eˆ	àˆå™œˆÝ# D¨Ô$9¸&Ô$AÑBÔBð 	Mñ 	M‰JˆC�Ø�XŒ 'Ò)Ð)Ø*-�˜˜vœÑ'Ð'Ø�x”Ð$4Ò4Ð4Ø×!Ò! %¨¤-Ñ0Ô0Ð0Ø—<’<  f¤Ñ.Ô.Ð:Ø—M’M #Ñ&Ô&Ð&Ø—M’M (¨5°¬=Ô"9Ñ:Ô:Ð:Ø—L’L  v¤Ñ/Ô/Ð/øØ�x”Ð$4Ò4Ð4Ø˜”= MÐ1Ð1Ø!×(Ò(¨¨v¬Ñ7Ô7Ð7Ø—M’M #Ñ&Ô&Ð&Ð&åÐKÀEÐKÐKÑLÔLÐLùð ð 	ð-ð -ð -ð -å"+¨D°Ô,AÀ&Ô,IÑ"JÔ"Jð-ñ -ô -ˆD�Ô! &Ñ)ùð €Kr   c                 óN   — |rt          | ¦  «        } t          | |sdnd|¦  «        S )aä  Generate a visualization over time of the memory usage recorded by the trace as an html file.

    Args:
        data: Memory snapshot as generated from torch.cuda.memory._snapshot()
        device (torch.device, optional): Generate the trace for this device, needed if multiple devices have allocations.
        plot_segments (bool, optional): Plots memory returned from cudaMalloc, rather than individual allocations.
                                        Defaults to False.
        filter_freed (bool, optional): Filter out alloc-free paired events to only plot allocations that are not freed yet.
                                        Defaults to False to plot all trace events.

    Returns:
        str: HTML of visualization
    úActive Memory TimelinezActive Cached Memory Timeline)r3  r'  )rÕ   r#  Úplot_segmentsÚfilter_freeds       r   Ú
trace_plotr8  ì  sB   € ð ð -Ý& tÑ,Ô,ˆåØàð	-Ð Ð à,Øñô ð r   c           	      óÔ  ‡‡‡‡‡— dd l }ddlm} ddlm}m} |                      ¦   «         Ši Š‰j        j        D ]�}|j	        |j
        k    ro|j        }g }|r3|j	        |j        |j        fv r|                     |¦  «         |j        }|°3|                     |j        ¦  «        }|r|j        j        dk    r|‰|<   Œ‚|j                             ¦   «         Šd„ t)          ‰dz   ¦  «        D ¦   «         d„ t)          ‰dz   ¦  «        D ¦   «         dœŠˆfd„Šdˆˆˆˆfd
„	}	ˆfd„}
i }‰j        D ]æ\  }}\  }}}t-          ||¦  «        sŒ||j        k    r |	|||¦  «        |||f<   Œ9||j        k    r0 |
|                     ||f¦  «         ‰|j        ¦  «        ¦  «         Œt||j        k    rH |
|                     ||f¦  «         ‰|j        ¦  «        ¦  «          |	|||dz   ¦  «        |||dz   f<   ŒÇ||j        k    r |	|||d¬¦  «        |||f<   Œçˆfd„|                     ¦   «         D ¦   «         }t=          t?          |¦  «        tA          j!        d¦  «        ¬¦  «        D ]¤\  }}‰d         |         }|d         }|D ]S\  }}}}||k     r!|d                              ||z
  ddœ¦  «         |d                              |d||dœ¦  «         ||z   }ŒT||d         k     r'|d                              |d         |z
  ddœ¦  «         Œ¥d„ ‰d         D ¦   «         ‰d<   ‰d         D ]D}|dxx         |d         z  cc<   |d         s$|d                              |d         ddœ¦  «         ŒE‰S )Nr   )Ú
_EventType)ÚActionÚ	TensorKeyc                 ó   — g | ]}g ‘ŒS r!   r!   rÃ   s     r   r)   z(_profile_to_snapshot.<locals>.<listcomp>  s   € Ð>Ð>Ð> ˜"Ð>Ð>Ð>r   rÁ   c                 ó   — g | ]
}|d ddg dœ‘ŒS )Nr   )r#  rr   r}   rp   rh   r!   )r(   r#  s     r   r)   z(_profile_to_snapshot.<locals>.<listcomp>   s@   € ð 	
ð 	
ð 	
ð ð !ØØØØðð ð	
ð 	
ð 	
r   )r  r   c                 ó,   •— | j         dk    r| j        S ‰S )NÚcuda)ÚtypeÚindex)r#  Údevice_counts    €r   Ú	to_devicez'_profile_to_snapshot.<locals>.to_device,  s   ø€ ØŒ;˜&Ò Ð Ø”<ÐàÐr   Tc                 óÒ  •—  ‰|j         ¦  «        }|j        j        }‰d         |         }|d         �|d         |k    r||d<   t          |d         || z   ¦  «        |d<   ‰j                             ||¦  «        }|�|j                             ¦   «         nd}‰
                     |d¦  «        }d„ |D ¦   «         }d|| d||d	œ}	|r!‰d
         |                              |	¦  «         |	S )Nr   rr   r}   Úunknownr!   c                 ó$   — g | ]}d d|j         dœ‘ŒS )Únoner   )r   r   r   )r   )r(   r]   s     r   r)   z:_profile_to_snapshot.<locals>.allocate.<locals>.<listcomp>?  s$   € ÐPÐPÐPÀQ˜f¨a¸¼Ð@Ð@ÐPÐPÐPr   rý   r   )rü   rø   r2   rp   r+   Úcategoryr  )	r#  ÚstorageÚptrrÐ   Ú_categoriesr3   r   ÚlowerrË   )r2   Ú
tensor_keyÚversionÚduring_tracer#  rø   ry   rI  Ústackrò   Úallocation_stacksÚmemory_profilerx   rD  s             €€€€r   Úallocatez&_profile_to_snapshot.<locals>.allocate2  s  ø€ Ø�˜:Ô,Ñ-Ô-ˆØÔ!Ô%ˆà�zÔ" 6Ô*ˆØˆyŒ>Ð! S¨¤^°dÒ%:Ð%:Ø!ˆC�	‰NÝØ�Ô˜t d™{ñ
ô 
ˆˆLÑð "Ô-×1Ò1°*¸gÑFÔFˆØ,4Ð,@�8”=×&Ò&Ñ(Ô(Ð(ÀiˆØ!×%Ò% j°"Ñ5Ô5ˆØPÐPÈ%ÐPÑPÔPˆàØØØØØ ð
ð 
ˆð ð 	8Ø�_Ô% fÔ-×4Ò4°QÑ7Ô7Ð7Øˆr   c           	      ó„   •— dD ];}‰d         |                               || d         | d         d| d         dœ¦  «         Œ<d S )N)rÿ   r   r  rø   r2   r   r+   )rü   rø   r2   rp   r+   )rË   )rý   r#  rë   rx   s      €r   r  z"_profile_to_snapshot.<locals>.freeL  sh   ø€ Ø5ð 		ð 		ˆAØ�_Ô% fÔ-×4Ò4àØ! &œMØ! &œMØØ# Hœoðð ñô ð ð ð		ð 		r   F)rP  c                 óh   •— g | ].\  \  }}} ‰|j         ¦  «        |d          |d         |d         f‘Œ/S )rø   r2   r+   ©r#  )r(   rN  rO  r+  rD  s       €r   r)   z(_profile_to_snapshot.<locals>.<listcomp>m  sT   ø€ ð ð ð á(Ñ!ˆZ˜ 5ð 
ˆ�:Ô$Ñ	%Ô	% u¨V¤}°e¸F´mÀUÈ8Ä_ÐUðð ð r   r¿   r   rr   rh   Úinactive)r2   rd   r°   )r2   rd   r1   r+   r}   c                 ó"   — g | ]}|d          ¯
|‘ŒS )rh   r!   )r(   ry   s     r   r)   z(_profile_to_snapshot.<locals>.<listcomp>…  s!   € ÐQÐQÐQ CÀ3ÀxÄ=ÐQ˜CÐQÐQÐQr   )T)"ÚtorchÚtorch._C._profilerr:  Útorch.profiler._memory_profilerr;  r<  Ú_memory_profileÚ_op_treeÚsorted_nodesÚtagÚ
AllocationÚparentÚPyCallÚPyCCallrË   Úfrom_allocationÚextra_fieldsÚ
alloc_sizer@  rC  rÌ   ÚtimelineÚ
isinstanceÚCREATEÚDESTROYrñ   r#  ÚINCREMENT_VERSIONÚPREEXISTINGÚitemsr   rÊ   ÚoperatorÚ
itemgetter)ÚprofilerZ  r:  r;  r<  r+  rb  Úpython_parentsrÀ   rT  r  Ú
kv_to_elemÚ_timerü   rN  rO  r2   Úblocks_at_endr#  rh   ry   Ú	last_addrr‰   rø   r+   rR  rC  rS  rx   rD  s                            @@@@@r   Ú_profile_to_snapshotrw    sö  øøøøø€ Ø€L€L€LØ-Ð-Ð-Ð-Ð-Ð-ØAÐAÐAÐAÐAÐAÐAÐAà×,Ò,Ñ.Ô.€NàÐØÔ(Ô5ð 8ð 8ˆØŒ9˜
Ô-Ò-Ð-Ø”\ˆFØˆNØð 'Ø”: *Ô"3°ZÔ5GÐ!HÐHÐHØ"×)Ò)¨&Ñ1Ô1Ð1Øœ�ð ð 'ð ×+Ò+¨EÔ,>Ñ?Ô?ˆCð ð 8�uÔ)Ô4°qÒ8Ð8Ø)7Ð! #Ñ&øà”:×*Ò*Ñ,Ô,€Là>Ð>¥e¨L¸1Ñ,<Ñ&=Ô&=Ð>Ñ>Ô>ð	
ð 	
õ   ¨qÑ 0Ñ1Ô1ð	
ñ 	
ô 	
ð&ð &€Hð ð  ð  ð  ð  ðð ð ð ð ð ð ð ð ð4
ð 
ð 
ð 
ð 
ð €Jð 7EÔ6Mð ð Ñ2ˆˆvÑ,˜
 G¨dÝ˜* iÑ0Ô0ð 	ØØ�V”]Ò"Ð"Ø08°¸¸zÈ7Ñ0SÔ0SˆJ˜
 GÐ,Ñ-Ð-Ø�v”~Ò%Ð%ØˆD�—’ ¨WÐ 5Ñ6Ô6¸	¸	À*ÔBSÑ8TÔ8TÑUÔUÐUÐUØ�vÔ/Ò/Ð/ØˆD�—’ ¨WÐ 5Ñ6Ô6¸	¸	À*ÔBSÑ8TÔ8TÑUÔUÐUØ4<°HØ�j '¨A¡+ñ5ô 5ˆJ˜
 G¨a¡KÐ0Ñ1Ð1ð �vÔ)Ò)Ð)Ø08°Ø�j '¸ð1ñ 1ô 1ˆJ˜
 GÐ,Ñ-øð
ð ð ð à,6×,<Ò,<Ñ,>Ô,>ðñ ô €Mõ "¥&¨Ñ"7Ô"7½XÔ=PÐQRÑ=SÔ=SÐTÑTÔTð ð ‰ˆ�Ø�zÔ" 6Ô*ˆØ˜	”Nˆ	Ø%+ð 	$ð 	$Ñ!ˆAˆt�T˜6Ø˜4ÒÐØ�H”×$Ò$¨d°YÑ.>ÈÐ%TÐ%TÑUÔUÐUØ�ŒM× Ò à Ø/Ø&*Ø$ð	ð ñô ð ð ˜t™ˆIˆIØ�s˜<Ô(Ò(Ð(Ø�ŒM× Ò Ø˜\Ô*¨YÑ6ÀÐLÐLñô ð øð RÐQ¨8°JÔ+?ÐQÑQÔQ€HˆZÑØ˜
Ô#ð Sð SˆØˆLÐÐÔ˜S œ^Ñ+ÐÐÑØ�8Œ}ð 	SØ�ŒM× Ò ¨#¨lÔ*;ÀjÐ!QÐ!QÑRÔRÐRøà€Or   c                 óB   — t          | ¦  «        }t          |d|¦  «        S )a}  Generate a visualization over time of the memory usage recorded by kineto memory profiling as an html file.

    Args:
        profile: profile as generated by `torch.profiler.profile(profile_memory=True)`
        device (torch.device, optional): Generate the trace for this device, needed if multiple devices have allocations.

    Returns:
        str: HTML of visualization
    r5  )rw  r'  )rq  r#  rx   s      r   Úprofile_plotry  Ž  s$   € õ $ GÑ,Ô,€HÝ�xÐ!9¸6ÑBÔBÐBr   rÕ   c                 ó$   — t          | d|¦  «        S )NzAllocator State History)r'  )rÕ   r#  s     r   Úsegment_plotr{  œ  s   € Ý�tÐ6¸Ñ?Ô?Ð?r   Ú__main__ztorch.cuda.memory._snapshot()zpickled memory statistics from z#Visualize memory dumps produced by )Údescriptionrü   )Údestc                 ó8   — |                       dddd¬¦  «         d S )Nú-oú--outputz
output.svgz$flamegraph svg (default: output.svg)©ÚdefaultÚhelp)Úadd_argument)r]   s    r   Ú_outputr†  ±  s3   € Ø	�ŠØØØ Ø7ð	 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   zmPrints overall allocation statistics and a visualization of how the allocators segments are currently filled.ÚstatsÚinput)r„  z`Prints buffer of the most recent allocation events embedded in the snapshot in a Pythonic style.r  zaGenerate a flamegraph that visualizes what memory is stored in each allocator segment (aka block)r   zNGenerate a flamegraph the program locations contributing to CUDA memory usage.r   zGenerate a flamegraph that shows segments (aka blocks) that have been added or removed between two different memorys snapshots.r	   r‹   rŒ   ))r8  z]Generate a visualization over time of the memory usage recorded by the trace as an html file.)r{  zfVisualize how allocations are packed into allocator segments at each point in a trace as an html file.z]visualize trace from this device (default: chooses the only device with trace info or errors)z-dz--device)rA  rƒ  r„  z4path to save the visualization(default: output.html)r€  r�  zoutput.htmlr‚  r8  z?visualize change to segments rather than individual allocationsz-sz
--segmentsÚ
store_true)rü   r„  z¢filter out allocation-free pairs to only visualize the allocations that are not freed yet;useful to reduce the number of events for large traces for debugging OOMz-fz--filter_freedc                 ó  — | dk    r$t          j        t          j        j        ¦  «        }n<t          | d¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |t          ¦  «        r|g dœ}|S )Nú-Úrb)r   Útraces)r  ÚloadÚsysr?   r$  Úopenri  Úlist©r   rÕ   r   s      r   Ú_readr“  ÷  s´   € Ø�3Š;ˆ;Ý”;�sœyÔ/Ñ0Ô0ˆDˆDå�d˜DÑ!Ô!ð & QÝ”{ 1‘~”~�ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &å�d�DÑ!Ô!ð 	4Ø $°Ð3Ð3ˆDØˆs   »AÁA Á#A c                 ó‚   — t          | d¦  «        5 }|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚw)r�  rT   r’  s      r   Ú_writer–    s€   € Ý�$˜‰_Œ_ð 	 Ø�GŠG�D‰MŒMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ‘4´8»8)r#  r6  r7  r{  rW  )F)FFr¢   )NFF)Tr  rt   r  ro  rB   r  rP   r�  r  Ú	functoolsr   Ú	itertoolsr   Útypingr   ÚcacheÚ__all__r   r%   r-   r5   r7   r   rm   r   r   r	   rž   r    r³   rº   rÉ   rÔ   rí   r  r  r'  r3  r8  rw  ry  r{  r«   Úos.pathrC   ÚrealpathÚdirnameÚ__file__Úthedirr/  ÚargparseÚfn_nameÚpickledÚArgumentParserÚparserÚadd_subparsersÚ
subparsersr†  r}  Ú
add_parserÚstats_ar…  Útrace_aÚ
segments_aÚmemory_aÚ	compare_aÚplotsÚcmdÚtrace_plot_ar„  rÒ   Ú
parse_argsr\   r“  r–  rü   rˆ  rÕ   ÚoutputrI   r‹   rŒ   r#  r7  r!   r   r   ú<module>r³     s  ðà €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð 	ˆ	�$‰Œ€à
@Ð
@Ð
@€ð!ð !ð !ð !ð ðð ñ „ðð@ð ð ð ðð ð ð,ð ,ð ,ð$ð $ð $ð $ðN>ð >ð >ð6 *;ð +ð +ð +ð +ð (9ð +ð +ð +ð +ð .?ð +ð +ð +ð +ð4ð ð ð(ð (ð (ð (ð (ñ (ô (ð (ðUð Uð Uð%ð %ð %ð €	ð

ð ��yÑ!Ô!ð	

ð 

ð 

€ðSð Sð SðlYð Yð YðxÐ ðð ð ð$!ð !ð !ðHð ð ð ð4Eð Eð EðPCð Cð Cð Cð@ð @�sð @ð @ð @ð @ð ˆzÒÑØ€N€N€NàŒW×Ò˜bœgŸošo¨hÑ7Ô7Ñ8Ô8€FØ�”ÐÐàŒ�Š˜ÑÔÐØ€O€O€Oà-€GØ9°Ð9Ð9€GØ$ˆXÔ$ØC¸'ÐCÐCðñ ô €Fð ×&Ò&¨HÐ&Ñ5Ô5€Jð
ð 
ð 
ð B€KØ×#Ò# G¸Ð#ÑEÔE€GØ×Ò˜ wÐÑ/Ô/Ð/àt€KØ×#Ò# G¸Ð#ÑEÔE€GØ×Ò˜ wÐÑ/Ô/Ð/àu€KØ×&Ò& z¸{Ð&ÑKÔK€JØ×Ò˜G¨'ÐÑ2Ô2Ð2Ø€GˆJÑÔÐð 	Yð ð ×$Ò$ X¸;Ð$ÑGÔG€HØ×Ò˜'¨ÐÑ0Ô0Ð0Ø€GˆHÑÔÐð	>ð ð ×%Ò% i¸[Ð%ÑIÔI€IØ×Ò˜8¨'ÐÑ2Ô2Ð2Ø×Ò˜7¨ÐÑ1Ô1Ð1Ø€GˆIÑÔÐð	€Eð "ð ð Ñˆˆ[Ø!×,Ò,¨S¸kÐ,ÑJÔJˆØ×!Ò! '°Ð!Ñ8Ô8Ð8ØnˆØ×!Ò! $¨
¸ÀdÐQUÐ!ÑVÔVÐVØEˆØ×!Ò! $¨
¸MÐPTÐ!ÑUÔUÐUØ�,ÒÐØTˆDØ×%Ò%Ø�l¨<¸dð &ñ ô ð ð
[ð ð ×%Ò%ØÐ&¨|À$ð &ñ ô ð øð ×ÒÑÔ€Dðð ð ðð ð ð „{�jÒ Ð Øˆu�T”ZÑ Ô ˆØˆˆtŒ{˜H˜H T™NœNÑ+Ô+Ð+Ð+Ð+Ø	Œ˜Ò	 Ð	 Øˆu�T”ZÑ Ô ˆØˆˆtŒ{˜F˜F 4™LœLÑ)Ô)Ð)Ð)Ð)Ø	Œ˜Ò	Ð	Øˆu�T”ZÑ Ô ˆØˆˆfˆf�T‰lŒlÑÔÐÐÐØ	Œ˜Ò	Ð	Øˆu�T”ZÑ Ô ˆØˆˆeˆe�D‰kŒkÑÔÐÐÐØ	Œ˜	Ò	!Ð	!Ø��t”{Ñ#Ô#ˆØ��d”jÑ!Ô!ˆØˆˆtŒ{˜G˜G F¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3Ø	Œ˜Ò	$Ð	$Øˆu�T”ZÑ Ô ˆØˆØŒKØˆJØØ”{Ø"œmØ!Ô.ð	ñ ô ñ	
ô 	
ð 	
ð 	
ð 	
ð 
Œ˜Ò	&Ð	&Øˆu�T”ZÑ Ô ˆØˆˆtŒ{˜L˜L¨°d´kÐBÑBÔBÑCÔCÐCÐCÐCðE Ðð@ 
'Ð	&r   