o
    MeI  ã                   @   s†   d dl Z d dlZd dlZd dlZd dlmZmZ ddlm	Z	 ddl
mZmZ d dlmZ d dlmZ ddlmZ dd	d
„Zdd„ ZdS )é    N)Údygraph_onlyÚ_global_flagsé   )ÚDistributedStrategy)ÚHybridParallelOptimizerÚHeterParallelOptimizer)Úcore)Úfleet)Úloggerc                 C   sn   t j }| |_|dur|jrt d¡ t |¡|_i |_| 	¡ dkr5|jj
dkr/t| |j|jƒS t| |jƒS | S )a¼  
        Optimizer for distributed training.
        For the distributed training, this method would rebuild a new instance of DistributedOptimizer.
        Which has basic Optimizer function and special features for distributed training.
        Args:
            optimizer(Optimizer): The executor to run for init server.
            strategy(DistributedStrategy): Extra properties for distributed optimizer.
                It is recommended to use DistributedStrategy in fleet.init(). The strategy
                here is for compatibility. If the strategy in fleet.distributed_optimizer()
                is not None, then it will overwrite the DistributedStrategy in fleet.init(),
                which will take effect in distributed training.
        Returns:
            Fleet: instance of fleet.
        Examples:
            .. code-block:: python
                import paddle
                import paddle.distributed.fleet as fleet
                fleet.init(is_collective=True)
                strategy = fleet.DistributedStrategy()
                optimizer = paddle.optimizer.SGD(learning_rate=0.001)
                optimizer = fleet.distributed_optimizer(optimizer, strategy=strategy)
        Na$  It is recommended to use DistributedStrategy in fleet_env.init(). The strategy here is only for compatibility. If the strategy in fleet_env.distributed_optimizer() is not None, then it will overwrite the DistributedStrategy in fleet_env.init(), which will take effect in distributed training.r   F)r	   Zuser_defined_optimizerZ_is_collectiver
   ÚwarningÚcopyÚdeepcopyZ_user_defined_strategyÚ_contextZ
worker_numZheter_ccl_moder   Z_hcgr   )Z	optimizerZstrategyZ	fleet_env© r   úRD:\Projects\ConvertPro\env\Lib\site-packages\paddle/distributed/fleet/optimizer.pyÚ_dygraph_distributed_optimizer   s$   ÿÿÿr   c                  O   s,   t jj ¡ rt| i |¤ŽS tjj| i |¤ŽS ©N)ÚpaddleZfluidZ	frameworkZ_non_static_moder   r	   Údistributed_optimizer)ÚargsÚkwargsr   r   r   r   L   s   r   r   )r   r   ÚosÚnumpyÚnpZpaddle.fluid.frameworkr   r   Zbase.distributed_strategyr   Zmeta_optimizersr   r   Zpaddle.fluidr   Zpaddle.distributedr	   Zutils.log_utilr
   r   r   r   r   r   r   Ú<module>   s   
1