
    IЦi0e                     p   % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  S SKJr  S SKJ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  S SKrS SKJ r   S SK!J"r"J#r#  S S	K$J%r%  S S
K&J'r'J(r(J)r)J*r*  S SK+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  S SK4J5r5  S SK6J7r7J8r8J9r9  S SK:J;r;  S SK<J=r=  / SQr>Sr?\@\AS'   \ " S S5      5       rB\ " S S5      5       rCSrDS\@4S jrE " S S\5      rF " S S\F5      rG " S S\F5      rHS \2S\I4S! jrJS"\IS#\\2   S\\\2      4S$ jrKS%\R                  S&\\R                  \R@                  4   S'\2S(\@S\94
S) jrNS*\S+\R                  S,\R                  S-\1S.\IS/\PS0\ISS4S1 jrQ " S2 S3\5      rR " S4 S5\R5      rS " S6 S7\85      rT " S8 S9\75      rU " S: S;\T\55      rVg)<    N)ABCabstractmethod)contextmanager)	dataclass)Path)AnyCallablecastDict	GeneratorIOIterableIteratorListOptionalTupleUnion)Tensor)_get_available_device_type_get_device_module)narrow_tensor_by_index)MetadataMetadataIndexSTATE_DICT_TYPEStorageMeta)LoadItemTypeLoadPlanLoadPlannerReadItemSavePlanSavePlanner	WriteItemWriteItemType)BlockingAsyncStager)StorageReaderStorageWriterWriteResult)_create_file_view)Future)FileSystemWriterFileSystemReader
FileSystemFileSystemBase	.metadata_metadata_fnc                   8    \ rS rSr% Sr\\S'   \\S'   \\S'   Srg)_StorageInfoB   z#This is the per entry storage info.relative_pathoffsetlength N)	__name__
__module____qualname____firstlineno____doc__str__annotations__int__static_attributes__r6       f/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/distributed/checkpoint/filesystem.pyr1   r1   B   s    -KKr@   r1   c                        \ rS rSr% \\S'   Srg)_StoragePrefixK   prefixr6   N)r7   r8   r9   r:   r<   r=   r?   r6   r@   rA   rC   rC   K   s    Kr@   rC   z.distcpreturnc                  >    [        [        R                  " 5       5      $ N)r<   uuiduuid4r6   r@   rA   _generate_uuidrK   S   s    tzz|r@   c                       \ rS rSr\S\S\SS4S j5       r\S
S j5       r\S\	\
\R                  \4      4S j5       rS	rg)_TensorLoaderW   sizeobjrF   Nc                     g rH   r6   selfrO   rP   s      rA   add_TensorLoader.addX       r@   c                     g rH   r6   rS   s    rA   start_loading_TensorLoader.start_loading\   rV   r@   c                     g rH   r6   rX   s    rA   values_TensorLoader.values`   rV   r@   r6   rF   N)r7   r8   r9   r:   r   r>   objectrT   rY   r   r   torchr   r\   r?   r6   r@   rA   rM   rM   W   sk     & T     u||V';!<=  r@   rM   c                   x    \ rS rSrS\SS4S jrS\S\SS4S jrSS	 jr	S\
\\R                  \4      4S
 jrSrg)_SerialCpuLoadere   resolve_funrF   Nc                     Xl         / U l        g rH   )rd   items)rS   rd   s     rA   __init___SerialCpuLoader.__init__f   s    &/1
r@   rO   rP   c                 <    U R                   R                  X45        g rH   )rf   appendrR   s      rA   rT   _SerialCpuLoader.addj   s    

4+&r@   c                     g rH   r6   rX   s    rA   rY   _SerialCpuLoader.start_loadingm       r@   c              #      #    U R                    Hz  u  pU R                  U5      R                  5       nUR                  5       nUR	                  5       R                  5       UR                  5       :w  a  UR                  5       nUU4v   M|     g 7frH   )rf   rd   detachcpustoragerO   numelclonerS   _rP   tensors       rA   r\   _SerialCpuLoader.valuesp   sr     jjFA%%c*113FZZ\F~~$$&&,,.8  !s   BB)rf   rd   r^   )r7   r8   r9   r:   r	   rg   r>   r_   rT   rY   r   r   r`   r   r\   r?   r6   r@   rA   rb   rb   e   sS    2H 2 2' '& 'T '	u||V';!<= 	r@   rb   c            	       (   \ rS rSr  SS\S\\R                     S\SS4S jjr	\
S\4S j5       rS\\\R                  \4      4S	 jrSS
 jrS\\\R                  \4      4S jrS\S\SS4S jrSS jrS\\\R                  \4      4S jrSrg)_OverlappingCpuLoader|   Nrd   streaminflight_threshholdrF   c                 L   Xl         / U l        X0l        SU l        [        R
                  " 5       U l        SU l        SU l        U(       a  UR                  O	[        5       U l	        [        U R                  5      U l        [        [        R                  R                   U=(       d    U R                  R#                  5       5      U l        U R$                  U R                  R#                  5       :w  a4  U R$                  R'                  U R                  R#                  5       5        g g )Nr   F)rd   rf   r}   in_flight_datacollectionsdequecurrent_itemsidxstarteddevice_typer   r   device_moduler
   r`   cudaStreamcurrent_streamr|   wait_stream)rS   rd   r|   r}   s       rA   rg   _OverlappingCpuLoader.__init__}   s     '/1
#6 0;0A0A0C"(F.H.J 	 00@0@AJJvL););)J)J)L
 ;;$,,;;==KK##D$6$6$E$E$GH >r@   c                 F    U R                   [        U R                  5      :  $ rH   )r   lenrf   rX   s    rA   _done_OverlappingCpuLoader._done   s    xx3tzz?**r@   c                    / nU R                   U R                  :  a  U R                  R                  5         U R                   U R                  :  a  U R                  R                  5       nU =R                   US   R                  5       US   R                  5       -  -  sl         UR                  U5        U R                   U R                  :  a  M  U$ Nr   )	r   r}   r|   synchronizer   popleftrs   element_sizerj   )rS   drainedvals      rA   _drain_OverlappingCpuLoader._drain   s    $":"::KK##%!!T%=%==$$,,.C3q6<<>CF4G4G4I#IINN3 !!T%=%== r@   c                    U R                   R                  U R                  5         U R                  (       Gd  U R                  U R                  :  Gat  U R
                  U R                     u  pU =R                  S-  sl        U R                  U5      R                  5       nUR                  R                  U R                  :X  a  UR                  SSS9nOqUR                  [        R                  " S5      :X  aM  UR                  5       R                  5       UR!                  5       UR"                  -  :w  a  UR%                  5       nU R&                  R)                  UU45        U =R                  UR!                  5       UR+                  5       -  -  sl        U R                  (       d  U R                  U R                  :  a  GMt  S S S 5        g ! , (       d  f       g = f)N   rq   T)devicenon_blocking)r   r|   r   r   r}   rf   r   rd   rp   r   typer   tor`   untyped_storagerO   rs   itemsizert   r   rj   r   ru   s       rA   _refill_OverlappingCpuLoader._refill   sV   &&t{{3jjjT%8%84;S;S%SDHH-A))#.557==%%)9)99#YYe$YGF]]ell5&99..0557!<<>FOO;< "("")) ##v||~8K8K8M'MM#) jjT%8%84;S;S%S 433s   FG
Gc                     U R                   (       d   e[        U R                  5      S:  a  U R                  R	                  5         U R                  $ r   )r   r   r   r|   r   rX   s    rA   _finish_OverlappingCpuLoader._finish   s=    zzzt!!"Q&KK##%!!!r@   rO   rP   c                 t    U R                   (       a  [        S5      eU R                  R                  X45        g )Nz&cannot add items after loading started)r   RuntimeErrorrf   rj   rR   s      rA   rT   _OverlappingCpuLoader.add   s)    <<GHH

4+&r@   c                     U R                   (       a  g SU l         U R                  R                  [        R                  " S5      S9  U R                  5         g )NTr   key)r   rf   sortoperator
itemgetterr   rX   s    rA   rY   #_OverlappingCpuLoader.start_loading   s9    <<

H//23r@   c              #      #    U R                  5         U R                  (       d=  U R                  5       nU R                  5         U S h  vN   U R                  (       d  M=  U R	                  5        S h  vN   g  N0 N7frH   )rY   r   r   r   r   )rS   r   s     rA   r\   _OverlappingCpuLoader.values   sY     **kkmGLLN ***
 <<>!! !s*   AA>	A:
A>!A>4A<5A><A>)
r   r   r   r   r   r}   rf   rd   r   r|   )Ni@B r^   )r7   r8   r9   r:   r	   r   r`   r   r>   rg   propertyboolr   r   r   r   r_   r   r   r   r   rT   rY   r   r\   r?   r6   r@   rA   rz   rz   |   s     *.#,	II &I !	I
 
I. +t + +U5<<#789 N0"%f(<"=> "' '& 'T '
"u||V';!<= "r@   rz   itemc                     SnU R                   c   eU R                   R                   H  nX-  nM	     U R                   R                  R                  nU[        R
                  R                  U5      -  $ Nr   )tensor_datarO   
propertiesdtyper`   _utils_element_size)r   rO   sr   s       rA   
_item_sizer      si    D'''""	 # ''--E%,,,,U333r@   binsrf   c                    U S:X  a  U/$ U Vs/ s H$  o"R                   [        R                  :X  d  M"  UPM&     nnU Vs/ s H$  o"R                   [        R                  :w  d  M"  UPM&     nn[        U 5       Vs/ s H  n/ PM     nn[        U 5       Vs/ s H  nSPM     nnUR	                  [
        SS9  [        U5       H  u  pXhU -     R                  U5        M     U HU  n[        [        U5      [        R                  " S5      S9S   n	Xi   R                  U5        Xy==   [        U5      -  ss'   MW     U$ s  snf s  snf s  snf s  snf )Nr   r   T)r   reverser   )r   r#   BYTE_IOranger   r   	enumeraterj   minr   r   )
r   rf   wibytes_wtensor_wrv   bucketsbucket_sizesir   s
             rA   _split_by_size_and_typer      s!   qyw!FEbWW0E0E%ErEGF"GUrgg1F1F&FUHG27+%>+Qb+G%>$T{+{!A{L+MMj$M/7#D  $ $ )L)x/B/B1/EFqIBZ^+	  N# GG%>+s!   !D=D=!E$E9EEr|   data
write_itemstorage_keyc           	      *   U R                  5       nUR                  [        R                  :X  aA  [	        U[
        R                  5      (       d   eU R                  UR                  5       5        Os[	        U[        R                  5      (       d   eUR                  [        R                  " S5      :X  d   e[        R                  " U[        [        [           U 5      5        U R                  5       U-
  n[!        UR"                  U[%        X4U5      S9$ )Nrq   )indexsize_in_bytesstorage_data)tellr   r#   r   
isinstanceioBytesIOwrite	getbufferr`   r   r   saver
   r   bytesr'   r   r1   )r|   r   r   r   r4   r5   s         rA   _write_itemr      s     [[]F-///$

++++T^^%&$----{{ell51111

4bi01[[]V#F!+v> r@   create_stream
file_queueresult_queueplannerr}   	use_fsyncthread_countc           
           UR                  5       u  pxn	[        R                  R                  5       n
[	        [        U
S 5      nUS:X  aZ  [        R
                  R                  5       (       d  U(       a0  UR                  5       (       a  US:  a  [        UR                  US9nO[        UR                  5      nU	 Vs/ s H$  oR                  [        R                  :w  d  M"  UPM&     nnU H  nUR                  [        U5      U5        M      UR                  5         U	 Vs/ s H$  oR                  [        R                  :X  d  M"  UPM&     nn/ nU " US5       nU H0  nUR                  U5      nUR!                  [#        UUX5      5        M2     UR%                  5        H5  u  nnUR&                  (       d   eUR!                  [#        UUX5      5        M7     U(       a%   [(        R*                  " UR-                  5       5        S S S 5        UR3                  U5        GM   s  snf s  snf ! [.         a    [(        R0                  " 5          NGf = f! , (       d  f       NQ= f! [4        R6                   a     g f = f)Nr   r   )r}   wb)
get_nowaitr`   _C_get_privateuse1_backend_namegetattrr   is_availablerz   resolve_datarb   r   r#   r   rT   r   rY   rj   r   r\   is_cpuosfsyncfilenoAttributeErrorsyncputqueueEmpty)r   r   r   r   r}   r   r   	file_namer   write_itemscustom_backend_namecustom_device_modloaderr   r   r   r   write_resultsr|   r   rw   s                        rA   _write_files_from_queuer     s   82<2G2G2I/IK #((("H"H"J '/BD I !JJ++--).?.L.L.N.N'!+.(((;
 *(( &1U[rGG}?T?T4T[HU&


:j1:> '  "$/TKb77m>S>S3SrKGTMy$/6")J"//
;D!((#FD*J #* +1--/&FJ!==(=!((#FFJL +: "1 0$ ]+k 6 V
 U& * "	"! 0/& ;; sm   B<I# >!H##H#):I# #!H(H(I# BI#$H-&I# -IIII
I I# #I:9I:c                   ~   \ rS rSr\\S\\\R                  4   S\S\
\R                  SS4   4S j5       5       r\S\\\R                  4   S\S\\\R                  4   4S j5       r\S\\\R                  4   S	\\\R                  4   SS4S
 j5       r\S\\\R                  4   S\\\R                  4   4S j5       r\S\\\R                  4   SS4S j5       r\\S\\\R                  4   S\4S j5       5       r\S\\\R                  4   S\4S j5       r\S\\\R                  4   SS4S j5       rSrg)r-   iU  pathmoderF   Nc                     g rH   r6   )rS   r   r   s      rA   r   FileSystemBase.create_streamV  s    
 	r@   suffixc                     g rH   r6   rS   r   r   s      rA   concat_pathFileSystemBase.concat_path]       	r@   new_pathc                     g rH   r6   rS   r   r  s      rA   renameFileSystemBase.renamec  r  r@   c                     g rH   r6   rS   r   s     rA   	init_pathFileSystemBase.init_pathi      r@   c                     g rH   r6   r  s     rA   mkdirFileSystemBase.mkdirm  r  r@   checkpoint_idc                     g rH   r6   clsr  s     rA   validate_checkpoint_id%FileSystemBase.validate_checkpoint_idq  s     	r@   c                     g rH   r6   r  s     rA   existsFileSystemBase.existsv  r  r@   c                     g rH   r6   r  s     rA   rm_fileFileSystemBase.rm_filez  r  r@   r6   )r7   r8   r9   r:   r   r   r   r<   r   PathLiker   r   IOBaser   r  r  r  r  classmethodr   r  r  r  r?   r6   r@   rA   r-   r-   U  s   #r{{*+36	299dD(	)  
 #r{{*+58	sBKK	  
 #r{{*+7<S"++=M7N	 
 eC$45 %R[[@P:Q   %R[[ 01 d   5bkk9I3J t    5bkk!12 t   E#r{{"23   r@   r-   c            
       .   \ rS rSr\S\\\R                  4   S\S\	\
R                  SS4   4S j5       rS\\\R                  4   S\S\\\R                  4   4S jrS\\\R                  4   S\\\R                  4   4S	 jrS\\\R                  4   S
\\\R                  4   SS4S jrS\\\R                  4   SS4S jr\S\\\R                  4   S\4S j5       rS\\\R                  4   S\4S jrS\\\R                  4   SS4S jrSrg)r,   i  r   r   rF   Nc              #      #    [        [        U5      R                  U5       n[        [        R                  U5      v   S S S 5        g ! , (       d  f       g = f7frH   )r
   r   openr   r  )rS   r   r   r|   s       rA   r   FileSystem.create_stream  s:      $""4(Fryy&)) )((s    AA	A
AAr   c                 (    [        [        U5      U-  $ rH   )r
   r   r  s      rA   r  FileSystem.concat_path  s     D$&((r@   c                 F    [        U[        5      (       d  [        U5      nU$ rH   )r   r   r  s     rA   r  FileSystem.init_path  s    $%%:Dr@   r  c                 ^    [        [        U5      R                  [        [        U5      5        g rH   )r
   r   r  r  s      rA   r  FileSystem.rename  s      	T4T8 45r@   c                 @    [        [        U5      R                  SSS9  g )NT)parentsexist_ok)r
   r   r  r  s     rA   r  FileSystem.mkdir  s    T4td;r@   r  c                     [        U[        5      (       a  gS[        U5      ;   a  g[        U5      R                   HO  nUR	                  5       (       d  M  [
        R                  " [        U5      [
        R                  5      (       d  MO    g   g)NTz://F)r   r   r<   r,  r  r   accessW_OK)r  r  ps      rA   r  !FileSystem.validate_checkpoint_id  sb    mT**C&&m$,,AxxzzbiiA88 - r@   c                 >    [        [        U5      R                  5       $ rH   )r
   r   r  r  s     rA   r  FileSystem.exists  s    D$&&((r@   c                 @    [        [        U5      R                  5         g rH   )r
   r   unlinkr  s     rA   r  FileSystem.rm_file  s    T4!r@   r6   )r7   r8   r9   r:   r   r   r<   r   r  r   r   r  r   r  r  r  r  r   r   r  r  r  r?   r6   r@   rA   r,   r,     s~   *#r{{*+*36*	299dD(	)* *)#r{{*+)58)	sBKK	 )
eC$45 %R[[@P:Q 
6#r{{*+67<S"++=M7N6	6
<%R[[ 01 <d < 5bkk9I3J t  )5bkk!12 )t )"E#r{{"23 " "r@   r,   c                     ^  \ rS rSrSr     S S\\\R                  4   S\	S\	S\
S\
S\	S	\S
\SS4U 4S jjjrS!S\\\R                  S4   SS4S jjrS\	SS4S jrS\S\4S jrS\\   S\\   4S jrS\S\S\\\      4S jrS\S\\\      SS4S jrS\\   4S jr\S\\\R                  4   4S j5       r\S\\\R                  4   4S j5       r\S\\\R                  4   S\	4S j5       r Sr!U =r"$ )"_FileSystemWriteri  E  
Basic implementation of StorageWriter using file IO.

This implementation makes the following assumptions and simplifications:

* The checkpoint path is an empty or non-existing directory.
* File creation is atomic

The checkpoint consist of one file per write request plus
a `.metadata` file with the serialized metadata.

r   single_file_per_rank
sync_filesr   per_thread_copy_ahead	overwriteargskwargsrF   Nc                    > [         T	U ]  5         [        5       U l        U R                  R	                  U5      U l        X l        X0l        X@l        XPl	        [        5       U l        X`l        g)a  
Initialize the writer pointing to `path`.

Args:
    path: directory where the checkpoint will be written to.
    single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
    sync_files : force files to be synced to permanent storage. Default to True.
    thread_count: Number of IO threads to use to write. Default to 1.
    per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving then. Default 10Mb.
    overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
N)superrg   r,   fsr  r   r<  r=  r   r>  rK   save_idr?  )
rS   r   r<  r=  r   r>  r?  r@  rA  	__class__s
            rA   rg   _FileSystemWriter.__init__  sU    0 	,GG%%d+	$8!$(%:"%'"r@   r  c                 p    U(       a   U R                   R                  U5      U l        [        5       U l        g rH   )rD  r  r   rK   rE  rS   r  s     rA   reset_FileSystemWriter.reset  s%    ))-8DI%'r@   is_coordinatorc                     g rH   r6   )rS   rL  s     rA   set_up_storage_writer'_FileSystemWriter.set_up_storage_writer  rn   r@   planc                 b   U R                   R                  U R                  5        U R                   R                  U R                  5      (       a_  U R
                  (       a4  [        R                  " SU R                   SU R
                  < S35        U$ [        SU R
                  < S35      eU$ )Nz#Detected an existing checkpoint in z#, overwriting since self.overwrite=z. Past version 2.5 of PyTorch, `overwrite` will default to False. Set this variable to True to maintain this functionality or False to raise when an existing checkpoint is found.z-Checkpoint already exists and self.overwrite=.)	rD  r  r   r  metadata_pathr?  warningswarnr   rS   rP  s     rA   prepare_local_plan$_FileSystemWriter.prepare_local_plan  s    dii 77>>$,,--~~9$:L:L9MMqbfbpbpar sk k  #%SDNNCTTU#VWWr@   plansc                     [        U5       VVs/ s H'  u  p#[        R                  " U[        SU S35      S9PM)     nnnU$ s  snnf )N__rv   r   )r   dataclassesreplacerC   )rS   rY  r   rP  	new_planss        rA   prepare_global_plan%_FileSystemWriter.prepare_global_plan  sR     %U+
+ >Bqc)3LM+ 	 
 	
s   .Ar   c                   ^^ UR                   mSmUU4S jn[        R                  " 5       nU R                  (       ah  [	        U R
                  UR                  5       HC  nU" 5       nU R                  R                  U R                  U5      nUR                  XvU45        ME     OTUR                   HD  nU" 5       nU R                  R                  U R                  U5      nUR                  XvU/45        MF     [        R                  " 5       n	/ n
[        SU R
                  5       Hv  n[        R                  " [        U R                  R                  UU	UU R                   U R"                  U R
                  4S9nUR%                  5         U
R'                  U5        Mx     [        U R                  R                  UU	UU R                   U R"                  U R
                  S9  U
 H  nUR)                  5         M     / n  XR+                  5       -  nM  ! [        R,                   a     [/        5       nUR1                  U5        Us $ f = f)Nr   c                  >   > TR                    T [         3n TS-  mU $ r   )rE   DEFAULT_SUFFIX)r   
file_countstorage_plans    rA   gen_file._FileSystemWriter.write_data.<locals>.gen_file  s,    '../
|N;KLI!OJr@   r   )targetr@  )r   r   r   r   r}   r   r   )r   r   Queuer<  r   r   rf   rD  r  r   r   r   	threadingThreadr   r   r>  r=  startrj   joinr   r   r)   
set_result)rS   rP  r   rg  r   bucketr   r   r   r   threadsrv   tresfutre  rf  s                  @@rA   
write_data_FileSystemWriter.write_data  s   
 (,'8'8
	 #(++-
$$1$2C2CTZZP$J	ww**499i@89 Q
 

$J	ww**499i@$89 #
 %*KKMq$++,A  .GG)) ..OO%%A GGINN1 -  	 ''//!% $ : :oo**	
 AFFH  	..00 {{ 	-3XCNN3J	s   >H 1IImetadataresultsc                 r   0 nU H9  nUR                  U Vs0 s H  oUR                  UR                  _M     sn5        M;     X1l        U R                  5       Ul        [	        [
        U R                  R                  U R                  [         S35      5      nU R                  R                  US5       n[        R                  " X5        U R                  (       a%   [        R                  " UR!                  5       5        S S S 5        U R                  R'                  U R(                  5      (       a%  U R                  R+                  U R(                  5        U R                  R-                  X`R(                  5        g s  snf ! ["         a    [        R$                  " 5          Nf = f! , (       d  f       N= f)Nz.tmpr   )updater   r   storage_metar
   r   rD  r  r   r/   r   pickledumpr=  r   r   r   r   r   r  rS  r  r  )rS   rw  rx  
storage_mdwr_listwrtmp_pathmetadata_files           rA   finish_FileSystemWriter.finish>  s0   
G7K7Rxx87KL  * $ 1 1 3dgg11$))~T=RSTWW""8T2mKK0HH]1134	 3 77>>$,,--GGOOD../x!3!34% L & GGI 32s/    E>
4(F($FF%"F($F%%F((
F6c                 >    [        U R                  U R                  S9$ )N)r  rE  )r   r  rE  rX   s    rA   r{  _FileSystemWriter.storage_metaU  s    ););T\\RRr@   c                 r    [        [        U R                  R                  U R                  [
        5      5      $ rH   )r
   r   rD  r  r   r/   rX   s    rA   rS  _FileSystemWriter.metadata_pathX  s$    D$''--diiFGGr@   c                     U R                   $ )zD
return the checkpoint_id that will be used to save the checkpoint.
r   rX   s    rA   r  _FileSystemWriter.checkpoint_id\      
 yyr@   c                 ,    [         R                  U5      $ rH   r,   r  r  s     rA   r  (_FileSystemWriter.validate_checkpoint_idc      00??r@   )rD  r?  r   r>  rE  r<  r=  r   )TTr   逖 TrH   )#r7   r8   r9   r:   r;   r   r<   r   r  r   r>   r   rg   rJ  rN  r    rW  r   r`  r!   r)   r'   ru  r   r  r   r   r{  r   rS  r  r   r  r?   __classcell__rF  s   @rA   r:  r:    s     &*%/ #C$% # # # 	 #
  #  # #  #  #  # 
 #  #D(5bkk4)?#@ (D (
D T x H h DN AA A 
[!	"	AF5x 5$tK7H2I 5d 5.Sh{3 S HuS"++%56 H H uS"++%56   @5bkk9I3J @t @ @r@   r:  c                     ^  \ rS rSrS\\\R                  4   SS4U 4S jjrS\	S\
R                  4S jrSS\\\R                  S4   SS4S	 jjrS
\S\S\S   4S jrS\4S jrS\S\SS4S jrS
\S\4S jrS\\   S\\   4S jr\S\\\R                  4   4S j5       r\S\\\R                  4   S\4S j5       rSrU =r$ )r+   ih  r   rF   Nc                    > [         TU ]  5         [        5       U l        U R                  R	                  U5      U l        0 U l        [        5       U l        g rH   )	rC  rg   r,   rD  r  r   r   rK   load_id)rS   r   rF  s     rA   rg   FileSystemReader.__init__i  s?    ,GG%%d+	?A%'r@   sinfoc                 B    [        XR                  UR                  5      $ rH   )r(   r4   r5   )rS   filer  s      rA   _slice_fileFileSystemReader._slice_filep  s     ||U\\BBr@   r  c                 ~    0 U l         U(       a   U R                  R                  U5      U l        [	        5       U l        g rH   )r   rD  r  r   rK   r  rI  s     rA   rJ  FileSystemReader.resets  s-    ))-8DI%'r@   rP  r   c                    0 nUR                    HI  nU R                  UR                     nUR                  nUR	                  U/ 5      R                  U5        MK     UR                  5        GH  u  pxU R                  R                  U R                  U5      n	U R                  R                  U	S5       n
U GH  nU R                  UR                     nU R                  X5      nUR                  [        R                  :X  aS  [        R                  " UR!                  UR"                  5      5      nUR%                  S5        UR'                  X5        M  [)        [*        [,        R.                  " [)        [0        [2           U5      SSS95      n[5        XR6                  UR8                  5      nUR;                  U5      R=                  5       nUR?                  5       UR?                  5       :X  d6   SUR                   SUR?                  5        SUR?                  5        35       eURA                  U5        URC                  X5        GM     S S S 5        GM     [E        5       nURG                  S 5        U$ ! , (       d  f       GM  = f)	Nrbr   rq   T)map_locationweights_onlyzreq z mismatch sizes z vs )$rf   r   storage_indexr3   
setdefaultrj   rD  r  r   r   r  r   r   r   r   r   readr5   seek
load_bytesr
   r   r`   loadr   r   r   storage_offsetslengthsresolve_tensorrp   rO   copy_commit_tensorr)   ro  )rS   rP  r   per_file	read_itemitem_mdr   r3   reqsr  r|   req
file_slice
read_bytesrw   target_tensorrt  s                    rA   	read_dataFileSystemReader.read_datay  s   .0I''	(?(?@G((Db)00; $
 $,>>#3Mww**499mDH&&x6&C"//0A0ABG!%!1!1&!BJxx<#7#77%'ZZ
0O%P
"***3;!%"!JJ $RY
 ;-2-1" "8"$7$7" )0(>(>s(C(J(J(L *..0FKKMAo!#"3"3!44D]EWEWEYDZZ^_e_j_j_l^mnoA%++F3--cA3   76 $4> ht
? 76s   4FI77
J	c                 Z   U R                   R                  U R                  S5      nU R                   R                  US5       n[        R
                  " U5      nS S S 5        [        WSS 5      c  [        5       Ul        U R                  UR                  l	        U$ ! , (       d  f       NH= f)Nr.   r  r{  )
rD  r  r   r   r|  r  r   r   r{  r  )rS   r   r  rw  s       rA   read_metadataFileSystemReader.read_metadata  s    ww""499k:WW""4.-{{=1H / 8^T2:$/MH!(,% /.s   B
B*rw  rL  c                 D    UR                   U l         U R                   c   eg rH   r\  )rS   rw  rL  s      rA   set_up_storage_reader&FileSystemReader.set_up_storage_reader  s"    $11  ,,,r@   c                     U$ rH   r6   rV  s     rA   rW  #FileSystemReader.prepare_local_plan  s    r@   rY  c                     U$ rH   r6   )rS   rY  s     rA   r`  $FileSystemReader.prepare_global_plan  s    r@   c                     U R                   $ )zD
return the checkpoint_id that will be used to load the checkpoint.
r  rX   s    rA   r  FileSystemReader.checkpoint_id  r  r@   c                 ,    [         R                  U5      $ rH   r  r  s     rA   r  'FileSystemReader.validate_checkpoint_id  r  r@   )rD  r  r   r   rH   )r7   r8   r9   r:   r   r<   r   r  rg   r1   r   r  r  rJ  r   r   r)   r  r   r  r   r  rW  r   r`  r   r  r   r  r?   r  r  s   @rA   r+   r+   h  s2   (U3#34 ( (C| C		 C(5bkk4)?#@ (D ()h ) ) )X	x 	-h - -QU -x H h DN  uS"++%56   @5bkk9I3J @t @ @r@   r+   c                      ^  \ rS rSrSr      SS\\\R                  4   S\	S\	S\
S\
S\	S	\	S
S4S jjrS\S
\4U 4S jjrSrU =r$ )r*   i  r;  r   r<  r=  r   r>  cache_staged_state_dictr?  rF   Nc           
      `    [         R                  U UUUUUUS9  [        R                  " U US9  g)a  
Initialize the writer pointing to `path`.

Args:
    path: directory where the checkpoint will be written to.
    single_file_per_rank: Produce one file per rank instead of one file per tensor/blob. Default to True.
    sync_files : force files to be synced to permanent storage. Default to True.
    thread_count: Number of IO threads to use to write. Default to 1.
    per_thread_copy_ahead: How many bytes to copy from the GPU ahead of saving then. Default 10Mb.
    cache_staged_state_dict: Whether to cache the staged state_dict. This option decreases staging latency
        at the cost of increases memory usage. Additionally, if this parameter is set to True, it's the expectation
        that the stager is maintained and re-used for multiple dcp.async_save calls. Default to False.
    overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
)r   r<  r=  r   r>  r?  )r  N)r:  rg   r$   )rS   r   r<  r=  r   r>  r  r?  s           rA   rg   FileSystemWriter.__init__  sB    4 	""!5!%"7 	# 	
 	$$$;	
r@   
state_dictc                 0   > SU l         [        TU ]	  U5      $ )zOverride of AsyncStager.stager   )r>  rC  stage)rS   r  rF  s     rA   r  FileSystemWriter.stage  s     &'"w}Z((r@   )r>  )TTr   r  FT)r7   r8   r9   r:   r;   r   r<   r   r  r   r>   rg   r   r  r?   r  r  s   @rA   r*   r*     s      &*%/(-&
C$%&
 #&
 	&

 &
  #&
 "&&
 &
 
&
P) )O ) )r@   r*   )Wr   r]  r   r   r   r|  r   rk  rI   rT  abcr   r   
contextlibr   r   pathlibr   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r`   r   torch._utilsr   r   torch.distributed._shard._utilsr   %torch.distributed.checkpoint.metadatar   r   r   r   $torch.distributed.checkpoint.plannerr   r   r   r   r    r!   r"   r#   $torch.distributed.checkpoint.stagingr$   $torch.distributed.checkpoint.storager%   r&   r'   "torch.distributed.checkpoint.utilsr(   torch.futuresr)   __all__r/   r<   r=   r1   rC   rd  rK   rM   rb   rz   r>   r   r   r  r   r   rj  r   r   r-   r,   r:  r+   r*   r6   r@   rA   <module>r     s3     	  	      # % !       G B 	 	 	 E 
 A   Sc         C } .W"M W"t4Y 43 4# d9o $tIBW 0II


ELL(
)  	
 0AAA ++A 	A
 A A A 
AH'S 'T," ,"^w@ w@t[@} [@|;)(*= ;)r@   