§
    Ý˜ºh-U  ã                   óZ  — d Z ddlZddlmZ ddlZddlZddlm	Z	 ddl
mZ ddlmZmZmZ  e¦   «         r
ddlZddlmZ  ej        e¦  «        Zd„ Z e¦   «         r e¦   «         rdd	lmZ ndd
lmZ  G d„ de¦  «        Z G d„ de¦  «        Zdad„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"dd„Z#dd„Z$dS )z
Integration with Deepspeed
é    N)Úpartialmethodé   )Údep_version_check)Úis_accelerate_availableÚis_torch_availableÚlogging)Únnc                  ó¦   — t           j                             d¦  «        d u} | r-	 t          j        d¦  «        }dS # t          j        $ r Y dS w xY wd S )NÚ	deepspeedTF)Ú	importlibÚutilÚ	find_specÚimportlib_metadataÚmetadataÚPackageNotFoundError)Úpackage_existsÚ_s     úk/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/integrations/deepspeed.pyÚis_deepspeed_availabler   $   so   € Ý”^×-Ò-¨kÑ:Ô:À$ÐF€Nð ð ð	Ý"Ô+¨KÑ8Ô8ˆAØ�4øÝ!Ô6ð 	ð 	ð 	Ø�5�5ð	øøøð	ð s   ¥; »AÁA)ÚHfDeepSpeedConfig)Úobjectc                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )r   aJ  
    This object contains a DeepSpeed configuration dictionary and can be quickly queried for things like zero stage.

    A `weakref` of this object is stored in the module's globals to be able to access the config from areas where
    things like the Trainer object is not available (e.g. `from_pretrained` and `_get_resized_embeddings`). Therefore
    it's important that this object remains alive while the program is still running.

    [`Trainer`] uses the `HfTrainerDeepSpeedConfig` subclass instead. That subclass has logic to sync the configuration
    with values of [`TrainingArguments`] by replacing special placeholder values: `"auto"`. Without this special logic
    the DeepSpeed configuration is not modified in any way.

    Args:
        config_file_or_dict (`Union[str, Dict]`): path to DeepSpeed config file or dict.

    c                 ó¤   •— t          | ¦  «         t          d¦  «         t          d¦  «         t          ¦   «                              |¦  «         d S )NÚ
accelerater   )Úset_hf_deepspeed_configr   ÚsuperÚ__init__©ÚselfÚconfig_file_or_dictÚ	__class__s     €r   r   zHfDeepSpeedConfig.__init__J   sL   ø€ å Ñ%Ô%Ð%Ý˜,Ñ'Ô'Ð'Ý˜+Ñ&Ô&Ð&Ý‰Œ×ÒÐ,Ñ-Ô-Ð-Ð-Ð-ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__©r!   s   @r   r   r   9   sB   ø€ € € € € ðð ð .ð .ð .ð .ð .ð .ð .ð .ð .r"   r   c                   ó^   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zdd„Z eed¬	¦  «        Z	dd
„Z
d„ Zˆ xZS )ÚHfTrainerDeepSpeedConfigzž
    The `HfTrainerDeepSpeedConfig` object is meant to be created during `TrainingArguments` object creation and has the
    same lifespan as the latter.
    c                 óf   •— t          ¦   «                              |¦  «         d | _        g | _        d S ©N)r   r   Ú_dtypeÚ
mismatchesr   s     €r   r   z!HfTrainerDeepSpeedConfig.__init__X   s.   ø€ Ý‰Œ×ÒÐ,Ñ-Ô-Ð-ØˆŒØˆŒˆˆr"   c                 ó<   — | j         €t          d¦  «        ‚| j         S )Nz8trainer_config_process() wasn't called yet to tell dtype)r-   Ú
ValueError)r   s    r   ÚdtypezHfTrainerDeepSpeedConfig.dtype]   s!   € ØŒ;ÐÝÐWÑXÔXÐXØŒ{Ðr"   c                 ó@   — |                       |¦  «        }|€dS |dk    S )NFÚauto)Ú	get_value)r   Úds_key_longÚvals      r   Úis_autoz HfTrainerDeepSpeedConfig.is_autob   s'   € Ø�nŠn˜[Ñ)Ô)ˆØˆ;Ø�5à˜&’=Ð r"   NTc           
      ó  — |                       |¦  «        \  }}|€dS |                     |¦  «        dk    r|||<   dS |sdS |                     |¦  «        }|�.||k    r*| j                             d|› d|› d|› d|› �¦  «         dS dS dS )a¶  
        A utility method that massages the config file and can optionally verify that the values match.

        1. Replace "auto" values with `TrainingArguments` value.

        2. If it wasn't "auto" and `must_match` is true, then check that DS config matches Trainer
        config values and if mismatched add the entry to `self.mismatched` - will assert during
        `trainer_config_finalize` for one or more mismatches.

        Nr3   z- ds ú=z vs hf )Úfind_config_nodeÚgetr.   Úappend)r   r5   Úhf_valÚhf_keyÚ
