o
    پiy0                     @   sv  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 d dl	m
Z
mZmZmZ d dlZd dlmZ d dlmZ d dlmZ d d	lmZ e Zergd dlZd
ejjgdejjjgdejjjggZee e  e!Z"G dd dZ#defddZ$G dd dZ%G dd deZ&G dd de&Z'G dd de&Z(G dd de(Z)G dd de(Z*G dd de(Z+G d d! d!e(Z,dS )"    N)ABC)	dataclass)Path)CallableDictListOptional)ProfileReqOutput)ForwardMode)get_global_server_args)is_npuzprofiler.profilezprofiler.ProfilerActivity.CUDAzprofiler.ProfilerActivity.CPUc                   @   s   e Zd ZdedefddZdefddZdd	d
ee dee dee dee	e  dee
 dee
 de
dede
dedee	e  fddZdd Zdd Zd dee fddZdd ZdS )!ProfileManagertp_rankgpu_idc                 C   s<   t | j| jd| _|| _|| _|t jk| _d | _	d | _
d S )N)on_starton_stop)_StageBasedTrigger	_do_start_do_stopstage_based_triggerr   	cpu_groupr   base_gpu_idfirst_rank_in_nodeprofiler_kwargsprofiler)selfr   r   r    r   R/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/profile_utils.py__init__   s   
zProfileManager.__init__forward_modec                 C   s&   t |}|d u r
d S | jj|d d S )Nstage)_get_stage_from_forward_moder   step)r   r   r!   r   r   r   r#   *   s   zProfileManager.stepN)profile_stages
output_dir
start_step	num_steps
activities
with_stackrecord_shapesprofile_by_stage
profile_idmerge_profilesprofile_prefixr$   c                C   s~   |d u sJ |sJ d|	rJ |d u rt dd}|d u r"ddg}t|||||
|d| _| jj||p6ddgd	 td
ddS )Nz&only support profile_by_stage=true nowSGLANG_TORCH_PROFILER_DIRz/tmpCPUGPU)r(   r)   r*   r%   output_prefixr,   prefilldecode)r'   interesting_stagesT	Succeeded)successmessage)osgetenvdictr   r   	configurer	   )r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r$   r   r   r   r<   1   s.   	
zProfileManager.configurec                 C      t d)Nz$manually start is only supported yetNotImplementedErrorr   r   r   r   manual_start\      zProfileManager.manual_startc                 C   r=   )Nz#manually stop is only supported yetr>   r@   r   r   r   manual_stop_   rB   zProfileManager.manual_stopr!   c              	   C   s   t d|r
d| nd d| jd  d| jd  d | jd u s#J tjdi | j| j| j| j|r7d	| ndd
| _| j	  d S )NzProfiling startsz for  z. Traces will be saved to: r%   z (with profile id: r,   )-)r   r   r   output_suffixr   )
loggerinfor   r   _ProfilerBasecreater   r   r   start)r   r!   r   r   r   r   b   s"   zProfileManager._do_startc                 C   s4   t d | j  t d| jd   d | _d S )NzStop profiling...z%Profiling done. Traces are saved to: r%   )rH   rI   r   stopr   r@   r   r   r   r   s   s   


zProfileManager._do_stopN)__name__
__module____qualname__intr   r
   r#   r   strr   boolr<   rA   rC   r   r   r   r   r   r   r      s>    
	


+r   r   c                 C   s2   |   rdS |  rdS |  rd S td| )Nr3   r4   z(unsupported profile stage: forward_mode=)
is_prefill	is_decodeis_idleRuntimeError)r   r   r   r   r"   |   s   r"   c                   @   sf   e Zd ZeG dd dZeG dd dZdedefddZd	ed
e	e
 fddZde
fddZdS )r   c                   @   s   e Zd ZU eed< dS )z_StageBasedTrigger._StageConfigtarget_countN)rO   rP   rQ   rR   __annotations__r   r   r   r   _StageConfig   s   
 r[   c                   @   s   e Zd ZU eed< eed< dS )z _StageBasedTrigger._RunningState
