o
    ñpiÑ  ã                   @   sR   d dl Z d dlmZ d dlmZ ddlmZmZ ddlm	Z	 ddd„Z
d	d
„ ZdS )é    N)Úfleet)Úin_dynamic_modeé   )ÚHeterParallelOptimizerÚHybridParallelOptimizer)Úloggerc                 C   sª   t j }| |_|dur|jrt d¡ t |¡|_i |_| 	¡ dkrS|jj
sMt| |j|jƒ}|jjd jr:d|_d|_|jjd jrKd|_|jrKJ dƒ‚|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()
            >>> linear = paddle.nn.Linear(10, 10)
            >>> optimizer = paddle.optimizer.SGD(learning_rate=0.001, parameters=linear.parameters())
            >>> 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   Z
pp_configsFz7sep parallel can not coexist with sharding_comm_overlap)r   Zuser_defined_optimizerZ_is_collectiver   ÚwarningÚcopyÚdeepcopyZ_user_defined_strategyÚ_contextZ
worker_numZheter_ccl_moder   Z_hcgZhybrid_configsZdp_comm_overlapZ
_dp_enableZ_sep_enableZsharding_comm_overlapZ_sharding_enabler   )Z	optimizerZstrategyZ	fleet_envZhp_optim© r   úi/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/fleet/optimizer.pyÚ_dygraph_distributed_optimizer   sF   ÿ
ÿÿþÿþÿÿr   c                  O   s&   t ƒ r
t| i |¤ŽS tjj| i |¤ŽS ©N)r   r   r   Údistributed_optimizer)ÚargsÚkwargsr   r   r   r   `   s   r   r   )r	   Zpaddle.distributedr   Zpaddle.frameworkr   Zmeta_optimizersr   r   Zutils.log_utilr   r   r   r   r   r   r   Ú<module>   s   
H