
    9i(                     $   d dl Z 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  ed      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$fdZ%	 	 ddZ&dde#de$fdZ'dde#fdZ(y)    N)Path)List)
GradScaler   )

MODEL_NAMEOPTIMIZER_NAMERNG_STATE_NAMESAMPLER_NAMESCALER_NAMESCHEDULER_NAMEget_pretty_nameis_tpu_availableis_xpu_availablesaveF)check_device)
get_logger)PartialState
output_dirmodel_states
optimizers
schedulersdataloadersprocess_indexscalersave_on_each_nodec                 ^   t        |      D ]e  \  }}	|dk(  r	t         dnt         d| d}
t        j                  j	                  | |
      }t        |	||       t        j                  d|        g t        |      D ]u  \  }}|j                         }	|dk(  r	t         dnt         d| d}t        j                  j	                  | |      }t        |	||       t        j                  d|        w t        |      D ]u  \  }}|j                         }	|dk(  r	t         dnt         d| d}t        j                  j	                  | |      }t        |	||       t        j                  d|        w t        |      D ]  \  }}|dk(  r	t         dnt         d| d}t        j                  j	                  | |      }dd	lm}m} t        |j                   |      r0|j"                  j"                  }t        ||      rt        |||       t        j                  d
| d|         |b|j                         }	t        j                  j	                  | t$              }t'        j
                  |	|       t        j                  d|        i }t(         d| d}t+        j,                         |d<   t.        j*                  j1                         |d<   t'        j2                         |d<   t5               r"t&        j6                  j9                         |d<   n!t&        j:                  j9                         |d<   t=               rt?        j2                         |d<   t        j                  j	                  | |      }t'        j
                  ||       t        j                  d|        | S )a  
    Saves the current states of the models, optimizers, scaler, and RNG generators to a given directory.

    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
        scaler (`torch.cuda.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.
    r   .bin_r   zModel weights saved in zOptimizer state saved in zScheduler state saved in r   IterableDatasetShardSeedableRandomSamplerzSampler state for dataloader z
 saved in zGradient scaler state saved in .pklrandom_statenumpy_random_seedtorch_manual_seedtorch_xpu_manual_seedtorch_cuda_manual_seedxm_seedzRandom states saved in ) 	enumerater   ospathjoinr   loggerinfo
state_dictr   r   r
   data_loaderr!   r"   
isinstancedatasetsamplerr   torchr	   randomgetstatenp	get_stateget_rng_stater   xpuget_rng_state_allcudar   xm)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"   r4   output_scaler_filestatesstates_nameoutput_states_files                               b/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/accelerate/checkpointing.pysave_accelerator_staterQ   0   sl   @ l+ C5./1f*T*ZL!D:QGGLL\BU%9JK-.?-@AB	C J' I3 45FN+40>BRRSTUSVVZ@[ "Z HU)=NO/0E/FGHI "*- I9$$&45FN+40>BRRSTUSVVZ@[ "Z HU)=NO/0E/FGHI #;/ X:01Q,t,|nAaSPT<U ggll:|DLj((*>? ((00G'#89W1EVW3A3jAT@UVWX !!#WW\\*kB

5,-56H5IJKF#$Am_D9K#__.F>"$))"5"5"7F"'"5"5"7F*/))*E*E*G&'+0::+G+G+I'(,,.yj+>	JJv)*
KK)*<)=>?    c           	      `   |dvrt        d      |d}n|dk(  rt               j                  }t        |      D ]j  \  }	}
|	dk(  r	t         dnt         d|	 d}t
        j                  j                  | |      } ||	   j                  t        j                  ||	      fi | l t        j                  d
       t        |      D ]j  \  }	}|	dk(  r	t         dnt         d|	 d}t
        j                  j                  | |      }t        j                  ||	      }||	   j                  |       l t        j                  d       t        |      D ]c  \  }	}|	dk(  r	t         dnt         d|	 d}t
        j                  j                  | |      }|j                  t        j                  |             e t        j                  d       t        |      D ]  \  }	}|	dk(  r	t         dnt         d|	 d}t
        j                  j                  | |      }ddlm}m} t'        |j(                  |      s_|j*                  j*                  }t'        ||      st        j                  |      |j*                  _         t        j                  d       |]t
        j                  j                  | t,              }|j                  t        j                  |             t        j                  d       	 t        j                  t
        j                  j                  | t.         d| d            }t1        j2                  |d          t4        j0                  j7                  |d          t        j8                  |d          t;               r#t        j<                  j?                  |d          n"t        j@                  j?                  |d          tC               rtE        j8                  |d          t        j                  d       y# tF        $ r t        j                  d       Y y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.cuda.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_model_func_kwargs (`dict`, *optional*):
            Additional arguments that can be passed to the model's `load_state_dict` method.
    )Ncpu	on_devicezaUnsupported optimizer map location passed, please choose one of `None`, `'cpu'`, or `'on_device'`NrT   rU   r   r   r   map_locationz%All model weights loaded successfullyz(All optimizer states loaded successfullyz(All scheduler states loaded successfullyr   r    z1All dataloader sampler states loaded successfullyz$GradScaler state loaded successfullyr#   r$   r%   r&   r'   r(   r)   z%All random states loaded successfullyzCould not load random states)$	TypeErrorr   devicer*   r   r+   r,   r-   load_state_dictr5   loadr.   r/   r   r   r
   r1   r!   r"   r2   r3   r4   r   r	   r6   setstater8   	set_stateset_rng_stater   r;   set_rng_state_allr=   r   r>   	Exception)	input_dirmodelsr   r   r   r   r   rW   load_model_func_kwargsr?   modelrA   input_model_filerC   rD   input_optimizer_fileoptimizer_staterF   rG   input_scheduler_filerI   rJ   input_sampler_filer!   r"   r4   input_scaler_filerM   s                               rP   load_accelerator_staterk      s   @ 55o
 	
 		$#~,,f% u5./1f*T*ZL!D:Q77<<	<@!q	!!%**-=L"Yt]stu KK78 J' 7345FN+40>BRRSTUSVVZ@[!ww||I~F**%9U1%%o6	7
 KK:; "*- D945FN+40>BRRSTUSVVZ@[!ww||I~F!!%**-A"BCD KK:;";/ 
L:01Q,t,|nAaSPT<UWW\\)\BLj((*>? ((00G'#89-2ZZ8J-K
""*
L KKCD GGLLK@uzz*;<=:;4BGGLL~6FaVZ4[\]~./
		F#678F#678II''/F(GHJJ((0H)IJVI./;< 4234s   6DP P-,P-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_r#   zSaving the state of z to r   N)r   r.   r/   r   r   r0   )objr,   rl   r   save_locations        rP   save_custom_staterq      sP    
 J#5eWD!AAM
KK&s';&<DPQ	=<MNrR   c                     | d| d}t         j                  dt        |        d|        | j                  t	        j
                  |d             y)zL
    Loads the state of `obj` at `{path}/custom_checkpoint_{index}.pkl`
    z/custom_checkpoint_r#   zLoading the state of z from rT   rV   N)r.   r/   r   rZ   r5   r[   )ro   r,   rl   load_locations       rP   load_custom_statert      sP     f/wd;M
KK'(<'=VM?ST

=uEFrR   )NF)NN)r   F)r   ))r+   r6   pathlibr   typingr   numpyr8   r5   torch.cuda.ampr   utilsr   r   r	   r
   r   r   r   r   r   r   torch_xla.core.xla_modelcore	xla_modelr>   loggingr   r@   r   __name__r.   strdictlistintboolrQ   rk   rq   rt    rR   rP   <module>r      s    
      %   '))   
H	 #VVt*V V 	V
 V V V V@ _4DO OD OG GrR   