o
    ٷiC                     @   s  d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	Z	ddl
mZmZ ddlmZ eeZedd	ZG d
d dZ						ddedeee  dee dee dedefddZ				ddedeee  dee dee def
ddZdefddZdefddZdS ) z
Torch Profiler for cache-dit.

Reference: Adapted from https://github.com/sgl-project/sglang/blob/main/python/sglang/bench_one_batch.py
    N)Path)ListOptional)ProfilerActivityprofile   )current_platformCACHE_DIT_TORCH_PROFILER_DIRz/tmp/cache_dit_profilesc                   @   s\   e Zd Z						ddedeee  dee dee dedefd	d
Zdd Zdd Z	dS )ProfilerContextTNenabled
activities
output_dirprofile_name
with_stackrecord_shapesc                 C   sz   t  r	t jdksJ d|| _|pddg| _t|pt | _|p*dt	t

  | _|| _|| _d | _d | _d | _d S )Ncuda;Torch ProfilerContext currently only supports CUDA devices.CPUGPUprofile_)r   is_accelerator_availabledevice_typer   r   r   PROFILER_DIR
expanduserr   inttimer   r   r   profiler
trace_pathmemory_snapshot_path)selfr   r   r   r   r   r    r    F/home/ubuntu/.local/lib/python3.10/site-packages/cache_dit/profiler.py__init__   s   

zProfilerContext.__init__c                    s&  | j s| S t rtjdksJ d| jjddd tjtjd  fdd| j	D }d}d	}t
j r>t
j }t
j }| jg}|d	krN|d
|  d|d }| j| | _d| j	v rrt
j rrt
jjjdd td |rt|| j| jd| _| j  td| j d| j	 d | S )Nr   r   T)parentsexist_ok)r   r   c                    s   g | ]
}| v r | qS r    r    ).0aactivity_mapr    r!   
<listcomp>>   s    z-ProfilerContext.__enter__.<locals>.<listcomp>r   r   rank-z.trace.json.gzMEMi )max_entrieszStarted CUDA memory profiling)r   r   r   z,Started profiling. Traces will be saved to: z (activities: ))r   r   r   r   r   mkdirr   r   CUDAr   torchdistributedis_initializedget_rankget_world_sizer   appendjoinr   r   is_availablememory_record_memory_historyloggerinfor   r   r   r   start)r   torch_activitiesr*   
world_sizefilename_partsfilenamer    r'   r!   	__enter__0   sL   





zProfilerContext.__enter__c           	      C   sd  | j sd S | jd ur4tj rtj  | j  td| j	  | j
t| j	 td| j	  d| jv rtj rtt }tj rNtj nd}| j| j d| d| d }tjjt| tjjjd d td	|  | j| j d| d| d
 }t|d}|tj  W d    n1 sw   Y  td|  d S d S d S )NzExporting trace to: z%Profiling completed. Trace saved to: r,   r   z-rankz-memory-z.pickle)r   zMemory snapshot saved to: z.txtwzMemory summary saved to: )r   r   r1   r   r8   synchronizestopr;   r<   r   export_chrome_tracestrr   r   r   r2   r3   r4   r   r   r9   _dump_snapshotr:   openwritememory_summary)	r   exc_typeexc_valexc_tb	timestampr*   r   memory_summary_pathfr    r    r!   __exit___   s0   



zProfilerContext.__exit__)TNNNTT)
__name__
__module____qualname__boolr   r   rG   r"   rB   rR   r    r    r    r!   r
      s,    

/r
   TFr   r   r   r   r   r   c                    s    fdd}|S )Nc                    s    fdd}|S )Nc                     sP   pj }t |d | i |W  d    S 1 s!w   Y  d S )N)r   r   r   r   r   r   )rS   r
   )argskwargsname)r   r   funcr   r   r   r   r    r!   wrapper   s   
$z4profile_function.<locals>.decorator.<locals>.wrapperr    )rZ   r[   r   r   r   r   r   r   )rZ   r!   	decorator   s   z#profile_function.<locals>.decoratorr    )r   r   r   r   r   r   r]   r    r\   r!   profile_function   s   r^   returnc                 K   s   t d| |||d|S )N)r   r   r   r   r    )r
   )r   r   r   r   rX   r    r    r!   create_profiler_context   s   r`   c                   C   s   t jdtS Nr	   )osenvirongetr   r    r    r    r!   get_profiler_output_dir      re   pathc                 C   s   | t jd< d S ra   )rb   rc   )rg   r    r    r!   set_profiler_output_dir   rf   rh   )TNNNFT)FNNN)__doc__loggingrb   r   pathlibr   typingr   r   r1   torch.profilerr   r   	platformsr   	getLoggerrS   r;   getenvr   r
   rV   rG   r^   r`   re   rh   r    r    r    r!   <module>   s`    
j



