ó
    Ë�¡j9  ã                   óì  • 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\1S\4S jjr2   S!S\-S\.S\.S\.S\.S\0S\\!   S\\/   S\/4S jjr3S"S\-S\0S\1SS4S jjr4S#S\-S\0SS4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_serializationÚreturnc
                 óÊ	  • [        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/   r0   Ú
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/   r0   ÚsamplerÚdataloader_state_dict_nameÚ!output_dataloader_state_dict_filerE   Úoutput_scaler_fileÚstatesÚstates_nameÚoutput_states_files!                                    Ú¦C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\accelerate/checkpointing.pyÚsave_accelerator_statero   ?   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Ð)Ð*<Ð)=Ð>Ô?ØÐó    Ú	input_dirÚmodelsÚload_kwargsc	                 ó&  • [        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        Oc[Q        5       (       a#  [B        RR                  RK                  U"S   5        O1[U        5       (       a"  [B        RV                  RK                  U"S    5        [Y        5       (       a"  [B        RZ                  RK                  U"S!   5        []        5       (       a"  [B        R^                  RK                  U"S"   5        [a        5       (       a"  [B        Rb                  RK                  U"S#   5        [e        5       (       a  [f        RD                  " U"S$   5        [        R                  S%5        U
$ ! [h         a    [        R                  S&5         U
$ f = f)'aë  
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
    dataloaders (`List[torch.utils.data.DataLoader]`):
        A list of dataloader instances used in your program
    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'`ru   rv   r   r,   Ú z.safetensorsÚdevicer-   )Úmap_locationz%All model weights loaded successfullyry   z(All optimizer states loaded successfullyz(All scheduler states loaded successfullyr   r.   r1   Fr2   r3   z1All dataloader sampler states loaded successfullyz$GradScaler state loaded successfullyr4   r%   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   z%All random states loaded successfullyzCould not load random states)5ÚdictÚ	TypeErrorr   rx   r   r@   rB   r
   Úexistsr   Ústrr   r   Úload_state_dictrC   rD   r   r   r   rF   r/   r0   rG   rH   rI   Úset_samplerrJ   r   r	   rL   ÚsetstaterN   Ú	set_staterK   Úset_rng_stater   rQ   Úset_rng_state_allr   rS   r   rT   r   rU   r   rV   r   rW   r   rX   r   rY   Ú	Exception)#rq   rr   r!   r"   r#   r$   r&   ry   rs   Úload_model_func_kwargsÚoverride_attributesrZ   ÚmodelÚendingÚinput_model_filerE   r^   r_   Úinput_optimizer_fileÚoptimizer_statera   rb   Úinput_scheduler_fileÚscheduler_staterd   re   Úinput_sampler_filer/   r0   rg   rh   Ú input_dataloader_state_dict_fileÚinput_scaler_fileÚscaler_staterk   s#                                      rn   Úload_accelerator_stater’   ·   s  € ôR ›&ÐØÐ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ÚpathÚ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_r4   zSaving the state of z to )r'   N)r   rC   rD   r   r   rE   )Úobjr“   r”   r'   Úsave_locations        rn   Úsave_custom_stater™   C  sM   € ô
 ˜“JÐ#5°e°W¸DÐ!AÑA€MÜ
‡K�KÐ&¤°sÓ';Ð&<¸DÀÀÐPÔQÜˆ�‰Ó	˜=ÓNrp   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_r4   zLoading the state of z from ru   F)ry   Úweights_onlyN)rC   rD   r   r~   r   )r—   r“   r”   Úload_locations       rn   Úload_custom_stater�   M  sN   € ð
 �fÐ/°¨w°dÐ;€MÜ
‡K�KÐ'¬¸Ó(<Ð'=¸VÀMÀ?ÐSÔTØ×Ñœ˜]¸ÈUÑSÕTrp   )NFT)NNN)r   F)r   )6rL   Úpathlibr   Útypingr   ÚnumpyrN   rK   Ú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_modelrY   Úloggingr   r[   r   Ú__name__rC   r}   Úlistrz   ÚintÚboolro   r’   r™   r�   © rp   rn   Ú<module>r®      s¼  ðó Ý Ý ã Û Ý (÷÷ ÷ ÷ ÷ õ ñ2 �D˜'×"Ñ"Þ$å)á×Ñß)Ð)å Ý ñ 
�HÓ	€ð $(Ø#Ø#ñuØðuà�t‘*ðuð ðuð ð	uð
 ðuð ðuð ðuð �ZÑ ðuð ðuð ðuð 
õuð~ $(ØØ"&ñIØðIàðIð ðIð ð	Ið
 ðIð ðIð �ZÑ ðIð ˜$‘ðIð 
õIñXO ð O¨Sð OÈð OÐZ^õ OñU ð U¨Sð U¸ö Urp   