o
    !j<                     @   s   d Z ddlZddlZg ZG dd dZG dd deZG dd deZG d	d
 d
eZG dd deZG dd deZ	G dd deZ
dS )zDefinition of trainers.    Nc                   @   s\  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 Zdd Zdd ZdVddZdVddZ	dWd d!ZdXd#d$Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dAdB Z"dCdD Z#dVdEdFZ$dGdH Z%dIdJ Z&dKdL Z'dMdN Z(dOdP Z)dQdR Z*dSdT Z+dUS )YTrainerDesczO
    Set proto from python to c++.
    Can be initialized from train_desc.
    c                 C   s   t jt}|tjvrtj| |d tjvr tj|d  ddlm} | | _	ddl
}| | j	_d| _d| _d| _d| _dS )z
        self.proto_desc = data_feed_pb2.DataFeedDesc()
        with open(proto_file, 'r') as f:
            text_format.Parse(f.read(), self.proto_desc)
        z/protor   )trainer_desc_pb2NF)ospathdirname__file__sysappendprotor   r   
proto_descmultiprocessing	cpu_count
thread_num_fleet_desc_device_worker_program_infer)selfZcur_pathr   mp r   Y/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/base/trainer_desc.py__init__   s   


zTrainerDesc.__init__c                 C   s`   |d u rd S |d | j _|d | j _|d D ]	}| j j| q|d D ]	}| j j| q$d S )Nr            )r   Zxpu_start_idxZxpu_end_idxZxpu_send_listr	   Zxpu_recv_list)r   retir   r   r   _set_heter_info6   s   zTrainerDesc._set_heter_infoc                 C   sR   t |}t|D ]\}}| jjj|jg | jjj|| g q|| jj_d S N)	list	enumerater   Zfetch_configZfetch_var_namesextendnameZfetch_var_str_formatprint_period)r   Z
fetch_varsZ
fetch_infor#   r   vr   r   r   _set_fetch_var_and_info[   s   
z#TrainerDesc._set_fetch_var_and_infoc                 C      || j _d S r   )r   debug)r   r'   r   r   r   
_set_debuge      zTrainerDesc._set_debugc                 C   r&   r   )r   r   )r   r   r   r   r   _set_threadh   r)   zTrainerDesc._set_threadc                 C   
   || _ d S r   )r   )r   Zdevice_workerr   r   r   _set_device_workerk      
zTrainerDesc._set_device_workerc                 C   r+   r   )r   )r   Zinferr   r   r   
_set_infern   r-   zTrainerDesc._set_inferc                 C   s(   || _ ddlm} ||}|| j_d S Nr   )text_format)r   google.protobufr0   MessageToStringr   
fleet_desc)r   r3   r0   Zfleet_desc_strr   r   r   _set_fleet_descq   s   
zTrainerDesc._set_fleet_descc                 C   s   d S r   r   r   r   r   r   _gen_trainer_descy   s   zTrainerDesc._gen_trainer_descc                 C   r+   r   )r   r   programr   r   r   _set_program|   r-   zTrainerDesc._set_programc                 C   r&   r   )r   
trainer_id)r   r:   r   r   r   _set_trainer_id   r)   zTrainerDesc._set_trainer_idc                 C      |D ]	}| j j| qd S r   )r   trainersr	   )r   r=   Ztrainer_numr   r   r   _set_trainers      zTrainerDesc._set_trainersFc                 C   r&   r   )r   use_cvm)r   r@   r   r   r   _set_use_cvm   r)   zTrainerDesc._set_use_cvmc                 C   r&   r   )r   no_cvm)r   rB   r   r   r   _set_no_cvm   r)   zTrainerDesc._set_no_cvmTc                 C   r&   r   )r   %scale_sparse_gradient_with_batch_size)r   rD   r   r   r   &_set_scale_sparse_grad_with_batch_size   s   
z2TrainerDesc._set_scale_sparse_grad_with_batch_sizec                 C   r&   r   )r   scale_datanorm)r   rG   r   r   r   _set_scale_datanorm   r)   zTrainerDesc._set_scale_datanormc                 C   r&   r   )r   	dump_slot)r   rI   r   r   r   _set_dump_slot   r)   zTrainerDesc._set_dump_slotc                 C   r&   r   )r   mpi_rank)r   rK   r   r   r   _set_mpi_rank   r)   zTrainerDesc._set_mpi_rankc                 C   r&   r   )r   mpi_size)r   rM   r   r   r   _set_mpi_size   r)   zTrainerDesc._set_mpi_sizec                 C   r<   r   )r   dump_fieldsr	   )r   rO   fieldr   r   r   _set_dump_fields   r?   zTrainerDesc._set_dump_fieldsc                 C   r&   r   )r   is_dump_in_simple_mode)r   rR   r   r   r   _set_is_dump_in_simple_mode   r)   z'TrainerDesc._set_is_dump_in_simple_modec                 C   r&   r   )r   dump_num_decimals)r   rT   r   r   r   _set_dump_num_decimals   r)   z"TrainerDesc._set_dump_num_decimalsc                 C   r&   r   )r   Zdump_fields_path)r   r   r   r   r   _set_dump_fields_path   r)   z!TrainerDesc._set_dump_fields_pathc                 C   r&   r   )r   dump_file_num)r   rW   r   r   r   _set_dump_file_num   r)   zTrainerDesc._set_dump_file_numc                 C   r&   r   )r   user_define_dump_filename)r   rY   r   r   r   _set_user_define_dump_filename   r)   z*TrainerDesc._set_user_define_dump_filenamec                 C   r&   r   )r   Zdump_converter)r   	converterr   r   r   _set_dump_converter   r)   zTrainerDesc._set_dump_converterc                 C   r&   r   )r   enable_random_dump)r   r]   r   r   r   _set_enable_random_dump   r)   z#TrainerDesc._set_enable_random_dumpc                 C   r&   r   )r   dump_interval)r   r_   r   r   r   _set_dump_interval   r)   zTrainerDesc._set_dump_intervalc                 C   r&   r   )r   random_with_lineid)r   ra   r   r   r   _set_random_with_lineid   r)   z#TrainerDesc._set_random_with_lineidc                 C   r<   r   )r   
dump_paramr	   )r   rc   paramr   r   r   _set_dump_param   r?   zTrainerDesc._set_dump_paramc                 C   r&   r   )r   Zdump_fields_mode)r   moder   r   r   _set_dump_fields_mode   r)   z!TrainerDesc._set_dump_fields_modec                 C   r<   r   )r   worker_placesr	   )r   rh   Zplacer   r   r   _set_worker_places   r?   zTrainerDesc._set_worker_placesc                 C   r&   r   )r   
use_ps_gpu)r   rj   r   r   r   _set_use_ps_gpu   r)   zTrainerDesc._set_use_ps_gpuc                 C   r&   r   )r   thread_barrier)r   rl   r   r   r   _set_thread_barrier   r)   zTrainerDesc._set_thread_barrierc                 C   r<   r   )r   check_nan_var_namesr	   )r   rn   varr   r   r   _set_check_nan_var_names   r?   z$TrainerDesc._set_check_nan_var_namesc                 C   r<   r   )r   
loss_namesr	   )r   rq   Zlossr   r   r   _set_loss_names   r?   zTrainerDesc._set_loss_namesc                 C   s^   | dd| jj_| dd| jj_| dd| jj_| dd| jj_| dd| jj_d S )	Nneed_adjustFnid_slot nid_adjw_thresholdg        nid_adjw_ratioins_weight_slot)getr   Zadjust_ins_weight_configrs   rt   rv   rw   rx   )r   config_dictr   r   r   _set_adjust_ins_weight   s   




z"TrainerDesc._set_adjust_ins_weightc                 C   sx  | j j}|dd|_|dd|_|dg }t|ts |g}|dg }t|ts.|g}t|t|krDtdt| dt| |D ]}|j	
| qF|D ]}|j
| qQ|d	g }t|tsh|g}|d
g }t|tsv|g}t|t|krtdt| dt| |D ]}|j
| q|D ]}|j
| q|dg }t|ts|g}|dg }	t|	ts|	g}	t|t|	krtdt| dt|	 |D ]}|j
| q|	D ]}|j
| q|di }
|
D ]2}|j }||_|
| }t|ts	|g}t|dkrtdt| |D ]	}|j
| qq|dd|_|dd|_|dd|_d S )N	need_copyF	batch_numd   src_sparse_tablesdest_sparse_tablesz3len(src_sparse_tables) != len(dest_sparse_tables), z vs src_dense_tablesdest_dense_tablesz1len(src_dense_tables) != len(dest_dense_tables), src_var_listdest_var_listz)len(src_var_list) != len(dest_var_list), dependency_mapr   zdependency len %s != 1dense_pull_after_copyTenable_dependencysparse_copy_by_feasign)r   Zcopy_table_configry   r|   r}   
isinstancer   len
ValueErrorr   r	   r   r   r   r   r   Ztable_denpendency_mapaddkeyvaluesr   r   r   )r   rz   configr   r   r   r   r   r   r   r   r   mr   valuer   r   r   _set_copy_table_config   s   







z"TrainerDesc._set_copy_table_configc                 C   s
   | j  S r   )r   ZSerializeToStringr5   r   r   r   _desc2  r-   zTrainerDesc._descc                 C   s   ddl m} || jS r/   )r1   r0   r2   r   )r   r0   r   r   r   __str__5  s   zTrainerDesc.__str__N)F)T)rF   ),__name__
__module____qualname____doc__r   r   r%   r(   r*   r,   r.   r4   r6   r9   r;   r>   rA   rC   rE   rH   rJ   rL   rN   rQ   rS   rU   rV   rX   rZ   r\   r^   r`   rb   re   rg   ri   rk   rm   rp   rr   r{   r   r   r   r   r   r   r   r      sV    %





Jr   c                       8   e Zd ZdZ fddZ fddZ fddZ  ZS )MultiTrainerzF
    Implement of MultiTrainer.
    Can be init from TrainerDesc.
    c                       t    d S r   superr   r5   	__class__r   r   r   A     
