
    9i                     *   % 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
r
S SKJrJr  S SKJrJrJrJr  S SKJr  S SK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"  S S
K#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.  S SK/J0r0J1r1J2r2J3r3J4r4  S SK5J6r6J7r7J8r8  S SK9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrC  S SKDJErEJFrFJGrG  S SKHJIrI  S SKJJKrK  / SQrLSrM\N\OS'   SrP\\N   \OS'   \ " S S5      5       rQ\ " S S5      5       rR " S S \5      rSS!rTS"\N4S# jrU " S$ S%\5      rV " S& S'\V5      rW " S( S)\V5      rX " S* S+5      rYS,\@S"\Z4S- jr[S.\ZS/\\\@   S"\\\\\@      4S0 jr]S1\YS2\R                  S3\"\R                  \%RL                  4   S4\@S5\NS6\SS"\G4S7 jr`S8\S9\R                  S:\R                  S;\?S1\YS<\ZS=\bS>\ZS6\SS"S4S? jrc " S@ SA\5      rd " SB SC\d5      re " SD SE\F5      rf " SF SG5      rg " SH SI\E5      rh " SJ SK\f\C5      rig)L    N)ABCabstractmethod)	GeneratorIterableIteratorSequence)contextmanager)	dataclass)Enum)UnsupportedOperation)Path)AnyCallablecastFinalIOOptionalUnion)Buffer)Tensor)_get_available_device_type_get_device_module)narrow_tensor_by_index)ExtensionRegistryStreamTransformExtension)CUSTOM_METADATA_KEYDCP_VERSION_KEY
FORMAT_KEYFORMAT_VALUEHF_DCP_VERSION)MetadataSTATE_DICT_TYPEStorageMeta)LoadItemTypeLoadPlanLoadPlannerReadItemSavePlanSavePlanner	WriteItemWriteItemType)BlockingAsyncStager)StorageReaderStorageWriterWriteResult)_create_file_view)Future)FileSystemWriterFileSystemReader
FileSystemFileSystemBaseSerializationFormatz	.metadata_metadata_fnz1.0.0CURRENT_DCP_VERSIONc                   X    \ rS rSr% Sr\\S'   \\S'   \\S'   Sr\	\
\      \S'   S rS	rg)
_StorageInfoJ   z#This is the per entry storage info.relative_pathoffsetlengthNtransform_descriptorsc                 v    U R                   R                  5        VVs0 s H  u  pUc  M
  X_M     snn$ s  snnf N)__dict__items)selfkvs      g/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/distributed/checkpoint/filesystem.py__getstate___StorageInfo.__getstate__S   s1    !%!4!4!6H!6!!6HHHs   	55 )__name__
