o
    ۷iX                     @   sv  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	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ d dlmZ eeZejG dd dZ		ddeeeeejjf dededee fddZdeeeeejjeee e	e e
f f de fddZ!		ddeeejjf dededefddZ"de dB fddZ#dS )     N)pprint)DiffusionPipeline)DictAnyListUnion   )	CacheType)BlockAdapter)BasicCacheConfig)CalibratorConfig)FakeDiffusionPipeline)ParallelismConfig)load_options)init_loggerc                   @   s>  e Zd ZU ejedZeed< ejedZ	ee
 ed< ejedZeeef ed< ejedZee
 ed< ejedZeeef ed< ejedZee
 ed< ejedZee
 ed< ejedZee
 ed	< d
Zeed< ejedZee
 ed< ejedZee
 ed< ejedZee
 ed< d
Zeed< d
Zeed< d
S )
CacheStats)default_factorycache_optionscached_stepsresidual_diffscfg_cached_stepscfg_residual_diffspruned_stepspruned_blocksactual_blocksNpruned_ratiocfg_pruned_stepscfg_pruned_blockscfg_actual_blockscfg_pruned_ratioparallelism_config)__name__
__module____qualname__dataclassesfielddictr   __annotations__listr   intr   strfloatr   r   r   r   r   r   r   r   r   r   r    r    r,   r,   G/home/ubuntu/vllm_env/lib/python3.10/site-packages/cache_dit/summary.pyr      s   
 r   FTadapter_or_othersdetailsloggingreturnc           
      K   s  | d u rt  gS t| trtdt| tst| ts | }d }n| j}d }t| dr-| j}t	t
| t| fr?t  gS g }t
|r\t|D ]}|t|f||d| qK|d ur{t
|r{t|D ]}|t|f||d| qj|t|f||d| |d ur|t|f||d| dd |D }t|r|S t  gS | }t|st  gS g }t|j}	|	D ]}|t|f||d| qdd |D }t|r|S t  gS )NUPlease pass DiffusionPipeline, BlockAdapter or transfomer, not FakeDiffusionPipeline.transformer_2)r/   r0   c                 S   s   g | ]
}|j s
|jr|qS r,   )r   r    .0statsr,   r,   r-   
<listcomp>{   s    zsummary.<locals>.<listcomp>c                 S   s   g | ]}|j r|qS r,   r   r4   r,   r,   r-   r7      s    )r   
isinstancer   
ValueErrorr
   r   transformerhasattrr3   all	is_cachedis_parallelizedfind_blocksappend_summarylencheck_block_adapterflattenblocks)
r.   r/   r0   kwargsr;   r3   blocks_statsrF   adapterflatten_blocksr,   r,   r-   summary,   s   






			
	rK   c                    s  t | tr	tdd t | tr!t| ddd j tj}n|t | tr7t| ddd j tj}nft | t	j
jrOt| ddd j tj}nNt | tr_| j tj}n>t | trq| d j tj}n,t | tr| dd  }d ur|tjddfv rdS t|  d }d  d	d ntd
d urj sd u rdS  fdd} fdd}fdd}|  }|dkr|d|  7 }||  7 }|r|d| 7 }|S )Nr2   F)r0   r   
cache_typeNONENoner    zPlease set pipe_or_stats param as one of: DiffusionPipeline | CacheStats | Dict[str, Any] | List[CacheStats] | BlockAdapter | Transformerc                     sz     dd } | d ur;| jtjkrdS | jtjkr|  S | jtjkr;j}|d ur7|   dt|d d S |  S dS )Ncache_configrN   _Pd      )	getrM   r	   rN   DBCachestrifyDBPruner   round)rP   r   )r   r6   r,   r-   	cache_str   s   zstrify.<locals>.cache_strc                     s      dd } | d ur|  S dS )Ncalibrator_configT0O0)rT   rV   )rZ   r8   r,   r-   calibrator_str   s   zstrify.<locals>.calibrator_strc                      s    d urd    S dS )N_ )rV   r,   )r    r,   r-   parallelism_str   s   zstrify.<locals>.parallelism_strr]   _S)r9   r   r:   r
   rK   r   rC   r   r   torchnnModuler   r(   r&   rT   r	   rN   r   r    )r.   r   rM   rY   r\   r_   cache_type_strr,   )r   r    r6   r-   rV      sd   





