o
    *jq                     @   s   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 d dlmZ d dlmZ d dlmZ d d	lmZ G d
d deZejejdG dd deZdS )    N)Hooks)EpochBasedTrainer)HOOKS)BestCkptSaverHookCheckpointHookCheckpointProcessor)LoadCheckpointHook)Hook)save_configuration)is_swift_availablec                   @   s>   e Zd ZdZdZedd Zdd Zdd Z			
dddZ	d	S )SwiftCheckpointProcessormodelZ_swiftc           
      C   s.  |  | j}G dd d}dD ]$}|d| dur"|d| |d| dur3|d| q|||}t|d	rst sEtd
ddlm} t	||rf|t
j }	|j|	|dd|ddd n|j||dd |j|d | jdur| jj||j|d | jdur| jj||j|d |  dS )z[Copy useful files to target output folder and dumps the target configuration.json.
        c                   @   s$   e Zd Zdd Zdd Zdd ZdS )zGSwiftCheckpointProcessor.copy_files_and_dump_config.<locals>.SaveConfigc                 S   s   || _ || _d S N)
output_dirconfig)selfr   r    r   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/hooks/swift/swift_hook.py__init__   s   
zPSwiftCheckpointProcessor.copy_files_and_dump_config.<locals>.SaveConfig.__init__c                 S   s
   || _ d S r   )r   )r   Z_output_dir_configr   r   r   __call__!   s   
zPSwiftCheckpointProcessor.copy_files_and_dump_config.<locals>.SaveConfig.__call__c                 S   s   t | j| j d S r   )r
   r   r   r   r   r   r   save_config$   s   zSSwiftCheckpointProcessor.copy_files_and_dump_config.<locals>.SaveConfig.save_configN)__name__
__module____qualname__r   r   r   r   r   r   r   
SaveConfig   s    r   )Zpush_to_hubZhub_repo_idZ	hub_tokenZprivate_hubztrain.checkpoint.period.Nztrain.checkpoint.periodztrain.checkpoint.best.ztrain.checkpoint.bestsave_pretrainedz@Please install swift by `pip install ms-swift` to use SwiftHook.r   )
SwiftModelz#train.checkpoint.safe_serializationFztrain.checkpoint.adapter_namedefault)Zsave_directoryZsafe_serializationZadapter_namec                  _      d S r   r   )argskwargsr   r   r   <lambda>D   s    zESwiftCheckpointProcessor.copy_files_and_dump_config.<locals>.<lambda>)Zsave_functionr   save_config_function)r$   )unwrap_moduler   Zsafe_getpophasattrr   
ValueErrorZswift.tunersr   
isinstancer   SWIFT_SAVE_SUFFIXr   r   Ztrain_preprocessorZeval_preprocessorr   )
trainerr   r   Zbin_filer   r   Zpop_keyZsave_config_fnr   _swift_output_dirr   r   r   copy_files_and_dump_config   sd   





z3SwiftCheckpointProcessor.copy_files_and_dump_configc                 C   s&   t j|rt| t|| d S r   )ospathexistsshutilrmtreecopytree)r   
source_dirr   r   r   r   link_dirT   s   
z!SwiftCheckpointProcessor.link_dirc                 C   s   | | d S r   )r   )r   r   filenamer   r   r   save_swift_model_stateY   s   z/SwiftCheckpointProcessor.save_swift_model_stateNTc                 C   sv   | |j}| |\}}|tj }	|tj }
| ||||| | || | ||| | ||	 | 	|	|
 d S r   )
r%   r   Z_get_state_file_namer   r*   Zsave_trainer_stateZsave_model_statelinkr7   r5   )r   r+   Zcheckpoint_path_prefixr   metaZsave_optimizersr   Z_model_fileZ_train_state_fileZ_swift_save_dirr,   r   r   r   save_checkpoints\   s   

z)SwiftCheckpointProcessor.save_checkpoints)NT)
r   r   r   _BIN_FILE_DIRr*   staticmethodr-   r5   r7   r:   r   r   r   r   r      s    
>r   )module_namec                   @   s&   e Zd ZdZdd ZdefddZdS )	SwiftHookr   c                 C   r    r   r   r   r   r   r   r   t   s   zSwiftHook.__init__r+   c                 C   s   t  }|t}t|dkrt|d jt s|d | |t}t|dkr7t|d jt s7|d | |t}t|dkrSt|d jt sU|d | d S d S d S )Nr   )	r   Zget_hookr   lenr)   	processorZset_processorr   r   )r   r+   r@   Z	ckpt_hookZbest_ckpt_hookZload_ckpt_hookr   r   r   register_processorw   s"   




zSwiftHook.register_processorN)r   r   r   r;   r   r   rA   r   r   r   r   r>   o   s    r>   )r.   r1   Zmodelscope.metainfor   Zmodelscope.trainersr   Z!modelscope.trainers.hooks.builderr   Z4modelscope.trainers.hooks.checkpoint.checkpoint_hookr   r   r   Z9modelscope.trainers.hooks.checkpoint.load_checkpoint_hookr   Zmodelscope.trainers.hooks.hookr	   Zmodelscope.utils.checkpointr
   Zmodelscope.utils.import_utilsr   r   Zregister_moduler>   r   r   r   r   <module>   s    _