__module____qualname____firstlineno____doc__str__annotations__intr?   r   r   rH   __static_attributes__rJ       rG   r:   r:   J   s/    -KK598HSM29IrT   r:   c                        \ rS rSr% \\S'   Srg)_StoragePrefixW   prefixrJ   N)rK   rL   rM   rN   rP   rQ   rS   rJ   rT   rG   rV   rV   W   s    KrT   rV   c                       \ rS rSrSrSrSrg)r6   \   
torch_savesafetensorsrJ   N)rK   rL   rM   rN   
TORCH_SAVESAFETENSORSrS   rJ   rT   rG   r6   r6   \   s    JKrT   r6   z.distcpreturnc                  >    [        [        R                  " 5       5      $ rA   )rP   uuiduuid4rJ   rT   rG   _generate_uuidrc   d   s    tzz|rT   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)_TensorLoaderh   sizeobjr_   Nc                     g rA   rJ   rD   rg   rh   s      rG   add_TensorLoader.addi       rT   c                     g rA   rJ   rD   s    rG   start_loading_TensorLoader.start_loadingm   rm   rT   c                     g rA   rJ   ro   s    rG   values_TensorLoader.valuesq   rm   rT   rJ   r_   N)rK   rL   rM   rN   r   rR   objectrk   rp   r   tupletorchr   rs   rS   rJ   rT   rG   re   re   h   sk     & T     u||V';!<=  rT   re   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)_SerialCpuLoaderv   resolve_funr_   Nc                     Xl         / U l        g rA   )r|   rC   )rD   r|   s     rG   __init___SerialCpuLoader.__init__w   s    &/1
rT   rg   rh   c                 <    U R                   R                  X45        g rA   )rC   appendrj   s      rG   rk   _SerialCpuLoader.add{   s    

4+&rT   c                     g rA   rJ   ro   s    rG   rp   _SerialCpuLoader.start_loading~   s    rT   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rA   )rC   r|   detachcpustoragerg   numelclonerD   _rh   tensors       rG   rs   _SerialCpuLoader.values   sr     jjFA%%c*113FZZ\F~~$$&&,,.8  !s   BB)rC   r|   ru   )rK   rL   rM   rN   r   r~   rR   rv   rk   rp   r   rw   rx   r   rs   rS   rJ   rT   rG   rz   rz   v   sS    2H 2 2' '& 'T '	u||V';!<= 	rT   rz   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   Nr|   streaminflight_threshholdr_   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)r|   rC   r   in_flight_datacollectionsdequecurrent_itemsidxstarteddevice_typer   r   device_moduler   rx   cudaStreamcurrent_streamr   wait_stream)rD   r|   r   r   s       rG   r~   _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 >rT   c                 F    U R                   [        U R                  5      :  $ rA   )r   lenrC   ro   s    rG   _done_OverlappingCpuLoader._done   s    xx3tzz?**rT   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   popleftr   element_sizer   )rD   drainedvals      rG   _drain_OverlappingCpuLoader._drain   s    $":"::KK##%!!T%=%==$$,,.C3q6<<>CF4G4G4I#IINN3 !!T%=%== rT   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   r   T)devicenon_blocking)r   r   r   r   r   rC   r   r|   r   r   typer   torx   untyped_storagerg   r   itemsizer   r   r   r   r   s       rG   _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   ro   s    rG   _finish_OverlappingCpuLoader._finish   s=    zzzt!!"Q&KK##%!!!rT   rg   rh   c                 t    U R                   (       a  [        S5      eU R                  R                  X45        g )Nz&cannot add items after loading started)r   RuntimeErrorrC   r   rj   s      rG   rk   _OverlappingCpuLoader.add   s)    <<GHH

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

H//23rT   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rA   )rp   r   r   r   r   )rD   r   s     rG   rs   _OverlappingCpuLoader.values   sY     **kkmGLLN ***
 <<>!! !s*   AA>	A:
A>!A>4A<5A><A>)
r   r   r   r   r   r   rC   r|   r   r   )Ni@B ru   )rK   rL   rM   rN   r   r   rx   r   rR   r~   propertyboolr   listrw   r   rv   r   r   r   r   rk   rp   r   rs   rS   rJ   rT   rG   r   r      s     *.#,	II &I !	I
 
I. +t + +U5<<#789 N0"%f(<"=> "' '& 'T '
"u||V';!<= "rT   r   c            	       |    \ rS rSrSr SS\\\      SS4S jjrS\	S\
R                  S\\\   \\   4   4S	 jrS
rg)_StorageWriterTransforms   
This is experimental, and will likely move elsewhere in the
future.  It lives here to minimize changes while we are still
learning and gathering feedback.
N
extensionsr_   c                 (    Uc  SU l         gUU l         g)z
If the extensions arg is None, this means the implementation
should provide whatever defaults it chooses.  An empty
sequence indicates no extensions should be used.  At this
time, the default extensions sequence is empty.
NrJ   r   )rD   r   s     rG   r~   !_StorageWriterTransforms.__init__   s     !+ 2"
rT   
write_item
raw_streamc                 *    " S S[         R                  5      n[        [        [           U" U5      5      nU R
                   H  nUR                  U5      nM     U[        U R
                  5       Vs/ s H  oUR                  5       PM     sn4$ s  snf )Nc                   \    \ rS rSrS\R
                  4S jrS\4S jrS\	S\
