o
    "j7                     @   s6   d dl m  mZ ddlmZ g ZG dd deZdS )    N   )MetaOptimizerBasec                       s   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Z				dddZ	dd Z
dd Z	dddZ	dddZdd Z  ZS )AMPOptimizerc                    s.   t  | || _d | _g d| _dg| _d S )N)ZLarsOptimizerZLambOptimizerZRecomputeOptimizerZDGCOptimizer)super__init__	inner_optwrapped_optZmeta_optimizers_white_listZmeta_optimizers_black_list)selfZ	optimizer	__class__ w/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/meta_optimizers/amp_optimizer.pyr      s
   
zAMPOptimizer.__init__c                    s   t  |||| d S N)r   _set_basic_info)r	   loss
role_makerZuser_defined_optimizeruser_defined_strategyr
   r   r   r   "   s   zAMPOptimizer._set_basic_infoc                 C   s   | j d urd S | jj}t|d }t|d }t|d }t|||}t| j||d |d |d |d |d |d	 |d
 |d 
| _ | j	 dk}| jj
rQd}| j | d S )Ncustom_white_listcustom_black_listcustom_black_varnamesinit_loss_scalingincr_every_n_stepsdecr_every_n_nan_or_inf
incr_ratio
decr_ratiouse_dynamic_loss_scalingZuse_pure_fp16Zuse_fp16_guardr   F)r   r   amp_configssetmixed_precisionZAutoMixedPrecisionListsZdecorater   r   Z_worker_numZshardingZ_set_distributed)r	   configr   r   r   Z	amp_listsZis_distributedr   r   r   _init_wrapped_opt)   s2   
zAMPOptimizer._init_wrapped_optc                 C   s   | j jsdS | jjrdS dS )NFT)r   Z_is_collectiver   ampr	   r   r   r   
_can_applyM   s
   zAMPOptimizer._can_applyc                 C   s   d|_ i |_d S )NFr!   r   )r	   dist_strategyr   r   r   _disable_strategyU   s   
zAMPOptimizer._disable_strategyc                 C   s   d|_ ddddddd|_d S )NTg      @i     g       @g?)r   r   r   r   r   r   r$   )r	   r%   contextr   r   r   _enable_strategyY   s   zAMPOptimizer._enable_strategyNc                 C   s   |    | j|||||S r   )r    r   backward)r	   r   startup_programparameter_listno_grad_set	callbacksr   r   r   r*   d   s   	
zAMPOptimizer.backwardc                 C   s   | j j|dS )N)params_grads)r   apply_gradients)r	   r/   r   r   r   r0   r   s   zAMPOptimizer.apply_gradientsc                 C   s   | j j|||dS )N)r+   r/   )r   apply_optimize)r	   r   r+   r/   r   r   r   r1   u   s   zAMPOptimizer.apply_optimizec                 C   s&   |    | j||||\}}||fS r   )r    r   Zminimize)r	   r   r+   r,   r-   Zoptimize_opsr/   r   r   r   minimize_implz   s
   zAMPOptimizer.minimize_implFc                 C   s   | j ||||S r   )r   amp_init)r	   ZplacescopeZtest_programZuse_fp16_testr   r   r   r3      s   zAMPOptimizer.amp_initc                 C   s
   | j  S r   )r   get_loss_scalingr"   r   r   r   r5      s   
zAMPOptimizer.get_loss_scaling)NNNN)NNN)NNF)__name__
__module____qualname__r   r   r    r#   r&   r)   r*   r0   r1   r2   r3   r5   __classcell__r   r   r
   r   r      s&    $



r   )Zpaddle.static.ampZstaticr!   r   Zmeta_optimizer_baser   __all__r   r   r   r   r   <module>   s   