
    x-j#                       d dl mZ d dlZd dlmZ ddlmZ erd dlmZ  G d d          Z	 G d	 d
e	          Z
 G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d de	          Z G d d e	          Z G d! d"e	          Z G d# d$e	          ZdS )%    )annotationsN)TYPE_CHECKING   )	constants)_DTypeLiteralc                  6    e Zd ZddZd Zd Zd Zd ZddZdS )	
BaseConfigNc                R   || _         d | _        |/t          |t                    r|| _        nt	          d|           t          j        | j                   }|                                D ]\  }}t          | ||           | j        r| 	                    | j                   d S d S Nz%Expected a dictionary. But received: )
	_category_config_dict
isinstancedict
ValueErrorr   get_category_default_configitemssetattr	from_dict)selfcategoryconfig_dictconfigfielddefault_values         i/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/auto_parallel/strategy.py__init__zBaseConfig.__init__   s    ! "+t,, $/!! IKII   6t~FF$*LLNN 	0 	0 E=D%////  	.NN4,-----	. 	.    c                    t          j        | j                  }|                                D ]C}|                    |t           j                  }|t           j        k    rt          | ||           Dd S N)r   r   r   keysget	NOT_FOUNDr   )r   r   r   r   values        r   r   zBaseConfig.from_dict-   sl    6t~FF[[]] 	, 	,EOOE9+>??E	+++eU+++		, 	,r   c                *   i }t          j        | j                  }|                                D ]}t	          | |          }|||<   | j                                        D ]1\  }}t          |t                    r|	                                ||<   2|S r   )
r   r   r   r    getattr__dict__r   r   r	   to_dict)r   result_dictr   r   r#   s        r   r'   zBaseConfig.to_dict5   s    6t~FF[[]] 	' 	'ED%((E!&K M//11 	5 	5LE5%,, 5%*]]__E"r   c                    |                                  }d}|                                D ]\  }}|d| d| dz  }|dz   S )N{"z":"z",})r'   r   )r   r(   stringkvs        r   __repr__zBaseConfig.__repr__@   sW    llnn%%'' 	& 	&DAqo!ooooo%FF|r   c           	         | j         }|                    |          }||t          |           <   | j                                        D ])\  }}t          ||t          j        ||                     *|S r   )	__class____new__idr&   r   r   copydeepcopy)r   memoclsresultr.   r/   s         r   __deepcopy__zBaseConfig.__deepcopy__G   sp    nS!!RXXM'')) 	7 	7DAqFAt}Q556666r   c                V    |                                  }|                    ||          S r   )r'   r!   )r   r.   dr(   s       r   r!   zBaseConfig.getO   s#    llnnq!$$$r   r   )	__name__
__module____qualname__r   r   r'   r0   r:   r!    r   r   r	   r	      sx        . . . .&, , ,	 	 	    % % % % % %r   r	   c                        e Zd Zd fd	Z xZS )RecomputeConfigNc                d    t           j        }t                                          ||           d S r   )r   	RECOMPUTEsuperr   r   r   r   r2   s      r   r   zRecomputeConfig.__init__U   s+    &;/////r   r   r=   r>   r?   r   __classcell__r2   s   @r   rB   rB   T   =        0 0 0 0 0 0 0 0 0 0r   rB   c                        e Zd Zd fd	Z xZS )FusedLinearPromotionConfigNc                d    t           j        }t                                          ||           d S r   )r   FUSEDLINEARPROMOTIONrE   r   rF   s      r   r   z#FusedLinearPromotionConfig.__init__[   s+    1;/////r   r   rG   rI   s   @r   rL   rL   Z   rJ   r   rL   c                       e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d	ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d fd	Z xZS )	AMPConfigboolenabler   dtypestrlevelfloatinit_loss_scalingintincr_every_n_stepsdecr_every_n_nan_or_inf
incr_ratio
decr_ratiouse_dynamic_loss_scalingz	list[str]custom_white_listcustom_black_listcustom_black_varnamesuse_fp16_guarduse_bf16_guarduse_master_gradNc                d    t           j        }t                                          ||           d S r   )r   AMPrE   r   rF   s      r   r   zAMPConfig.__init__q   *    =;/////r   r   r=   r>   r?   __annotations__r   rH   rI   s   @r   rP   rP   `   s         LLLJJJ    """"        $$$$0 0 0 0 0 0 0 0 0 0r   rP   c                  @     e Zd ZU ded<   ded<   ded<   d fd	Z xZS )	ShardingConfigrQ   rR   rX   stagedegreeNc                d    t           j        }t                                          ||           d S r   )r   SHARDINGrE   r   rF   s      r   r   zShardingConfig.__init__{   +    %;/////r   r   rg   rI   s   @r   rj   rj   v   sZ         LLLJJJKKK0 0 0 0 0 0 0 0 0 0r   rj   c                  @     e Zd ZU ded<   ded<   ded<   d fd	Z xZS )	GradientMergeConfigrQ   rR   rX   k_stepsavgNc                d    t           j        }t                                          ||           d S r   )r   GRADIENT_MERGErE   r   rF   s      r   r   zGradientMergeConfig.__init__   s+    +;/////r   r   rg   rI   s   @r   rq   rq      sZ         LLLLLLIII0 0 0 0 0 0 0 0 0 0r   rq   c                  J     e Zd ZU ded<   ded<   ded<   ded<   d
 fd		Z xZS )PipelineConfigrQ   rR   rT   schedule_moderX   micro_batch_sizeaccumulate_stepsNc                d    t           j        }t                                          ||           d S r   )r   PIPELINErE   r   rF   s      r   r   zPipelineConfig.__init__   ro   r   r   rg   rI   s   @r   rw   rw      sl         LLL0 0 0 0 0 0 0 0 0 0r   rw   c                        e Zd Zd fd	Z xZS )	QATConfigNc                d    t           j        }t                                          ||           d S r   )r   QATrE   r   rF   s      r   r   zQATConfig.__init__   rf   r   r   rG   rI   s   @r   r~   r~      rJ   r   r~   c                        e Zd Zd fd	Z xZS )TuningConfigNc                d    t           j        }t                                          ||           d S r   )r   TUNINGrE   r   rF   s      r   r   zTuningConfig.__init__   s+    #;/////r   r   rG   rI   s   @r   r   r      rJ   r   r   c                        e Zd Zd fd	Z xZS )DatasetConfigNc                d    t           j        }t                                          ||           d S r   )r   DATASETrE   r   rF   s      r   r   zDatasetConfig.__init__   s+    $;/////r   r   rG   rI   s   @r   r   r      rJ   r   r   c                        e Zd Zd fd	Z xZS )FusedPassesConfigNc                d    t           j        }t                                          ||           d S r   )r   FUSED_PASSESrE   r   rF   s      r   r   zFusedPassesConfig.__init__   s+    );/////r   r   rG   rI   s   @r   r   r      rJ   r   r   c                        e Zd Zd fd	Z xZS )DPOptimizationConfigNc                d    t           j        }t                                          ||           d S r   )r   DP_OPTIMIZATIONrE   r   rF   s      r   r   zDPOptimizationConfig.__init__   +    ,;/////r   r   rG   rI   s   @r   r   r      rJ   r   r   c                        e Zd Zd fd	Z xZS )MPOptimizationConfigNc                d    t           j        }t                                          ||           d S r   )r   MP_OPTIMIZATIONrE   r   rF   s      r   r   zMPOptimizationConfig.__init__   r   r   r   rG   rI   s   @r   r   r      rJ   r   r   c                        e Zd Zd fd	Z xZS )SPOptimizationConfigNc                d    t           j        }t                                          ||           d S r   )r   SP_OPTIMIZATIONrE   r   rF   s      r   r   zSPOptimizationConfig.__init__   r   r   r   rG   rI   s   @r   r   r      rJ   r   r   c                  $     e Zd ZdZd fd	Z xZS )Strategya  
    The `Strategy` object is used to configure the parallelization and optimization for static graph.

    Args:
        config (dict|string, optional): If this is None, the default configurations will used.
        If this is a dictionary, the recognized key-value of it will be used to override the default
        configurations while other default configurations are left unchanged. If this is a string,
        it is interpreted as the path to a YAML configuration and will be loaded to override the
        corresponding default configurations.

    Examples:
        .. code-block:: python

            >>> import paddle
            >>> from paddle.distributed.fleet import auto

            >>> strategy = auto.Strategy()
            >>> sharding = strategy.sharding
            >>> assert sharding.enable == False
            >>> assert sharding.stage == 1
            >>> assert sharding.degree == 8

            >>> sharding.enable = True
            >>> sharding.stage = 2
            >>> sharding.degree = 2
            >>> assert sharding.enable == True
            >>> assert sharding.stage == 2
            >>> assert sharding.degree == 2

    Nc                   |At          |t                    rt          j        |          | _        nt          d|           i | _        t          j        }t                      	                    || j                   | j        
                    t          j        d           }t          |          | _        | j        
                    t          j        d           }t          |          | _        | j        
                    t          j        d           }t%          |          | _        | j        
                    t          j        d           }t+          |          | _        | j        
                    t          j        d           }t1          |          | _        | j        
                    t          j        d           }t7          |          | _        | j        
                    t          j        d           }t=          |          | _        | j        
                    t          j         d           }tC          |          | _"        | j        
                    t          j#        d           }tI          |          | _%        | j        
                    t          j&        d           }tO          |          | _(        | j        
                    t          j)        d           }tU          |          | _+        | j        
                    t          j,        d           }t[          |          | _.        | j        
                    t          j/        d           }ta          |          | _1        d S r   )2r   r   r5   r6   r   r   r   BASErE   r   r!   rD   rB   	recomputere   rP   amprn   rj   shardingru   rq   gradient_merger|   rw   pipeliner   r~   qatr   r   tuningr   r   datasetr   r   fused_passesrN   rL   fused_linear_promotionr   r   dp_optimizationr   r   mp_optimizationr   r   sp_optimization)r   r   r   r   r2   s       r   r   zStrategy.__init__   s   &$'' $(M&$9$9!!
 !DFDD   !#D>4#4555'++I,?FF(55'++IM4@@[))'++I,>EE&{33'++I,DdKK1+>>'++I,>EE&{33'++IM4@@[))'++I,<dCC";//'++I,=tDD$[11'++I,BDII-k::'++*D
 
 'A&M&M#'++I,EtLL3K@@'++I,EtLL3K@@'++I,EtLL3K@@r   r   )r=   r>   r?   __doc__r   rH   rI   s   @r   r   r      sQ         >8A 8A 8A 8A 8A 8A 8A 8A 8A 8Ar   r   )
__future__r   r5   typingr    r   paddle._typing.dtype_liker   r	   rB   rL   rP   rj   rq   rw   r~   r   r   r   r   r   r   r   r@   r   r   <module>r      s   # " " " " "                    87777778% 8% 8% 8% 8% 8% 8% 8%v0 0 0 0 0j 0 0 00 0 0 0 0 0 0 00 0 0 0 0
 0 0 0,0 0 0 0 0Z 0 0 00 0 0 0 0* 0 0 00 0 0 0 0Z 0 0 00 0 0 0 0
 0 0 00 0 0 0 0: 0 0 00 0 0 0 0J 0 0 00 0 0 0 0
 0 0 00 0 0 0 0: 0 0 00 0 0 0 0: 0 0 00 0 0 0 0: 0 0 0XA XA XA XA XAz XA XA XA XA XAr   