§
    ‚Štj£  ã                   óx   — d dl Z d dlZd dlmZmZ ddlmZ  e¦   «         rd dlZe G d„ d¦  «        ¦   «         ZdS )é    N)ÚasdictÚ	dataclassé   )Úis_torch_availablec                   óø   — 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| _        t          j                             ¦   «         rrt          j                             ¦   «         rVt          j                             ¦   «         }| j         | j        z  |k    r't          d| j         › d| j        › d|› d�¦  «        ‚d S d S d S )Né   z	tp_size (z) * fsdp_size (z) is not equal to world_size (ú))r	   r   ÚtorchÚdistributedÚis_availableÚis_initializedÚget_world_sizeÚRuntimeError)ÚselfÚ
world_sizes     új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/distributed/configuration_utils.pyÚ__post_init__zDistributedConfig.__post_init__9   sØ   € ØŒ<Ð D¤NÐ$:ØˆFàŒ<ÐØˆDŒLØŒ>Ð!ØˆDŒNåÔ×)Ò)Ñ+Ô+ð 	µÔ0A×0PÒ0PÑ0RÔ0Rð 	ÝÔ*×9Ò9Ñ;Ô;ˆJØŒ|˜dœnÑ,°
Ò:Ð:Ý"Øx ¤ÐxÐx¸T¼^ÐxÐxÐkuÐxÐxÐxñô ð ð	ð 	ð 	ð 	à:Ð:ó    Ú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>L   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>M   s$   ø€ ÐIÐIÐI™t˜q !¸¸j¸¸�a˜¸¸¸r   r"   )Ú__dataclass_fields__ÚvaluesÚitems)Úclsr   ÚkwargsÚmergedr*   s       @r   Ú	from_dictzDistributedConfig.from_dictI   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_dictO   s   € Ý�d‰|Œ|Ðr   c                 óX   — t          j        |                      ¦   «         d¬¦  «        dz   S )Nr   )Úindentú
)ÚjsonÚdumpsr5   r4   s    r   Úto_json_stringz DistributedConfig.to_json_stringR   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Úwriter;   )r   r<   r%   s      r   Úto_json_filezDistributedConfig.to_json_fileU   s–   € Ý�. #°Ð8Ñ8Ô8ð 	+¸AØ�GŠG�D×'Ò'Ñ)Ô)Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   “(AÁAÁAc                 óH   — | j         j        › d|                      ¦   «         › �S )Nú )Ú	__class__Ú__name__r;   r4   s    r   Ú__repr__zDistributedConfig.__repr__Y   s'   € Ø”.Ô)ÐCÐC¨D×,?Ò,?Ñ,AÔ,AÐCÐCÐCr   )rF   Ú
__module__Ú__qualname__Ú__doc__r	   ÚintÚ__annotations__r
   ÚdictÚstrr   Úboolr   r   r   r   r   Úclassmethodr2   r5   r;   ÚosÚPathLikerB   rG   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   )	r9   rQ   Údataclassesr   r   Úutilsr   r   r   r"   r   r   ú<module>rU      s§   ðð €€€Ø 	€	€	€	Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à &Ð &Ð &Ð &Ð &Ð &ð ÐÑÔð Ø€L€L€Lð ð?Dð ?Dð ?Dð ?Dð ?Dñ ?Dô ?Dñ „ð?Dð ?Dð ?Dr   