Ë
    g^(hÍc  ã                   ó 	  — 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dLd„Zed„ «       ZdMd„Zd	„ Zd
„ ZdNd„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$dOd„Z%d„ Z&dNd„Z'dNdefd „Z(e)d!k(  �rÜd dl*ZejV                  jY                  ejV                  j[                  e.«      «      Z/e/ejV                  v rejV                  ja                  e/«       d dl1Z1d"Z2d#e2› �Z3 e1jh                  d$e2› �¬%«      Z5e5jm                  d&¬'«      Z7d(„ Z8d)Z9e7ju                  d*e9¬%«      Z;e;jy                  d+e3¬,«       d-Z9e7ju                  d.e9¬%«      Z=e=jy                  d+e3¬,«       d/Z9e7ju                  d0e9¬%«      Z>e>jy                  d+e3¬,«        e8e>«       d1Z9e7ju                  d2e9¬%«      Z?e?jy                  d+e3¬,«        e8e?«       d3Z9e7ju                  d4e9¬%«      Z@e@jy                  d5e3¬,«       e@jy                  d6e3¬,«        e8e@«       d7ZAeAD ]w  \  ZBZ9e7ju                  eBe9¬%«      ZCeCjy                  d+e3¬,«       d8ZDeCjy                  d9d:eEdeD¬;«       d<ZDeCjy                  d=d>d?eD¬@«       eBdAk(  sŒadBZDeCjy                  dCdDdEeD¬F«       Œy e5j�                  «       ZGdG„ ZHdH„ ZIeGj”                  d0k(  r, eHeGj–                  «      ZL eIeGjš                   eeL«      «       yeGj”                  d2k(  r, eHeGj–                  «      ZL eIeGjš                   eeL«      «       yeGj”                  d*k(  r! eHeGj–                  «      ZL eN e!eL«      «       yeGj”                  d.k(  r! eHeGj–                  «      ZL eN e"eL«      «       yeGj”                  d4k(  r? eHeGjž                  «      ZO eHeGj                   «      ZP eIeGjš                   eeOeP«      «       yeGj”                  dAk(  rC eHeGj–                  «      ZL eIeGjš                   e%eLeGj¢                  eGj0                  ¬I«      «       yeGj”                  dJk(  r8 eHeGj–                  «      ZL eIeGjš                   e(eLeGj¢                  ¬K«      «       yyy)Pé    N)Ú	lru_cache)Úgroupby)ÚAny)Úformat_flamegraphÚsegmentsÚmemoryÚcomparec                 ó`   — | d   }| d   }|s|j                  d«      d   }| d   }|› d|› d|› �S )NÚlineÚfilenameú/éÿÿÿÿÚnameú:)Úsplit)ÚfÚfull_filenameÚiÚfnameÚfuncs        úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/cuda/_memory_viz.pyÚ
_frame_fmtr      sJ   € Ø	ˆ&‰	€AØˆj‰M€EÙØ—‘˜CÓ  Ñ$ˆØˆV‰9€DØˆW�A�a�S˜˜$˜Ð Ð ó    c                 óH   — g d¢}g d¢}|D ]  }|| v sŒ y |D ]  }||v sŒ y y)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%      sK   € ò	€Nò€Nð ò ˆØ�Š:Ùðð ò ˆØ�Š>Ùðð r   c                 ó~   — |rt        | «      } | D �cg c]   }t        |d   |d   «      rt        ||«      ‘Œ" c}S c c}w )Nr   r   )Úreversedr%   r   )Úframesr   Úreverser   s       r   Ú_frames_fmtr*   ?   sJ   € ÙÜ˜&Ó!ˆð öàÜ˜˜6™ A j¡MÔ2ô 	�1�mÕ$òð ùò s   ’%:c                 óŽ   — d| v r'| d   d   j                  dg «      }| d   d   d   }||fS | j                  d| d   «      }g }||fS )NÚhistoryr   r(   Ú	real_sizeÚrequested_sizeÚsize)Úget)Úbr(   r-   s      r   Ú_block_extra_legacyr2   I   si   € Ø�A�~Ø�9‘˜a‘×$Ñ$ X¨rÓ2ˆØ�i‘L ‘O KÑ0ˆ	ð �9ÐÐð —E‘EÐ*¨A¨f©IÓ6ˆ	ØˆØ�9ÐÐr   c                 ó4   — d| vrt        | «      S | d   | d   fS )Nr(   r.   )r2   )r1   s    r   Ú_block_extrar4   S   s*   € Ø�qÑä" 1Ó%Ð%ØˆX‰;˜Ð*Ñ+Ð+Ð+r   c                 óÌ  — |€dt        j                  «       › d�}t         j                  j                  |«      sFdd l}t        d|› �«       |j                  j                  d|«       t        j                  dd|g«       |dd	g}t        j                  |t        j                  t        j                  d
¬«      }|j                  €J ‚|j                  €J ‚|j                  j                  | «       |j                  j                  «        |j                  j!                  «       }|j                  j                  «        |j#                  «        |j#                  «       dk(  sJ ‚|S )Nz/tmp/z_flamegraph.plr   zDownloading flamegraph.pl to: zNhttps://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.plÚchmodz+xz--countnameÚbytesúutf-8)ÚstdinÚstdoutÚencoding)ÚosÚgetuidÚpathÚexistsÚurllib.requestÚprintÚrequestÚurlretrieveÚ
subprocessÚ
check_callÚPopenÚPIPEr9   r:   ÚwriteÚcloseÚreadÚwait)Úflamegraph_linesÚflamegraph_scriptÚurllibÚargsÚpÚresults         r   r   r   Z   s  € ØÐ Ø#¤B§I¡I£K =°Ð?ÐÜ�7‰7�>‰>Ð+Ô,ÛäÐ.Ð/@Ð.AÐBÔCØ�‰×"Ñ"Ø\Øô	
ô 	×Ñ˜w¨Ð.?Ð@ÔAØ˜}¨gÐ6€DÜ×ÑØ”J—O‘O¬J¯O©OÀgô	€Að �7‰7ÐÐÐØ�8‰8ÐÐÐØ‡G�G‡M�MÐ"Ô#Ø‡G�G‡M�M„OØ�X‰X�]‰]‹_€FØ‡H�H‡N�NÔØ‡F�F„HØ�6‰6‹8�qŠ=Ðˆ=Ø€Mr   c                 ó   — d„ }|D ]Æ  }d|vr5t        |«      \  }}| j                  |› d|d   › d ||«      › d|› d�«       ncd}|d   D ]Y  }|d   }||z  }d	|v r,|d	   }| j                  |› d|d   › d ||«      › d|› d�«       Œ=| j                  |› d|d   › d
|› d�«       Œ[ |d   |z
  }	|	sŒª| j                  |› d|d   › d|	› d�«       ŒÈ y )Nc                 ó@   — | sydj                  t        | d¬«      «      S )Nz<non-python>ú;T)r)   )Újoinr*   )r(   s    r   Úframes_fragmentz&_write_blocks.<locals>.frames_fragmentv   s   € ÙØ!Ø�x‰xœ F°DÔ9Ó:Ð:r   r,   rT   Ústateú ú
r   r-   r(   z;<no-context> r/   z;<gaps> )r4   rH   )
r   ÚprefixÚblocksrV   r1   r(   Úaccounted_for_sizeÚhÚszÚgapss
             r   Ú_write_blocksr`   u   s/  € ò;ð
 ò >ˆØ˜AÑÜ)5°a«Ñ&ˆFÐ&Ø�G‰GØ�(˜!˜A˜g™J˜< q©¸Ó)@Ð(AÀÐCUÐBVÐVXÐYõð "#ÐØ�y‘\ò J�Ø�{‘^�Ø" bÑ(Ð"Ø˜q‘=Ø˜x™[�FØ—G‘G˜v˜h a¨¨'©
 |°1±_ÀVÓ5LÐ4MÈQÈrÈdÐRTÐUÕVà—G‘G˜v˜h a¨¨'©
 |°>À"ÀÀRÐHÕIðJð �‰yÐ-Ñ-ˆÚØ�G‰G�v�h˜a  '¡
˜|¨8°D°6¸Ð<Õ=ñ%>r   c                 ó¦   — t        j                  «       }| d   D ]   }d|d   › d|d   › �}t        |||d   «       Œ"  ||j                  «       «      S )Nr   Ústream_Ústreamú;seg_Úaddressr[   ©ÚioÚStringIOr`   Úgetvalue©Úsnapshotr   r   ÚsegrZ   s        r   r   r   �   s_   € Ü
�‰‹€AØ˜
Ñ#ò 0ˆØ˜3˜x™=˜/¨¨s°9©~Ð.>Ð?ˆÜ�a˜  X¡Õ/ð0ñ ˜QŸZ™Z›\Ó*Ð*r   c                 óš   — t        j                  «       }| d   D ]  }d|d   › �}t        |||d   «       Œ  ||j                  «       «      S )Nr   rb   rc   r[   rf   rj   s        r   r   r   ˜   sT   € Ü
�‰‹€AØ˜
Ñ#ò 0ˆØ˜3˜x™=˜/Ð*ˆÜ�a˜  X¡Õ/ð0ñ ˜QŸZ™Z›\Ó*Ð*r   c           	      ó  — d„ }d„ }t        j                  «       }| D �ch c]
  } ||«      ’Œ }}|D �ch c]
  } ||«      ’Œ }}t        d||z
  D �	�
