§
    [�’jG  ã                   óP   — d dl Z d dlZd dlmZmZ e G d„ d¦  «        ¦   «         ZdS )é    N)ÚasdictÚ	dataclassc                   óø   — e Zd ZU dZdZedz  ed<   dZee	e	f         dz  ed<   dZ
eed<   dZeed<   dZedz  ed<   dZeed	<   dZeed
<   d„ Zededd fd„¦   «         Zdefd„Zde	fd„Zde	ej        z  fd„Zd„ ZdS )ÚDistributedConfigaK  
    Configuration for native distributed training (FSDP2 + TP).

    Args:
        tp_size (`int`, *optional*):
            Number of devices for tensor parallelism. If `None` and `fsdp_size` is set, defaults to 1.
        tp_plan (`dict`, *optional*):
            Tensor parallel sharding plan. Leave as `None` to use the model's `base_model_tp_plan`.
            Set explicitly to override.
        enable_sequence_parallel (`bool`, *optional*, defaults to `False`):
            Reserved for sequence parallelism. Not wired up yet.
        enable_expert_parallel (`bool`, *optional*, defaults to `False`):
            Route MoE models through the expert-parallel path (``base_model_ep_plan``).
        fsdp_size (`int`, *optional*):
            Number of devices for FSDP (data parallelism). If `None` and `tp_size` is set, defaults to 1.
        fsdp_cpu_offload (`bool`, *optional*, defaults to `False`):
            Whether to enable CPU offloading for FSDP2.
        fsdp_mixed_precision (`bool`, *optional*, defaults to `False`):
            Whether to enable mixed precision for FSDP2.
    NÚtp_sizeÚtp_planFÚenable_sequence_parallelÚenable_expert_parallelÚ	fsdp_sizeÚfsdp_cpu_offloadÚfsdp_mixed_precisionc                 ó¬   — | j         €	| j        €d S | j         €d| _         | j        €d| _        | j         dk    r| j        dk    rt          d¦  «        ‚d S d S )Né   z†FSDP+TP is not supported yet. Use DistributedConfig(fsdp_size=N) or DistributedConfig(tp_size=N), not both. 2D support will come soon.)r   r   Ú
ValueError©Úselfs    úZC:\Projects\DSCons\.venv\Lib\site-packages\transformers\distributed\configuration_utils.pyÚ__post_init__zDistributedConfig.__post_init__3   sr   € ØŒ<Ð D¤NÐ$:ØˆFàŒ<ÐØˆDŒLØŒ>Ð!ØˆDŒNàŒ<˜!ÒÐ ¤°Ò 2Ð 2Ýð-ñô ð ð ÐÐ 2Ð 2ó    Úconfig_dictÚreturnc                 ó¢   ‡— i |¥|¥}d„ | j                              ¦   «         D ¦   «         Š | di ˆfd„|                     ¦   «         D ¦   «         ¤ŽS )Nc                 ó   — h | ]	}|j         ’Œ
S © )Úname)Ú.0Úfs     r   ú	<setcomp>z.DistributedConfig.from_dict.<locals>.<setcomp>F   s   € ÐHÐHÐH �a”fÐHÐHÐHr   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r   r   )r   ÚkÚvÚ
valid_keyss      €r   ú
<dictcomp>z/DistributedConfig.from_dict.<locals>.<dictcomp>G   s$   ø€ ÐIÐIÐI™t˜q !¸¸j¸¸�a˜¸¸¸r   r   )Ú__dataclass_fields__ÚvaluesÚitems)Úclsr   ÚkwargsÚmergedr"   s       @r   Ú	from_dictzDistributedConfig.from_dictC   sg   ø€ à*�KÐ* 6Ð*ˆØHÐH cÔ&>×&EÒ&EÑ&GÔ&GÐHÑHÔHˆ
ØˆsÐJÐJÐIÐIÐIÐI v§|¢|¡~¤~ÐIÑIÔIÐJÐJÐJr   c                 ó    — t          | ¦  «        S )N)r   r   s    r   Úto_dictzDistributedConfig.to_dictI   s   € Ý�d‰|Œ|Ðr   c                 óX   — t          j        |                      ¦   «         d¬¦  «        dz   S )Né   )Úindentú
)ÚjsonÚdumpsr,   r   s    r   Úto_json_stringz DistributedConfig.to_json_stringL   s$   € ÝŒz˜$Ÿ,š,™.œ.°Ð3Ñ3Ô3°dÑ:Ð:r   Újson_file_pathc                 óª   — t          |dd¬¦  «        5 }|                     |                      ¦   «         ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚwzutf-8)Úencoding)ÚopenÚwriter3   )r   r4   r   s      r   Úto_json_filezDistributedConfig.to_json_fileO   s–   € Ý�. #°Ð8Ñ8Ô8ð 	+¸AØ�GŠG�D×'Ò'Ñ)Ô)Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   “(AÁAÁAc                 óH   — | j         j        › d|                      ¦   «         › �S )Nú )Ú	__class__Ú__name__r3   r   s    r   Ú__repr__zDistributedConfig.__repr__S   s'   € Ø”.Ô)ÐCÐC¨D×,?Ò,?Ñ,AÔ,AÐCÐCÐCr   )r>   Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚ__annotations__r   ÚdictÚstrr	   Úboolr
   r   r   r   r   Úclassmethodr*   r,   r3   ÚosÚPathLiker:   r?   r   r   r   r   r      s[  € € € € € € ðð ð* €GˆS�4‰ZÐÐÑØ%)€GˆT�#�s�(Œ^˜dÑ"Ð)Ð)Ñ)Ø%*Ð˜dÐ*Ð*Ñ*Ø#(Ð˜DÐ(Ð(Ñ(Ø €Iˆs�T‰zÐ Ð Ñ Ø"Ð�dÐ"Ð"Ñ"Ø!&Ð˜$Ð&Ð&Ñ&ðð ð ð  ðK Dð KÐ7Jð Kð Kð Kñ „[ðKð
˜ð ð ð ð ð; ð ;ð ;ð ;ð ;ð+¨3°´Ñ+<ð +ð +ð +ð +ðDð Dð Dð Dð Dr   r   )r1   rI   Údataclassesr   r   r   r   r   r   ú<module>rL      sy   ðð €€€Ø 	€	€	€	Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð ð?Dð ?Dð ?Dð ?Dð ?Dñ ?Dô ?Dñ „ð?Dð ?Dð ?Dr   