o
    Ti                     @   s>   d dl mZ d dlT d dlmZ ddlmZ G dd dZdS )	   )get_module_name)*)recursive_getattr    )loggerc                   @   sb   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdddZdS )compression_schedulerz8
    Used to schedule different compression methods
    c                 C   sB   || _ || _|   d| _d| _tdtdtdtdt	dt
di| _d S )Nr   F)modelcompression_config	make_inittraining_stepsweight_quantization_enabledWEIGHT_QUANTIZATIONACTIVATION_QUANTIZATIONSPARSE_PRUNINGHEAD_PRUNINGROW_PRUNINGCHANNEL_PRUNINGverbose)selfr   r	    r   S/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/compression/scheduler.py__init__   s   
zcompression_scheduler.__init__c           
   
   C   s   i | _ | j D ]d\}}t|v rqtdtd tg i| j |< t }|t }|t | j | t< || j | t< |t  D ]2\}}g }|t D ]}t	|| j
||dd\}	}||	 qC|rk| j | t ||| dg q9qd S )NF)r   params)different_compression_methodsr	   itemsLAYER_REDUCTIONTECHNIQUE_ENABLEDSHARED_PARAMETERSDIFFERENT_GROUPSsetDIFFERENT_GROUPS_MODULE_SCOPEr   r   extendappendcopypop)
r   methodmethod_contentexist_module_nameshared_parameters
group_namemethod_parametersmodule_name_listkey_wordmodule_namer   r   r   r
   !   s>   

zcompression_scheduler.make_initc                 C   s   | j t }|t sd S |t }| j|t krF|t D ]\}}}|D ]}t| j|}d|_	q!q| j
t sHtd| j  d| _	d| j
t< d S d S d S )NTz'Weight quantization is enabled at step )r   r   r   r   r   TECHNIQUE_SCHEDULE_OFFSETr   r   r   r   r   r   info)r   wqr(   r)   r+   r*   r-   moduler   r   r   check_weight_quantization>   s    

z/compression_scheduler.check_weight_quantizationc                 C      | j t }|t sd S |t }| j|t krC|t D ]\}}}|D ]}t| j|}d|_	q!q| j
t sEtd| j  d| j
t< d S d S d S )NTz+Activation quantization is enabled at step )r   r   r   r   r   r.   r   r   r   activation_quantization_enabledr   r   r/   )r   aqr(   r)   r+   r*   r-   r1   r   r   r   check_activation_quantizationP      

z3compression_scheduler.check_activation_quantizationc                 C   s   | j t }|t sd S |t }|t | j  kr|t krNn d S |t D ]\}}}|D ]}t| j	|}d|_
q,q%| jt sPtd| j  d| jt< d S d S d S )NTz"Sparse pruning is enabled at step )r   r   r   r   r.   r   TECHNIQUE_SCHEDULE_OFFSET_ENDr   r   r   sparse_pruning_enabledr   r   r/   )r   spr(   r)   r+   r*   r-   r1   r   r   r   check_sparse_pruning`   s"   

z*compression_scheduler.check_sparse_pruningc                 C   r3   )NTz Head pruning is enabled at step )r   r   r   r   r   r.   r   r   r   head_pruning_enabledr   r   r/   )r   hpr(   r)   r+   r*   r-   r1   r   r   r   check_head_pruningq   r7   z(compression_scheduler.check_head_pruningc                 C   r3   )NTzRow pruning is enabled at step )r   r   r   r   r   r.   r   r   r   row_pruning_enabledr   r   r/   )r   rpr(   r)   r+   r*   r-   r1   r   r   r   check_row_pruning   r7   z'compression_scheduler.check_row_pruningc                 C   r3   )NTz#Channel pruning is enabled at step )r   r   r   r   r   r.   r   r   r   channel_pruning_enabledr   r   r/   )r   cpr(   r)   r+   r*   r-   r1   r   r   r   check_channel_pruning   r7   z+compression_scheduler.check_channel_pruningc                 C   s4   |    |   |   |   |   |   d S )N)r2   r6   r;   r>   rA   rD   )r   r   r   r   check_all_modules   s   z'compression_scheduler.check_all_modulesFc                 C   s   |s	|  j d7  _ |   d S )Nr   )r   rE   )r   step_zero_checkr   r   r   step   s   zcompression_scheduler.stepN)F)__name__
__module____qualname____doc__r   r
   r2   r6   r;   r>   rA   rD   rE   rG   r   r   r   r   r      s    	r   N)compressr   	constantshelperr   deepspeed.utilsr   r   r   r   r   r   <module>   s
   