cg c]  \  }	}
|	‘Œ	 c}
}	› �«       t        d||z
  D �	�
cg c]  \  }	}
|	‘Œ	 c}
}	› �«       | D ]&  } ||«      |vsŒt        |d ||«      › �|d   «       Œ( |D ]&  } ||«      |vsŒt        |d ||«      › �|d   «       Œ(  ||j	                  «       «      S c c}w c c}w c c}
}	w c c}
}	w )Nc                 ó   — | d   | d   fS )Nre   Ú
total_sizer!   ©rl   s    r   Ú_seg_keyzcompare.<locals>._seg_key¡   s   € Ø�I‘  LÑ 1Ð2Ð2r   c                 ó   — d| d   › d| d   › �S )Nrb   rc   rd   re   r!   rq   s    r   Ú	_seg_infozcompare.<locals>._seg_info¤   s   € Ø˜˜X™˜ u¨S°©^Ð,<Ð=Ð=r   zonly_before = zonly_after = zonly_before;r[   zonly_after;)rg   rh   rA   r`   ri   )ÚbeforeÚafterr   rr   rt   r   rl   Úbefore_segsÚ
after_segsÚaÚ_s              r   r	   r	       s$  € ò3ò>ô 	�‰‹€Aà,2Ö3 S‘8˜C•=Ð3€KÐ3Ø+0Ö1 C‘(˜3•-Ð1€JÐ1ä	ˆN¨;¸Ñ+C×E¡$ ! QšAÓEÐFÐ
GÔHÜ	ˆM¨*°{Ñ*B×D¡  Aš1ÓDÐEÐ
FÔGàò MˆÙ�C‹= 
Ò*Ü˜!˜|©I°c«NÐ+;Ð<¸cÀ(¹mÕLðMð ò LˆÙ�C‹= Ò+Ü˜!˜{©9°S«>Ð*:Ð;¸SÀ¹]ÕKðLñ ˜QŸZ™Z›\Ó*Ð*ùò 4ùÚ1ùãEùÛDs   ŸC9´C>ÁDÁ7D	c                 óV   — 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Š   º   sI   € à>ò ˆÜˆs‹8�fÒØ˜$�Z ˜v QÐ'Ò'Øˆv‰‰ðð �#ˆY�cˆ?Ðr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚBytesc                 ó   — || _         y ©N)Úvalue)Úselfr�   s     r   Ú__init__zBytes.__init__Ä   s	   € Øˆ�
r   c                 ó2   — t        | j                  |z   «      S rŽ   )rŒ   r�   )r�   Úrhss     r   Ú__add__zBytes.__add__Ç   s   € Ü�T—Z‘Z #Ñ%Ó&Ð&r   c                 ó,   — t        | j                  «      S rŽ   )rŠ   r�   )r�   s    r   Ú__repr__zBytes.__repr__Ê   s   € Ü˜DŸJ™JÓ'Ð'r   N)Ú__name__Ú
__module__Ú__qualname__r‘   r”   r–   r!   r   r   rŒ   rŒ   Ã   s   „ òò'ó(r   rŒ   c                 ó,   — t        d„ | d   D «       «      S )Nc              3   ó8   K  — | ]  }|d    dk(  sŒ|d   –— Œ y­w)rW   Úactive_allocatedr/   Nr!   )Ú.0r1   s     r   ú	<genexpr>zcalc_active.<locals>.<genexpr>Ï   s    è ø€ ÒT˜Q°1°W±:ÐASÓ3Sˆq��yÑTùs   ‚�
r[   )Úsumrq   s    r   Úcalc_activer    Î   s   € ÜÑT # h¡-ÔTÓTÐTr   c                 óV   — | |z   }d}|dk7  r||z  dz  }d|d›d�}t        |«      › |› �S )Nr|   r   éd   z (r…   z% internal))rŒ   )Úfree_externalÚfree_internalÚtotalÚsuffixÚpcts        r   Ú_report_freer¨   Ò   sJ   € Ø˜MÑ)€EØ€FØ�‚zØ˜uÑ$¨Ñ+ˆØ�c˜#�Y˜kÐ*ˆÜ�E‹lˆ^˜F˜8Ð$Ð$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                  «       }|j                  dt        t        «      › d�«       d}d}d}d}t        | d   d„ ¬«      D �]  }||d   z  }d}d}d}	g }
d}|d   D ]O  }|d	   d
k(  }|r3t        |«      \  }}|
j                  ||df«       |	|z  }	||d   |z
  z  }n||d   z  }||d   z  }ŒQ ||	z  }||z  }||z  }|d   dz
  t        z  dz   }t        |«      D �cg c]  }d‘Œ }}t        |«      D �cg c]  }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 ]g  }t        ||t        z  «      }t        ||dz   t        z  «      }||xx   ||z
  t        z  z  cc<   ||   dk7  rdt        ||   dz  «         ||<   Œc|||<   Œi ŒÁ |d   dk(  rdnd|d   › �}dj                  |«      }||z   |	z   |d   k(  sJ ‚|d   dk7  rd|d   › �nd}|d   t        k\  s�Œà|j                  d|› dt        |d   «      › dt!        ||«      › d|› d�	«       �Œ |j                  dt#        | d   «      › d�«       |j                  dt        |«      › d�«       |j                  d t        |«      › d�«       |j                  d!t!        ||«      › d�«       |j                  t$        «       ||z   |z   |k(  sJ ‚|j'                  «       S c c}w c c}w )"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                 ó"   — | d   t        | «      fS )Nrp   )r    )Úxs    r   ú<lambda>zsegsum.<locals>.<lambda>ü   s   € ¨¨<©¼+Àa».Ð(I€ r   ©Úkeyrp   r[   rW   rœ   Tr/   é   rX   g        ry   ÚAé   z0123456789*é
   rc   r|   z	, stream_z stream_ú[z] z allocated, z freerY   z
segments: ztotal_reserved: ztotal_allocated: ztotal_free: )rg   rh   rH   rŒ   Ú	PAGE_SIZEÚsortedr4   ÚappendÚrangeÚ	enumerateÚchrÚordÚmaxÚminÚintrU   r¨   ÚlenÚlegendri   ) ÚdataÚoutÚtotal_reservedÚtotal_allocatedr£   r¤   rl   Úseg_free_externalÚseg_free_internalÚseg_allocatedÚ
all_rangesÚboffsetr1   Úactiverz   Úallocated_sizeÚnsegÚoccupiedÚfracÚactive_sizer   Ústart_r/   Úfinish_ÚstartÚfinishÚmÚjÚsÚerc   Úbodys                                    r   ÚsegsumrØ   é   sÖ  € ô �+‰+‹-€CØ‡I�IÐ'¬¬iÓ(8Ð'9¸ÐDÔEØ€NØ€OØ€MØ€MÜØˆZÑÑIôó 6ˆð 	˜#˜lÑ+Ñ+ˆàÐØÐØˆØˆ
ØˆØ�X‘ò 
	!ˆAØ�w‘ZÐ#5Ñ5ˆFÙÜ$0°£OÑ!��>Ø×!Ñ! 7¨N¸DÐ"AÔBØ Ñ/�Ø! Q v¡Y°Ñ%?Ñ?Ñ!à! Q v¡YÑ.Ð!à�q˜‘yÑ ‰Gð
	!ð 	˜=Ñ(ˆØÐ*Ñ*ˆØÐ*Ñ*ˆà�LÑ! AÑ%¬)Ñ3°aÑ7ˆÜ!& t£Ö-˜A’CÐ-ˆÐ-Ü" 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�Ø�Q“˜A ™E¤YÑ.Ñ.“Ø˜A‘; #Ò%Ø"/´°D¸±G¸b±LÓ0AÑ"B�H˜Q’Kà"#�H˜Q’Kñ$ð	$ð ˜8‘}¨Ò)‘°¸3¸x¹=¸/Ð/JˆØ�w‰w�xÓ ˆàÐ 1Ñ1°MÑAÀSÈÑEVÒVð	
ØVà/2°8©}ÀÒ/A�8˜C ™M˜?Ñ+ÀrˆØˆ|Ñ¤	Ô)Ø�I‰IØ�D�6˜œE # lÑ"3Ó4Ð5°\ÜÐ 1Ð3DÓEÐFÀeÈFÈ8ÐSUðWöðg6ðn ‡I�I�
œ3˜t JÑ/Ó0Ð1°Ð4Ô5Ø‡I�IÐ ¤ ~Ó!6Ð 7°rÐ:Ô;Ø‡I�IÐ!¤%¨Ó"8Ð!9¸Ð<Ô=Ø‡I�I�œ\¨-¸ÓGÐHÈÐKÔLØ‡I�IŒfÔØ˜=Ñ(¨?Ñ:¸nÒLÐLÐLØ�<‰<‹>ÐùòE .ùÚ)s   Ã+	LÄ	Lc                 óÆ   ‡ ‡— t        j                  «       Šˆ ˆfd„}t        ‰ d   «      D ]%  \  }}|sŒ	‰j                  d|› d�«        ||«       Œ' ‰j	                  «       S )Nc                 óR  •‡‡‡— g Ši }i }g ŠdŠˆˆfd„}ˆˆfd„}d}‰j                  t        | «      › d�«       d}‰d   D ]
  }||d   z  }Œ t        | «      D �].  \  }}|d   dk(  r\|d	   |d
   }
}	 |«       } ||	«      \  }}|€d}|	}n|	|z
  }‰j                  |› d|› d|› dt        |
«      › d�«       ||
|f||	<   ||
z  }Œk|d   dk(  rE|d	   |d
   }
}	|j	                  |	|	d d f«      \  }}}‰j                  d|› dt        |
«      › d�«       Œ¸|d   dk(  re|d	   |d
   }
}	||
z  }|j	                  |	|	d d f«      \  }}}‰j                  d|› dt        |
«      › d�«       ||v s�Œ‰j                  |«       ||= �Œ%|d   dk(  rO|d	   |d
   }
}	 |«       }‰j                  |› d|	› dt        |
«      › d�«       ‰j                  ||	|
f«       |||	<   �Œ||d   dk(  rY|d	   |d
   }
}	|j	                  |	|	«      }‰j                  d|› dt        |
«      › d�«       ||v s�ŒÇ‰j                  |«       ||= �ŒÝ|d   dk(  r6|d
   }
|d   }‰j                  d t        |
«      › d!t        |«      › d"�«       �Œ‰j                  |› d�«       �Œ1 ‰j                  d#t        |«      › �«       y )$Nr   c                  óŽ   •— ‰r‰j                  «       S ‰dz  ‰dz  }} ‰dz  Št        t        d«      |z   «      › | dk(  rd› �S | › �S )Nr±   r¯   ry   r   r|   )Úpopr¹   rº   )ÚrrÓ   Ú
free_namesÚ	next_names     €€r   Ú_namez$trace.<locals>.format.<locals>._nameF  s\   ø€ áØ!—~‘~Ó'Ð'Ø ‘? I°¡NˆqˆAØ˜‰NˆIÜœ#˜c›( Q™,Ó'Ð(¨q°Aªv¨Ð(=Ð>Ð>¸1Ð(=Ð>Ð>r   c                 ó²   •— ‰D ]  \  }}}| |k\  sŒ| ||z   k  sŒ||fc S  t        ‰d   «      D ]&  \  }}|d   }|d   }| |k\  sŒ| ||z   k  sŒd|› �|fc S  y)Nr   re   rÊ   Úseg_)NN)r¸   )Úaddrr   Úsaddrr/   r   rl   rÀ   Úsegment_intervalss         €€r   Úfind_segmentz+trace.<locals>.format.<locals>.find_segmentN  s�   ø€ Ø%6ò 'Ñ!��e˜TØ˜5“= T¨E°D©LÓ%8Ø ˜;Ò&ð'ô $ D¨Ñ$4Ó5ò -‘��3Ø˜I™�ØÐ+Ñ,�Ø˜5“= T¨E°D©LÓ%8Ø! ! ˜: uÐ,Ò,ð	-ð
 r   z	 entries
r   rp   ÚactionÚallocrã   r/   ÚMEMz = r³   r   z]
Úfree_requestedzdel z # rY   Úfree_completedz# free completed for rX   Úsegment_allocz = cudaMalloc(z, z)
Úsegment_freez	cudaFree(z) # ÚoomÚdevice_freezraise OutOfMemoryError # z requested, z free in CUDA
zTOTAL MEM: )rH   r¾   r¸   rŒ   r0   r¶   )ÚentriesÚsegment_addr_to_nameÚallocation_addr_to_namerà   ræ   ÚcountrÂ   rl   rÖ   rã   r/   ÚnÚseg_nameÚseg_addrÚoffsetr   rz   ÚfreerÞ   rß   rå   rÀ   rÁ   s                     @@@€€r   Úformatztrace.<locals>.format>  sC  û€ Ø"$ÐØ!ÐØ"$Ðàˆ
Øˆ	õ	?õ		ð ˆØ�	‰	”S˜“\�N *Ð-Ô.àˆØ˜
Ñ#ò 	0ˆCØ˜c ,Ñ/Ñ/‰Nð	0ô " 'Ó*ó -	$‰HˆE�1Ø�‰{˜gÒ%Ø˜v™Y¨¨&©	�d�Ù“G�Ù%1°$Ó%7Ñ"�˜(ØÐ#Ø$�HØ!‘Fà! H™_�FØ—	‘	˜Q˜C˜s 8 *¨A¨f¨X°Q´u¸T³{°mÀ3ÐGÔHØ12°D¸%Ð0@Ð'¨Ñ-Ø˜‘‘Ø�8‘Ð 0Ò0Ø˜v™Y¨¨&©	�d�Ø4×8Ñ8¸ÀÀdÈDÐ?QÓR‘
��a˜Ø—	‘	˜D   c¬%°«+¨°bÐ9Õ:Ø�8‘Ð 0Ò0Ø˜v™Y¨¨&©	�d�Ø˜‘�Ø4×8Ñ8¸ÀÀdÈDÐ?QÓR‘
��a˜Ø—	‘	Ð1°$°°q¼¸t»¸ÀRÐHÔIØÐ2Ó2Ø×%Ñ% dÔ+Ø/°Ò5Ø�8‘ Ò/Ø˜v™Y¨¨&©	�d�Ù“w�Ø—	‘	˜T˜F .°°°b¼¸t»¸ÀSÐIÔJØ!×(Ñ(¨$°°dÐ);Ô<Ø-1Ð$ TÓ*Ø�8‘ Ò.Ø˜v™Y¨¨&©	�d�Ø+×/Ñ/°°dÓ;�Ø—	‘	˜I d V¨4´°d³¨}¸BÐ?Ô@ØÐ/Ó/Ø×%Ñ% dÔ+Ø,¨TÒ2Ø�8‘ Ò%Ø˜‘y�Ø˜Ñ'�Ø—	‘	Ø/´°d³¨}¸LÌÈtËÈÐUdÐeöð —	‘	˜Q˜C˜r˜(Ö#ð[-	$ð\ 	�	‰	�K¤ e£˜~Ð.Õ/r   Údevice_traceszDevice z ----------------
)rg   rh   r¸   rH   ri   )rÀ   rù   r   ÚdrÁ   s   `   @r   Útracerü   ;  sb   ù€ Ü
�+‰+‹-€CõP0ôd ˜$˜Ñ/Ó0ò ‰ˆˆ1ÚØ�I‰I˜ ˜sÐ"5Ð6Ô7Ù�1�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                 ón  — |�t        j                  dt        d¬«       t        j                  | «      }|ddt        |«      dz  z
  z  z  }t        j                  |«      j                  d«      }t        j                  d|dœg«      }t        j                  dt        |«      «      j                  d	|«      S )