curr_stage
curr_countN)rO   rP   rQ   rS   rZ   rR   r   r   r   r   _RunningState   s   
 r^   r   r   c                 C   s   || _ || _d | _i | _d S rN   )r   r   running_statestage_configs)r   r   r   r   r   r   r      s   
z_StageBasedTrigger.__init__r'   r5   c                    s(   j d u sJ  fdd|D _d S )Nc                    s   i | ]	}|j  d qS ))rY   )r[   ).0r!   r'   r   r   r   
<dictcomp>   s    z0_StageBasedTrigger.configure.<locals>.<dictcomp>)r_   r`   )r   r'   r5   r   rb   r   r<      s   z_StageBasedTrigger.configurer!   c                 C   s   | j  }d ur| jd7  _| j  }d ur0|j| j|j jks$||jkr0| j|j= d | _ |   | j d u rH|| jv rH| j|dd| _ | j|d | j d u|| jv ksTJ | j  }d urb|j|ksdJ d S d S )N   r   )r\   r]   r    )r_   r]   r`   r\   rY   r   r^   r   )r   r!   sr   r   r   r#      s&   

z_StageBasedTrigger.stepN)rO   rP   rQ   r   r[   r^   r   r   rR   r   rS   r<   r#   r   r   r   r   r      s    r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )rJ   c              	   K   s   g }d| v s
d| v r| tdi || ||d d| v r(| tdi | d| v r6| tdi | d| v rD| tdi | t|S )Nr0   r1   )r(   r)   r*   MEMCUDA_PROFILERRPDr   )append_ProfilerTorch_ProfilerMemory_ProfilerCudart_ProfilerRPD_ProfilerList)r(   r)   r*   kwargsinnersr   r   r   rK      s$   z_ProfilerBase.createc                 C      t rN   r>   r@   r   r   r   rL         z_ProfilerBase.startc                 C   rq   rN   r>   r@   r   r   r   rM      rr   z_ProfilerBase.stopN)rO   rP   rQ   staticmethodrK   rL   rM   r   r   r   r   rJ      s
    
rJ   c                   @   s.   e Zd Zdee fddZdd Zdd ZdS )	rn   rp   c                 C   s
   || _ d S rN   )rp   )r   rp   r   r   r   r      s   
z_ProfilerList.__init__c                 C      | j D ]}|  qd S rN   )rp   rL   r   innerr   r   r   rL         

z_ProfilerList.startc                 C   rt   rN   )rp   rM   ru   r   r   r   rM      rw   z_ProfilerList.stopN)rO   rP   rQ   r   rJ   r   rL   rM   r   r   r   r   rn      s    rn   c                   @   s.   e Zd ZdedededededefddZd	S )
_ProfilerConcreteBaser%   r2   rG   r,   r   r   c                 C   s.   || _ || _|| _|| _|| _|| _|| _d S rN   )r%   r2   rG   r,   r   r   r   )r   r%   r2   rG   r,   r   r   r   r   r   r   r      s   