must_matchÚconfigÚds_keyÚds_vals           r   Ú
fill_matchz#HfTrainerDeepSpeedConfig.fill_matchi   sÄ   € ð ×.Ò.¨{Ñ;Ô;‰ˆ�Øˆ>ØˆFà�:Š:�fÑÔ Ò'Ð'Ø#ˆF�6‰NØˆFàð 	ØˆFà—’˜FÑ#Ô#ˆØÐ &¨FÒ"2Ð"2ØŒO×"Ò"Ð#Y¨;Ð#YÐ#Y¸Ð#YÐ#YÈÐ#YÐ#YÐQWÐ#YÐ#YÑZÔZÐZÐZÐZð ÐÐ"2Ð"2r"   F)r?   c                 óê  — |j         |j        z  |j        z  }|                      d|j        d| ¦  «         |                      d|j        d¦  «         |                      d|d| ¦  «         |                      d|j        d¦  «         |                      d|j        d	¦  «         |                      d
|j        |j        gd¦  «         |                      d|j        d¦  «         |                      d|j	        d¦  «         |  
                    dd¦  «         |                      d|j        d	¦  «         |j        s|j        r|j        dk    rdnd}nd}|j        r8| j                             di ¦  «        | j        d<   |j        | j        d         d<   |                      d|j        s|j        o|dk    d¦  «         |                      d|dk    d¦  «         |                      d|j        d¦  «         |                      d|j        p|j        d¦  «         |                      d¦  «        rt*          j        | _        dS |                      d¦  «        rt*          j        | _        dS t*          j        | _        dS ) zŠ
        Adjust the config with `TrainingArguments` values. This stage is run during `TrainingArguments` object
        creation.
        Útrain_micro_batch_size_per_gpuÚper_device_train_batch_sizeÚgradient_accumulation_stepsÚtrain_batch_sizeztrain_batch_size (calculated)Úgradient_clippingÚmax_grad_normzoptimizer.params.lrÚlearning_ratezoptimizer.params.betaszadam_beta1+adam_beta2zoptimizer.params.epsÚadam_epsilonzoptimizer.params.weight_decayÚweight_decayzscheduler.params.warmup_min_lrr   zscheduler.params.warmup_max_lrÚapexÚampNÚ
checkpointÚuse_node_local_storagezfp16.enabledz%fp16|fp16_full_eval+fp16_backend(amp)zamp.enabledzfp16+fp16_backend(apex)zamp.opt_levelÚfp16_opt_levelzbf16.enabledzbf16|bf16_full_eval)Ú
world_sizerF   rG   rC   rJ   rK   Ú
adam_beta1Ú
adam_beta2rL   rM   Ú	fill_onlyÚfp16Úfp16_full_evalÚfp16_backendÚsave_on_each_noder@   r;   rR   Úbf16Úbf16_full_evalÚis_trueÚtorchÚbfloat16r-   Úis_falseÚfloat32Úfloat16)r   ÚargsÚauto_find_batch_sizerH   rY   s        r   Útrainer_config_processz/HfTrainerDeepSpeedConfig.trainer_config_process…   s¢  € ð  œ?¨TÔ-MÑMÐPTÔPpÑpÐØ�ŠØ,ØÔ,Ø)Ø$Ð$ñ		
ô 	
ð 	
ð 	�ŠØ)ØÔ,Ø)ñ	
ô 	
ð 	
ð
 	�ŠØØØ+Ø$Ð$ñ		