Nz;device argument is deprecated, plots now contain all deviceé   )Ú
stackleveló    r8   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ÐTÓU€KÜ×'Ñ'¨´T¸(³^ÓD×LÑLØ�[óð r   c                 ó.   — t        | |sd|«      S 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.

    Returns:
        str: HTML of visualization
    úActive Memory TimelinezActive Cached Memory Timeline©r  )rÀ   r  Úplot_segmentss      r   Ú
trace_plotr  ¸  s3   € ô Øáð 	!ð 	óð ð -Øóð r   c           
      óX  ‡‡‡‡‡— dd l }ddlm} ddlm}m} | j                  «       Ši Š‰j                  j                  D ]­  }|j                  |j                  k(  sŒ|j                  }g }|rD|j                  |j                  |j                  fv r|j                  |«       |j                  }|rŒD|j                  |j                   «      }|sŒ�|j                   j"                  dkD  sŒ©|‰|<   Œ¯ |j$                  j'                  «       Št)        ‰dz   «      D �	cg c]  }	g ‘Œ c}	t)        ‰dz   «      D �
cg c]
  }
|
d ddg dœ‘Œ c}
dœŠˆfd„Šdˆˆˆˆfd„	}ˆfd	„}i }‰j*                  D ]à  \  }}\  }}}t-        ||«      sŒ||j.                  k(  r ||||«      |||f<   Œ7||j0                  k(  r+ ||j3                  ||f«       ‰|j4                  «      «       Œq||j6                  k(  r@ ||j3                  ||f«       ‰|j4                  «      «        ||||dz   «      |||dz   f<   ŒÀ||j8                  k(  sŒÐ ||||d
¬«      |||f<   Œâ |j;                  «       D ���cg c]'  \  \  }}} ‰|j4                  «      |d   |d   |d   f‘Œ) }}}}t=        t?        |«      tA        jB                  d«      ¬«      D ]�  \  }
}‰d   |
   }|d   }|D ]D  \  }	}}}||k  r|d   j                  ||z
  ddœ«       |d   j                  |d||dœ«       ||z   }ŒF ||d   k  sŒe|d   j                  |d   |z
  ddœ«       Œƒ ‰d   D �cg c]
  }|d   sŒ	|‘Œ c}‰d<   ‰d   D ]2  }|dxx   |d   z  cc<   |d   rŒ|d   j                  |d   ddœ«       Œ4 ‰S c c}	w c c}