rV   pipe_or_modulec                 K   s  t  }t| tjjst| dsJ | j}|jj}n| }|jj}t|tjj	r,|d jj}t|drF|j
}||_|rEtd| d| dd n
|rPtd|  t|d	rm|j}||_|rltd
| d|d dd n
|rwtd|  t|dr?|j}	t|j}
t|dr|j}|j}|j}|j}ng }g }g }d }|	|_|
|_||_||_||_||_|
r?|r?t|
  }t|d trdd |D }t!"|}t!#|d}t!#|d}t!#|d}t!#|d}t!#|d}t!$|}|d urStd| ddd tddd tddd tdt%|ddt&|dddt&|dddt&|dddt&|dddt&|dddt&|dddt&|ddddd tddd nZtd| ddd td dd td!dd tdt'|	d"dt&|dddt&|dddt&|dddt&|dddt&|dddt&|dddt&|ddddd tddd |d urtd#t&|d$ d% d&t%| d't%| d(dd |r?|d urtd)| ddd t(d*t'| d+|  t)j*+  t(d,t'| d+|  t)j*+  t(d-t'|
 d+|
 dd. t)j*+  n,td/| d t(d0t'|	 d+|	  t)j*+  t(d-t'|
 d+|
 dd. t)j*+  t|d1r