ô 	
ð 	
ð 	�ŠÐ+¨TÔ-?ÀÑQÔQÐQà�ŠÐ-¨tÔ/AÀ?ÑSÔSÐSØ�ŠØ$ØŒ_˜dœoÐ.Ø#ñ	
ô 	
ð 	
ð
 	�ŠÐ.°Ô0AÀ>ÑRÔRÐRØ�ŠÐ7¸Ô9JÈNÑ[Ô[Ð[à�ŠÐ7¸Ñ;Ô;Ð;Ø�ŠÐ8¸$Ô:LÈoÑ^Ô^Ð^ð Œ9ð 	 ˜Ô+ð 	 Ø%)Ô%6¸&Ò%@Ð%@˜6˜6ÀeˆLˆLàˆLàÔ!ð 	Yà(,¬¯ª¸ÀbÑ(IÔ(IˆDŒK˜Ñ%ØBFÔBXˆDŒK˜Ô%Ð&>Ñ?ð 	�ŠØØŒiÐ.˜4Ô.ÐI°LÀEÒ4IØ3ñ	
ô 	
ð 	
ð 	�Š˜ |°vÒ'=Ð?XÑYÔYÐYØ�Š˜¨Ô)<Ð>NÑOÔOÐOà�Š˜¨¬Ð)I°dÔ6IÐLaÑbÔbÐbð �<Š<˜Ñ'Ô'ð 	(Ýœ.ˆDŒKˆKˆKØ�]Š]˜>Ñ*Ô*ð 	(Ýœ-ˆDŒKˆKˆKåœ-ˆDŒKˆKˆKr"   c                 ó$  ‡ — g d¢}ˆ fd„|D ¦   «         }t          |¦  «        dk    �rbt          |j        d¦  «        r|j        j        }nÑt          |j        d¦  «        rt	          |j        j        ¦  «        }n¢t          |j        d¦  «        r,t          |j        j        d¦  «        r|j        j        j        }nat          |j        d¦  «        r9t          |j        j        d¦  «        rt	          |j        j        j        ¦  «        }nt          d|› d�¦  «        ‚‰                      d	||z  ¦  «         ‰  	                    ¦   «         rB‰                      d
t          d|z  |z  ¦  «        ¦  «         ‰                      dd|z  ¦  «         ‰                      d|d¦  «         ‰                      d|                     |¦  «        d¦  «         t          ‰ j        ¦  «        dk    r-d                     ‰ j        ¦  «        }t          d|› d�¦  «        ‚dS )z�
        This stage is run after we have the model and know num_training_steps.

        Now we can complete the configuration process.
        )ú$zero_optimization.reduce_bucket_sizeú-zero_optimization.stage3_prefetch_bucket_sizeú4zero_optimization.stage3_param_persistence_thresholdc                 ó>   •— g | ]}‰                      |¦  «        ¯|‘ŒS © )r7   )Ú.0Úxr   s     €r   ú
<listcomp>zDHfTrainerDeepSpeedConfig.trainer_config_finalize.<locals>.<listcomp>Ý   s)   ø€ Ð VÐ VÐ V qÀdÇlÂlÐSTÁoÄoÐ V Ð VÐ VÐ Vr"   r   Úhidden_sizeÚhidden_sizesÚtext_configz½The model's config file has neither `hidden_size` nor `hidden_sizes` entry, therefore it's not possible to automatically fill out the following `auto` entries in the DeepSpeed config file: zb. You can fix that by replacing `auto` values for these keys with an integer value of your choice.rg   rh   gÍÌÌÌÌÌì?ri   é
   z scheduler.params.total_num_stepsznum_training_steps (calculated)z!scheduler.params.warmup_num_stepsÚwarmup_stepsú
