o
    "j'                     @   s0   d dl mZ ddlmZ g ZG dd deZdS )    )RecomputeOptimizer   )MetaOptimizerBasec                       sv   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  ZS )r   c                    s,   t  | || _d | _g d| _g | _d S )N)ZLarsOptimizerZLambOptimizerZDGCOptimizer)super__init__	inner_optwrapped_optZmeta_optimizers_white_listZmeta_optimizers_black_list)selfZ	optimizer	__class__ }/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/meta_optimizers/recompute_optimizer.pyr      s
   

zRecomputeOptimizer.__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"RecomputeOptimizer._set_basic_infoc                 C   sd   | j d urd S | jj}t| j| _ | j t|d  |d r0| j   t|d }|| j _d S d S )NcheckpointsZenable_offloadcheckpoint_shape)	r   r   recompute_configsROr   Z_set_checkpointslistZ_enable_offloadr   )r	   ZconfigsZcheckpoint_shapesr   r   r   _init_wrapped_opt)   s   

z$RecomputeOptimizer._init_wrapped_optc                 C   s4   | j jsdS | jjrt| jjd dkrdS dS d S )NFr   r   T)r   Z_is_collectiver   	recomputelenr   )r	   r   r   r   
_can_apply6   s   zRecomputeOptimizer._can_applyc                 C   s   d|_ i |_d S )NF)r   r   )r	   dist_strategyr   r   r   _disable_strategyC   s   
z$RecomputeOptimizer._disable_strategyc                 C   s   d S r   r   )r	   r   contextr   r   r   _enable_strategyG   s   z#RecomputeOptimizer._enable_strategyNc                 C   s   |    | j|||||S r   )r   r   backward)r	   r   startup_programparameter_listno_grad_set	callbacksr   r   r   r    K   s   	
zRecomputeOptimizer.backwardc                 C   s   | j j|dS )N)params_grads)r   apply_gradients)r	   r%   r   r   r   r&   Y   s   z"RecomputeOptimizer.apply_gradientsc                 C   s   | j j|||dS )N)r!   r%   )r   apply_optimize)r	   r   r!   r%   r   r   r   r'   \   s   z!RecomputeOptimizer.apply_optimizec                 C   s&   |    | j||||\}}||fS r   )r   r   Zminimize)r	   r   r!   r"   r#   Zoptimize_opsr%   r   r   r   minimize_impla   s
   z RecomputeOptimizer.minimize_impl)NNNN)NNN)__name__
__module____qualname__r   r   r   r   r   r   r    r&   r'   r(   __classcell__r   r   r
   r   r      s     
r   N)Zpaddle.incubate.optimizerr   r   Zmeta_optimizer_baser   __all__r   r   r   r   <module>   s   