
    }Yh                     J   U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZm Z m!Z! d d
l"m#Z# d dl$Z$d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZF d dlGmHZH d dlImJZJ g dZKdZLeMeNd<   e G d d                      ZOe G d d                      ZP G d de          ZQdZRd eMfd!ZS G d" d#e          ZT G d$ d%eT          ZU G d& d'eT          ZV G d( d)          ZWd*e?d eXfd+ZYd,eXd-eZe?         d eZeZe?                  fd.Z[d/eWd0ej\        d1e!ej]        e$j%        f         d2e?d3eMd4eQd eFfd5Z^d6ed7ej_        d8ej_        d9e>d/eWd:eXd;e`d<eXd4eQd dfd=Za G d> d?e          Zb G d@ dAeb          Zc G dB dCeE          Zd G dD dE          Ze G dF dGeD          Zf G dH dIedeB          ZgdS )J    N)ABCabstractmethod)	GeneratorIterableIteratorSequence)contextmanager)	dataclass)Enum)UnsupportedOperation)Path)AnyCallablecast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SerializationFormat	.metadata_metadata_fnc                   ^    e Zd ZU dZeed<   eed<   eed<   dZee	e                  ed<   d Z
dS )_StorageInfoz#This is the per entry storage info.relative_pathoffsetlengthNtransform_descriptorsc                 H    d | j                                         D             S )Nc                     i | ]
\  }}|||S N ).0kvs      y/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/distributed/checkpoint/filesystem.py
<dictcomp>z-_StorageInfo.__getstate__.<locals>.<dictcomp>R   s    HHHA!-1---    )__dict__itemsselfs    rE   __getstate__z_StorageInfo.__getstate__Q   s$    HH!4!4!6!6HHHHrG   )__name__
__module____qualname____doc__str__annotations__intr=   r   r   rL   rA   rG   rE   r9   r9   H   sh         --KKKKKK598HSM2999I I I I IrG   r9   c                       e Zd ZU eed<   dS )_StoragePrefixprefixN)rM   rN   rO   rQ   rR   rA   rG   rE   rU   rU   U   s         KKKKKrG   rU   c                       e Zd ZdZdZdS )r5   
torch_savesafetensorsN)rM   rN   rO   
TORCH_SAVESAFETENSORSrA   rG   rE   r5   r5   Z   s        JKKKrG   r5   z.distcpreturnc                  B    t          t          j                              S r@   )rQ   uuiduuid4rA   rG   rE   _generate_uuidr`   b   s    tz||rG   c                       e Zd Zedededdfd            Zedd            Zedee	e
j        ef                  fd            ZdS )	_TensorLoadersizeobjr\   Nc                     d S r@   rA   rK   rc   rd   s      rE   addz_TensorLoader.addg       rG   c                     d S r@   rA   rJ   s    rE   start_loadingz_TensorLoader.start_loadingk   rh   rG   c                     d S r@   rA   rJ   s    rE   valuesz_TensorLoader.valueso   rh   rG   r\   N)rM   rN   rO   r   rS   objectrg   rj   r   tupletorchr   rl   rA   rG   rE   rb   rb   f   s         & T    ^    ^ u|V';!<=    ^  rG   rb   c                   l    e Zd ZdeddfdZdededdfdZd
dZde	e
ej        ef                  fd	ZdS )_SerialCpuLoaderresolve_funr\   Nc                 "    || _         g | _        d S r@   )rs   rI   )rK   rs   s     rE   __init__z_SerialCpuLoader.__init__u   s    &/1


rG   rc   rd   c                 >    | j                             ||f           d S r@   )rI   appendrf   s      rE   rg   z_SerialCpuLoader.addy   s"    
4+&&&&&rG   c                     d S r@   rA   rJ   s    rE   rj   z_SerialCpuLoader.start_loading|       rG   c              #   F  K   | j         D ]\  }}|                     |                                          }|                                }|                                                                |                                k    r|                                }||fV  d S r@   )rI   rs   detachcpustoragerc   numelclonerK   _rd   tensors       rE   rl   z_SerialCpuLoader.values   s      j 	 	FAs%%c**1133FZZ\\F~~$$&&&,,..88    	 	rG   rm   )rM   rN   rO   r   ru   rS   rn   rg   rj   r   ro   rp   r   rl   rA   rG   rE   rr   rr   t   s        2H 2 2 2 2 2' '& 'T ' ' ' '   	u|V';!<= 	 	 	 	 	 	rG   rr   c            	          e Zd Z	 	 ddedeej                 deddfdZe	de
fd            Zdeeej        ef                  fd	Zdd
Zdeeej        ef                  fdZdededdfdZddZdeeej        ef                  fdZdS )_OverlappingCpuLoaderN@B rs   streaminflight_threshholdr\   c                    || _         g | _        || _        d| _        t	          j                    | _        d| _        d| _        |r|j	        nt                      | _	        t          | j	                  | _        t          t          j        j        |p| j                                                  | _        | j        | j                                        k    r3| j                            | j                                                   d S d S )Nr   F)rs   rI   r   in_flight_datacollectionsdequecurrent_itemsidxstarteddevice_typer   r   device_moduler   rp   cudaStreamcurrent_streamr   wait_stream)rK   rs   r   r   s       rE   ru   z_OverlappingCpuLoader.__init__   s     '/1
#6 0;0A0C0C"(JF.H.J.J 	 00@AAJvL);)J)J)L)L
 
 ;$,;;====K##D$6$E$E$G$GHHHHH >=rG   c                 <    | j         t          | j                  k    S r@   )r   lenrI   rJ   s    rE   _donez_OverlappingCpuLoader._done   s    x3tz??**rG   c                 ~   g }| j         | j        k    r| j                                         | j         | j        k    r| j                                        }| xj         |d                                         |d                                         z  z  c_         |                    |           | j         | j        k    |S Nr   )	r   r   r   synchronizer   popleftr~   element_sizerw   )rK   drainedvals      rE   _drainz_OverlappingCpuLoader._drain   s    $":::K##%%%!T%===$,,..C3q6<<>>CF4G4G4I4I#IINN3 !T%=== rG   c                 Z   | j                             | j                  5  | j        sj| j        | j        k     rY| j        | j                 \  }}| xj        dz  c_        |                     |                                          }|j	        j
        | j        k    r|                    dd          }nu|j	        t          j	        d          k    rX|                                                                |                                |j        z  k    r|                                }| j                            ||f           | xj        |                                |                                z  z  c_        | j        s| j        | j        k     Yd d d            d S # 1 swxY w Y   d S )N   r|   T)devicenon_blocking)r   r   r   r   r   rI   r   rs   r{   r   typer   torp   untyped_storagerc   r~   itemsizer   r   rw   r   r   s       rE   _refillz_OverlappingCpuLoader._refill   s   &&t{33 	N 	Nj NT%84;S%S%SDH-3A))#..5577=%)999#YYe$YGGFF]el5&9&999..005577!<<>>FO;< < "("))   ##v||~~8K8K8M8M'MM##) j NT%84;S%S%S	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   E3F  F$'F$c                     | j         sJ t          | j                  dk    r| j                                         | j        S r   )r   r   r   r   r   rJ   s    rE   _finishz_OverlappingCpuLoader._finish   sC    zt!""Q&&K##%%%!!rG   rc   rd   c                 j    | j         rt          d          | j                            ||f           d S )Nz&cannot add items after loading started)r   RuntimeErrorrI   rw   rf   s      rE   rg   z_OverlappingCpuLoader.add   s<    < 	IGHHH
4+&&&&&rG   c                     | j         rd S d| _         | j                            t          j        d                     |                                  d S )NTr   key)r   rI   sortoperator
itemgetterr   rJ   s    rE   rj   z#_OverlappingCpuLoader.start_loading   sJ    < 	F
H/22333rG   c              #      K   |                                   | j        s7|                                 }|                                  |E d {V  | j        7|                                 E d {V  d S r@   )rj   r   r   r   r   )rK   r   s     rE   rl   z_OverlappingCpuLoader.values   s      * 	kkmmGLLNNN * 	
 <<>>!!!!!!!!!rG   )Nr   rm   )rM   rN   rO   r   r   rp   r   rS   ru   propertyboolr   listro   r   rn   r   r   r   r   rg   rj   r   rl   rA   rG   rE   r   r      sk        *.#,	I II &I !	I
 
I I I I. +t + + + X+U5<#789    N N N N0"%f(<"=> " " " "' '& 'T ' ' ' '
   "u|V';!<= " " " " " "rG   r   c            	           e Zd ZdZ	 d	deee                  ddfdZdede	j
        deee         ee         f         fdZdS )
_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                     |dn|| _         dS )a  
        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.
        NrA   )r   )rK   r   s     rE   ru   z!_StorageWriterTransforms.__init__   s     !+ 2""
rG   
write_item
raw_streamc                     G d dt           j                  }t          t          t                    ||                    }| j        D ]}|                    |          }|d t          | j                  D             fS )Nc                   F    e Zd Zdej        fdZdefdZdede	fdZ
d ZdS )	E_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriterrawc                     || _         d S r@   )r   )rK   r   s     rE   ru   zN_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.__init__  s    rG   r\   c                     dS )NTrA   rJ   s    rE   	writeablezO_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.writeable  s    trG   bc                 6    | j                             |          S r@   )r   write)rK   r   s     rE   r   zK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.write  s    x~~a(((rG   c                 `    |                                   | j                                          d S r@   )flushr   rJ   s    rE   closezK_StorageWriterTransforms.transform_save_stream.<locals>.NoCloseWriter.close  s'    

     rG   N)rM   rN   rO   ioIOBaseru   r   r   r   rS   r   r   rA   rG   rE   NoCloseWriterr     s}        BI    4    )v )# ) ) ) )! ! ! ! !rG   r   c                 6    g | ]}|                                 S rA   )get_descriptor)rB   exs     rE   