z]Please correct the following DeepSpeed config values that mismatch TrainingArguments values:
zF
The easiest method is to set these DeepSpeed config values to 'auto'.N)ÚlenÚhasattrr@   ro   Úmaxrp   rq   r0   rV   Úis_zero3ÚintrC   Úget_warmup_stepsr.   Újoin)r   rc   ÚmodelÚnum_training_stepsÚhidden_size_based_keysÚhidden_size_auto_keysro   r.   s   `       r   Útrainer_config_finalizez0HfTrainerDeepSpeedConfig.trainer_config_finalizeÏ   sf  ø€ ð"
ð "
ð "
Ðð
 !WÐ VÐ VÐ VÐ,BÐ VÑ VÔ VÐåÐ$Ñ%Ô%¨Ò)Ñ)Ý�u”| ]Ñ3Ô3ð Ø#œlÔ6��Ý˜œ ~Ñ6Ô6ð å! %¤,Ô";Ñ<Ô<��Ý˜œ }Ñ5Ô5ð ½'À%Ä,ÔBZÐ\iÑ:jÔ:jð Ø#œlÔ6ÔB��Ý˜œ }Ñ5Ô5ð 	½'À%Ä,ÔBZÐ\jÑ:kÔ:kð 	å! %¤,Ô":Ô"GÑHÔH��å ðYà5JðYð Yð Yñô ð ð �NŠNÐAÀ;ÐQ\ÑC\Ñ]Ô]Ð]Ø�}Š}‰Œð 	à—’ØCÝ˜˜kÑ)¨KÑ7Ñ8Ô8ñô ð ð —’ØJØ˜Ñ$ñô ð ð 	�ŠØ.ØØ-ñ	
ô 	
ð 	
ð
 	�ŠØ/Ø×!Ò!Ð"4Ñ5Ô5Øñ	
ô 	
ð 	
õ ˆtŒÑÔ !Ò#Ð#ØŸš 4¤?Ñ3Ô3ˆJÝðqØ'ðqð qð qñô ð ð $Ð#r"   )NT©F)r#   r$   r%   r&   r   r1   r7   rC   r   rV   re   r€   r'   r(   s   @r   r*   r*   R   s½   ø€ € € € € ðð ð
ð ð ð ð ð
ð ð ð
!ð !ð !ð[ð [ð [ð [ð4 �˜j°UÐ;Ñ;Ô;€IðH(ð H(ð H(ð H(ðT@ð @ð @ð @ð @ð @ð @r"   r*   c                 ó.   — t          j        | ¦  «        ad S r,   )ÚweakrefÚrefÚ_hf_deepspeed_config_weak_ref)Úhf_deepspeed_config_objs    r   r   r     s   € õ
 %,¤KÐ0GÑ$HÔ$HÐ!Ð!Ð!r"   c                  ó
   — d a d S r,   )r…   rk   r"   r   Úunset_hf_deepspeed_configrˆ     s   € ð %)Ð!Ð!Ð!r"   c                  óp   — t           �.t          ¦   «         � t          ¦   «                              ¦   «         S dS )NF)r…   rx   rk   r"   r   Úis_deepspeed_zero3_enabledrŠ   $  s1   € Ý$Ð0Õ5RÑ5TÔ5TÐ5`Ý,Ñ.Ô.×7Ò7Ñ9Ô9Ð9àˆur"   c                  óV   — t           �!t          ¦   «         �t          ¦   «         j        S d S r,   )r…   r@   rk   r"   r   Údeepspeed_configrŒ   +  s(   € Ý$Ð0Õ5RÑ5TÔ5TÐ5`Ý,Ñ.Ô.Ô5Ð5àˆtr"   c                 ó²   ‡‡‡— t          |dd¦  «        Š|                     ¦   «         }‰�‰|_        g Šddt          j        fˆˆˆfd„Š ‰| |d¬¦  «         ‰S )	zÏ
    Loads state dict into a model specifically for Zero3, since DeepSpeed does not support the `transformers`
    tensor parallelism API.

    Nearly identical code to PyTorch's `_load_from_state_dict`
    Ú	_metadataNÚ FÚmodulec                 ó’  •‡‡
— ‰€i n‰                      ‰d d…         i ¦  «        }||d<   |‰|dg g ‰f}t          ¦   «         rÐt          ˆfd„|D ¦   «         ¦  «        dk    r±dd l}t	          |                      ‰d d…         d¬¦  «        ¦  «        Š
ˆ
fd„|D ¦   «         }t          |¦  «        dk    r`|j                             |d¬	¦  «        5  t          j	         
                    ¦   «         dk    r
 | j        |Ž  d d d ¦  «         n# 1 swxY w Y   | j                             ¦   «         D ]\  }}	|	� ‰|	|‰|z   d
z   |¦  «         Œd S )NéÿÿÿÿÚassign_to_params_buffersTc                 ó>   •— g | ]}|                      ‰¦  «        ¯|‘ŒS rk   )Ú
startswith)rl   ÚkeyÚprefixs     €r   rn   zC_load_state_dict_into_zero3_model.<locals>.load.<locals>.<listcomp>J  s+   ø€ Ð0eÐ0eÐ0e¸ÈcÏnÊnÐ]cÑNdÔNdÐ0e°Ð0eÐ0eÐ0er"   r   F)r—   Úrecursec                 ó(   •— g | ]}|‰v ¯‰|         ‘ŒS rk   rk   )rl   ÚkÚnamed_parameterss     €r   rn   zC_load_state_dict_into_zero3_model.<locals>.load.<locals>.<listcomp>P  s*   ø€ ÐaÐaÐa¸È1ÐP`ÐK`ÐK`Ð 0°Ô 3ÐK`ÐK`ÐK`r"   )Úmodifier_rankú.)r;   rŠ   ru   r   Údictr›   ÚzeroÚGatheredParametersr^   ÚdistributedÚget_rankÚ_load_from_state_dictÚ_modulesÚitems)r�   Ú
state_dictr—   r“   Úlocal_metadatarc   r   Úparams_to_gatherÚnameÚchildr›   Ú
error_msgsÚloadr   s     `       @€€€r   r¬   z/_load_state_dict_into_zero3_model.<locals>.loadC  sÜ  øøø€ Ø'Ð/˜˜°X·\²\À&ÈÈ"ÈÄ+ÈrÑ5RÔ5RˆØ5MˆÐ1Ñ2à˜F N°D¸"¸bÀ*ÐMˆõ &Ñ'Ô'ð 	<­CÐ0eÐ0eÐ0eÐ0eÀ
Ð0eÑ0eÔ0eÑ,fÔ,fÐijÒ,jÐ,jØÐÐÐõ  $ F×$;Ò$;À6È#È2È#Ä;ÐX]Ð$;Ñ$^Ô$^Ñ_Ô_ÐØaÐaÐaÐa¸ZÐaÑaÔaÐÝÐ#Ñ$Ô$ qÒ(Ð(ð ”^×6Ò6Ð7GÐWXÐ6ÑYÔYð <ð <ÝÔ(×1Ò1Ñ3Ô3°qÒ8Ð8Ø4˜Ô4°dÐ;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð "œ?×0Ò0Ñ2Ô2ð 	Wð 	W‰KˆD�%ØÐ Ø��U˜J¨°©¸Ñ(;Ð=UÑVÔVÐVøð	Wð 	Ws   Ã-DÄDÄD)r“   )r�   F)ÚgetattrÚcopyrŽ   r	   ÚModule)Úmodel_to_loadr¦   r«   r¬   r   s     @@@r   Ú!_load_state_dict_into_zero3_modelr±   2  s™   øøø€ õ �z ;°Ñ5Ô5€HØ—’Ñ"Ô"€JØÐØ'ˆ
Ôà€JðWð W•R”Yð Wð Wð Wð Wð Wð Wð Wð Wð4 	€Dˆ˜
¸UÐCÑCÔCÐCàÐr"   c                 ó¦  ‡ ‡— ddl m}m} |j        }d}d|v r#|j        rt          d¦  «        ‚ ||¬¦  «        }nG|                     ¦   «         rt                               d¦  «         ‰  	                    ¦   «         }d|d	<   d}	d
|v r ||¦  «        }	n;t          ||¦  «        rˆˆ fd„}
 |||
¬¦  «        }	n‰                      ‰|¬¦  «        }	||	fS )zY
    A convenience wrapper that deals with optimizer and lr scheduler configuration.
    r   )Ú
DummyOptimÚDummySchedulerNÚ	optimizerz|--adafactor was passed, but also found `optimizer` configured in the DeepSpeed config. Only one optimizer can be configured.)Úparamsz¢Detected ZeRO Offload and non-DeepSpeed optimizers: This combination should work as long as the custom optimizer has both CPU and GPU implementation (except LAMB)TÚzero_allow_untested_optimizerÚ	schedulerc                 ól   •— t          j         ‰¦  «        }d |_        |                     ‰| ¬¦  «        }|S )N©r}   rµ   )r®   Úlr_schedulerÚcreate_scheduler)rµ   Útrainer_copyr»   r}   Útrainers      €€r   Ú_lr_scheduler_callablez5deepspeed_optim_sched.<locals>._lr_scheduler_callable�  sC   ø€ å#œy¨Ñ1Ô1�ð -1�Ô)Ø+×<Ò<Ø'9ÀYð  =ñ  ô  �ð $Ð#r"   )Úlr_scheduler_callablerº   )Úaccelerate.utilsr³   r´   r@   Ú	adafactorr0   Ú
is_offloadÚloggerÚinfoÚcreate_optimizerÚ
isinstancer¼   )r¾   Úhf_deepspeed_configrc   r}   Úmodel_parametersr³   r´   r@   rµ   r»   r¿   s   `  `       r   Údeepspeed_optim_schedrÊ   b  sN  øø€ ð <Ð;Ð;Ð;Ð;Ð;Ð;Ð;à Ô'€Fð €IØ�fÐÐØŒ>ð 	Ýð8ñô ð ð �JÐ&6Ð7Ñ7Ô7ˆ	ˆ	à×)Ò)Ñ+Ô+ð 	Ý�KŠKðVñô ð ð ×,Ò,Ñ.Ô.ˆ	à26ˆÐ.Ñ/à€LØ�fÐÐØ%�~ iÑ0Ô0ˆˆå�i Ñ,Ô,ð 	pð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð *˜>¨)ÐKaÐbÑbÔbˆLˆLà"×3Ò3ÐGYÐenÐ3ÑoÔoˆLà�lÐ"Ð"r"   Fc                 óô  — ddl m} | j        }| j        }| j        j        j        j        }|                     |||¦  «         | 	                    | 
                    ¦   «         ¦  «         |rU|                     ¦   «         st          d¦  «        ‚|                     d¦  «         |                     d¦  «         d\  }}d}	n¶d| _        |j                             di ¦  «                             d	d
¦  «        }
|
d
k    r4ddl}|                     ||
|                     ¦   «         |j        ¬¦  «        }t)          t+          d„ |                     ¦   «         ¦  «        ¦  «        }	t/          | ||||	¦  «        \  }}||fS )a  
    Init DeepSpeed, after updating the DeepSpeed configuration with any relevant Trainer's args.

    If `resume_from_checkpoint` was passed then an attempt to resume from a previously saved checkpoint will be made.

    Args:
        trainer: Trainer object
        num_training_steps: per single gpu
        resume_from_checkpoint: path to a checkpoint if to resume from after normal DeepSpeedEngine load
        inference: launch in inference mode (no optimizer and no lr scheduler)
        auto_find_batch_size: whether to ignore the `train_micro_batch_size_per_gpu` argument as it's being
            set automatically by the auto batch size finder

    Returns: optimizer, lr_scheduler

    We may use `deepspeed_init` more than once during the life of Trainer, when we do - it's a temp hack based on:
    https://github.com/deepspeedai/DeepSpeed/issues/1394#issuecomment-937405374 until Deepspeed fixes a bug where it
    can't resume from a checkpoint after it did some stepping https://github.com/deepspeedai/DeepSpeed/issues/1612

    r   )rÄ   zMZeRO inference only makes sense with ZeRO Stage 3 - please adjust your configrµ   r»   )NNNÚtensor_parallelÚautotp_sizeé   )r|   Útp_sizer1   r@   c                 ó   — | j         S r,   )Úrequires_grad)Úps    r   ú<lambda>z deepspeed_init.<locals>.<lambda>×  s   € °´€ r"   )Údeepspeed.utilsrÄ   r|   rc   ÚacceleratorÚstateÚdeepspeed_pluginÚhf_ds_configr€   ÚsetLevelÚget_process_log_levelrx   r0   Údel_config_sub_treerµ   r@   r;   r   Útp_model_initr1   ÚlistÚfilterÚ
parametersrÊ   )r¾   r}   Ú	inferenceÚ	ds_loggerr|   rc   rÈ   rµ   r»   rÉ   Údeepspeed_tp_sizer   s               r   Údeepspeed_initrã   Ÿ  sµ  € ð* 4Ð3Ð3Ð3Ð3Ð3àŒM€EØŒ<€Dà!Ô-Ô3ÔDÔQÐð ×/Ò/°°eÐ=OÑPÔPÐPð ×Ò�t×1Ò1Ñ3Ô3Ñ4Ô4Ð4àð 
à"×+Ò+Ñ-Ô-ð 	nÝÐlÑmÔmÐmð 	×/Ò/°Ñ<Ô<Ð<Ø×/Ò/°Ñ?Ô?Ð?Ø",Ñˆ	�<ØÐÐà ˆÔØ/Ô6×:Ò:Ð;LÈbÑQÔQ×UÒUÐVcÐefÑgÔgÐØ˜qÒ Ð ØÐÐÐà×+Ò+ØØ)Ø)×/Ò/Ñ1Ô1Ø*Ô1ð	 ,ñ ô ˆEõ  ¥Ð'@Ð'@À%×BRÒBRÑBTÔBTÑ UÔ UÑVÔVÐÝ"7ØÐ(¨$Ð0BÐDTñ#
ô #
Ñˆ	�<ð �lÐ"Ð"r"   Tc                 ó<  — dd l }t          |                      |› d�¦  «        ¦  «        }t          |¦  «        dk    rOt                               d|› �¦  «         |                      ||dd¬¦  «        \  }}|€t          d|› �¦  «        ‚d S t          d|› �¦  «        ‚)Nr   z/global_step*zAttempting to resume from T)Úload_module_strictÚload_optimizer_statesÚload_lr_scheduler_statesz-[deepspeed] failed to resume from checkpoint z!Can't find a valid checkpoint at )ÚglobÚsortedru   rÄ   rÅ   Úload_checkpointr0   )Údeepspeed_engineÚcheckpoint_pathrå   rè   Údeepspeed_checkpoint_dirsÚ	load_pathr   s          r   Údeepspeed_load_checkpointrï   â  sÉ   € ð
 €K€K€Kå & t§y¢y°OÐ1RÐ1RÐ1RÑ'SÔ'SÑ TÔ TÐå
Ð$Ñ%Ô%¨Ò)Ð)Ý�ŠÐB°ÐBÐBÑCÔCÐCà'×7Ò7ØØ1Ø"&Ø%)ð	 8ñ 
ô 
‰ˆ	�1ð ÐÝÐ^È_Ð^Ð^Ñ_Ô_Ð_ð Ðõ ÐN¸_ÐNÐNÑOÔOÐOr"   r�   )T)%r&   r®   Úimportlib.metadatar   r   Úimportlib.utilr   rƒ   Ú	functoolsr   Údependency_versions_checkr   Úutilsr   r   r   r^   r	   Ú
get_loggerr#   rÄ   r   Úaccelerate.utils.deepspeedr   ÚDeepSpeedConfigÚbuiltinsr   r*   r…   r   rˆ   rŠ   rŒ   r±   rÊ   rã   rï   rk   r"   r   ú<module>rù      s#  ððð ð €€€Ø /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hð ÐÑÔð Ø€L€L€LØÐÐÐÐÐð 
ˆÔ	˜HÑ	%Ô	%€ð
ð 
ð 
ð ÐÑÔð 3Ð!7Ð!7Ñ!9Ô!9ð 3ØOÐOÐOÐOÐOÐOÐOð 3Ð2Ð2Ð2Ð2Ð2ð.ð .ð .ð .ð .˜ñ .ô .ð .ð2}ð }ð }ð }ð }Ð0ñ }ô }ð }ðB !%Ð ðIð Ið Ið)ð )ð )ðð ð ðð ð ð-ð -ð -ð`:#ð :#ð :#ðz@#ð @#ð @#ð @#ðFPð Pð Pð Pð Pð Pr"   