|j,}t|j-}t|d2r`|j.}|j/}|j0}|j1}ng }g }g }d }||_2||_3||_4||_5||_6||_7|r
|r
t|  }t|d trd3d |D }t!"|}t!#|d}t!#|d}t!#|d}t!#|d}t!#|d}t!$|}|d urtd4| ddd td5dd td6dd tdt%|d7dt&|dddt&|dddt&|dddt&|dddt&|dddt&|dddt&|ddddd tddd nZtd8| ddd td9dd td:dd tdt'|d;dt&|dddt&|dddt&|dddt&|dddt&|dddt&|dddt&|ddddd tddd |d urtd<t&|d$ d% d&t%| d't%| d(dd |r
|d urtd=| ddd t(d>t'| d+|  t)j*+  t(d?t'| d+|  t)j*+  t(d@t'| d+| dd. t)j*+  |S tdA| d t(dBt'| d+|  t)j*+  t(d@t'| d+| dd. t)j*+  |S )CNr;   r   _context_kwargsu   
🤗Context Options: z

Tflushz Can't find Context Options for: _parallelism_configu   
🤖Parallelism Config: z#Can't find Parallelism Config for: _cached_steps_pruned_stepsc                 S      g | ]	}|D ]}|qqS r,   r,   r5   sublistvr,   r,   r-   r7   <      z_summary.<locals>.<listcomp>   2   K   _   u4   
⚡️Pruned Blocks and Residual Diffs Statistics: 
ze| Pruned Blocks | Diffs P00 | Diffs P25 | Diffs P50 | Diffs P75 | Diffs P95 | Diffs Min | Diffs Max |ze|---------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|z| z<13 |    z<9z |r^   u2   
⚡️Cache Steps and Residual Diffs Statistics: zc| Cache Steps | Diffs P00 | Diffs P25 | Diffs P50 | Diffs P75 | Diffs P95 | Diffs Min | Diffs Max |zc|-------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|z<11zDynamic Block Prune Ratio: rR   rS   z% (/z)
u.   📚Pruned Blocks and Residual Diffs Details: zPruned Blocks: z, zActual Blocks: zResidual Diffs: )compactu,   📚Cache Steps and Residual Diffs Details: zCache Steps: _cfg_cached_steps_cfg_pruned_stepsc                 S   rl   r,   r,   rm   r,   r,   r-   r7     rp   u8   
⚡️CFG Pruned Blocks and Residual Diffs Statistics: zi| CFG Pruned Blocks | Diffs P00 | Diffs P25 | Diffs P50 | Diffs P75 | Diffs P95 | Diffs Min | Diffs Max |zi|-------------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|z<18u6   
⚡️CFG Cache Steps and Residual Diffs Statistics: zg| CFG Cache Steps | Diffs P00 | Diffs P25 | Diffs P50 | Diffs P75 | Diffs P95 | Diffs Min | Diffs Max |zg|-----------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|z<15zCFG Dynamic Block Prune Ratio: u2   📚CFG Pruned Blocks and Residual Diffs Details: zCFG Pruned Blocks: zCFG Actual Blocks: zCFG Residual Diffs: u0   📚CFG Cache Steps and Residual Diffs Details: zCFG Cache Steps: )8r   r9   ra   rb   rc   r<   r;   	__class__r!   
ModuleListrf   r   printloggerwarningri   r    rV   rj   r&   _residual_diffsrk   _pruned_blocks_actual_blocks_pruned_ratior   r   r   r   r   r   r(   valuesnpmin
percentilemaxsumrX   rC   r   sysstdoutrh   rz   _cfg_residual_diffsr{   _cfg_pruned_blocks_cfg_actual_blocks_cfg_pruned_ratior   r   r   r   r   r   )re   r/   r0   rG   cache_statsmodulecls_namer   r    r   r   r   r   r   r   diffs_valuesqminq0q1q2q3q4qmaxr   r   r   r   r   r   cfg_diffs_valuesr,   r,   r-   rB      s  	







*




*





(








*




*





(





rB   c                  C   s  zddl m}  |  d }|dg7 }ddlm} | d }ddlm} | d }|g d7 }|dd	g7 }g }d
}|| |d t	|d d }d}	t
|D ][}
||
 }||v r^dnd}||v rfdnd}|
| t	|k r||
|  }||v r|dnd}||v rdnd}nd}d}d}d| d|	 d| d| d| d|	 d| d| d}|| qRd|}tddd t|dd |W S  ty   Y d S w )Nr   )BlockAdapterRegisterr   LongCatVideo)!ContextParallelismPlannerRegister) TensorParallelismPlannerRegister)WanLTXVisualClozer   r   z7| Model | Cache  | CP | TP | Model | Cache  | CP | TP |z)|:---|:---|:---|:---|:---|:---|:---|:---|rS   z@https://github.com/vipshop/cache-dit/blob/main/examples/pipelineu   ✅u   ✖️r^   u	   | **🎉[z](u   )** | ✅ | rv   u
    | **🎉[ru   z)
Supported Cache and Parallelism Matrix:
Trg   )0cache_dit.caching.block_adapters.block_registersr   supported_pipelines6cache_dit.parallelism.transformers.context_parallelismr   supported_planners5cache_dit.parallelism.transformers.tensor_parallelismr   rA   rC   rangejoinr~   	Exception)r   _pipelines_supported_cacher   (_pipelines_supported_context_parallelismr   '_pipelines_supported_tensor_parallelismmatrix_linesheaderhalflinkipipeline_leftcp_support_lefttp_support_leftpipeline_rightcp_support_righttp_support_rightline
matrix_strr,   r,   r-   supported_matrix  sp   




r   )FT)$r   ra   r$   numpyr   r   	diffusersr   typingr   r   r   r   cachingr	   r
   r   r   r   parallelismr   r   cache_dit.loggerr   r!   r   	dataclassr   rb   rc   boolrK   r*   rV   rB   r   r,   r,   r,   r-   <module>   s    

j


e
  
