o
    * i                     @   s2   d dl Z d dlZddlmZmZ G dd dZdS )    N   )default_candidatesgbs_default_candidatesc                   @   s:   e Zd ZdZdd Zdd Zdd Zdd	d
Zdd ZdS )	AutoTunerz
    The AutoTuner can automatically provide running task based on user-defined settings
    and the task will be launched for execution.

    Args:
        tuner_cfg (dict): The configuration of auto tuner user defined.
    c                 C   s   d| _ |dd| _|dddid }|dkr*ddlm} t||d< ||| _n>|d	kr@dd
lm} t||d< ||| _n(|dkrVddlm} t	||d< ||| _n|dkrfddlm
} ||| _ntg | _g | _|| _d S )Nr   
task_limitd   search_algonamegrid)
GridSearch
candidatesZdp_estimation)DpEstimationSearchZgbs)	GBSSearchZ	customize)CustomizeSearch)cur_task_idgetr   searchr   r   algor   r   r   r   NotImplementedErrorhistory_cfgsresume_cfgs	tuner_cfg)selfr   r   r   r   r   r    r   o/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/auto_tuner/tuner.py__init__   s,   
zAutoTuner.__init__c                 C   s0   | j | jkrdS | j| j}|  j d7  _ |S )zReturn a new task config.Nr   )r   r   r   search_oncer   )r   Znew_cfgr   r   r   r   >   s
   zAutoTuner.search_oncec                 C   s   | j | dS )zAdd cfg into history cfgsN)r   append)r   cfgr   r   r   add_cfgG   s   zAutoTuner.add_cfg./history.csvc                 C   s  t j|sdS t jt j|t j|dd  d}t|d5}t	|}t
|}t|d}t|}|D ]}|| q;W d   n1 sMw   Y  W d   n1 s\w   Y  |D ].}t|D ]'\}	}
zt|
||	< W qi ty   zt|
||	< W n	 ty   Y nw Y qiw qcg }|d }|dd }|D ]8}dd	 |D }d
d	 |D }dd	 |D }tt||}d}| jd d }|| r|| }||d< || q|| _dS )zResume form history csv fileN.r   z	_copy.csvrwr   c                 S   s   g | ]
}|d kr
|ndqS ) Nr   .0xr   r   r   
<listcomp>j       z1AutoTuner.resume_form_history.<locals>.<listcomp>c                 S      g | ]
}|d kr
dn|qS )TrueTr   r%   r   r   r   r(   k   r)   c                 S   r*   )FalseFr   r%   r   r   r   r(   l   r)   Z
metric_cfgr	   time)ospathexistsjoindirnamebasenamesplitopencsvreaderlistwriterwriterow	enumerateint
ValueErrorfloatdictzipr   r   r   )r   Zhistory_csv_pathZresume_csv_pathZfreadr8   Z	data_listZfwriter:   rowivalueZ	data_dictkeysvaluesval
dictionaryZtime_valZ
target_keyr   r   r   resume_form_historyK   sZ   


	
zAutoTuner.resume_form_historyc                 C   s   g d}| j ddr| j d D ]}|| q| j ddr,| j d D ]}|| q$| jD ],}d}|D ]}||sB||sBq5t||t||k}|oS|}q5|r[|  S q/dS )zGet cfg from resume cfgs)Z	mp_degreeZsharding_degreeZ	pp_degreeZ	dp_degreeZsharding_stageZmicro_batch_sizeZ
vpp_degreeZuse_recomputeZrecompute_granularityZnum_gpusnodesZglobal_batch_sizeZsharding_overlapZ	acc_stepsZrefined_recomputeNZcustom_search_dimT)r   r   r   r   str)r   Zcur_cfgZkeys_to_comparerrkeyr   Zret_is_sameZis_samer   r   r   get_cfg_from_resumev   s$   

zAutoTuner.get_cfg_from_resumeN)r    )	__name__
__module____qualname____doc__r   r   r   rI   rN   r   r   r   r   r      s     	
+r   )r7   r/   utilsr   r   r   r   r   r   r   <module>   s   