4S jrS rS	rg
)E_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriteri  rawc                     Xl         g rA   r   )rD   r   s     rG   r~   N_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s    rT   r_   c                     gNTrJ   ro   s    rG   	writeableO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable  s    rT   bc                 8    U R                   R                  U5      $ rA   )r   write)rD   r   s     rG   r   K_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write
  s    xx~~a((rT   c                 X    U R                  5         U R                  R                  5         g rA   )flushr   ro   s    rG   closeK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s    

 rT   r   N)rK   rL   rM   rN   ioIOBaser~   r   r   r   rR   r   r   rS   rJ   rT   rG   NoCloseWriterr     s6    BII 4 )v )# )!rT   r   )	r   r   r   r   bytesr   transform_toreversedget_descriptor)rD   r   r   r   r   exs         rG   transform_save_stream._StorageWriterTransforms.transform_save_stream   sv    	!BII 	! BuI}Z'@A//B??<8L " Xdoo=VW=Vr002=VWXXWs   3Br   rA   )rK   rL   rM   rN   rO   r   r   r   r~   r*   r   r   rw   r   r   r   rP   r   rS   rJ   rT   rG   r   r      sh     JN	C"8,D#EF	C		CY#Y13Y	r%y$s)#	$YrT   r   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_datarg   
propertiesdtyperx   _utils_element_size)r   rg   sr   s       rG   
_item_sizer     si    D'''""	 # ''--E%,,,,U333rT   binsrC   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   	enumerater   minr   r   )
r   rC   wibytes_wtensor_wr   bucketsbucket_sizesir   s
             rG   _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
transformsr   datar   storage_keyserialization_formatc                 <   UR                  5       nU R                  X15      u  pxUR                  [        R                  :X  aA  [        U[        R                  5      (       d   eUR                  UR                  5       5        Oq[        U[        R                  5      (       d   eUR                  [        R                  " S5      :X  d   eU[        R                  :X  a  [        R                  " X'5        UR!                  5         U[        R                  :X  d  [        U[        R                  5      (       a  UR                  5       U-
  n	O!UR#                  5       UR%                  5       -  n	['        U5      S:X  a  S OUn
[)        UR*                  U	[-        UUU	U
S9S9$ )Nr   r   )r?   )indexsize_in_bytesstorage_data)tellr   r   r+   r   
isinstancer   BytesIOr   	getbufferrx   r   r   r6   r]   saver   r   r   r   r/   r  r:   )r
  r   r  r   r  r  r=   r   r?   r>   info_transform_descriptorss              rG   _write_itemr  =  sX    [[]F,6,L,L-)\ -///$

++++4>>+,$----{{ell51111#6#A#AAJJt*2===bjjB B ' 1 1 33
 )*a/5J  !"<	
	 	rT   create_stream
file_queueresult_queueplannerr   	use_fsyncthread_countc	                      UR                  5       u  pn[        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 H3  nUR                  U5      nUR!                  [#        UUUUU
U5      5        M5     0 n0 nUR%                  5        H  u  nnUR&                  (       d   eUR!                  [#        UUUUU
U5      5        UUUR(                  R*                  '   SUR,                  R.                  R0                  0UUR(                  R*                  '   M     U[2        R4                  :X  aS  SSKJn  UR;                  U" U[<        [>        R@                  " U5      [B        [E        [F        5      [H        [J        0S95        U(       a%   [L        RN                  " URQ                  5       5        URY                  5         S S S 5        UR[                  U5        GM  s  snf s  snf ! [R        [T        4 a    [L        RV                  " 5          N]f = f! , (       d  f       NW= f! [\        R^                   a     g f = f)Nr   r   )r   wbsaved_offsets)r  )metadata)0
get_nowaitrx   _C_get_privateuse1_backend_namegetattrr   is_availabler   resolve_datarz   r   r+   r   rk   r   rp   r   r  rs   is_cpur  fqnr   chunkoffsetsr6   r^   safetensors.torchr  r   r   jsondumpsr   rP   r    r   r   osfsyncfilenoAttributeErrorr   syncr   putqueueEmpty)r  r  r  r  r
  r   r  r  r  	file_namer  write_itemscustom_backend_namecustom_device_modloaderr  r  r   r  write_resultsr   r  tensor_dictmetadata_dictr   r  s                             rG   _write_files_from_queuer@  o  s   [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!((#&" &'0	 #* ! "*0--/&FJ!==(=!((#&""&'0	 9?K
 0 0 4 45')?)?)E)E)M)M;M*"2"2"6"67 +:" (+>+J+JJ6LL' 3TZZ5N /^1D *L&	 "1 i 0j ]+q 6 V
 Uj +,@A "	"e 0/l ;; ss   B<L< >!K6#K6):L< #!K;K;L< E
L+&$L 
L+&L<  %L(%L+'L((L++
L95L< <MM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)r5   i  pathmoder_   Nc                     g rA   rJ   )rD   rB  rC  s      rG   r  FileSystemBase.create_stream  s     ,/rT   suffixc                     g rA   rJ   rD   rB  rF  s      rG   concat_pathFileSystemBase.concat_path  s     #&rT   new_pathc                     g rA   rJ   rD   rB  rK  s      rG   renameFileSystemBase.rename  s     rT   c                     g rA   rJ   rD   rB  s     rG   	init_pathFileSystemBase.init_path  s    SVrT   c                     g rA   rJ   rQ  s     rG   mkdirFileSystemBase.mkdir  s    <?rT   checkpoint_idc                     g rA   rJ   clsrW  s     rG   validate_checkpoint_id%FileSystemBase.validate_checkpoint_id  s    UXrT   c                     g rA   rJ   rQ  s     rG   existsFileSystemBase.exists  s    =@rT   c                     g rA   rJ   rQ  s     rG   rm_fileFileSystemBase.rm_file  s    >ArT   rJ   )rK   rL   rM   rN   r	   r   r   rP   r0  PathLiker   r   r   r  rI  rN  rR  rU  classmethodr   r[  r^  ra  rS   rJ   rT   rG   r5   r5     s   /#r{{*+/36/	299dD(	)/  / &#r{{*+&58&	sBKK	 & & #r{{*+7<S"++=M7N	  VeC$45V%R[[@P:QV V?%R[[ 01?d? ?X5bkk9I3JXtX  X@5bkk!12@t@ @AE#r{{"23AA ArT   r5   c            
       d   \ 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                  4   S\\   4S jrSrg)r4   i  rB  rC  r_   Nc              #      #    [        U[        5      (       d  [        U5      nUR                  U5       n[        [        R
                  U5      v   S S S 5        g ! , (       d  f       g = f7frA   )r  r   openr   r   r   )rD   rB  rC  r   s       rG   r  FileSystem.create_stream  sD      $%%:DYYt_ryy&)) __s   2A+A	A+
A($A+rF  c                 J    [        U[        5      (       d  [        U5      nX-  $ rA   r  r   rH  s      rG   rI  FileSystem.concat_path  s"     $%%:D}rT   c                 F    [        U[        5      (       d  [        U5      nU$ rA   rj  rQ  s     rG   rR  FileSystem.init_path  s    $%%:DrT   rK  c                     [        U[        5      (       d  [        U5      nUR                  [        [        U5      5        g rA   )r  r   rN  r   rM  s      rG   rN  FileSystem.rename  s-     $%%:DDx()rT   c                 d    [        U[        5      (       d  [        U5      nUR                  SSS9  g )NT)parentsexist_ok)r  r   rU  rQ  s     rG   rU  FileSystem.mkdir  s(    $%%:D

4$
/rT   rW  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   rP   rq  r^  r0  accessW_OK)rZ  rW  ps      rG   r[  !FileSystem.validate_checkpoint_id  sb    mT**C&&m$,,AxxzzbiiA88 - rT   c                 b    [        U[        5      (       d  [        U5      nUR                  5       $ rA   )r  r   r^  rQ  s     rG   r^  FileSystem.exists+  s$    $%%:D{{}rT   c                 d    [        U[        5      (       d  [        U5      nUR                  5         g rA   )r  r   unlinkrQ  s     rG   ra  FileSystem.rm_file0  s!    $%%:DrT   c                     [        U[        5      (       d  [        U5      nUR                  5        Vs/ s H  n[        U5      PM     sn$ s  snf rA   )r  r   iterdirrP   )rD   rB  rw  s      rG   lsFileSystem.ls5  s:    $%%:D $/1A///s   ArJ   )rK   rL   rM   rN   r	   r   rP   r0  rc  r   r   r   r  rI  rR  rN  rU  rd  r   r[  r^  ra  r   r  rS   rJ   rT   rG   r4   r4     s   *#r{{*+*36*	299dD(	)* *#r{{*+58	sBKK	 eC$45 %R[[@P:Q 
*#r{{*+*7<S"++=M7N*	*0%R[[ 01 0d 0
 5bkk9I3J t  5bkk!12 t 
E#r{{"23  
0uS"++-. 049 0rT   r4   c                   h  ^  \ rS rSrSrSSSSSS\R                  4S\\\	R                  4   S\S	\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\SS4S jr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\R<                  S\\\      4S jrS \ S!\\\      SS4S" jr!S\\"   4S# jr#S)S$\\   S\	R                  4S% jjr$\%S\\\	R                  4   4S& j5       r&\'S\\\	R                  4   S\4S' j5       r(S(r)U =r*$ )*_FileSystemWriteri;  aE  
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.

Tr   逖 NrB  single_file_per_rank
sync_filesr  per_thread_copy_ahead	overwrite_extensionsr  argskwargsr_   c	                 "  > [         TU ]  5         [        5       U l        U R                  R	                  U5      U l        X l        X0l        X@l        XPl	        [        5       U l        X`l        [        U5      U l        Xl        SU l        SU 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.
    _extensions: Extensions to apply to output streams (EXPERIMENTAL)

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
NT)superr~   r4   fsrR  rB  r  r  r  r  rc   save_idr  r   r
  r  rankuse_collectives)rD   rB  r  r  r  r  r  r  r  r  r  	__class__s              rG   r~   _FileSystemWriter.__init__I  sv    6 	,GG%%d+	$8!$(%:"%'"2;?$8!#'	%)rT   rW  c                 p    U(       a   U R                   R                  U5      U l        [        5       U l        g rA   )r  rR  rB  rc   r  rD   rW  s     rG   reset_FileSystemWriter.resetr  s%    ))-8DI%'rT   is_coordinatorc                 `    UR                  SS 5      U l        UR                  SS5      U l        g Nr  r  T)getr  r  )rD   r  r  r  s       rG   set_up_storage_writer'_FileSystemWriter.set_up_storage_writerw  s*     JJvt,	%zz*;TBrT   c                     U R                   (       a  U R                  S S9nOU R                  SS9nU R                  R                  U5      $ )N)r  r   )r  _get_metadata_pathr  r^  )rD   metadata_paths     rG   _metadata_exists"_FileSystemWriter._metadata_exists}  sF     333>M !333;Mww~~m,,rT   planc                    U R                   R                  U R                  5        U R                  5       (       a^  U R                  (       a3  [
        R                  " SU R                   SU R                  < S35        O[        SU R                  < S35      eU R                  b=  U R                  (       d,  [        R                  " U[        SU R                   S35      S9n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=.__r   r  )r  rU  rB  r  r  warningswarnr   r  r  dataclassesreplacerV   rD   r  s     rG   prepare_local_plan$_FileSystemWriter.prepare_local_plan  s    dii   ""~~9$))DhY]YgYgXi jk k #%SDNNCTTU#VWW99 )=)=&&>Btyyk2C#DD rT   plansc                     [        U5       VVs/ s H6  u  p#UR                  c"  [        R                  " U[	        SU S35      S9OUPM8     nnnU$ s  snnf )Nr  r   r  )r  r  r  r  rV   )rD   r  r  r  	new_planss        rG   prepare_global_plan%_FileSystemWriter.prepare_global_plan  sl    
 %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     U R                  X$5      $ )Nr   c                  >   > TR                    T [         3n TS-  mU $ r   )rX   DEFAULT_SUFFIX)r8  
file_countstorage_plans    rG   gen_file._FileSystemWriter.write_data.<locals>.gen_file  s,    '../
|N;KLI!OJrT   )r  r6  Queuer  r	  r  rC   r  rI  rB  r5  _write_data)rD   r  r  r  r  bucketr8  rB  r   r  r  s            @@rG   
write_data_FileSystemWriter.write_data  s    
 (,'8'8
	 #(++-
$$1$2C2CTZZP$J	ww**499i@89 Q
 

$J	ww**499i@$89 #
 44rT   r  c                    [         R                  " 5       n/ n[        SU R                  5       H  n[        R
                  " [        U R                  R                  UUUU R                  U R                  U R                  U R                  U R                  4	S9nUR                  5         UR                  U5        M     [        U R                  R                  UUUU R                  U R                  U R                  U R                  U R                  S9	  U H  nUR                  5         M     / n  XsR!                  5       -  nM  ! [         R"                   a     [%        5       nUR'                  U5        Us $ f = f)Nr   )targetr  )	r  r  r  r  r
  r   r  r  r  )r6  r  r   r  	threadingThreadr@  r  r  r
  r  r  r  startr   joinr#  r7  r1   
set_result)	rD   r  r  r  threadsr   tresfuts	            rG   r  _FileSystemWriter._write_data  sG   
 %*KKMq$++,A  .GG)) OO..OO%%--
A GGINN1! -$ 	 ''//!% $ : :oo**!%!:!:
	
 AFFH  	..00 {{ 	-3XCNN3J	s   1E 1E:9E:r"  resultsc                 t   [         R                  " U[        S9n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                  (       d#  U R                  b  SU R                   [         S3O[         S3n[        [        U R                  R                  U R                  U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                  (       d)  U R                  b  U R3                  U R                  5      n	OU R3                  5       n	U R                  R5                  U	5      (       a  U R                  R7                  U	5        U R                  R9                  Xy5        g s  snf ! [,        [.        4 a    [&        R0                  " 5          Nf = f! , (       d  f       N= f)N)versionr  z.tmpr   )r  r  r8   updater  r  storage_metar  r  r7   r   r   r  rI  rB  r  pickledumpr  r0  r1  r2  r3  r   r4  r  r^  ra  rN  )
rD   r"  r  
storage_mdwr_listwrtmp_filenametmp_pathmetadata_filer  s
             rG   finish_FileSystemWriter.finish  s   &&x9LM
G7K7Rxx87KL  * $ 1 1 3 ''DII,A L>. >& 	
 dgg11$))\JKWW""8T2mKK0HH]1134	 3 ##		(= 33DII>M 335M77>>-((GGOOM*x/7 L '(<= GGI 32s/    G9
(H),$G>>%H&#H)%H&&H))
H7c                 >    [        U R                  U R                  S9$ )N)rW  r  )r#   rW  r  ro   s    rG   r  _FileSystemWriter.storage_meta  s    ););T\\RRrT   r  c                     Uc  [          O
SU [          3n[        [        U R                  R	                  U R
                  U5      5      $ Nr  r7   r   r   r  rI  rB  rD   r  filenames      rG   r  $_FileSystemWriter._get_metadata_path  <    (,l^Btf\N:SD$''--diiBCCrT   c                     U R                   $ )zD
return the checkpoint_id that will be used to save the checkpoint.
rB  ro   s    rG   rW  _FileSystemWriter.checkpoint_id      
 yyrT   c                 ,    [         R                  U5      $ rA   r4   r[  rY  s     rG   r[  (_FileSystemWriter.validate_checkpoint_id"      00??rT   )r  r  rB  r  r  r  r  r  r  r  r
  r  rA   )+rK   rL   rM   rN   rO   r6   r]   r   rP   r0  rc  r   rR   r   r   r   r   r~   r  r  r  r(   r  r   r  r)   r1   r/   r  r6  r  r  r!   r  r#   r  r  r   rW  rd  r[  rS   __classcell__r  s   @rG   r  r  ;  sJ     &*%/DH4G4R4R'*C$%'* #'* 	'*
 '*  #'* '* h'?@A'* 2'* '* '* 
'* '*R(5bkk4)?#@ (D (
C"C+.C:=C	C	-$ 	-x H &h DN 55 5 
[!	"	5800 KK0 
[!	"	0d 0x  0$tK7H2I  0d  0DSh{3 SDx} D D uS"++%56   @5bkk9I3J @t @ @rT   r  c            	       `    \ rS rSrSrSS\\   SS4S jjrS\S\	\
   S	\\   S\\   4S
 jrSrg)_StorageReaderTransformsi'  r   Nextension_registryr_   c                 8    Uc  [        5       U l        g UU l        g rA   )r   r  )rD   r  s     rG   r~   !_StorageReaderTransforms.__init__.  s!    #5#= 	CU 	rT   	read_itemr?   r   c                     U R                   R                  U5      nUnU H+  n[        U[        5      (       d  M  UR	                  U5      nM-     U$ rA   )r  from_descriptor_listr  r   transform_from)rD   r  r?   r   r   r  r   s          rG   transform_load_stream._StorageReaderTransforms.transform_load_stream3  sP     ,,AABWX
#B"677!#!2!2>!B  rT   )r  rA   )rK   rL   rM   rN   rO   r   r   r~   r'   r   rP   r   r   r  rS   rJ   rT   rG   r  r  '  sX    
84E+F 
RV 

  (} uI	
 
ErT   r  c            
         ^  \ rS rSr SS\\\R                  4   S\\	   SS4U 4S jjjr
S\S\\   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S\\   S\R                  4S jjrS\S\S\4S jrS\S\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#$ )r3   iA  NrB  _extension_registryr_   c                    > [         TU ]  5         [        5       U l        U R                  R	                  U5      U l        0 U l        [        5       U l        [        U5      U l
        S U l        SU l        g r   )r  r~   r4   r  rR  rB  r  rc   load_idr  r
  r  r  )rD   rB  r  r  s      rG   r~   FileSystemReader.__init__B  s]    
 	,GG%%d+	,.%'23FG	#rT   sinfoc                 l    [        [        [           [        XR                  UR
                  5      5      $ rA   )r   r   r   r0   r=   r>   )rD   filer  s      rG   _slice_fileFileSystemReader._slice_fileP  s#    BuI0||U\\RSSrT   rW  c                 ~    0 U l         U(       a   U R                  R                  U5      U l        [	        5       U l        g rA   )r  r  rR  rB  rc   r  r  s     rG   r  FileSystemReader.resetS  s-    ))-8DI%'rT   r  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HJ  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                  UUR                  =(       d    SU5      nUR                  [        R                   :X  aI  ["        R$                  " UR'                  S5      5      nUR)                  S5        UR+                  X5        M  UR-                  5       (       a  UnO6["        R$                  " UR'                  S5      5      nUR)                  S5        [/        [0        [2        R4                  " USSS95      n[7        UUR8                  UR:                  5      nUR=                  U5      R?                  5       nURA                  5       URA                  5       :X  d6   SUR                   S	URA                  5        S
URA                  5        35       eURC                  U5        URE                  UU5        GM     S S S 5        GMM     [G        5       nURI                  S 5        U$ ! , (       d  f       GM|  = f)NrbrJ   r   r   T)map_locationweights_onlyzreq z mismatch sizes z vs )%rC   r  storage_indexr<   
setdefaultr   r  rI  rB  r  r  r
  r  r?   r   r$   r   r   r  readseek
load_bytesseekabler   r   rx   loadr   storage_offsetslengthsresolve_tensorr   rg   copy_commit_tensorr1   r  )rD   r  r  per_filer  item_mdrB  r<   reqsrK  r   req
file_slicer  
read_bytesr  r   target_tensorr  s                      rG   	read_dataFileSystemReader.read_dataY  ss   .0I$($5$5i6M6M$NG((Db)00; $
 $,>>#3Mww**499mDH&&x6&C"//0A0ABG!%!1!1&!BJ%)__%J%J  55;"&N xx<#7#77%'ZZ0C0CB0G%H
"***3;)2244'5H (*zz.2E2Eb2I'JH$MM!,!%"!JJ (-2-1" "8"C$7$7" )0(>(>s(C(J(J(L,113v{{}D "3#4#4"55EmFXFXFZE[[_`f`k`k`m_noD &++F3--c=AS   76 $4^ ht
_ 76s   4G:K
K(	r  c                     Uc  [          O
SU [          3n[        [        U R                  R	                  U R
                  U5      5      $ r  r  r  s      rG   r  #FileSystemReader._get_metadata_path  r  rT   r  r  c                 T   UR                  SS 5      nU R                  U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  )
r  r  r  r  r  r  r&  r#   r  r  )rD   r  r  r  rB  r  r"  s          rG   read_metadataFileSystemReader.read_metadata  s    zz&$'&&t,WW""4.-{{=1H / 8^T2:$/MH!(,% /.s    B
B'r"  r  c                     UR                   U l         UR                  SS 5      U l        UR                  SS5      U l        U R                   c   eg r  )r  r  r  r  )rD   r"  r  r  r  s        rG   set_up_storage_reader&FileSystemReader.set_up_storage_reader  sJ     %11JJvt,	%zz*;TB  ,,,rT   c                     U$ rA   rJ   r  s     rG   r  #FileSystemReader.prepare_local_plan  s    rT   r  c                     U$ rA   rJ   )rD   r  s     rG   r  $FileSystemReader.prepare_global_plan  s    rT   c                     U R                   $ )zD
return the checkpoint_id that will be used to load the checkpoint.
r  ro   s    rG   rW  FileSystemReader.checkpoint_id  r  rT   c                 ,    [         R                  U5      $ rA   r  rY  s     rG   r[  'FileSystemReader.validate_checkpoint_id  r  rT   )r  r  rB  r  r  r
  r  rA   )$rK   rL   rM   rN   r   rP   r0  rc  r   r   r~   r:   r   r   r  r  r%   r&   r1   r  rR   r  r   r!   r"  r   r%  r  r   r  r   rW  rd  r[  rS   r  r  s   @rG   r3   r3   A  s    <@$C$%$ &&78$ 
	$ $T| T5	 T(5bkk4)?#@ (D (9h 9 9 9vDx} D D

3 
# 
( 
- -26-?B-NQ-	-x H h DN  uS"++%56   @5bkk9I3J @t @ @rT   r3   c                      ^  \ rS rSrSrSSSSSSS\R                  4S\\\	R                  4   S	\S
\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$ )r2   i  a  
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 global `.metadata` file with the serialized metadata if rank coordination is enabled.
a rank local `__{rank}.metadata` file with the serialized metadata if rank coordination is NOT enabled.

Tr   r  FNrB  r  r  r  r  cache_staged_state_dictr  r  r  r_   c
                 d    [         R                  U U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 reused for multiple dcp.async_save calls. Default to False.
    overwrite: Whether to allow overwriting existing checkpoints. Defaults to True.
    _extensions: Extensions to apply to output streams (EXPERIMENTAL)

N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
)rB  r  r  r  r  r  r  r  )r0  N)r  r~   r,   )
rD   rB  r  r  r  r  r0  r  r  r  s
             rG   r~   FileSystemWriter.__init__  sH    : 	""!5!%"7#!5 	# 
	
 	$$$;	
rT   
state_dictc                 0   > SU l         [        TU ]	  U5      $ )zOverride of AsyncStager.stager   )r  r  stage)rD   r3  r  s     rG   r5  FileSystemWriter.stage  s     &'"w}Z((rT   )r  )rK   rL   rM   rN   rO   r6   r]   r   rP   r0  rc  r   rR   r   r   r   r~   r"   r5  rS   r  r  s   @rG   r2   r2     s    " &*%/(-DH4G4R4R+
C$%+
 #+
 	+

 +
  #+
 "&+
 +
 h'?@A+
 2+
 
+
Z) )O ) )rT   r2   )jr   r  r   r.  r   r0  r  r6  r  ra   r  abcr   r   collections.abcr   r   r   r   
contextlibr	   r
   enumr   r   pathlibr   typingr   r   r   r   r   r   r   typing_extensionsr   rx   r   torch._utilsr   r   torch.distributed._shard._utilsr   'torch.distributed.checkpoint._extensionr   r   &torch.distributed.checkpoint._hf_utilsr   r   r   r   r    %torch.distributed.checkpoint.metadatar!   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.utilsr0   torch.futuresr1   __all__r7   rP   rQ   r8   r:   rV   r6   r  rc   re   rz   r   r   rR   r   r   r	  r   r  r  r  r   r@  r5   r4   r  r  r3   r2   rJ   rT   rG   <module>rI     s     	   	      # C C % !  #  B B B %   G B  Y X	 	 	 E 
 A    c ") U3Z ) 	I 	I 	I    $  
  C } .W"M W"t0Y 0Yf4Y 43 4# d9o $tIBW 0/(/II/ 

ELL(
)/ 	/
 / ./ /dfff ++f 	f
 )f f f f .f 
fRBS BD>0 >0Bi@ i@X 4{@} {@|A)(*= A)rT   