
    r8?i6                     ~   d dl Z d dlmZ d dlmZ d dlZd dlZd dlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  edd      rd d	lm Z  nd d	l!m Z   e       r	d dl"m#c m$Z% dd
l&m'Z' ddl(m)Z)  e'e*      Z+	 	 	 dde,de-e.   de-de-de-de/de/dee    de0de0fdZ1	 	 	 ddZ2dde/de0fdZ3dde/fdZ4y)    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
                    t        |       } t        |      D ]f  \  }
}|	st        nt        }|
dkD  r|j	                  dd|
 d      }| j                  |      }t        ||||	       t        j                  d|        h t        |      D ]g  \  }
}|j                         }|
dk(  r	t         dnt         d|
 d}| j                  |      }t        |||d       t        j                  d|        i t        |      D ]g  \  }
}|j                         }|
dk(  r	t         dnt         d|
 d}| j                  |      }t        |||d       t        j                  d	|        i t        |      D ]  \  }
}|
dk(  r	t         dnt         d|
 d}| j                  |      }d
dlm}m} t!        |j"                  |      r+|j%                         }t!        ||      rt        |||d       t'        |dd      rD|
dk(  rdnd|
 d}| j                  |      }|j                         }t)        j                  ||       t        j                  d|
 d|         |S|j                         }| j                  t*              }t)        j                  ||       t        j                  d|        i }t,         d| d}||d<   t/        j0                         |d<   t2        j.                  j5                         |d<   t)        j6                         |d<   t9               r!t(        j:                  j=                         |d<   t?               r"t(        j@                  j=                         |d<   nWtC               r"t(        jD                  j=                         |d<   n+tG               r!t(        jH                  j=                         |d<   tK               r!t(        jL                  j=                         |d<   tO               r!t(        jP                  j=                         |d<   tS               rtU        j6                         |d<   | j                  |      } t)        j                  ||        t        j                  d|         | S )aw  
    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!                                    n/var/www/html/leadgen/airagagent/ocr_fallback/ocr_env/lib/python3.12/site-packages/accelerate/checkpointing.pysave_accelerator_staterk   >   sO   X j!Jl+ C5+=|CTq5'//q1X>L&//=U%9J_qr-.?-@ABC J' I3 45FN+40>BRRSTUSVVZ@[ * 3 3N CU)=Nchi/0E/FGHI "*- I9$$&45FN+40>BRRSTUSVVZ@[ * 3 3N CU)=Nchi/0E/FGHI #;/ X:01Q,t,|nAaSPT<U(11,?Lj((*>? ,,.G'#89W1EVkpq:8%@@AQ)<n]^\__cLd&0:0C0CD^0_-#..0JJJz#DE3A3jAT@UVWX$ !!#'00=

5,-56H5IJKF#$Am_D9KF6N#__.F>"$))"5"5"7F"'"5"5"7F*/))*E*E*G&'*/))*E*E*G&'		+0::+G+G+I'(		+0::+G+G+I'(*/))*E*E*G&'+0::+G+G+I'(,,.y#,,[9	JJv)*
KK)*<)=>?    c	                 	   t               }
|dvrt        d      |d}n|dk(  rt               j                  }|i }t	        |       } t        |      D ]  \  }}|dkD  rd| nd}| j                  t         | d      }|j                         rt        ||fd	t        |      i|	 U| j                  t         | d
      }t        ||      } |j                  |fi |	  t        j                  d       t        |      D ]R  \  }}|dk(  r	t          d
nt          d| d
}| j                  |      }t        |fd|i|}||   j                  |       T t        j                  d       t        |      D ]M  \  }}|dk(  r	t"         d
nt"         d| d
}| j                  |      }t        |fi |}|j                  |       O t        j                  d       t        |      D ]  \  }}|dk(  r	t$         d
nt$         d| d
}| j                  |      }ddlm}m} t-        |j.                  |      r6|j1                         }t-        ||      r|j3                  t        |            }t5        |dd      s|dk(  rdnd| d
}| j                  |      }|j                         st        |fi |}|j                  |        t        j                  d       |F| j                  t6              } t        |       }!|j                  |!       t        j                  d       	 t        | j                  t8         d| d            }"d|"v r|"d   |
d<   t;        j<                  |"d          t>        j:                  jA                  |"d          tC        jD                  |"d          tG               r"tB        jH                  jK                  |"d          tM               r#tB        jN                  jK                  |"d          n|tQ               r#tB        jR                  jK                  |"d          nOtU               r#tB        jV                  jK                  |"d           n"tB        jX                  jK                  |"d!          t[               rt]        jD                  |"d"          t        j                  d#       |
S # t^        $ r t        j                  d$       Y |
S w xY w)%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
        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% 	H5E1QCr$--0A&.VW""$u.cs<7HcLbc  )11ZL2MN.\JJ!E!!*G0FG	H KK78 J' 7345FN+40>BRRSTUSVVZ@[(11.A3^,^R]^1%%o6	7
 KK:; "*- 3945FN+40>BRRSTUSVVZ@[(11.A3C{C!!/2	3
 KK:;";/ 7:01Q,t,|nAaSPT<U&//=Lj((*>? ,,.G'#89$006H1IJ:8%@@AQ)<n]^\__cLd&/8/A/AB\/],/668!"BRkR
**:67  KKCD %..{;-.|,:;4i((N+;1]O4)PQRV*0.'~./
		F#678F#678II''/F(GHII''/F(GH JJ((0H)IJ JJ((0H)IJJJ((0H)IJ!#VI./;<   4234s   'FR7 7SSindexc                     t        |      d| dz  }t        j                  dt        |        d|        t	        | j                         ||       y)zL
    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   :  sP    
 J#5eWD!AAM
KK&s';&<DPQ	=<MNrl   c                     | d| d}t         j                  dt        |        d|        | j                  t	        |dd             y)	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/wd;M
KK'(<'=VM?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   