w c c}}}w c c}w )Nr   )Ú
_EventType)ÚActionÚ	TensorKeyr¯   )r  re   rp   rc   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   c                 óÖ  •—  ‰|j                   «      }|j                  j                  }‰d   |   }|d   �|d   |kD  r||d<   t        |d   || z   «      |d<   ‰j                  j                  ||«      }|�|j                  j                  «       nd}‰j                  |d«      }|D �	cg c]  }	dd|	j                  dœ‘Œ }}	d	|| d||d
œ}
|r‰d   |   j                  |
«       |
S c c}	w )Nr   re   rp   Úunknownr!   Únoner   )r   r   r   rè   )rç   rã   r/   rc   r(   Úcategoryrú   )	r  ÚstorageÚptrr»   Ú_categoriesr0   r   Úlowerr¶   )r/   Ú
tensor_keyÚversionÚduring_tracer  rã   rl   r%  ÚstackrP   rÝ   Úallocation_stacksÚmemory_profilerk   r!  s              €€€€r   Úallocatez&_profile_to_snapshot.<locals>.allocateù  s  ø€ Ù˜:×,Ñ,Ó-ˆØ×!Ñ!×%Ñ%ˆà�zÑ" 6Ñ*ˆØˆy‰>Ð! S¨¡^°dÒ%:Ø!ˆC�	‰NÜØ�Ñ˜t d™{ó
ˆˆLÑð "×-Ñ-×1Ñ1°*¸gÓFˆØ,4Ð,@�8—=‘=×&Ñ&Ô(ÀiˆØ!×%Ñ% j°"Ó5ˆØJOÖPÀQ˜f¨a¸¿¹Ó@ÐPˆÐPàØØØØØ ñ
ˆñ Ø�_Ñ% fÑ-×4Ñ4°QÔ7Øˆùò Qs   Â)C&c           	      ó`   •— dD ](  }‰d   |   j                  || d   | d   d| d   dœ«       Œ* y )N)rê   rë   rú   rã   r/   r   r(   )rç   rã   r/   rc   r(   )r¶   )rè   r  rÖ   rk   s      €r   rø   z"_profile_to_snapshot.<locals>.free  sJ   ø€ Ø5ò 		ˆAØ�_Ñ% fÑ-×4Ñ4àØ! &™MØ! &™MØØ# H™oñõñ		r   F)r,  rã   r/   r(   r­   r   re   r[   Úinactive)r/   rW   rœ   )r/   rW   r.   r(   rp   )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  r   r·   ÚtimelineÚ
isinstanceÚCREATEÚDESTROYrÜ   r  ÚINCREMENT_VERSIONÚPREEXISTINGÚitemsr   rµ   ÚoperatorÚ
itemgetter)Úprofiler3  r  r  r  Úeventr;  Úpython_parentsr®   rz   r  r0  rø   Ú
kv_to_elemÚ_timerç   r*  r+  r/   Úblocks_at_endr[   rl   Ú	last_addrrã   r(   r.  r   r/  rk   r!  s                            @@@@@r   Ú_profile_to_snapshotrQ  Í  s!  ü€ ÛÝ-ßAà×,Ñ,Ó.€NàÐØ×(Ñ(×5Ñ5ò 8ˆØ�9‰9˜
×-Ñ-Ó-Ø—\‘\ˆFØˆNÙØ—:‘: *×"3Ñ"3°Z×5GÑ5GÐ!HÑHØ"×)Ñ)¨&Ô1ØŸ™�ò ð ×+Ñ+¨E×,>Ñ,>Ó?ˆCò �u×)Ñ)×4Ñ4°qÓ8Ø)7Ð! #Ò&ð8ð —:‘:×*Ñ*Ó,€Lä&+¨L¸1Ñ,<Ó&=Ö> š"Ò>ô   ¨qÑ 0Ó1ö	
ð ð !ØØØØóò	
ñ&€Hô ÷ð ô4
ð €Jð 7E×6MÑ6Mò Ñ2ˆˆvÑ,˜
 G¨dÜ˜* iÔ0ØØ�V—]‘]Ò"Ù08¸¸zÈ7Ó0SˆJ˜
 GÐ,Ò-Ø�v—~‘~Ò%Ù�—‘ ¨WÐ 5Ó6¹	À*×BSÑBSÓ8TÕUØ�v×/Ñ/Ò/Ù�—‘ ¨WÐ 5Ó6¹	À*×BSÑBSÓ8TÔUÙ4<Ø�j '¨A¡+ó5ˆJ˜
 G¨a¡KÐ0Ò1ð �v×)Ñ)Ó)Ù08Ø�j '¸ô1ˆJ˜
 GÐ,Ò-ðð( -7×,<Ñ,<Ó,>÷ð á(Ñ!ˆZ˜ 5ñ 
�:×$Ñ$Ó	% u¨V¡}°e¸F±mÀUÈ8Á_ÒUð€Mò ô "¤&¨Ó"7¼X×=PÑ=PÐQRÓ=SÔTò ‰ˆ�Ø�zÑ" 6Ñ*ˆØ˜	‘Nˆ	Ø%+ò 	$Ñ!ˆAˆt�T˜6Ø˜4ÒØ�H‘×$Ñ$¨d°YÑ.>ÈÑ%TÔUØ�‰M× Ñ à Ø/Ø&*Ø$ñ	ôð ˜t™‰Ið	$ð �s˜<Ñ(Ó(Ø�‰M× Ñ Ø˜\Ñ*¨YÑ6ÀÑLõð!ð( ,4°JÑ+?ÖQ CÀ3ÀxÃ=šCÒQ€HˆZÑØ˜
Ñ#ò SˆØˆLÓ˜S ™^Ñ+ÓØ�8‹}Ø�‰M× Ñ ¨#¨lÑ*;ÀjÑ!QÕRðSð
 €OùòY ?ùò	
ùôZùò0 Rs   Ä	NÄ5NÉ!,N Í
N'ÍN'c                 ó2   — 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
    r  )rQ  r  )rJ  r  rk   s      r   Úprofile_plotrS  U  s   € ô $ GÓ,€HÜ�xÐ!9¸6ÓBÐBr   rÀ   c                 ó   — t        | d|«      S )NzAllocator State Historyr  )rÀ   r  s     r   Úsegment_plotrU  c  s   € Ü�tÐ6¸Ó?Ð?r   Ú__main__ztorch.cuda.memory._snapshot()zpickled memory statistics from z#Visualize memory dumps produced by )Údescriptionrç   )Údestc                 ó.   — | j                  dddd¬«       y )Nú-oú--outputz
output.svgz$flamegraph svg (default: output.svg)©ÚdefaultÚhelp)Úadd_argument)rP   s    r   Ú_outputr`  x  s   € Ø	�‰ØØØ Ø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	   ru   rv   ))r  z]Generate a visualization over time of the memory usage recorded by the trace as an html file.)rU  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)r  r]  r^  z4path to save the visualization(default: output.html)rZ  r[  zoutput.htmlr\  r  z?visualize change to segments rather than individual allocationsz-sz
--segmentsÚ
store_true)rç   r^  c                 ó²   — | dk(  rt         j                  j                  }nt        | d«      }t	        j
                  |«      }t        |t        «      r|g dœ}|S )Nú-Úrb)r   Útraces)Úsysr9   r  Úopenr  ÚloadrB  Úlist)r   r   rÀ   s      r   Ú_readrl  ¶  sJ   € Ø�3Š;Ü—	‘	× Ñ ‰Aä�T˜4Ó ˆAÜ�{‰{˜1‹~ˆÜ�dœDÔ!Ø $°Ñ3ˆDØˆr   c                 óh   — t        | d«      5 }|j                  |«       d d d «       y # 1 sw Y   y xY w)NÚw)ri  rH   )r   rÀ   r   s      r   Ú_writero  À  s-   € Ü�$˜‹_ð 	 Ø�G‰G�DŒM÷	÷ 	ñ 	ús   �(¨1)r  r  rU  )r  )F)FFrŽ   )NF)Rr  rg   r	  rH  r<   r  rD   rh  r  Ú	functoolsr   Ú	itertoolsr   Útypingr   ÚcacheÚ__all__r   r%   r*   r2   r4   r   r`   r   r   r	   rŠ   rŒ   r    r¨   r´   r¿   rØ   rü   r
  r  r  rQ  rS  rU  r—   Úos.pathr>   ÚrealpathÚdirnameÚ__file__ÚthedirÚremoveÚargparseÚfn_nameÚpickledÚArgumentParserÚparserÚadd_subparsersÚ
subparsersr`  rW  Ú
add_parserÚstats_ar_  Útrace_aÚ
segments_aÚmemory_aÚ	compare_aÚplotsÚcmdÚtrace_plot_ar^  r½   Ú
parse_argsrO   rl  ro  rç   rb  rÀ   ÚoutputrA   ru   rv   r  r!   r   r   ú<module>r�     sÚ  ðã Û 	Û Û Û 	Û Û Û 
Û Ý Ý Ý ñ 	�$‹€â
@€ó!ð ñó ðó@òò,óò6>ð6 *;ó +ð (9ó +ð .?ó +ò4÷(ñ (òUò%ð €	ðñ �yÓ!Ð"ð #ð	

€òOòdYðxÐ òó$ò*EóPCñ@�só @ð ˆzÓÛà�W‰W×Ñ˜bŸg™gŸo™o¨hÓ7Ó8€FØ�—‘Ñà�‰�‰˜ÔÛà-€GØ/°¨yÐ9€GØ$ˆX×$Ñ$Ø9¸'¸ÐCô€Fð ×&Ñ&¨HÐ&Ó5€Jò
ð B€KØ×#Ñ# G¸Ð#ÓE€GØ×Ñ˜ wÐÔ/àt€KØ×#Ñ# G¸Ð#ÓE€GØ×Ñ˜ wÐÔ/àu€KØ×&Ñ& z¸{Ð&ÓK€JØ×Ñ˜G¨'ÐÔ2ÙˆJÔð 	Yð ð ×$Ñ$ X¸;Ð$ÓG€HØ×Ñ˜'¨ÐÔ0ÙˆHÔð	>ð ð ×%Ñ% i¸[Ð%ÓI€IØ×Ñ˜8¨'ÐÔ2Ø×Ñ˜7¨ÐÔ1ÙˆIÔð	€Eð "ò Ñˆˆ[Ø!×,Ñ,¨S¸kÐ,ÓJˆØ×!Ñ! '°Ð!Ô8ØnˆØ×!Ñ! $¨
¸ÀdÐQUÐ!ÔVØEˆØ×!Ñ! $¨
¸MÐPTÐ!ÔUØ�,ÓØTˆDØ×%Ñ%Ø�l¨<¸dð &õ ðð ×ÑÓ€Dòòð ‡{�{�jÒ Ù�T—Z‘ZÓ ˆÙˆt�{‰{™H T›NÕ+Ø	�‰˜Ò	 Ù�T—Z‘ZÓ ˆÙˆt�{‰{™F 4›LÕ)Ø	�‰˜Ò	Ù�T—Z‘ZÓ ˆÙ‰f�T‹lÕØ	�‰˜Ò	Ù�T—Z‘ZÓ ˆÙ‰e�D‹kÕØ	�‰˜	Ò	!Ù�t—{‘{Ó#ˆÙ�d—j‘jÓ!ˆÙˆt�{‰{™G F¨EÓ2Õ3Ø	�‰˜Ò	$Ù�T—Z‘ZÓ ˆÙØ�K‰KÙ�t D§K¡K¸t¿}¹}ÔMõ	
ð 
�‰˜Ò	&Ù�T—Z‘ZÓ ˆÙˆt�{‰{™L¨°d·k±kÔBÕCð 
'ðg r   