z_ProfilerConcreteBase.__init__N)rO   rP   rQ   rS   rR   rT   r   r   r   r   r   rx      s    rx   c                       s6   e Zd Zdedef fddZdd Zdd Z  ZS )	rj   r)   r*   c                    s(   t  jdi | || _|| _|| _d S )Nr   )superr   r)   r*   r(   )r   r)   r*   r(   ro   	__class__r   r   r     s   
z_ProfilerTorch.__init__c                    s   t jjjt jjjd  fdd| jD }t jj|| jd ur!| jnd| jd ur*| jndt	s/d nt
j| jd| _| j  d S )N)r0   r1   c                    s   g | ]
}| v r | qS r   r   )ra   aactivity_mapr   r   
<listcomp>  s    z(_ProfilerTorch.start.<locals>.<listcomp>TF)r(   r)   r*   on_trace_ready)torchr   ProfilerActivityr0   CUDAr(   profiler)   r*   _is_npu	torch_nputensorboard_trace_handlerr%   torch_profilerrL   )r   torchprof_activitiesr   r}   r   rL     s   
z_ProfilerTorch.startc                 C   s   t | jjddd | j  tsv| jd| j g}t| dddkr.|	dt| dd  t| d	ddkrB|	d
t| dd  t| dddkrV|	dt| dd  | j
r^| j
d ndd| | j d }| jtj| j| tj| j d S )NTparentsexist_okzTP-dp_sizerd   zDP-dp_rankr   pp_sizezPP-pp_rankmoe_ep_sizezEP-moe_ep_rankrF   rD   .trace.json.gz)r   r%   mkdirr   rM   r   r,   r   getattrri   r2   joinrG   export_chrome_tracer9   pathr   distributedbarrierr   )r   filename_partsfilenamer   r   r   rM     s,   
z_ProfilerTorch.stop)rO   rP   rQ   rT   r   rL   rM   __classcell__r   r   rz   r   rj      s    rj   c                   @      e Zd Zdd Zdd ZdS )rk   c                 C   s   t jjjdd d S )Ni )max_entries)r   cudamemory_record_memory_historyr@   r   r   r   rL   >  s   z_ProfilerMemory.startc                 C   sf   t | jjddd tj| jtt d| j d | j	 d }t
jj| t
jjjd d d S )NTr   -TP-z-memoryz.pickle)enabled)r   r%   r   r9   r   r   rS   timer   rG   r   r   r   _dump_snapshotr   )r   memory_profile_pathr   r   r   rM   A  s   
z_ProfilerMemory.stopNrO   rP   rQ   rL   rM   r   r   r   r   rk   =  s    rk   c                   @   r   )rl   c                 C   &   | j rtd tj   d S d S )NzCall cudaProfilerStart)r   rH   rI   r   r   cudartcudaProfilerStartr@   r   r   r   rL   P     
z_ProfilerCudart.startc                 C   r   )NzCall cudaProfilerStop)r   rH   rI   r   r   r   cudaProfilerStopr@   r   r   r   rM   U  r   z_ProfilerCudart.stopNr   r   r   r   r   rl   O  s    rl   c                   @   r   )rm   c                 C   s   t | jjddd ddlm} |  tj| jdtt		  d| j
  d | _| j
dkrWdd l}ddlm} tjd	rEtd	 | }|d	}|| |  ~tj| j | | _| jd | j  | jd
dd
 d S )NTr   r   )rpdTracerControlzrpd-r   r   )RocpdSchema	trace.rpdrD   zrpd profile range)r   r%   r   r   
skipCreater9   r   r   rS   r   r   rpd_profile_pathsqlite3rocpd.schemar   existsunlinkconnectwriteSchemacommitr   r   r   r   rpd_profilersetPythonTracerL   	rangePush)r   r   r   r   schema
connectionr   r   r   rL   \  s,   




z_ProfilerRPD.startc                 C   sV   | j   | j   | j   tj| j | jdkr)ddl	m
} |d| j d S d S )Nr   )rpd_to_chrome_tracer   )r   rangePoprM   flushr   r   r   r   r   sglang.srt.utils.rpd_utilsr   r   )r   r   r   r   r   rM   {  s   



z_ProfilerRPD.stopNr   r   r   r   r   rm   [  s    rm   )-loggingr9   r   abcr   dataclassesr   pathlibr   typingr   r   r   r   r   sglang.srt.managers.io_structr	   ,sglang.srt.model_executor.forward_batch_infor
   sglang.srt.server_argsr   sglang.srt.utilsr   r   r   r   r   r   NPUr0   patches_apply_patches	getLoggerrO   rH   r   r"   r   rJ   rn   rx   rj   rk   rl   rm   r   r   r   r   <module>   s>    


^8=