zMultiTrainer.__init__c                       t  | || _d S r   r   r9   r   r7   r   r   r   r9   E     
zMultiTrainer._set_programc                    s@   t    d| j_| j| j | j| j | j	| j d S )Nr   )
r   r6   r   
class_namer   r.   r   r9   r   _gen_worker_descr5   r   r   r   r6   I  s
   
zMultiTrainer._gen_trainer_descr   r   r   r   r   r9   r6   __classcell__r   r   r   r   r   ;  
    r   c                       r   )DistMultiTrainerzK
    Implement of DistMultiTrainer.
    It's for Distributed training.
    c                    r   r   r   r5   r   r   r   r   W  r   zDistMultiTrainer.__init__c                    r   r   r   r7   r   r   r   r9   [  r   zDistMultiTrainer._set_programc                    R   t    d| j_| jd u rtd| j| j | j	| j | j
| j d S )Nr   None Programr   r6   r   r   r   RuntimeErrorr   r.   r   r9   r   r5   r   r   r   r6   _     

z"DistMultiTrainer._gen_trainer_descr   r   r   r   r   r   Q  r   r   c                       r   )HeterXpuTrainerzJ
    Implement of HeterXpuTrainer.
    It's for Distributed training.
    c                    r   r   r   r5   r   r   r   r   o  r   zHeterXpuTrainer.__init__c                    r   r   r   r7   r   r   r   r9   s  r   zHeterXpuTrainer._set_programc                    r   )Nr   r   r   r5   r   r   r   r6   w  r   z!HeterXpuTrainer._gen_trainer_descr   r   r   r   r   r   i  r   r   c                       r   )PSGPUTrainerzG
    Implement of PSGPUTrainer.
    It's for Distributed training.
    c                    r   r   r   r5   r   r   r   r     r   zPSGPUTrainer.__init__c                    r   r   r   r7   r   r   r   r9     r   zPSGPUTrainer._set_programc                    r   )Nr   r   r   r5   r   r   r   r6     r   zPSGPUTrainer._gen_trainer_descr   r   r   r   r   r     r   r   c                       r   )HeterPipelineTrainerzT
    Implement of HeterPipelineTrainer.
    It's for HeterPS Pipeline training.
    c                    r   r   r   r5   r   r   r   r     r   zHeterPipelineTrainer.__init__c                    r   r   r   r7   r   r   r   r9     r   z!HeterPipelineTrainer._set_programc                    r   )Nr   r   r   r5   r   r   r   r6     r   z&HeterPipelineTrainer._gen_trainer_descr   r   r   r   r   r     r   r   c                       r   )PipelineTrainerz>
    Implement of PipelineTrainer.
    It's for Pipeline.
    c                    r   r   r   r5   r   r   r   r     r   zPipelineTrainer.__init__c                    r   r   r   r7   r   r   r   r9     r   zPipelineTrainer._set_programc                    r   )Nr   r   r   r5   r   r   r   r6     r   z!PipelineTrainer._gen_trainer_descr   r   r   r   r   r     r   r   )r   r   r   __all__r   r   r   r   r   r   r   r   r   r   r   <module>   s     '