<listcomp>zB_StorageWriterTransforms.transform_save_stream.<locals>.<listcomp>  s$    WWWrr0022WWWrG   )r   r   r   r   bytesr   transform_toreversed)rK   r   r   r   r   r   s         rE   transform_save_streamz._StorageWriterTransforms.transform_save_stream   s    	! 	! 	! 	! 	!BI 	! 	! 	! BuI}}Z'@'@AA/ 	9 	9B??<88LLWWXdo=V=VWWWXXrG   r@   )rM   rN   rO   rP   r   r   r   ru   r)   r   r   ro   r   r   r   rQ   r   rA   rG   rE   r   r      s          JN	C 	C"8,D#EF	C		C 	C 	C 	CY#Y13Y	r%y$s)#	$Y Y Y Y Y YrG   r   itemc                     d}| j         J | j         j        D ]}||z  }| j         j        j        }|t          j                            |          z  S Nr   )tensor_datarc   
propertiesdtyperp   _utils_element_size)r   rc   sr   s       rE   
_item_sizer     s_    D'''"  	'-E%,,,U3333rG   binsrI   c                 0   | dk    r|gS d |D             }d |D             }d t          |           D             }d t          |           D             }|                    t          d           t          |          D ]#\  }}||| z                               |           $|D ]p}t          t          |          t          j        d                    d	         }||                             |           ||xx         t          |          z  cc<   q|S )
Nr   c                 <    g | ]}|j         t          j        k    |S rA   r   r*   BYTE_IOrB   wis     rE   r   z+_split_by_size_and_type.<locals>.<listcomp>'  s'    FFFbRW0E%E%Er%E%E%ErG   c                 <    g | ]}|j         t          j        k    |S rA   r   r   s     rE   r   z+_split_by_size_and_type.<locals>.<listcomp>(  s'    GGGrbg1F&F&F&F&F&FrG   c                     g | ]}g S rA   rA   rB   r   s     rE   r   z+_split_by_size_and_type.<locals>.<listcomp>*  s    %>%>%>Qb%>%>%>rG   c                     g | ]}d S )r   rA   r   s     rE   r   z+_split_by_size_and_type.<locals>.<listcomp>+  s    +++!A+++rG   T)r   reverser   r   )ranger   r   	enumeraterw   minr   r   )	r   rI   bytes_wtensor_wbucketsbucket_sizesir   r   s	            rE   _split_by_size_and_typer   #  s6   qyywFFEFFFGGGUGGGH%>%>%++%>%>%>G++uT{{+++LMMj$M///7## % %2D  $$$$ , ,)L))x/B1/E/EFFFqIBSZ^^+NrG   
transformsr   datar   storage_keyserialization_formatc           
      J   |                                 }|                     ||          \  }}|j        t          j        k    rDt          |t          j                  sJ |                    |	                                           n`t          |t          j                  sJ |j        t          j        d          k    sJ |t          j        k    rt          j        ||           |                                 |t          j        k    st          |t          j                  r|                                 |z
  }	n)|                                |                                z  }	t'          |          dk    rd n|}
t)          |j        |	t-          |||	|
                    S )Nr|   r   )r=   )indexsize_in_bytesstorage_data)tellr   r   r*   r   
isinstancer   BytesIOr   	getbufferrp   r   r   r5   rZ   saver   r~   r   r   r.   r   r9   )r   r   r   r   r   r   r;   r   r=   r<   info_transform_descriptorss              rE   _write_itemr  ;  s    [[]]F,6,L,LF- -)\( -///$
+++++4>>++,,,,$-----{el5111111#6#AAAJt\***2===bjB B= ' 1 1 3 33
 )**a//5J  !"<	
 
 
	 	 	 	rG   create_stream
file_queueresult_queueplannerr   	use_fsyncthread_countc	                    	 	 |                                 \  }	}
}t          j                                        }t	          t          |d           }|dk    rQt          j                                        s|r1|                                r|dk    rt          |j        |          }nt          |j                  }d |D             }|D ]%}|
                    t          |          |           &|                                 d |D             }g } | |	d          5 }|D ]>}|                    |          }|                    t          |||||
|                     ?i }i }|                                D ]d\  }}|j        sJ |                    t          |||||
|                     |||j        j        <   d|j        j        j        i||j        j        <   e|t,          j        k    rddd	lm} |                     ||t6          t9          j        |          t<          t?          t@                    tB          tD          i
                     |rR	 tG          j$        |%                                           n*# tL          tN          f$ r tG          j(                     Y nw xY w|)                                 d d d            n# 1 swxY w Y   |*                    |           # tV          j,        $ r Y d S w xY w)NTr   r   )r   c                 <    g | ]}|j         t          j        k    |S rA   r   r   s     rE   r   z+_write_files_from_queue.<locals>.<listcomp>  s'    UUUrBG}?T4T4T4T4T4TrG   c                 <    g | ]}|j         t          j        k    |S rA   r   r   s     rE   r   z+_write_files_from_queue.<locals>.<listcomp>  s'    TTTb27m>S3S3Sr3S3S3SrG   wbsaved_offsets)r  )metadata)-
get_nowaitrp   _C_get_privateuse1_backend_namegetattrr   is_availabler   resolve_datarr   rg   r   rj   rw   r  rl   is_cpur   fqnr   chunkoffsetsr5   r[   safetensors.torchr  r   r   jsondumpsr   rQ   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   write_resultsr   r   tensor_dictmetadata_dictr   r  s                            rE   _write_files_from_queuer-  m  s   [X	,2<2G2G2I2I/I{K #(("H"H"J"J '/BD I I !!J++-- " * " /@.L.L.N.N "
 (!++.((;  
 *(  VU[UUUH& ? ?


:j11:>>>>  """TTKTTTGMy$// 46")  J"//
;;D!((#&" &'0 	 	 	 	 ! "*0--//  &FJ!=(((!((#&""&'0 	 	 	 9?K
 0 45')?)E)M;M*"2"677 (+>+JJJ666666LL' 3TZ5N5N /^1D1D *L&  	 	 	  ""1111*,@A " " "					"i4 4 4 4 4 4 4 4 4 4 4 4 4 4 4j ]+++qX	,r ;   s[   DK% D5K&I98K9$J KJ  K7K% KK% 
KK% %K87K8c                   t   e Zd Zeedeeej        f         dede	e
j        ddf         fd                        Zedeeej        f         dedeeej        f         fd            Zedeeej        f         deeej        f         ddfd	            Zedeeej        f         deeej        f         fd
            Zedeeej        f         ddfd            Zeedeeej        f         defd                        Zedeeej        f         defd            Zedeeej        f         ddfd            ZdS )r4   pathmoder\   Nc                     d S r@   rA   )rK   r/  r0  s      rE   r  zFileSystemBase.create_stream  s	     ,/3rG   suffixc                     d S r@   rA   rK   r/  r2  s      rE   concat_pathzFileSystemBase.concat_path  s	     #&#rG   new_pathc                     d S r@   rA   rK   r/  r6  s      rE   renamezFileSystemBase.rename  s	     srG   c                     d S r@   rA   rK   r/  s     rE   	init_pathzFileSystemBase.init_path  s    SVSVrG   c                     d S r@   rA   r;  s     rE   mkdirzFileSystemBase.mkdir  s    <?CrG   checkpoint_idc                     d S r@   rA   clsr?  s     rE   validate_checkpoint_idz%FileSystemBase.validate_checkpoint_id  s    UXUXrG   c                     d S r@   rA   r;  s     rE   existszFileSystemBase.exists  s    =@SrG   c                     d S r@   rA   r;  s     rE   rm_filezFileSystemBase.rm_file  s    >AcrG   )rM   rN   rO   r	   r   r   rQ   r  PathLiker   r   r   r  r5  r9  r<  r>  classmethodr   rC  rE  rG  rA   rG   rE   r4   r4     s       /#r{*+/36/	29dD(	)/ / / ^ ^/ &#r{*+&58&	sBK	 & & & ^& #r{*+7<S"+=M7N	   ^ VeC$45V%R[@P:QVVV ^V?%R[ 01?d??? ^?X5bk9I3JXtXXX ^ [X@5bk!12@t@@@ ^@AE#r{"23AAAA ^AAArG   r4   c            
       *   e Zd Zedeeej        f         dedee	j
        ddf         fd            Zdeeej        f         dedeeej        f         fdZdeeej        f         deeej        f         fdZdeeej        f         d	eeej        f         ddfd
Zdeeej        f         ddfdZedeeej        f         defd            Zdeeej        f         defdZdeeej        f         ddfdZdeeej        f         dee         fdZdS )r3   r/  r0  r\   Nc              #      K   t          |t                    st          |          }|                    |          5 }t          t          j        |          V  d d d            d S # 1 swxY w Y   d S r@   )r   r   openr   r   r   )rK   r/  r0  r   s       rE   r  zFileSystem.create_stream  s       $%% 	::DYYt__ 	*ry&)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A&&A*-A*r2  c                 T    t          |t                    st          |          }||z  S r@   r   r   r4  s      rE   r5  zFileSystem.concat_path  s+     $%% 	::Df}rG   c                 N    t          |t                    st          |          }|S r@   rN  r;  s     rE   r<  zFileSystem.init_path	  s$    $%% 	::DrG   r6  c                     t          |t                    st          |          }|                    t          t          |                     d S r@   )r   r   r9  r   r8  s      rE   r9  zFileSystem.rename  sC     $%% 	::DDx(()))))rG   c                 |    t          |t                    st          |          }|                    dd           d S )NT)parentsexist_ok)r   r   r>  r;  s     rE   r>  zFileSystem.mkdir  s;    $%% 	::D

4$
/////rG   r?  c                    t          |t                    rdS dt          |          v rdS t          |          j        D ]E}|                                r/t          j        t          |          t
          j                  r dS FdS )NTz://F)r   r   rQ   rR  rE  r  accessW_OK)rB  r?  ps      rE   rC  z!FileSystem.validate_checkpoint_id  s    mT** 	4C&&&&5m$$, 	 	Axxzz biA88 tturG   c                 r    t          |t                    st          |          }|                                S r@   )r   r   rE  r;  s     rE   rE  zFileSystem.exists)  s-    $%% 	::D{{}}rG   c                 v    t          |t                    st          |          }|                                 d S r@   )r   r   unlinkr;  s     rE   rG  zFileSystem.rm_file.  s0    $%% 	::DrG   c                     t          |t                    st          |          }d |                                D             S )Nc                 ,    g | ]}t          |          S rA   )rQ   )rB   rW  s     rE   r   z!FileSystem.ls.<locals>.<listcomp>6  s    ///1A///rG   )r   r   iterdirr;  s     rE   lszFileSystem.ls3  s;    $%% 	::D//////rG   )rM   rN   rO   r	   r   rQ   r  rH  r   r   r   r  r5  r<  r9  r>  rI  r   rC  rE  rG  r   r^  rA   rG   rE   r3   r3     s       *#r{*+*36*	29dD(	)* * * ^*#r{*+58	sBK	    eC$45 %R[@P:Q    
*#r{*+*7<S"+=M7N*	* * * *0%R[ 01 0d 0 0 0 0
 5bk9I3J t    [5bk!12 t    
E#r{"23     
0uS"+-. 049 0 0 0 0 0 0rG   r3   c                   ^    e Zd ZdZddddddej        fdeeej	        f         de
de
d	ed
ede
deee                  dedededdf fdZd%deeej	        df         ddfdZde
ddfdZdedefdZdee         dee         fdZdededeee                  fdZdedej        deee                  fdZdedeee                  ddfd Zdee          fd!Z!e"deeej	        f         fd"            Z#e"deeej	        f         fd#            Z$e%deeej	        f         de
fd$            Z& xZ'S )&_FileSystemWritera  
    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   逖 Nr/  single_file_per_rank
sync_filesr	  per_thread_copy_ahead	overwrite_extensionsr   argskwargsr\   c	                 N   t                                                       t                      | _        | j                            |          | _        || _        || _        || _        || _	        t                      | _        || _        t          |          | _        || _        dS )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.
        N)superru   r3   fsr<  r/  rc  rd  r	  re  r`   save_idrf  r   r   r   )rK   r/  rc  rd  r	  re  rf  rg  r   rh  ri  	__class__s              rE   ru   z_FileSystemWriter.__init__G  s    6 	,,G%%d++	$8!$(%:"%''"2;??$8!!!rG   r?  c                 n    |r| j                             |          | _        t                      | _        d S r@   )rl  r<  r/  r`   rm  rK   r?  s     rE   resetz_FileSystemWriter.resetn  s2     	9))-88DI%''rG   is_coordinatorc                     d S r@   rA   )rK   rr  s     rE   set_up_storage_writerz'_FileSystemWriter.set_up_storage_writers  ry   rG   planc                    | j                             | j                   | j                             | j                  rE| j        r&t          j        d| j         d| j        d           nt          d| j        d          |S )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=.)	rl  r>  r/  rE  metadata_pathrf  warningswarnr   rK   ru  s     rE   prepare_local_planz$_FileSystemWriter.prepare_local_planv  s    di   7>>$,-- 	X~ Xk$:L k kbfbp k k k    ##VDN#V#V#VWWWrG   plansc                 8    d t          |          D             }|S )Nc           
      b    g | ],\  }}t          j        |t          d | d                    -S )__r   r   )dataclassesreplacerU   )rB   r   ru  s      rE   r   z9_FileSystemWriter.prepare_global_plan.<locals>.<listcomp>  sL     
 
 
4 >)q)))3L3LMMM
 
 
rG   )r   )rK   r}  	new_planss      rE   prepare_global_planz%_FileSystemWriter.prepare_global_plan  s0    
 
$U++
 
 
	 rG   r  c                   	
 |j         
d		
fd}t          j                    }| j        r`t	          | j        |j                  D ]D} |            }| j                            | j	        |          }|
                    |||f           EnM|j        D ]E} |            }| j                            | j	        |          }|
                    |||gf           F|                     ||          S )Nr   c                  6    j           t           } dz  | S r   )rV   DEFAULT_SUFFIX)r%  
file_countstorage_plans    rE   gen_filez._FileSystemWriter.write_data.<locals>.gen_file  s*    '.L
LNLLI!OJrG   )r   r#  Queuerc  r   r	  rI   rl  r5  r/  r"  _write_data)rK   ru  r  r  r  bucketr%  r/  r   r  r  s            @@rE   
write_dataz_FileSystemWriter.write_data  s   
 (,'8
	 	 	 	 	 	 #(+--
$ 		:1$2CTZPP : :$HJJ	w**49i@@i89999:
 
 : :$HJJ	w**49i@@i$89999444rG   r  c                    t          j                    }g }t          d| j                  D ]r}t	          j        t          | j        j        |||| j	        | j
        | j        | j        | j        f	          }|                                 |                    |           st          | j        j        |||| j	        | j
        | j        | j        | j        	  	         |D ]}|                                 g }	 	 ||                                z  }# t           j        $ r( t%                      }|                    |           |cY S w xY w)Nr   )targetrh  )	r  r  r  r  r   r   r  r	  r   )r#  r  r   r	  	threadingThreadr-  rl  r  r   re  rd  r   startrw   joinr  r$  r0   
set_result)	rK   r  r  r  threadsr   tresfuts	            rE   r  z_FileSystemWriter._write_data  so   
 %*KMMq$+,, 	 	A .G) O.O%-
  A GGIIINN1'/!% $ :o*!%!:
	
 
	
 
	
 
	
  	 	AFFHHHH	1|..0001{ 	 	 	-3XXCNN3JJJ	s   5D 4EEr  resultsc                    i }|D ]!}|                     d |D                        "||_        |                                 |_        t          t          | j                            | j        t           d                    }| j        	                    |d          5 }t          j        ||           | j        rR	 t          j        |                                           n*# t           t"          f$ r t          j                     Y nw xY wd d d            n# 1 swxY w Y   | j                            | j                  r| j                            | j                   | j                            || j                   d S )Nc                 (    i | ]}|j         |j        S rA   )r   r   )rB   wrs     rE   rF   z,_FileSystemWriter.finish.<locals>.<dictcomp>  s    KKKRrxKKKrG   z.tmpr  )updater   storage_metar   r   rl  r5  r/  r7   r  pickledumprd  r  r  r  r   r   r!  rE  rx  rG  r9  )rK   r  r  
storage_mdwr_listtmp_pathmetadata_files          rE   finishz_FileSystemWriter.finish  s   
 	M 	MGKK7KKKLLLL * $ 1 1 3 3dg11$)=R=R=RSSTTW""8T22 	mK-000 H]11334444&(<=   GIIIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7>>$,-- 	0GOOD.///x!344444s6   D;&C"!D"$D	DD		DDDc                 8    t          | j        | j                  S )N)r?  rm  )r"   r?  rm  rJ   s    rE   r  z_FileSystemWriter.storage_meta  s    );T\RRRRrG   c                 r    t          t          | j                            | j        t
                              S r@   )r   r   rl  r5  r/  r7   rJ   s    rE   rx  z_FileSystemWriter.metadata_path  s&    D$'--diFFGGGrG   c                     | j         S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        r/  rJ   s    rE   r?  z_FileSystemWriter.checkpoint_id      
 yrG   c                 6    t                               |          S r@   r3   rC  rA  s     rE   rC  z(_FileSystemWriter.validate_checkpoint_id      00???rG   r@   )(rM   rN   rO   rP   r5   rZ   r   rQ   r  rH  r   rS   r   r   r   r   ru   rq  rt  r'   r|  r   r  r(   r0   r.   r  r#  r  r  r    r  r"   r  r   rx  r?  rI  rC  __classcell__rn  s   @rE   r`  r`  9  s          &*%/DH4G4R%9 %9C$%%9 #%9 	%9
 %9  #%9 %9 h'?@A%9 2%9 %9 %9 
%9 %9 %9 %9 %9 %9N( (5bk4)?#@ (D ( ( ( (
D T    x H    h DN    55 5 
[!	"	5 5 5 5800 K0 
[!	"	0 0 0 0d5x 5$tK7H2I 5d 5 5 5 5.Sh{3 S S S S HuS"+%56 H H H XH uS"+%56    X @5bk9I3J @t @ @ @ [@ @ @ @ @rG   r`  c            	       l    e Zd ZdZd
dee         ddfdZdedee	         de
e         de
e         fd	ZdS )_StorageReaderTransformsr   Nextension_registryr\   c                 4    |t                      n|| _        d S r@   )r   r  )rK   r  s     rE   ru   z!_StorageReaderTransforms.__init__
  s%    #5#=CU 	rG   	read_itemr=   r   c                     | j                             |          }|}|D ],}t          |t                    r|                    |          }-|S r@   )r  from_descriptor_listr   r   transform_from)rK   r  r=   r   r   r  r   s          rE   transform_load_streamz._StorageReaderTransforms.transform_load_stream  s_     ,AABWXX
# 	C 	CB"677 C!#!2!2>!B!BrG   r@   )rM   rN   rO   rP   r   r   ru   r&   r   rQ   r   r   r  rA   rG   rE   r  r    s         
 
84E+F 
RV 
 
 
 

  (} uI	
 
E     rG   r  c                       e Zd Z	 ddeeej        f         dee         ddf fdZ	de
dee         fdZddeeej        df         ddfd	Zd
ededed         fdZdefdZdededdfdZd
edefdZdee         dee         fdZedeeej        f         fd            Zedeeej        f         defd            Z xZS )r2   Nr/  _extension_registryr\   c                    t                                                       t                      | _        | j                            |          | _        i | _        t                      | _        t          |          | _
        d S r@   )rk  ru   r3   rl  r<  r/  r   r`   load_idr  r   )rK   r/  r  rn  s      rE   ru   zFileSystemReader.__init__  sf    
 	,,G%%d++	,.%''23FGGrG   sinfoc                 t    t          t          t                   t          ||j        |j                            S r@   )r   r   r   r/   r;   r<   )rK   filer  s      rE   _slice_filezFileSystemReader._slice_file*  s'    BuI0u|U\RRSSSrG   r?  c                 |    i | _         |r| j                            |          | _        t	                      | _        d S r@   )r   rl  r<  r/  r`   r  rp  s     rE   rq  zFileSystemReader.reset-  s:     	9))-88DI%''rG   ru  r  c                    i }|j         D ]D}| j        |j                 }|j        }|                    |g                               |           E|                                 D ]d\  }}| j                            | j        |          }	| j        	                    |	d          5 }
|D ]}| j        |j                 }| 
                    |
|          }| j                            ||j        pd|          }|j        t          j        k    rSt#          j        |                    d                    }|                    d           |                    ||           |                                r|}n<t#          j        |                    d                    }|                    d           t/          t0          t3          j        |dd                    }t7          ||j        |j                  }|                    |                                          }|                                 |                                 k    s<J d|j         d	|                                  d
|                                              |!                    |           |"                    ||           	 d d d            n# 1 swxY w Y   ftG                      }|$                    d            |S )NrbrA   r   r|   T)map_locationweights_onlyzreq z mismatch sizes z vs )%rI   r   storage_indexr:   
setdefaultrw   rl  r5  r/  r  r  r   r  r=   r   r#   r   r   r   readseek
load_bytesseekabler   r   rp   loadr   storage_offsetslengthsresolve_tensorr{   rc   copy_commit_tensorr0   r  )rK   ru  r  per_filer  item_mdr/  r:   reqsr6  r   req
file_slicer  
read_bytesr  r   target_tensorr  s                      rE   	read_datazFileSystemReader.read_data3  s<   .0 	< 	<I$($5i6M$NG(Db))00;;;;#+>>#3#3 -	B -	BM4w**49mDDH&&x66 +B& )B )BC"/0ABG!%!1!1&'!B!BJ%)_%J%J  5;"& &N x<#777%'Z0C0CB0G0G%H%H
"*****3
;;;;)2244 -'5HH (*z.2E2Eb2I2I'J'JH$MM!,,,!%"!J (-2-1  " " "8"C$7" " )0(>(>s(C(C(J(J(L(L,1133v{{}}DDDo3#4oomFXFXFZFZoo`f`k`k`m`moo  EDD &++F333--c=AAAAS)B+B +B +B +B +B +B +B +B +B +B +B +B +B +B +BZ hht
s   $HJ<<K 	K 	c                 >   | j                             | j        d          }| j                             |d          5 }t	          j        |          }d d d            n# 1 swxY w Y   t          |dd           t                      |_        | j	        |j        _	        |S )Nr6   r  r  )
rl  r5  r/  r  r  r  r  r"   r  r  )rK   r/  r  r  s       rE   read_metadatazFileSystemReader.read_metadatao  s    w""49k::W""4.. 	2-{=11H	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 8^T22:$/MMH!(,%s   AA!$A!r  rr  c                 0    |j         | _         | j         J d S r@   r  )rK   r  rr  s      rE   set_up_storage_readerz&FileSystemReader.set_up_storage_readerz  s"    $1 ,,,,,rG   c                     |S r@   rA   r{  s     rE   r|  z#FileSystemReader.prepare_local_plan~  s    rG   r}  c                     |S r@   rA   )rK   r}  s     rE   r  z$FileSystemReader.prepare_global_plan  s    rG   c                     | j         S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        r  rJ   s    rE   r?  zFileSystemReader.checkpoint_id  r  rG   c                 6    t                               |          S r@   r  rA  s     rE   rC  z'FileSystemReader.validate_checkpoint_id  r  rG   r@   )rM   rN   rO   r   rQ   r  rH  r   r   ru   r9   r   r   r  rq  r$   r%   r0   r  r    r  r   r  r|  r   r  r   r?  rI  rC  r  r  s   @rE   r2   r2     s        <@
H 
HC$%
H &&78
H 
	
H 
H 
H 
H 
H 
HT| T5	 T T T T( (5bk4)?#@ (D ( ( ( (9h 9 9 9 9 9 9x	x 	 	 	 	-h - -QU - - - -x H    h DN     uS"+%56    X @5bk9I3J @t @ @ @ [@ @ @ @ @rG   r2   c                        e Zd ZdZdddddddej        fdeeej	        f         de
d	e
d
edede
de
deee                  deddfdZdedef fdZ xZS )r1   ra  Tr   rb  FNr/  rc  rd  r	  re  cache_staged_state_dictrf  rg  r   r\   c
                 x    t                               | ||||||||		  	         t          j        | |           dS )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.
        )r/  rc  rd  r	  re  rf  rg  r   )r  N)r`  ru   r+   )
rK   r/  rc  rd  r	  re  r  rf  rg  r   s
             rE   ru   zFileSystemWriter.__init__  sh    : 	""!5!%"7#!5 	# 
	
 
	
 
	
 	$$;	
 	
 	
 	
 	
 	
rG   
state_dictc                 T    d| _         t                                          |          S )zOverride of AsyncStager.stager   )re  rk  stage)rK   r  rn  s     rE   r  zFileSystemWriter.stage  s#     &'"ww}}Z(((rG   )rM   rN   rO   rP   r5   rZ   r   rQ   r  rH  r   rS   r   r   r   ru   r!   r  r  r  s   @rE   r1   r1     s          &*%/(-DH4G4R+
 +
C$%+
 #+
 	+

 +
  #+
 "&+
 +
 h'?@A+
 2+
 
+
 +
 +
 +
Z) )O ) ) ) ) ) ) ) ) ) )rG   r1   )hr   r  r   r  r   r  r  r#  r  r^   ry  abcr   r   collections.abcr   r   r   r   
contextlibr	   r
   enumr   r   pathlibr   typingr   r   r   r   r   r   typing_extensionsr   rp   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.utilsr/   torch.futuresr0   __all__r7   rQ   rR   r9   rU   r5   r  r`   rb   rr   r   r   rS   r   r   r   r   r   r  r  r   r-  r4   r3   r`  r  r2   r1   rA   rG   rE   <module>r     s            				   				         # # # # # # # # C C C C C C C C C C C C % % % % % % ! ! ! ! ! !       # # # # # #       ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; % $ $ $ $ $        G G G G G G G G B B B B B B                     Y X X X X X X X X X	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 E D D D D D         
 A @ @ @ @ @                c    	I 	I 	I 	I 	I 	I 	I 	I                 $      
         C       }   .W" W" W" W" W"M W" W" W"t0Y 0Y 0Y 0Y 0Y 0Y 0Y 0Yf4Y 43 4 4 4 4# d9o $tIBW    0/(/I/ 
EL(
)/ 	/
 / ./ / / / /dfff +f 	f
 )f f f f .f 
f f f fRB B B B BS B B BD>0 >0 >0 >0 >0 >0 >0 >0BG@ G@ G@ G@ G@ G@ G@ G@T       4p@ p@ p@ p@ p@} p@ p@ p@f@) @) @) @) @)(*= @) @) @) @) @)rG   