ó
    -Vði«6  ã                   ó   • 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  \" 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\/S\/S\\    S\0S\04S jjr1   SS jr2SS\/S\04S jjr3SS\/4S jjr4g)é    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_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
                 ój	  • [        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  [T        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_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   Ú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_filerB   Úoutput_scaler_fileÚstatesÚstates_nameÚoutput_states_files!                                    Ú]D:\a\ltx-desktop-ci\ltx-desktop-ci\python-embed\Lib\site-packages\accelerate\checkpointing.pyÚsave_accelerator_staterk   >   sG  € ô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ˆÐ&Ñ'Ü×ÑÜ+0¯:©:×+GÑ+GÓ+IˆÐ'Ñ(Ü×ÑÜ×,Ò,Ó.ˆˆyÑØ#×,Ñ,¨[Ó9ÐÜ	‡J‚JˆvÐ)Ô*Ü
‡K�KÐ)Ð*<Ð)=Ð>Ô?ØÐó    c	                 óF
  • [        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        OT[U        5       (       a#  [B        RV                  RK                  U"S    5        O"[B        RX                  RK                  U"S!   5        [[        5       (       a  [\        RD                  " U"S"   5        [        R                  S#5        U
$ ! [^         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'`rn   ro   r   r*   Ú z.safetensorsÚdevicer+   )Úmap_locationz%All model weights loaded successfullyrr   z(All optimizer states loaded successfullyz(All scheduler states loaded successfullyr   r,   r/   Fr0   r1   z1All dataloader sampler states loaded successfullyz$GradScaler state loaded successfullyr2   r$   r3   r4   r5   r6   r7   r8   r9   r;   r<   z%All random states loaded successfullyzCould not load random states)0ÚdictÚ	TypeErrorr   rq   r   r=   r?   r
   Úexistsr   Ústrr   r   Úload_state_dictr@   rA   r   r   r   rC   r-   r.   rD   rE   rF   Úset_samplerrG   r   r	   rI   ÚsetstaterK   Ú	set_staterH   Úset_rng_stater   rN   Úset_rng_state_allr   rP   r   rQ   r   rR   rT   r   rU   Ú	Exception)#Ú	input_dirÚmodelsr    r!   r"   r#   r%   rr   Úload_kwargsÚload_model_func_kwargsÚoverride_attributesrV   ÚmodelÚendingÚinput_model_filerB   rZ   r[   Úinput_optimizer_fileÚoptimizer_stater]   r^   Úinput_scheduler_fileÚscheduler_stater`   ra   Úinput_sampler_filer-   r.   rc   rd   Ú input_dataloader_state_dict_fileÚinput_scaler_fileÚscaler_staterg   s#                                      rj   Ú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ä�J‰J×(Ñ(¨Ð0HÑ)IÔJÜ!×#Ñ#Ü×Ò˜V IÑ.Ô/Ü�‰Ð;Ô<ð Ðøô ó 4Ü�‰Ð2Õ3àÐð4ús   ÍF,S= Ó=T ÔT Ú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_r2   zSaving the state of z to )r&   N)r   r@   rA   r   r   rB   )ÚobjÚpathr�   r&   Úsave_locations        rj   Úsave_custom_stater•   :  sM   € ô
 ˜“JÐ#5°e°W¸DÐ!AÑA€MÜ
‡K�KÐ&¤°sÓ';Ð&<¸DÀÀÐPÔQÜˆ�‰Ó	˜=ÓNrl   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_r2   zLoading the state of z from rn   F)rr   Úweights_onlyN)r@   rA   r   rw   r   )r’   r“   r�   Úload_locations       rj   Úload_custom_stater™   D  sN   € ð
 �fÐ/°¨w°dÐ;€MÜ
‡K�KÐ'¬¸Ó(<Ð'=¸VÀMÀ?ÐSÔTØ×Ñœ˜]¸ÈUÑSÕTrl   )NFT)NNN)r   F)r   )5rI   Úpathlibr   Útypingr   ÚnumpyrK   rH   Úsafetensors.torchr   Úutilsr   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_modelrU   Úloggingr   rW   r   Ú__name__r@   rv   Úlistrs   ÚintÚboolrk   rŽ   r•   r™   © rl   rj   Ú<module>rª      s(  ðó Ý Ý ã Û Ý (÷÷ ÷ ÷ ÷ ó ñ0 �D˜'×"Ñ"Þ$å)á×Ñß)Ð)å Ý ñ 
�HÓ	€ð $(Ø#Ø#ñsØðsà�t‘*ðsð ðsð ð	sð
 ðsð ðsð ðsð �ZÑ ðsð ðsð õsðz ØØôCñLO¨ð OÀDõ OñU¨ö Url   