
    9i                         S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  \R                  " \R                  S9 " S	 S
\5      5       rg)    N)Hooks)HOOKS)Hook)Priority)save_checkpoint)	is_master)module_namec                   R    \ rS rSr\R
                  r0 S4S jrS rS r	S r
S rSrg)	SparsityHook   Nc                 2   Xl         X0l        UR                  S/ 5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        S	U l	        S	U l
        UR                  S
S5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        g )Ncompress_moduleweight_rank   weight_beta   	mask_rankmask_alpha1mask_alpha2r   	frequencyinitial_warmupg?final_warmupg333333?initial_sparsityg        final_sparsity)pruning_methodsave_dirgetr   r   r   r   r   r   step
total_stepr   r   r   r   r   )selfr   configr   s       s/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/trainers/hooks/compression/sparsity_hook.py__init__SparsityHook.__init__   s    , %zz*;R@!::mQ7!::mQ7K3!::mQ7!::mQ7	K3$jj)93?"JJ~s; &

+=s C$jj)93?    c                    SS K nSSKJnJn  U R                  c  UR
                  U l        [        U R                  5      S:X  a^  U" UR                  U R                  U R                  U R                  U R                  U R                  U R                  UR                  S9  OU R                   H  nUR                  R!                  5        H_  u  pgXe:w  a  M  U" UU R                  U R                  U R                  U R                  U R                  U R                  UR                  S9  Ma     M     [#        [        UR$                  R&                  5      5       H  n/ n	UR$                  R&                  U   S    H  n
SnUR                  R!                  5        Hb  u  pg[)        Xs5      (       d  M  UR+                  U
R-                  5       UR.                  R0                  R-                  5       5      (       d  M`  Sn  O   U(       a  M  U	R3                  U
5        M     XR$                  R&                  U   S'   M     / nUR                  R!                  5        HY  u  pg[)        Xs5      (       d  M  UR5                  UR7                  5        Vs/ s H  oR8                  (       d  M  UPM     sn5        M[     UR$                  R;                  SU05        UR<                  UR>                  -  U l         g s  snf )Nr   r   )SparseLinearconvert_sparse_network)r   r   r   r   r   r   loggerparamsFT)!torchutilsr'   r(   r   work_dirlenr   modelr   r   r   r   r   r   r)   named_modulesrange	optimizerparam_groups
isinstanceequalhalfweightdataappendextend
parametersrequires_gradadd_param_groupiters_per_epoch_max_epochsr   )r    trainerr+   r'   r(   cmnamemoduleinew_train_paramsparamis_find
new_paramsps                 r"   
before_runSparsityHook.before_run$   sg   ?== #,,DMt##$)"#22 ,, ,,.. ,, ,,~~	 **$+MM$?$?$ALDz *'+':':$($4$4$($4$4"&..$($4$4$($4$4&~~	 %B + s7,,99:;A! **77:8D$+MM$?$?$ALD!&77 ;;uzz|'-}}'9'9'>'>'@B B&*G! %B w$++E2 E ;K**1-h7 <  
#MM779LD&//!! & 1 1 3G 31Q 3GI :
 	))8Z*@A!11G4G4GG	 Hs   K2
%K2
c           	         SSK JnJn  U" U R                  U R                  U R
                  U R                  U R                  U R                  U R                  5      nU" UR                  U5        [        5       (       a8  UR                  R                  SU R                   SU R                   SU 35        U =R                  S-  sl        g )Nr   )schedule_sparsity_ratioupdate_network_sparsityzStep[/z] current sparsity ratio = )r,   rM   rN   r   r   r   r   r   r   r   r/   r   r)   info)r    r@   rM   rN   cur_sparsitys        r"   before_train_iterSparsityHook.before_train_itera   s    K.IIOONN!!
 	 |<;;NN		{!DOO#44OP\~^ 			Q	r%   c                 h    SSK Jn  U" UR                  UR                  S9  U R	                  U5        g )Nr   )generate_sparse_model)r)   )r,   rU   r/   r)   _save_checkpoint)r    r@   rU   s      r"   	after_runSparsityHook.after_runw   s%    0gmmGNNCg&r%   c                     [        5       (       a  UR                  R                  S5        [        R                  R                  U R                  S5      n[        UR                  X!R                  5        g )Nz#Saving checkpoint at final compresszcompress_model.pth)
r   r)   rP   ospathjoinr   r   r/   r2   )r    r@   cur_save_names      r"   rV   SparsityHook._save_checkpoint~   sI    ;;NN EFT]]4HI}6G6GHr%   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno__r   HIGHESTPRIORITYr#   rJ   rR   rW   rV   __static_attributes__ r%   r"   r   r      s1     H.04 @&;Hz,'Ir%   r   )rZ   modelscope.metainfor   !modelscope.trainers.hooks.builderr   modelscope.trainers.hooks.hookr   "modelscope.trainers.hooks.priorityr   modelscope.utils.checkpointr   modelscope.utils.torch_utilsr   register_moduler   rf   r%   r"   <module>rn      sL    	 % 3 / 7 7 2 5#5#56uI4 uI 7uIr%   