Ë
    ‡\;j5  ã                   óN   — 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„Z
d„ Zy)
é    N)Úfleet)Úin_dynamic_modeé   )ÚHeterParallelOptimizerÚHybridParallelOptimizer)Úloggerc                 ó\  — t         j                   }| |_        |�;|j                  rt        j                  d«       t        j                  |«      |_        i |_        |j                  «       dkD  r½|j                  j                  s‘t        | |j                  |j                  «      }|j                  j                  d   j                  rd|_        d|_        |j                  j                  d   j"                  rd|_        |j                   rJ 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)

    a$  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   Ú
pp_configsFz7sep parallel can not coexist with sharding_comm_overlap)r   Úuser_defined_optimizerÚ_is_collectiver   ÚwarningÚcopyÚdeepcopyÚ_user_defined_strategyÚ_contextÚ
worker_numÚheter_ccl_moder   Ú_hcgÚhybrid_configsÚdp_comm_overlapÚ
_dp_enableÚ_sep_enableÚsharding_comm_overlapÚ_sharding_enabler   )Ú	optimizerÚstrategyÚ	fleet_envÚhp_optims       úkG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/distributed/fleet/optimizer.pyÚ_dygraph_distributed_optimizerr       s/  € ô4 —‘€IØ'0€IÔ$àÐØ×#Ò#Ü�N‰NðBôô ,0¯=©=¸Ó+Bˆ	Ô(à€IÔà×ÑÓ Ò!Ø×/Ñ/×>Ò>Ü.Ø˜9Ÿ>™>¨9×+KÑ+KóˆHð ×/Ñ/×>Ñ>Øñç‰oðð ',�Ô#Ø',�Ô$à×/Ñ/×>Ñ>Øñç#Ñ#ð$ð -2�Ô)à ×,Ò,ðMàLóMØ,ð ˆOä)Ø˜9×;Ñ;óð ð Ðó    c                  ój   — t        «       rt        | i |¤ŽS t        j                  j                  | i |¤ŽS ©N)r   r    r   Údistributed_optimizer)ÚargsÚkwargss     r   r$   r$   `   s2   € ÜÔÜ-¨tÐ>°vÑ>Ð>ä�{‰{×0Ñ0°$ÐA¸&ÑAÐAr!   r#   )r   Úpaddle.distributedr   Úpaddle.frameworkr   Úmeta_optimizersr   r   Úutils.log_utilr   r    r$   © r!   r   Ú<module>r,      s#   ðó å $Ý ,ç LÝ "óEóPBr!   