o
    ॵi                     @   s   d dl Z d dlZd dlmZ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 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mZ d dlmZ e Zde fddZ!ej"ej#dG dd deZ$dS )    N)CallableDictOptionalTupleUnion)Trainers)SpaceGenerator)SpaceModelBase)MultiWOZBPETextField)BaseTrainer)TRAINERS)MultiWOZEvaluator)MultiWOZTrainer)Config	ModelFile)
get_loggerseedc                 C   sJ   dd l }dd l}||  |j|  tj |  ||  d|jj_	d S )Nr   T)
randomtorchmanual_seedcudamanual_seed_allnpr   backendscudnndeterministic)r   r   r    r   i/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/nlp/space/dialog_modeling_trainer.py
setup_seed   s   

r   )module_namec                       st   e Zd Z		ddee dee f fddZdd Zdefd	d
Z	dd Z
	ddee deeef fddZ  ZS )DialogModelingTrainerNcfg_filecfg_modify_fnc                    s   t  tj|d |d  || _| | j| _t| jj	j
 t| jfi || _| jj| jj_| jjd | jj_d|v rF|d | jj	_nd| jj	_| jd| _| jd| _td
d| ji|| _tj| j| jd	| _| jd
i | d S )N	model_dircfg_name   work_dirz./default_save_dirtraindevreader)r)   r   )super__init__ospathjoinr"   rebuild_configcfgr   Trainerr   r
   bpe
vocab_sizeModelnum_token_embeddingsmax_ctx_turnnum_turn_embeddingssave_dirget_batches
train_datadev_datar   	evaluatorr   create	generator_load_model)selfr!   r"   argskwargs	__class__r   r   r+   $   s   
zDialogModelingTrainer.__init__c                    s    fdd}d|v r|d  _ ntj|d  j j jd _ dd l} jjjdkr9|j	
 dkr9|j j  _ t j | j j jd _ j   j  d S )	Nc                    s0   ddl }|| }  jjr|j r|  S | S )z/
            numpy array -> tensor
            r   N)r   tensorr0   use_gpur   is_available)arrayr   r@   r   r   	to_tensorG   s   

z4DialogModelingTrainer._load_model.<locals>.to_tensormodelr#   )r)   r>   r   r%   )r)   r<   )rK   r	   r=   r0   r2   r>   r   r1   gpur   device_countnnDataParallelr   r<   trainerset_optimizersload)r@   rB   rJ   r   r   rI   r   r?   E   s*   

z!DialogModelingTrainer._load_modelr0   c                 C   s   | j d ur
|  |S |S N)r"   )r@   r0   r   r   r   r/   j   s   

z$DialogModelingTrainer.rebuild_configc                 O   s"   t d | jj| j| jd d S )NTrain)r:   r;   )loggerinforP   r'   r:   r;   )r@   rA   rB   r   r   r   r'   o   s   
zDialogModelingTrainer.traincheckpoint_pathreturnc                 O   sp   t d d| j_|d}||d d  }|d | }|tjks#J ||d< | jdi | | jj	dd d S )	NEvaluateT/r%   r#   test)	data_typer   )
rU   rV   r0   do_inferrfindr   TORCH_MODEL_BIN_FILEr?   rP   infer)r@   rW   rA   rB   poscheckpoint_namecheckpoint_dirr   r   r   evaluatet   s   

zDialogModelingTrainer.evaluate)NNrS   )__name__
__module____qualname__r   strr   r+   r?   r   r/   r'   r   floatrd   __classcell__r   r   rC   r   r    !   s"    !%
r    )%r,   timetypingr   r   r   r   r   numpyr   modelscope.metainfor   +modelscope.models.nlp.space.model.generatorr   ,modelscope.models.nlp.space.model.model_baser	   modelscope.preprocessors.nlpr
   modelscope.trainers.baser   modelscope.trainers.builderr   "modelscope.trainers.nlp.space.evalr   1modelscope.trainers.nlp.space.trainer.gen_trainerr   modelscope.utils.configr   r   modelscope.utils.loggerr   rU   intr   register_moduledialog_modeling_trainerr    r   r   r   r   <module>   s$   
