ó
    Eñi8  ã                   ó¤  • S SK r S SKJr  S SKJr  S SKrS SKrS SKJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  \" SS5      (       a  S S	K J!r!  OS S	K"J!r!  \" 5       (       a	  S SK#J$s  J%r&  SS
K'J(r(  SSK)J*r*  \(" \+5      r,   SS\-S\.\/   S\.S\.S\.S\0S\0S\\!   S\1S\14S jjr2   SS jr3SS\0S\14S jjr4SS\04S jjr5g)é    N)ÚPath)ÚOptional)Ú
load_modelé   )Ú
MODEL_NAMEÚOPTIMIZER_NAMEÚRNG_STATE_NAMEÚSAFE_MODEL_NAMEÚSAFE_WEIGHTS_NAMEÚSAMPLER_NAMEÚSCALER_NAMEÚSCHEDULER_NAMEÚWEIGHTS_NAMEÚget_pretty_nameÚis_cuda_availableÚis_hpu_availableÚis_mlu_availableÚis_musa_availableÚis_neuron_availableÚis_sdaa_availableÚis_torch_versionÚis_torch_xla_availableÚis_xpu_availableÚloadÚsavez>=z2.4.0)Ú
GradScaler)Ú
get_logger)ÚPartialStateÚ
output_dirÚmodel_statesÚ
optimizersÚ
schedulersÚdataloadersÚprocess_indexÚstepÚscalerÚsave_on_each_nodeÚsafe_serializationc
                 óÊ	  • [        U 5      n [        U5       Hg  u  p«U	(       d  [        O[        nU
S:”  a  UR	                  SSU
 S35      nU R                  U5      n[        X½X‰S9  [        R                  SU 35        Mi     [        U5       He  u  p®UR                  5       nU
S:X  a	  [         S3O[         SU
 S3nU R                  U5      n[        UUUSS9  [        R                  SU 35        Mg     [        U5       Hf  u  n
nUR                  5       nU
S:X  a	  [         S3O[         SU
 S3nU R                  U5      n[        UUUSS9  [        R                  S	U 35        Mh     [        U5       Hõ  u  n
nU
S:X  a	  [         S3O[         SU
 S3nU R                  U5      nS
SKJnJn  [!        UR"                  U5      (       a-  UR%                  5       n[!        UU5      (       a  [        UUUSS9  ['        USS5      (       aF  U
S:X  a  SOSU
 S3nU R                  U5      nUR                  5       n[(        R                  " UU5        [        R                  SU
 SU 35        M÷     UbT  UR                  5       nU R                  [*        5      n[(        R                  " UU5        [        R                  SU 35        0 n[,         SU S3nUUS'   [.        R0                  " 5       US'   [2        R.                  R5                  5       US'   [(        R6                  " 5       US'   [9        5       (       a!  [(        R:                  R=                  5       US'   [?        5       (       a"  [(        R@                  R=                  5       US'   Oa[C        5       (       a"  [(        RD                  R=                  5       US'   O0[G        5       (       a!  [(        RH                  R=                  5       US'   [K        5       (       a!  [(        RL                  R=                  5       US'   [O        5       (       a!  [(        RP                  R=                  5       US'   [S        5       (       a!  [(        RT                  R=                  5       US'   [W        5       (       a  [X        R6                  " 5       US'   U R                  U5      n [(        R                  " UU 5        [        R                  SU  35        U $ ) a  
Saves the current states of the models, optimizers, scaler, and RNG generators to a given directory.

<Tip>

If `safe_serialization` is `True`, models will be saved with `safetensors` while the rest are saved using native
`pickle`.

</Tip>

Args:
    output_dir (`str` or `os.PathLike`):
        The name of the folder to save all relevant weights and states.
    model_states (`List[torch.nn.Module]`):
        A list of model states
    optimizers (`List[torch.optim.Optimizer]`):
        A list of optimizer instances
    schedulers (`List[torch.optim.lr_scheduler._LRScheduler]`):
        A list of learning rate schedulers
    dataloaders (`List[torch.utils.data.DataLoader]`):
        A list of dataloader instances to save their sampler states
    process_index (`int`):
        The current process index in the Accelerator state
    step (`int`):
        The current step in the internal step tracker
    scaler (`torch.amp.GradScaler`, *optional*):
        An optional gradient scaler instance to save;
    save_on_each_node (`bool`, *optional*):
        Whether to save on every node, or only the main node.
    safe_serialization (`bool`, *optional*, defaults to `True`):
        Whether to save the model using `safetensors` or the traditional PyTorch way (that uses `pickle`).
r   Ú.Ú_)r'   r(   zModel weights saved in ú.binFzOptimizer state saved in zScheduler state saved in r   ©ÚIterableDatasetShardÚSeedableRandomSamplerÚuse_stateful_dataloaderúdl_state_dict.binÚdl_state_dict_zSampler state for dataloader z
 saved in zGradient scaler state saved in ú.pklr%   Úrandom_stateÚnumpy_random_seedÚtorch_manual_seedÚtorch_xpu_manual_seedÚtorch_mlu_manual_seedÚtorch_sdaa_manual_seedÚtorch_musa_manual_seedÚtorch_hpu_manual_seedÚtorch_neuron_manual_seedÚtorch_cuda_manual_seedÚxm_seedzRandom states saved in )-r   Ú	enumerater   r   ÚreplaceÚjoinpathr   ÚloggerÚinfoÚ
state_dictr   r   r   Údata_loaderr.   r/   Ú
isinstanceÚdatasetÚget_samplerÚgetattrÚtorchr   r	   ÚrandomÚgetstateÚnpÚ	get_stateÚget_rng_stater   ÚxpuÚget_rng_state_allr   Úmlur   Úsdaar   Úmusar   Úhpur   Úneuronr   Úcudar   Úxm)!r   r    r!   r"   r#   r$   r%   r&   r'   r(   ÚiÚstateÚweights_nameÚoutput_model_fileÚoptÚoptimizer_nameÚoutput_optimizer_fileÚ	schedulerÚscheduler_nameÚoutput_scheduler_fileÚ
dataloaderÚsampler_nameÚoutput_sampler_filer.   r/   ÚsamplerÚdataloader_state_dict_nameÚ!output_dataloader_state_dict_filerD   Úoutput_scaler_fileÚstatesÚstates_nameÚoutput_states_files!                                    ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/accelerate/checkpointing.pyÚsave_accelerator_statern   ?   sh  € ôX �jÓ!€Jä˜lÖ+‰ˆÞ+=•|ÔCTˆØˆq‹5Ø'×/Ñ/°°q¸¸¸1°XÓ>ˆLØ&×/Ñ/°Ó=ÐÜˆUÐ9JÒrÜ�‰Ð-Ð.?Ð-@ÐAÖBñ ,ô ˜JÖ'‰ˆØ—‘Ó ˆØ45¸³FœNÐ+¨4Ñ0Ä>ÐBRÐRSÐTUÐSVÐVZÐ@[ˆØ *× 3Ñ 3°NÓ CÐÜˆUÐ)Ð=NÐchÒiÜ�‰Ð/Ð0EÐ/FÐGÖHñ (ô " *Ö-‰ˆˆ9Ø×$Ñ$Ó&ˆØ45¸³FœNÐ+¨4Ñ0Ä>ÐBRÐRSÐTUÐSVÐVZÐ@[ˆØ *× 3Ñ 3°NÓ CÐÜˆUÐ)Ð=NÐchÒiÜ�‰Ð/Ð0EÐ/FÐGÖHñ .ô # ;Ö/‰ˆˆ:Ø01°Q³œ,˜ tÑ,¼|¸nÈAÈaÈSÐPTÐ<UˆØ(×1Ñ1°,Ó?ÐçLä�j×(Ñ(Ð*>×?Ñ?Ø ×,Ñ,Ó.ˆGÜ˜'Ð#8×9Ñ9Ü�WÐ1ÐEVÐkpÒqÜ�:Ð8¸%×@Ñ@Ø@AÀQÃÑ)<ÈnÐ]^Ð\_Ð_cÐLdÐ&Ø0:×0CÑ0CÐD^Ó0_Ð-Ø#×.Ñ.Ó0ˆJÜ�JŠJ�zÐ#DÔEÜ�‰Ð3°A°3°jÐATÐ@UÐVÖWñ 0ð$ ÑØ×!Ñ!Ó#ˆØ'×0Ñ0´Ó=ÐÜ�
Š
�5Ð,Ô-Ü�‰Ð5Ð6HÐ5IÐJÔKà€FÜ#Ð$ A m _°DÐ9€KØ€Fˆ6�NÜ#Ÿ_š_Ó.€Fˆ>ÑÜ"$§)¡)×"5Ñ"5Ó"7€FÐÑÜ"'×"5Ò"5Ó"7€FÐÑÜ×ÑÜ*/¯)©)×*EÑ*EÓ*GˆÐ&Ñ'Ü×ÑÜ*/¯)©)×*EÑ*EÓ*GˆÐ&Ò'Ü	×	Ñ	Ü+0¯:©:×+GÑ+GÓ+IˆÐ'Ò(Ü	×	Ñ	Ü+0¯:©:×+GÑ+GÓ+IˆÐ'Ñ(Ü×ÑÜ*/¯)©)×*EÑ*EÓ*GˆÐ&Ñ'Ü×ÑÜ-2¯\©\×-KÑ-KÓ-MˆÐ)Ñ*Ü×ÑÜ+0¯:©:×+GÑ+GÓ+IˆÐ'Ñ(Ü×ÑÜ×,Ò,Ó.ˆˆyÑØ#×,Ñ,¨[Ó9ÐÜ	‡J‚JˆvÐ)Ô*Ü
‡K�KÐ)Ð*<Ð)=Ð>Ô?ØÐó    c	                 ó  • [        5       n
US;  a  [        S5      eUc  SnOUS:X  a  [        5       R                  nUc  0 n[	        U 5      n [        U5       H�  u  p¼US:”  a  SU 3OSnU R                  [         U S35      nUR                  5       (       a  [        XÎ4S	[        U5      0U	D6  MZ  U R                  [         U S
35      n[        XçS9nUR                  " U40 U	D6  M’     [        R                  S5        [        U5       HS  u  nnUS:X  a	  [          S
3O[          SU S
3nU R                  U5      n[        U4SU0UD6nX+   R                  U5        MU     [        R                  S5        [        U5       HO  u  nnUS:X  a	  ["         S
3O["         SU S
3nU R                  U5      n[        U40 UD6nUR                  U5        MQ     [        R                  S5        [        U5       H÷  u  nnUS:X  a	  [$         S
3O[$         SU S
3nU R                  U5      nSSKJnJn  [-        UR.                  U5      (       a;  UR1                  5       n[-        UU5      (       a  UR3                  [        U5      5      n[5        USS5      (       d  M¤  US:X  a  SOSU S
3nU R                  U5      nUR                  5       (       d  MÚ  [        U40 UD6nUR                  U5        Mù     [        R                  S5        UbF  U R                  [6        5      n [        U 5      n!UR                  U!5        [        R                  S5         [        U R                  [8         SU S35      5      n"SU";   a  U"S   U
S'   [:        R<                  " U"S   5        [>        R:                  RA                  U"S   5        [B        RD                  " U"S   5        [G        5       (       a"  [B        RH                  RK                  U"S   5        [M        5       (       a#  [B        RN                  RK                  U"S   5        Oê[Q        5       (       a#  [B        RR                  RK                  U"S   5        O¸[U        5       (       a#  [B        RV                  RK                  U"S    5        O†[Y        5       (       a#  [B        RZ                  RK                  U"S!   5        OT[]        5       (       a#  [B        R^                  RK                  U"S"   5        O"[B        R`                  RK                  U"S#   5        [c        5       (       a  [d        RD                  " U"S$   5        [        R                  S%5        U
$ ! [f         a    [        R                  S&5         U
$ f = f)'ax  
Loads states of the models, optimizers, scaler, and RNG generators from a given directory.

Args:
    input_dir (`str` or `os.PathLike`):
        The name of the folder to load all relevant weights and states.
    models (`List[torch.nn.Module]`):
        A list of model instances
    optimizers (`List[torch.optim.Optimizer]`):
        A list of optimizer instances
    schedulers (`List[torch.optim.lr_scheduler._LRScheduler]`):
        A list of learning rate schedulers
    process_index (`int`):
        The current process index in the Accelerator state
    scaler (`torch.amp.GradScaler`, *optional*):
        An optional *GradScaler* instance to load
    map_location (`str`, *optional*):
        What device to load the optimizer state onto. Should be one of either "cpu" or "on_device".
    load_kwargs (`dict`, *optional*):
        Additional arguments that can be passed to the `load` function.
    load_model_func_kwargs (`dict`, *optional*):
        Additional arguments that can be passed to the model's `load_state_dict` method.

Returns:
    `dict`: Contains the `Accelerator` attributes to override while loading the state.
)NÚcpuÚ	on_devicezaUnsupported optimizer map location passed, please choose one of `None`, `'cpu'`, or `'on_device'`rq   rr   r   r+   Ú z.safetensorsÚdevicer,   )Úmap_locationz%All model weights loaded successfullyru   z(All optimizer states loaded successfullyz(All scheduler states loaded successfullyr   r-   r0   Fr1   r2   z1All dataloader sampler states loaded successfullyz$GradScaler state loaded successfullyr3   r%   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   z%All random states loaded successfullyzCould not load random states)4ÚdictÚ	TypeErrorr   rt   r   r?   rA   r
   Úexistsr   Ústrr   r   Úload_state_dictrB   rC   r   r   r   rE   r.   r/   rF   rG   rH   Úset_samplerrI   r   r	   rK   ÚsetstaterM   Ú	set_staterJ   Úset_rng_stater   rP   Úset_rng_state_allr   rR   r   rS   r   rT   r   rU   r   rV   rW   r   rX   Ú	Exception)#Ú	input_dirÚmodelsr!   r"   r#   r$   r&   ru   Úload_kwargsÚload_model_func_kwargsÚoverride_attributesrY   ÚmodelÚendingÚinput_model_filerD   r]   r^   Úinput_optimizer_fileÚoptimizer_stater`   ra   Úinput_scheduler_fileÚscheduler_staterc   rd   Úinput_sampler_filer.   r/   rf   rg   Ú input_dataloader_state_dict_fileÚinput_scaler_fileÚscaler_staterj   s#                                      rm   Úload_accelerator_stater‘   ·   s  € ôN ›&ÐØÐ5Ó5ÜØoó
ð 	
ð ÑØ‰Ø	˜Ó	$Ü#“~×,Ñ,ˆàÑØˆä�Y“€Iä˜fÖ%‰ˆØ ›E�1�Q�C‘ rˆØ$×-Ñ-´Ð0AÀ&ÀÈÐ.VÓWÐØ×"Ñ"×$Ñ$Ü�uÑc´s¸<Ó7HÐcÐLbÔcð  )×1Ñ1´Z°LÀÀÈÐ2MÓNÐÜÐ.ÑJˆJØ×!Ò! *ÑGÐ0FÔGñ &ô ‡K�KÐ7Ô8ô ˜JÖ'‰ˆˆ3Ø45¸³FœNÐ+¨4Ñ0Ä>ÐBRÐRSÐTUÐSVÐVZÐ@[ˆØ(×1Ñ1°.ÓAÐÜÐ3Ñ^À,Ð^ÐR]Ñ^ˆØ‰×%Ñ% oÖ6ñ	 (ô
 ‡K�KÐ:Ô;ô " *Ö-‰ˆˆ9Ø45¸³FœNÐ+¨4Ñ0Ä>ÐBRÐRSÐTUÐSVÐVZÐ@[ˆØ(×1Ñ1°.ÓAÐÜÐ3ÑC°{ÑCˆØ×!Ñ! /Ö2ñ	 .ô
 ‡K�KÐ:Ô;ä" ;Ö/‰ˆˆ:Ø01°Q³œ,˜ tÑ,¼|¸nÈAÈaÈSÐPTÐ<UˆØ&×/Ñ/°Ó=ÐçLä�j×(Ñ(Ð*>×?Ñ?Ø ×,Ñ,Ó.ˆGÜ˜'Ð#8×9Ñ9Ø$×0Ñ0´Ð6HÓ1IÓJ�Ü�:Ð8¸%×@Ó@Ø@AÀQÃÑ)<ÈnÐ]^Ð\_Ð_cÐLdÐ&Ø/8×/AÑ/AÐB\Ó/]Ð,Ø/×6Ñ6×8Ó8Ü!Ð"BÑRÀkÑR�
Ø×*Ñ*¨:Ö6ñ 0ô  ‡K�KÐCÔDð ÑØ%×.Ñ.¬{Ó;ÐÜÐ-Ó.ˆØ×Ñ˜|Ô,Ü�‰Ð:Ô;ð4Ü�i×(Ñ(¬NÐ+;¸1¸]¸OÈ4Ð)PÓQÓRˆØ�VÓØ*0°©.Ð Ñ'Ü�Š˜˜~Ñ.Ô/Ü
�	‰	×Ñ˜FÐ#6Ñ7Ô8Ü×Ò˜FÐ#6Ñ7Ô8Ü×ÑÜ�I‰I×'Ñ'¨Ð/FÑ(GÔHÜ×ÑÜ�I‰I×'Ñ'¨Ð/FÑ(GÕHÜ× Ñ Ü�J‰J×(Ñ(¨Ð0HÑ)IÕJÜ× Ñ Ü�J‰J×(Ñ(¨Ð0HÑ)IÕJÜ×ÑÜ�I‰I×'Ñ'¨Ð/FÑ(GÕHÜ ×"Ñ"Ü�L‰L×*Ñ*¨6Ð2LÑ+MÕNä�J‰J×(Ñ(¨Ð0HÑ)IÔJÜ!×#Ñ#Ü×Ò˜V IÑ.Ô/Ü�‰Ð;Ô<ð Ðøô ó 4Ü�‰Ð2Õ3àÐð4ús   ÍHU! Õ!VÖVÚindexc                 ó    • [        U5      SU S3-  n[        R                  S[        U 5       SU 35        [	        U R                  5       XCS9  g)zD
Saves the state of `obj` to `{path}/custom_checkpoint_{index}.pkl`
Úcustom_checkpoint_r3   zSaving the state of z to )r'   N)r   rB   rC   r   r   rD   )ÚobjÚpathr’   r'   Úsave_locations        rm   Úsave_custom_stater˜   A  sM   € ô
 ˜“JÐ#5°e°W¸DÐ!AÑA€MÜ
‡K�KÐ&¤°sÓ';Ð&<¸DÀÀÐPÔQÜˆ�‰Ó	˜=ÓNro   c                 ó�   • U SU S3n[         R                  S[        U 5       SU 35        U R                  [	        USSS95        g)	z‚
Loads the state of `obj` at `{path}/custom_checkpoint_{index}.pkl`. Will always set `weights_only=False` when
loading the state.
z/custom_checkpoint_r3   zLoading the state of z from rq   F)ru   Úweights_onlyN)rB   rC   r   rz   r   )r•   r–   r’   Úload_locations       rm   Úload_custom_staterœ   K  sN   € ð
 �fÐ/°¨w°dÐ;€MÜ
‡K�KÐ'¬¸Ó(<Ð'=¸VÀMÀ?ÐSÔTØ×Ñœ˜]¸ÈUÑSÕTro   )NFT)NNN)r   F)r   )6rK   Úpathlibr   Útypingr   ÚnumpyrM   rJ   Úsafetensors.torchr   Úutilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	torch.ampr   Útorch.cuda.ampÚtorch_xla.core.xla_modelÚcoreÚ	xla_modelrX   Úloggingr   rZ   r   Ú__name__rB   ry   Úlistrv   ÚintÚboolrn   r‘   r˜   rœ   © ro   rm   Ú<module>r­      s(  ðó Ý Ý ã Û Ý (÷÷ ÷ ÷ ÷ õ ñ2 �D˜'×"Ñ"Þ$å)á×Ñß)Ð)å Ý ñ 
�HÓ	€ð $(Ø#Ø#ñuØðuà�t‘*ðuð ðuð ð	uð
 ðuð ðuð ðuð �ZÑ ðuð ðuð õuð~ ØØôGñTO¨ð OÀDõ OñU¨ö Uro   