o
    "j                     @   s>   d d Z dd Zdd Zdd Zdd	 ZdddZdd ZdS )c                 C      dS N    )mpppshardinghlVr   r   i/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/auto_tuner/cost_model.py
all_params      r   c                 C   r   r   r   )r   r   sbr   r	   r   r   r   full_recompute_acts   r   r   c                 C   r   r   r   )r   r   r   r   r   r	   ar   r   r   all_acts   r   r   c                 C   s   | d S )Ni   @r   )pr   r   r   to_gb   s   r   c              	   C   sD  |d }|d }	|d }
|d }|d }|d }d}t || | }t || | }|| dks2J || }|||	  dksIJ | d	||	  d}|dkrc|||  dksYJ d|d ||   }tt|	|||||}d}|| dksxJ |rtt|	|||
||| }ntt|	|||
|||| }|dksJ || }|S )
z5Estimate the memory of model unser parallel strategy.sharding_degree	mp_degreemicro_batch_size	pp_degree
vpp_degreeuse_recomputer       z vs )intr   r   r   r   )total_cardsZparallel_cfgr	   r   r   r
   r   gbsr   r   r   r   vppr   sepZlbsZs_sepZ	vpp_ratioparamsZactsZpeak_memr   r   r   get_mem#   s2   &r"   Fc                 C   sf   t  }d}| d d }||k r)| | dkr!|| || |  |d7 }||k st|}t||dS )z"Get the divisor of a given number.r      r   )reverse)setaddlistsorted)numr$   resultsimidr   r   r   divisorH   s   
r-   c                 C   s  |d d |d d |d d |d d |d d |d d |d d	 | d
df\}}}}}}}}	g }
| D ]u}|d }|d }|d }|d }|d }|d }|d }|| | | |kr_q6|| dkrfq6|| | dkroq6|| | | dkrzq6|| dkrq6|| | dkrq6|dkr|dkrq6|| dks|| dks|| dkrq6|
| q6g }|
D ]}t||||||||}||d< || q|sJ |S )z Get not OOM parallel strategies.Zsearch_algoZestimated_num_gpusZ	model_cfgZ
num_layersZhidden_sizeZnum_attention_headsZ
vocab_sizeZ
seq_lengthZglobal_batch_sizeper_card_memoryP   r   r   r   r   r   Z	dp_degreer   r   r   r#   Zmemory_cost)getappendr"   )ZcfgsZ	tuner_cfgr   r	   r   r   r
   r   r   r.   Zpruned_cfgscfgr   r   Zmbsr   r   Zdpr   Z
valid_cfgsZmemr   r   r   get_not_oom_cfgsV   sT   








$r3   N)F)r   r   r   r   r"   r-   r3   r   r   r   r   <module>   s   
%