§
    Ÿ²Åj1h  ã                   ó–  — 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
mZ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mZmZmZmZmZ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(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= g d¢Z>dZ?e@eAd<   e G d„ d¦  «        ¦   «         ZBe G d„ d¦  «        ¦   «         ZCdZDde@fd„ZE G d„ de¦  «        ZF G d„ deF¦  «        ZG G d„ deF¦  «        ZHd e2deIfd!„ZJd"eId#ee2         deee2                  fd$„ZKd%ejL        d&eejM        ej         f         d'e2d(e@de9f
d)„ZNd*ed+ejO        d,ejO        d-e1d.eId/ePd0eIddfd1„ZQ G d2„ d3e¦  «        ZR G d4„ d5eR¦  «        ZS G d6„ d7e8¦  «        ZT G d8„ d9e7¦  «        ZU G d:„ d;eTe5¦  «        ZVdS )<é    N)ÚABCÚabstractmethod)Úcontextmanager)Ú	dataclass)ÚPath)ÚAnyÚCallableÚcastÚDictÚ	GeneratorÚIOÚIterableÚIteratorÚListÚOptionalÚTupleÚUnion)ÚTensor)Ú_get_available_device_typeÚ_get_device_module)Únarrow_tensor_by_index)ÚMetadataÚMetadataIndexÚSTATE_DICT_TYPEÚStorageMeta)ÚLoadItemTypeÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItemÚWriteItemType)ÚBlockingAsyncStager)ÚStorageReaderÚStorageWriterÚWriteResult)Ú_create_file_view)ÚFuture)ÚFileSystemWriterÚFileSystemReaderÚ
FileSystemÚFileSystemBaseú	.metadataÚ_metadata_fnc                   ó2   — e Zd ZU dZeed<   eed<   eed<   dS )Ú_StorageInfoz#This is the per entry storage info.Úrelative_pathÚoffsetÚlengthN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úint© ó    úXC:\Projects\Historical\venv\Lib\site-packages\torch/distributed/checkpoint/filesystem.pyr1   r1   B   s4   € € € € € € à-Ð-àÐÐÑØ€K€K�KØ€K€K�K€K€Kr=   r1   c                   ó   — e Zd ZU eed<   dS )Ú_StoragePrefixÚprefixN)r5   r6   r7   r9   r:   r<   r=   r>   r@   r@   K   s   € € € € € € à€K€K�K€K€Kr=   r@   z.distcpÚreturnc                  óB   — t          t          j        ¦   «         ¦  «        S ©N)r9   ÚuuidÚuuid4r<   r=   r>   Ú_generate_uuidrG   S   s   € Ý�tŒz‰|Œ|ÑÔÐr=   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ÚobjrB   Nc                 ó   — d S rD   r<   ©ÚselfrJ   rK   s      r>   Úaddz_TensorLoader.addX   ó   € àˆr=   c                 ó   — d S rD   r<   ©rN   s    r>   Ústart_loadingz_TensorLoader.start_loading\   rP   r=   c                 ó   — d S rD   r<   rR   s    r>   Úvaluesz_TensorLoader.values`   rP   r=   ©rB   N)r5   r6   r7   r   r;   ÚobjectrO   rS   r   r   Útorchr   rU   r<   r=   r>   rI   rI   W   sŸ   € € € € € Øð˜ð  &ð ¨Tð ð ð ñ „^ðð ðð ð ñ „^ðð ð˜  u¤|°VÐ';Ô!<Ô=ð ð ð ñ „^ðð ð r=   rI   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_funrB   Nc                 ó"   — || _         g | _        d S rD   )r[   Úitems)rN   r[   s     r>   Ú__init__z_SerialCpuLoader.__init__f   s   € Ø&ˆÔØ/1ˆŒ
ˆ
ˆ
r=   rJ   rK   c                 ó>   — | j                              ||f¦  «         d S rD   )r]   ÚappendrM   s      r>   rO   z_SerialCpuLoader.addj   s"   € ØŒ
×Ò˜4 ˜+Ñ&Ô&Ð&Ð&Ð&r=   c                 ó   — d S rD   r<   rR   s    r>   rS   z_SerialCpuLoader.start_loadingm   ó   € Øˆr=   c              #   óF  K  — | j         D ]–\  }}|                      |¦  «                             ¦   «         }|                     ¦   «         }|                     ¦   «                              ¦   «         |                     ¦   «         k    r|                     ¦   «         }||fV — Œ—d S rD   )r]   r[   ÚdetachÚcpuÚstoragerJ   ÚnumelÚclone©rN   Ú_rK   Útensors       r>   rU   z_SerialCpuLoader.valuesp   s¦   è è € Ø”jð 	ð 	‰FˆAˆsØ×%Ò% cÑ*Ô*×1Ò1Ñ3Ô3ˆFØ—Z’Z‘\”\ˆFØ�~Š~ÑÔ×$Ò$Ñ&Ô&¨&¯,ª,©.¬.Ò8Ð8ØŸš™œ�àØðð ð ð ð ð	ð 	r=   rV   )r5   r6   r7   r	   r^   r;   rW   rO   rS   r   r   rX   r   rU   r<   r=   r>   rZ   rZ   e   sŸ   € € € € € ð2 Hð 2°ð 2ð 2ð 2ð 2ð'˜ð ' &ð '¨Tð 'ð 'ð 'ð 'ðð ð ð ð	˜  u¤|°VÐ';Ô!<Ô=ð 	ð 	ð 	ð 	ð 	ð 	r=   rZ   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 r[   ÚstreamÚinflight_threshholdrB   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)r[   r]   rp   Úin_flight_dataÚcollectionsÚdequeÚcurrent_itemsÚidxÚstartedÚdevice_typer   r   Údevice_moduler
   rX   ÚcudaÚStreamÚcurrent_streamro   Úwait_stream)rN   r[   ro   rp   s       r>   r^   z_OverlappingCpuLoader.__init__}   sö   € ð 'ˆÔØ/1ˆŒ
Ø#6ˆÔ ØˆÔÝ0;Ô0AÑ0CÔ0CˆÔØˆŒØˆŒà"(ÐJˆFÔÐÕ.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ð >Ð=r=   c                 ó<   — | j         t          | j        ¦  «        k    S rD   )rv   Úlenr]   rR   s    r>   Ú_donez_OverlappingCpuLoader._done”   s   € àŒx�3˜tœz™?œ?Ò*Ð*r=   c                 ó~  — g }| j         | j        k    r| j                             ¦   «          | j         | j        k    r�| j                             ¦   «         }| xj         |d                              ¦   «         |d                              ¦   «         z  z  c_         |                     |¦  «         | j         | j        k    °�|S ©Nr   )	rr   rp   ro   Úsynchronizeru   Úpopleftrg   Úelement_sizer`   )rN   ÚdrainedÚvals      r>   Ú_drainz_OverlappingCpuLoader._drain˜   s²   € ØˆØÔ $Ô":Ò:Ð:ØŒK×#Ò#Ñ%Ô%Ð%ØÔ! TÔ%=Ò=Ð=ØÔ$×,Ò,Ñ.Ô.ˆCØÐÔ 3 q¤6§<¢<¡>¤>°C¸´F×4GÒ4GÑ4IÔ4IÑ#IÑIÐÔØ�NŠN˜3ÑÔÐð Ô! TÔ%=Ò=Ð=ð ˆr=   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é   re   T)ÚdeviceÚnon_blocking)ry   ro   r€   rr   rp   r]   rv   r[   rd   r‹   Útyperx   ÚtorX   Úuntyped_storagerJ   rg   Úitemsizerh   ru   r`   r…   ri   s       r>   Ú_refillz_OverlappingCpuLoader._refill¢   sç  € ØÔ×&Ò& t¤{Ñ3Ô3ð 	Nð 	NØ”jñ N TÔ%8¸4Ô;SÒ%SÑ%SØœ D¤HÔ-‘��3Ø�”˜A‘�”Ø×)Ò)¨#Ñ.Ô.×5Ò5Ñ7Ô7�Ø”=Ô%¨Ô)9Ò9Ð9Ø#ŸYšY¨eÀ$˜YÑGÔG�F�FØ”]¥e¤l°5Ñ&9Ô&9Ò9Ð9à×.Ò.Ñ0Ô0×5Ò5Ñ7Ô7Ø!Ÿ<š<™>œ>¨F¬OÑ;ò<ð <ð "(§¢¡¤˜àÔ"×)Ò)àØðñô ð ð Ð#Ô# v§|¢|¡~¤~¸×8KÒ8KÑ8MÔ8MÑ'MÑMÐ#Ô#ð) ”jð N TÔ%8¸4Ô;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   ru   ro   rƒ   rR   s    r>   Ú_finishz_OverlappingCpuLoader._finishº   sB   € ØŒzÐÐˆzÝˆtÔ!Ñ"Ô" QÒ&Ð&ØŒK×#Ò#Ñ%Ô%Ð%ØÔ!Ð!r=   rJ   rK   c                 ój   — | j         rt          d¦  «        ‚| j                             ||f¦  «         d S )Nz&cannot add items after loading started)rw   ÚRuntimeErrorr]   r`   rM   s      r>   rO   z_OverlappingCpuLoader.addÀ   s<   € ØŒ<ð 	IÝÐGÑHÔHÐHØŒ
×Ò˜4 ˜+Ñ&Ô&Ð&Ð&Ð&r=   c                 ó¨   — | j         rd S d| _         | j                             t          j        d¦  «        ¬¦  «         |                      ¦   «          d S )NTr   ©Úkey)rw   r]   ÚsortÚoperatorÚ
itemgetterr‘   rR   s    r>   rS   z#_OverlappingCpuLoader.start_loadingÅ   sJ   € ØŒ<ð 	ØˆFØˆŒØŒ
�Š�HÔ/°Ñ2Ô2ˆÑ3Ô3Ð3Ø�Š‰Œˆˆˆr=   c              #   óâ   K  — |                       ¦   «          | j        s7|                      ¦   «         }|                      ¦   «          |E d {V —† | j        ¯7|                      ¦   «         E d {V —† d S rD   )rS   r€   rˆ   r‘   r“   )rN   r†   s     r>   rU   z_OverlappingCpuLoader.valuesÌ   sˆ   è è € Ø×ÒÑÔÐØ”*ð 	Ø—k’k‘m”mˆGØ�LŠL‰NŒNˆNØÐÐÐÐÐÐÐð ”*ð 	ð
 —<’<‘>”>Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r=   )Nrn   rV   )r5   r6   r7   r	   r   rX   r{   r;   r^   ÚpropertyÚboolr€   r   r   r   rW   rˆ   r‘   r   r“   rO   rS   r   rU   r<   r=   r>   rm   rm   |   sk  € € € € € ð *.Ø#,ð	Ið IàðIð ˜œÔ&ðIð !ð	Ið
 
ðIð Ið Ið Ið. ð+�tð +ð +ð +ñ „Xð+ð˜˜U 5¤<°Ð#7Ô8Ô9ð ð ð ð ðNð Nð Nð Nð0"˜ %¨¬°fÐ(<Ô"=Ô>ð "ð "ð "ð "ð'˜ð ' &ð '¨Tð 'ð 'ð 'ð 'ð
ð ð ð ð"˜  u¤|°VÐ';Ô!<Ô=ð "ð "ð "ð "ð "ð "r=   rm   Úitemc                 ó¦   — d}| j         €J ‚| j         j        D ]}||z  }Œ| j         j        j        }|t          j                             |¦  «        z  S ©NrŠ   )Útensor_datarJ   Ú
propertiesÚdtyperX   Ú_utilsÚ_element_size)rŸ   rJ   Úsr¤   s       r>   Ú
_item_sizer¨   Ö   s_   € Ø€DØÔÐ'Ð'Ð'àÔÔ"ð ð ˆØ�‰	ˆˆàÔÔ'Ô-€EØ•%”,×,Ò,¨UÑ3Ô3Ñ3Ð3r=   Úbinsr]   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 r<   ©r�   r#   ÚBYTE_IO©Ú.0Úwis     r>   ú
<listcomp>z+_split_by_size_and_type.<locals>.<listcomp>å   s'   € ÐFÐFÐF�b R¤WµÔ0EÒ%EÐ%EˆrÐ%EÐ%EÐ%Er=   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r<   r¬   r®   s     r>   r±   z+_split_by_size_and_type.<locals>.<listcomp>æ   s'   € ÐGÐGÐG�r b¤gµÔ1FÒ&FÐ&F�Ð&FÐ&FÐ&Fr=   c                 ó   — g | ]}g ‘ŒS r<   r<   ©r¯   rj   s     r>   r±   z+_split_by_size_and_type.<locals>.<listcomp>è   s   € Ð%>Ð%>Ð%>¨Q bÐ%>Ð%>Ð%>r=   c                 ó   — g | ]}d ‘ŒS )r   r<   r´   s     r>   r±   z+_split_by_size_and_type.<locals>.<listcomp>é   s   € Ð+Ð+Ð+˜!�AÐ+Ð+Ð+r=   T)r˜   Úreverser—   r   )Úranger™   r¨   Ú	enumerater`   Úminrš   r›   )	r©   r]   Úbytes_wÚtensor_wÚbucketsÚbucket_sizesÚir°   rv   s	            r>   Ú_split_by_size_and_typer¿   á   s6  € Øˆq‚y€yØˆwˆàFÐF˜EÐFÑFÔF€GØGÐG˜UÐGÑGÔG€Hà%>Ð%>µ%¸±+´+Ð%>Ñ%>Ô%>€GØ+Ð+�u T™{œ{Ð+Ñ+Ô+€Là‡M‚M•j¨$€MÑ/Ô/Ð/å˜7Ñ#Ô#ð %ð %‰ˆˆ2Ø��D‘Ô× Ò  Ñ$Ô$Ð$Ð$àð ,ð ,ˆå•)˜LÑ)Ô)­xÔ/BÀ1Ñ/EÔ/EÐFÑFÔFÀqÔIˆØ�Œ×Ò˜BÑÔÐØ�SÐÐÔ�Z¨™^œ^Ñ+ÐÐÑÐà€Nr=   ro   ÚdataÚ
write_itemÚstorage_keyc           	      ó2  — |                       ¦   «         }|j        t          j        k    rDt	          |t
          j        ¦  «        sJ ‚|                      |                     ¦   «         ¦  «         nnt	          |t          j
        ¦  «        sJ ‚|j        t          j        d¦  «        k    sJ ‚t          j        |t          t          t                   | ¦  «        ¦  «         |                       ¦   «         |z
  }t!          |j        |t%          |||¦  «        ¬¦  «        S )Nre   )ÚindexÚsize_in_bytesÚstorage_data)Útellr�   r#   r­   Ú
isinstanceÚioÚBytesIOÚwriteÚ	getbufferrX   r   r‹   Úsaver
   r   Úbytesr'   rÄ   r1   )ro   rÀ   rÁ   rÂ   r3   r4   s         r>   Ú_write_itemrÏ   ù   sî   € ð �[Š[‰]Œ]€Fà„�-Ô/Ò/Ð/Ý˜$¥¤
Ñ+Ô+Ð+Ð+Ð+Ø�Š�T—^’^Ñ%Ô%Ñ&Ô&Ð&Ð&å˜$¥¤Ñ-Ô-Ð-Ð-Ð-ØŒ{�eœl¨5Ñ1Ô1Ò1Ð1Ð1Ð1ÝŒ
�4��b¥œi¨Ñ0Ô0Ñ1Ô1Ð1Ø�[Š[‰]Œ]˜VÑ#€FåØÔØÝ! +¨v°vÑ>Ô>ðñ ô ð r=   Úcreate_streamÚ
file_queueÚresult_queueÚplannerrp   Ú	use_fsyncÚthread_countc           
      ój  — 	 	 |                      ¦   «         \  }}}	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          ||||¦  «        ¦  «         Œ=|                     ¦   «         D ]3\  }}|j        sJ ‚|                     t          ||||¦  «        ¦  «         Œ4|rK	 t#          j        |                     ¦   «         ¦  «         n## t(          $ r t#          j        ¦   «          Y nw xY wd d d ¦  «         n# 1 swxY w Y   |                     |¦  «         �Œ# t.          j        $ r Y d S w xY w)NTrŠ   r   )rp   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r<   r¬   r®   s     r>   r±   z+_write_files_from_queue.<locals>.<listcomp>6  s'   € ÐUÐUÐU˜r°B´G½}Ô?TÒ4TÐ4T˜Ð4TÐ4TÐ4Tr=   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r<   r¬   r®   s     r>   r±   z+_write_files_from_queue.<locals>.<listcomp>;  s'   € ÐTÐTÐT˜b°2´7½mÔ>SÒ3SÐ3S�rÐ3SÐ3SÐ3Sr=   Úwb)Ú
get_nowaitrX   Ú_CÚ_get_privateuse1_backend_nameÚgetattrrz   Úis_availablerm   Úresolve_datarZ   rO   r¨   rS   r`   rÏ   rU   Úis_cpuÚosÚfsyncÚfilenoÚAttributeErrorÚsyncÚputÚqueueÚEmpty)rÐ   rÑ   rÒ   rÓ   rp   rÔ   rÕ   Ú	file_namerÂ   Úwrite_itemsÚcustom_backend_nameÚcustom_device_modÚloaderr»   rÁ   rº   Úwrite_resultsro   rÀ   rk   s                       r>   Ú_write_files_from_queuerï     sæ  € ð8ð5	,Ø2<×2GÒ2GÑ2IÔ2IÑ/ˆI�{ Kõ #(¤(×"HÒ"HÑ"JÔ"JÐÝ '­Ð/BÀDÑ IÔ IÐð  Ò!Ð!å”J×+Ò+Ñ-Ô-ð "ð *ð "ð /@×.LÒ.LÑ.NÔ.Nð "ð
 (¨!Ò+Ð+å.ØÔ(Ø(;ðñ ô ��õ
 *ØÔ(ñô �ð VÐU [ÐUÑUÔUˆHØ&ð ?ð ?�
Ø—
’
�: jÑ1Ô1°:Ñ>Ô>Ð>Ð>Ø× Ò Ñ"Ô"Ð"àTÐT KÐTÑTÔTˆGØˆMà�˜y¨$Ñ/Ô/ð "°6Ø")ð ð �JØ"×/Ò/°
Ñ;Ô;�DØ!×(Ò(Ý# F¨D°*¸kÑJÔJñô ð ð ð +1¯-ª-©/¬/ð ð Ñ&�F˜JØ!œ=Ð(Ð(˜=Ø!×(Ò(Ý# F¨F°JÀÑLÔLñô ð ð ð ð "ð"Ýœ §¢¡¤Ñ1Ô1Ð1Ð1øÝ)ð "ð "ð "Ýœ™	œ	˜	˜	˜	ð"øøøð!"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð$ ×Ò˜]Ñ+Ô+Ð+ñk5	,øõl Œ;ð ð ð Øˆˆðøøøs[   ‚DH ÄB
G=Æ'&GÇG=ÇG.Ç+G=Ç-G.Ç.G=Ç1H Ç=HÈH ÈHÈH ÈH2È1H2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 )r-   ÚpathÚmoderB   Nc                 ó   — d S rD   r<   )rN   rñ   rò   s      r>   rÐ   zFileSystemBase.create_streamV  s	   € ð
 	ˆr=   Úsuffixc                 ó   — d S rD   r<   ©rN   rñ   rô   s      r>   Úconcat_pathzFileSystemBase.concat_path]  ó	   € ð 	ˆr=   Únew_pathc                 ó   — d S rD   r<   ©rN   rñ   rù   s      r>   ÚrenamezFileSystemBase.renamec  rø   r=   c                 ó   — d S rD   r<   ©rN   rñ   s     r>   Ú	init_pathzFileSystemBase.init_pathi  ó   € àˆr=   c                 ó   — d S rD   r<   rþ   s     r>   ÚmkdirzFileSystemBase.mkdirm  r   r=   Úcheckpoint_idc                 ó   — d S rD   r<   ©Úclsr  s     r>   Úvalidate_checkpoint_idz%FileSystemBase.validate_checkpoint_idq  s	   € ð 	ˆr=   c                 ó   — d S rD   r<   rþ   s     r>   ÚexistszFileSystemBase.existsv  r   r=   c                 ó   — d S rD   r<   rþ   s     r>   Úrm_filezFileSystemBase.rm_filez  r   r=   )r5   r6   r7   r   r   r   r9   rá   ÚPathLiker   rÉ   ÚIOBaserÐ   r÷   rü   rÿ   r  Úclassmethodrž   r  r	  r  r<   r=   r>   r-   r-   U  sF  € € € € € ØØðØ˜#˜rœ{Ð*Ô+ðØ36ðà	�2”9˜d DÐ(Ô	)ðð ð ñ „^ñ „^ðð
 ðØ˜#˜rœ{Ð*Ô+ðØ58ðà	ˆs�B”KÐÔ	 ðð ð ñ „^ðð
 ðØ˜#˜rœ{Ð*Ô+ðØ7<¸SÀ"Ä+Ð=MÔ7Nðà	ðð ð ñ „^ðð
 ð˜e C¨¬Ð$4Ô5ð ¸%ÀÀRÄ[Ð@PÔ:Qð ð ð ñ „^ðð ð˜%  R¤[Ð 0Ô1ð °dð ð ð ñ „^ðð Øð°5¸¸b¼kÐ9IÔ3Jð Ètð ð ð ñ „^ñ „[ðð ð˜5  b¤kÐ!1Ô2ð °tð ð ð ñ „^ðð ð˜E # r¤{Ð"2Ô3ð ¸ð ð ð ñ „^ðð ð r=   r-   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S )r,   rñ   rò   rB   Nc              #   óÄ   K  — t          t          |¦  «                             |¦  «        5 }t          t          j        |¦  «        V — d d d ¦  «         d S # 1 swxY w Y   d S rD   )r
   r   ÚopenrÉ   r  )rN   rñ   rò   ro   s       r>   rÐ   zFileSystem.create_stream€  sŸ   è è € õ •$˜ÑÔ×"Ò" 4Ñ(Ô(ð 	*¨FÝ•r”y &Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð 	*ð 	*s   «AÁAÁArô   c                 ó2   — t          t          |¦  «        |z  S rD   )r
   r   rö   s      r>   r÷   zFileSystem.concat_path‡  s   € õ •D˜$ÑÔ &Ñ(Ð(r=   c                 óN   — t          |t          ¦  «        st          |¦  «        }|S rD   )rÈ   r   rþ   s     r>   rÿ   zFileSystem.init_pathŒ  s$   € Ý˜$¥Ñ%Ô%ð 	Ý˜‘:”:ˆDØˆr=   rù   c                 ó|   — t          t          |¦  «                             t          t          |¦  «        ¦  «         d S rD   )r
   r   rü   rû   s      r>   rü   zFileSystem.rename‘  s2   € õ 	�T�4ÑÔ×Ò¥¥T¨8Ñ 4Ô 4Ñ5Ô5Ð5Ð5Ð5r=   c                 óZ   — t          t          |¦  «                             dd¬¦  «         d S )NT)ÚparentsÚexist_ok)r
   r   r  rþ   s     r>   r  zFileSystem.mkdir–  s+   € Ý�T�4ÑÔ×Ò t°dÐÑ;Ô;Ð;Ð;Ð;r=   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   r9   r  r	  rá   ÚaccessÚW_OK)r  r  Úps      r>   r  z!FileSystem.validate_checkpoint_id™  sƒ   € å�m¥TÑ*Ô*ð 	Ø�4à•C˜Ñ&Ô&Ð&Ð&Ø�5å�mÑ$Ô$Ô,ð 	ð 	ˆAØ�xŠx‰zŒzð �bœi­¨A©¬µ´Ñ8Ô8ð Ø�t�tøàˆur=   c                 óP   — t          t          |¦  «                             ¦   «         S rD   )r
   r   r	  rþ   s     r>   r	  zFileSystem.exists§  s   € Ý•D˜$ÑÔ×&Ò&Ñ(Ô(Ð(r=   c                 óT   — t          t          |¦  «                             ¦   «          d S rD   )r
   r   Úunlinkrþ   s     r>   r  zFileSystem.rm_fileª  s$   € Ý�T�4ÑÔ×ÒÑ!Ô!Ð!Ð!Ð!r=   )r5   r6   r7   r   r   r9   rá   r  r   rÉ   r  rÐ   r÷   rÿ   rü   r  r  rž   r  r	  r  r<   r=   r>   r,   r,     sê  € € € € € Øð*Ø˜#˜rœ{Ð*Ô+ð*Ø36ð*à	�2”9˜d DÐ(Ô	)ð*ð *ð *ñ „^ð*ð)Ø˜#˜rœ{Ð*Ô+ð)Ø58ð)à	ˆs�B”KÐÔ	 ð)ð )ð )ð )ð
˜e C¨¬Ð$4Ô5ð ¸%ÀÀRÄ[Ð@PÔ:Qð ð ð ð ð
6Ø˜#˜rœ{Ð*Ô+ð6Ø7<¸SÀ"Ä+Ð=MÔ7Nð6à	ð6ð 6ð 6ð 6ð
<˜%  R¤[Ð 0Ô1ð <°dð <ð <ð <ð <ð ð°5¸¸b¼kÐ9IÔ3Jð Ètð ð ð ñ „[ðð)˜5  b¤kÐ!1Ô2ð )°tð )ð )ð )ð )ð"˜E # r¤{Ð"2Ô3ð "¸ð "ð "ð "ð "ð "ð "r=   r,   c                   óú  ‡ — e Zd ZdZ	 	 	 	 	 d!deeej        f         dedede	d	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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 )#Ú_FileSystemWriterá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 `.metadata` file with the serialized metadata.

    TrŠ   é€–˜ rñ   Úsingle_file_per_rankÚ
sync_filesrÕ   Úper_thread_copy_aheadÚ	overwriteÚargsÚkwargsrB   Nc                 ó  •— t          ¦   «                              ¦   «          t          ¦   «         | _        | j                             |¦  «        | _        || _        || _        || _        || _	        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.

        N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
        N)Úsuperr^   r,   Úfsrÿ   rñ   r#  r$  rÕ   r%  rG   Úsave_idr&  )
rN   rñ   r#  r$  rÕ   r%  r&  r'  r(  Ú	__class__s
            €r>   r^   z_FileSystemWriter.__init__¼  st   ø€ õ0 	‰Œ×ÒÑÔÐÝ‘,”,ˆŒØ”G×%Ò% dÑ+Ô+ˆŒ	Ø$8ˆÔ!Ø$ˆŒØ(ˆÔØ%:ˆÔ"Ý%Ñ'Ô'ˆŒØ"ˆŒˆˆr=   r  c                 ón   — |r| j                              |¦  «        | _        t          ¦   «         | _        d S rD   )r+  rÿ   rñ   rG   r,  ©rN   r  s     r>   Úresetz_FileSystemWriter.resetÞ  s2   € Øð 	9Øœ×)Ò)¨-Ñ8Ô8ˆDŒIÝ%Ñ'Ô'ˆŒˆˆr=   Úis_coordinatorc                 ó   — d S rD   r<   )rN   r1  s     r>   Úset_up_storage_writerz'_FileSystemWriter.set_up_storage_writerã  rb   r=   Ú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=ú.)	r+  r  rñ   r	  Úmetadata_pathr&  ÚwarningsÚwarnr•   ©rN   r4  s     r>   Úprepare_local_planz$_FileSystemWriter.prepare_local_planæ  s¨   € ØŒ�Š�d”iÑ Ô Ð ØŒ7�>Š>˜$Ô,Ñ-Ô-ð 	XØŒ~ð XÝ”ðk¸$Ô:Lð kð kÐbfÔbpð kð kð kñô ð ð õ #Ð#VÀDÄNÐ#VÐ#VÐ#VÑWÔWÐWàˆr=   Úplansc                 ó8   — d„ t          |¦  «        D ¦   «         }|S )Nc           
      ób   — g | ],\  }}t          j        |t          d |› d�¦  «        ¬¦  «        ‘Œ-S )Ú__rj   ©rÆ   )ÚdataclassesÚreplacer@   )r¯   r¾   r4  s      r>   r±   z9_FileSystemWriter.prepare_global_plan.<locals>.<listcomp>õ  sL   € ð 
ð 
ð 
á��4õ Ô µ>À)ÀqÀ)À)À)Ñ3LÔ3LÐMÑMÔMð
ð 
ð 
r=   )r¸   )rN   r<  Ú	new_planss      r>   Úprepare_global_planz%_FileSystemWriter.prepare_global_planô  s0   € ð
ð 
å$ UÑ+Ô+ð
ñ 
ô 
ˆ	ð Ðr=   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¦  «         ŒFt          j        ¦   «         }	g }
t          d| j        ¦  «        D ]f}t          j        t          | j        j        ||	|| j        | j        | j        f¬¦  «        }|                     ¦   «          |
                     |¦  «         Œgt          | j        j        ||	|| j        | j        | j        ¬¦  «         |
D ]}|                     ¦   «          Œg }	 	 ||	                     ¦   «         z  }Œ# t          j        $ r( t/          ¦   «         }|                     |¦  «         |cY S w xY w)Nr   c                  ó6   •— ‰j         › ‰› t          › �} ‰dz  Š| S r¡   )rA   ÚDEFAULT_SUFFIX)ré   Ú
file_countÚstorage_plans    €€r>   Úgen_filez._FileSystemWriter.write_data.<locals>.gen_file  s*   ø€ à'Ô.ÐL°
ÐL½NÐLÐLˆIØ˜!‰OˆJØÐr=   rŠ   )Útargetr'  )rÐ   rÑ   rÒ   rÓ   rp   rÔ   rÕ   )rÆ   rç   ÚQueuer#  r¿   rÕ   r]   r+  r÷   rñ   ræ   r·   Ú	threadingÚThreadrï   rÐ   r%  r$  Ústartr`   ÚjoinrÚ   rè   r)   Ú
set_result)rN   r4  rÓ   rJ  rÑ   Úbucketré   rñ   rŸ   rÒ   Úthreadsrj   ÚtÚresÚfutrH  rI  s                  @@r>   Ú
write_dataz_FileSystemWriter.write_dataû  sV  øø€ ð
 (,Ô'8ˆØˆ
ð	ð 	ð 	ð 	ð 	ð 	õ #(¤+¡-¤-ˆ
ØÔ$ð 		:Ý1°$Ô2CÀTÄZÑPÔPð :ð :�Ø$˜H™JœJ�	Ø”w×*Ò*¨4¬9°iÑ@Ô@�Ø—’  i°Ð8Ñ9Ô9Ð9Ð9ð:ð
 œ
ð :ð :�Ø$˜H™JœJ�	Ø”w×*Ò*¨4¬9°iÑ@Ô@�Ø—’  i°$°Ð8Ñ9Ô9Ð9Ð9å$)¤K¡M¤MˆàˆÝ�q˜$Ô+Ñ,Ô,ð 	ð 	ˆAÝÔ Ý.à”GÔ)ØØ ØØÔ.Ø”OØÔ%ððñ ô ˆAð �GŠG‰IŒIˆIØ�NŠN˜1ÑÔÐÐåØœ'Ô/Ø!Ø%ØØ $Ô :Ø”oØÔ*ð	
ñ 	
ô 	
ð 	
ð ð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHàˆð	ð1Ø�|×.Ò.Ñ0Ô0Ñ0�ð1øåŒ{ð 	ð 	ð 	Ý-3©X¬XˆCØ�NŠN˜3ÑÔÐØˆJˆJˆJð	øøøs   Æ5G Ç4HÈHÚmetadataÚresultsc                 óø  — i }|D ]!}|                      d„ |D ¦   «         ¦  «         Œ"||_        |                      ¦   «         |_        t          t          | j                             | j        t          › d�¦  «        ¦  «        }| j         	                    |d¦  «        5 }t          j        ||¦  «         | j        rK	 t          j        |                     ¦   «         ¦  «         n## t           $ 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 r<   )rÄ   rÆ   )r¯   Úwrs     r>   ú
<dictcomp>z,_FileSystemWriter.finish.<locals>.<dictcomp>A  s   € ÐKÐKÐK¸R˜rœx¨¬ÐKÐKÐKr=   z.tmprÙ   )ÚupdaterÆ   Ústorage_metar
   r   r+  r÷   rñ   r/   rÐ   ÚpickleÚdumpr$  rá   râ   rã   rä   rå   r	  r7  r  rü   )rN   rX  rY  Ú
storage_mdÚwr_listÚtmp_pathÚmetadata_files          r>   Úfinishz_FileSystemWriter.finish>  s«  € Øˆ
Øð 	Mð 	MˆGØ×ÒÐKÐKÀ7ÐKÑKÔKÑLÔLÐLÐLØ *ˆÔà $× 1Ò 1Ñ 3Ô 3ˆÔå�˜dœg×1Ò1°$´)ÅÐ=RÐ=RÐ=RÑSÔSÑTÔTˆØŒW×"Ò" 8¨TÑ2Ô2ð 	°mÝŒK˜ -Ñ0Ô0Ð0ØŒð ðÝ”H˜]×1Ò1Ñ3Ô3Ñ4Ô4Ð4Ð4øÝ%ð ð ð Ý”G‘I”I�I�I�Iðøøøð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Œ7�>Š>˜$Ô,Ñ-Ô-ð 	0ØŒG�OŠO˜DÔ.Ñ/Ô/Ð/àŒ�Š�x Ô!3Ñ4Ô4Ð4Ð4Ð4s6   ÂDÂ;&C"Ã!DÃ"DÃ?DÄDÄDÄDÄDc                 ó8   — t          | j        | j        ¬¦  «        S )N)r  r,  )r   r  r,  rR   s    r>   r_  z_FileSystemWriter.storage_metaU  s   € Ý¨Ô);ÀTÄ\ÐRÑRÔRÐRr=   c                 ór   — t          t          | j                             | j        t
          ¦  «        ¦  «        S rD   )r
   r   r+  r÷   rñ   r/   rR   s    r>   r7  z_FileSystemWriter.metadata_pathX  s&   € å•D˜$œ'×-Ò-¨d¬i½ÑFÔFÑGÔGÐGr=   c                 ó   — | j         S )zT
        return the checkpoint_id that will be used to save the checkpoint.
        ©rñ   rR   s    r>   r  z_FileSystemWriter.checkpoint_id\  ó   € ð
 ŒyÐr=   c                 ó6   — t                                |¦  «        S rD   ©r,   r  r  s     r>   r  z(_FileSystemWriter.validate_checkpoint_idc  ó   € å×0Ò0°Ñ?Ô?Ð?r=   )TTrŠ   r"  TrD   )!r5   r6   r7   r8   r   r9   rá   r  rž   r;   r   r^   r0  r3  r    r;  r   rD  r!   r)   r'   rW  r   rf  r   r   r_  r�   r7  r  r  r  Ú__classcell__©r-  s   @r>   r   r   ®  s®  ø€ € € € € ðð ð  &*ØØØ%/Øð #ð  #à�C˜œÐ$Ô%ð #ð #ð #ð ð	 #ð
 ð #ð  #ð #ð ð #ð ð #ð ð #ð 
ð #ð  #ð  #ð  #ð  #ð  #ðD(ð ( 5¨¨b¬k¸4Ð)?Ô#@ð (ÈDð (ð (ð (ð (ð
°Dð ¸Tð ð ð ð ð xð °Hð ð ð ð ð¨¨h¬ð ¸DÀ¼Nð ð ð ð ðAàðAð ðAð 
��[Ô!Ô	"ð	Að Að Að AðF5˜xð 5°$°t¸KÔ7HÔ2Ið 5Èdð 5ð 5ð 5ð 5ð.S˜h {Ô3ð Sð Sð Sð Sð ðH˜u S¨"¬+Ð%5Ô6ð Hð Hð Hñ „XðHð ð˜u S¨"¬+Ð%5Ô6ð ð ð ñ „Xðð ð@°5¸¸b¼kÐ9IÔ3Jð @Ètð @ð @ð @ñ „[ð@ð @ð @ð @ð @r=   r   c                   ór  ‡ — e Zd Zdeeej        f         ddfˆ fd„Zdede	j
        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 )r+   rñ   rB   Nc                 óà   •— t          ¦   «                              ¦   «          t          ¦   «         | _        | j                             |¦  «        | _        i | _        t          ¦   «         | _        d S rD   )	r*  r^   r,   r+  rÿ   rñ   rÆ   rG   Úload_id)rN   rñ   r-  s     €r>   r^   zFileSystemReader.__init__i  sT   ø€ Ý‰Œ×ÒÑÔÐÝ‘,”,ˆŒØ”G×%Ò% dÑ+Ô+ˆŒ	Ø?AˆÔÝ%Ñ'Ô'ˆŒˆˆr=   Úsinfoc                 ó8   — t          ||j        |j        ¦  «        S rD   )r(   r3   r4   )rN   Úfilert  s      r>   Ú_slice_filezFileSystemReader._slice_filep  s   € Ý   u¤|°U´\ÑBÔBÐBr=   r  c                 ó|   — i | _         |r| j                             |¦  «        | _        t	          ¦   «         | _        d S rD   )rÆ   r+  rÿ   rñ   rG   rs  r/  s     r>   r0  zFileSystemReader.resets  s:   € ØˆÔØð 	9Øœ×)Ò)¨-Ñ8Ô8ˆDŒIÝ%Ñ'Ô'ˆŒˆˆr=   r4  rÓ   c                 ó6  — i }|j         D ]D}| j        |j                 }|j        }|                     |g ¦  «                             |¦  «         ŒE|                      ¦   «         D �]\  }}| j                             | j        |¦  «        }	| j         	                    |	d¦  «        5 }
|D �]³}| j        |j                 }|  
                    |
|¦  «        }|j        t          j        k    rXt          j        |                     |j        ¦  «        ¦  «        }|                     d¦  «         |                     ||¦  «         Œ˜t)          t*          t-          j        t)          t0          t2                   |¦  «        dd¬¦  «        ¦  «        }t5          ||j        |j        ¦  «        }|                     |¦  «                             ¦   «         }|                     ¦   «         |                     ¦   «         k    s<J d|j        › d|                     ¦   «         › d|                     ¦   «         › �¦   «         ‚|                      |¦  «         | !                    ||¦  «         �Œµ	 d d d ¦  «         n# 1 swxY w Y   �ŒtE          ¦   «         }| #                    d ¦  «         |S )	NÚrbr   re   T)Úmap_locationÚweights_onlyzreq z mismatch sizes z vs )$r]   rÆ   Ústorage_indexr2   Ú
setdefaultr`   r+  r÷   rñ   rÐ   rw  r�   r   r­   rÉ   rÊ   Úreadr4   ÚseekÚ
load_bytesr
   r   rX   Úloadr   rÎ   r   Ústorage_offsetsÚlengthsÚresolve_tensorrd   rJ   Úcopy_Úcommit_tensorr)   rQ  )rN   r4  rÓ   Úper_fileÚ	read_itemÚitem_mdrñ   r2   Úreqsrù   ro   ÚreqÚ
file_sliceÚ
read_bytesrk   Útarget_tensorrV  s                    r>   Ú	read_datazFileSystemReader.read_datay  sÐ  € à.0ˆØœð 	<ð 	<ˆIØÔ'¨	Ô(?Ô@ˆGØÔ(ˆDØ×Ò  bÑ)Ô)×0Ò0°Ñ;Ô;Ð;Ð;à#+§>¢>Ñ#3Ô#3ð 	Bñ 	BÑˆM˜4Ø”w×*Ò*¨4¬9°mÑDÔDˆHØ”×&Ò& x°Ñ6Ô6ð B¸&àð Bñ B�CØ"Ô/°Ô0AÔB�GØ!%×!1Ò!1°&¸'Ñ!BÔ!B�JØ”x¥<Ô#7Ò7Ð7Ý%'¤Z°
·²ÀÄÑ0OÔ0OÑ%PÔ%P˜
Ø"Ÿš¨Ñ*Ô*Ð*Ø×*Ò*¨3°
Ñ;Ô;Ð;Ð;å!%Ý"Ý!œJÝ $¥R­¤Y°
Ñ ;Ô ;Ø-2Ø-1ðñ ô ñ"ô "˜õ "8Ø" CÔ$7¸¼ñ"ô "˜ð )0×(>Ò(>¸sÑ(CÔ(C×(JÒ(JÑ(LÔ(L˜ð *×.Ò.Ñ0Ô0°F·K²K±M´MÒAÐAÐAØn #Ô"3ÐnÐnÀ]×EWÒEWÑEYÔEYÐnÐnÐ_e×_jÒ_jÑ_lÔ_lÐnÐnñ BÔAÐAà%×+Ò+¨FÑ3Ô3Ð3Ø×-Ò-¨c°=ÑAÔAÐAÑAð3BðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bùõ: ‘h”hˆØ�Š�tÑÔÐØˆ
s   Â$F8I)É)I-	É0I-	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 )Nr.   rz  r_  )
r+  r÷   rñ   rÐ   r`  r‚  rÝ   r   r_  rs  )rN   rñ   re  rX  s       r>   Úread_metadatazFileSystemReader.read_metadata¥  sÆ   € ØŒw×"Ò" 4¤9¨kÑ:Ô:ˆØŒW×"Ò" 4¨Ñ.Ô.ð 	2°-Ý”{ =Ñ1Ô1ˆHð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2õ �8˜^¨TÑ2Ô2Ð:Ý$/¡M¤MˆHÔ!Ø(,¬ˆÔÔ%àˆs   ¼AÁA!Á$A!rX  r1  c                 ó0   — |j         | _         | j         €J ‚d S rD   r@  )rN   rX  r1  s      r>   Úset_up_storage_readerz&FileSystemReader.set_up_storage_reader°  s"   € Ø$Ô1ˆÔØÔ Ð,Ð,Ð,Ð,Ð,r=   c                 ó   — |S rD   r<   r:  s     r>   r;  z#FileSystemReader.prepare_local_plan´  s   € Øˆr=   r<  c                 ó   — |S rD   r<   )rN   r<  s     r>   rD  z$FileSystemReader.prepare_global_plan·  s   € Øˆr=   c                 ó   — | j         S )zT
        return the checkpoint_id that will be used to load the checkpoint.
        rj  rR   s    r>   r  zFileSystemReader.checkpoint_idº  rk  r=   c                 ó6   — t                                |¦  «        S rD   rm  r  s     r>   r  z'FileSystemReader.validate_checkpoint_idÁ  rn  r=   rD   )r5   r6   r7   r   r9   rá   r  r^   r1   rÉ   r  rw  r0  r   r   r)   r�  r   r’  rž   r”  r;  r   rD  r�   r  r  r  ro  rp  s   @r>   r+   r+   h  sì  ø€ € € € € ð(˜U 3¨¬Ð#3Ô4ð (¸ð (ð (ð (ð (ð (ð (ðC |ð C¸¼	ð Cð Cð Cð Cð(ð ( 5¨¨b¬k¸4Ð)?Ô#@ð (ÈDð (ð (ð (ð (ð)˜hð )°ð )ÀÈÄð )ð )ð )ð )ðX	˜xð 	ð 	ð 	ð 	ð-¨hð -Èð -ÐQUð -ð -ð -ð -ð xð °Hð ð ð ð ð¨¨h¬ð ¸DÀ¼Nð ð ð ð ð ð˜u S¨"¬+Ð%5Ô6ð ð ð ñ „Xðð ð@°5¸¸b¼kÐ9IÔ3Jð @Ètð @ð @ð @ñ „[ð@ð @ð @ð @ð @r=   r+   c                   ó|   ‡ — e Zd ZdZ	 	 	 	 	 	 ddeeej        f         deded	e	d
e	dededdfd„Z
dedefˆ fd„Zˆ xZS )r*   r!  TrŠ   r"  Frñ   r#  r$  rÕ   r%  Úcache_staged_state_dictr&  rB   Nc           	      ót   — t                                | ||||||¬¦  «         t          j        | |¬¦  «         dS )aM  
        Initialize the writer pointing to `path`.

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

        N. B. If sync_files is disabled, there's no guarantee that the checkpoint will be consistent in the case of a failure.
        )rñ   r#  r$  rÕ   r%  r&  )rš  N)r   r^   r$   )rN   rñ   r#  r$  rÕ   r%  rš  r&  s           r>   r^   zFileSystemWriter.__init__Ô  sb   € õ4 	×"Ò"ØØØ!5Ø!Ø%Ø"7Øð 	#ñ 	
ô 	
ð 	
õ 	Ô$ØØ$;ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r=   Ú
state_dictc                 óT   •— d| _         t          ¦   «                              |¦  «        S )zOverride of AsyncStager.stager   )r%  r*  Ústage)rN   rœ  r-  s     €r>   rž  zFileSystemWriter.stageü  s#   ø€ ð &'ˆÔ"Ý‰wŒw�}Š}˜ZÑ(Ô(Ð(r=   )TTrŠ   r"  FT)r5   r6   r7   r8   r   r9   rá   r  rž   r;   r^   r   rž  ro  rp  s   @r>   r*   r*   Æ  sÝ   ø€ € € € € ðð ð  &*ØØØ%/Ø(-Øð&
ð &
à�C˜œÐ$Ô%ð&
ð #ð&
ð ð	&
ð
 ð&
ð  #ð&
ð "&ð&
ð ð&
ð 
ð&
ð &
ð &
ð &
ðP) ð )°Oð )ð )ð )ð )ð )ð )ð )ð )ð )ð )r=   r*   )Wrs   rA  rÉ   rš   rá   r`  rç   rM  rE   r8  Úabcr   r   Ú
contextlibr   r   Úpathlibr   Útypingr   r	   r
   r   r   r   r   r   r   r   r   r   rX   r   Útorch._utilsr   r   Útorch.distributed._shard._utilsr   Ú%torch.distributed.checkpoint.metadatar   r   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   r   r    r!   r"   r#   Ú$torch.distributed.checkpoint.stagingr$   Ú$torch.distributed.checkpoint.storager%   r&   r'   Ú"torch.distributed.checkpoint.utilsr(   Útorch.futuresr)   Ú__all__r/   r9   r:   r1   r@   rG  rG   rI   rZ   rm   r;   r¨   r¿   r  rÊ   rÏ   rL  rž   rï   r-   r,   r   r+   r*   r<   r=   r>   ú<module>r¬     sè  ðà Ð Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð EÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @Ø  Ð  Ð  Ð  Ð  Ð  ð SÐ
RÐ
R€à€ˆcÐ Ð Ñ ð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð €ð˜ð ð ð ð ðð ð ð ð �Cñ ô ð ðð ð ð ð �}ñ ô ð ð.W"ð W"ð W"ð W"ð W"˜Mñ W"ô W"ð W"ðt4�Yð 4 3ð 4ð 4ð 4ð 4ð #ð ¨d°9¬oð À$ÀtÈIÄÔBWð ð ð ð ð0ØŒIðà
�”
˜EœLÐ(Ô
)ðð ðð ð	ð
 ðð ð ð ð0AØðAà”ðAð ”+ðAð ð	Að
 ðAð ðAð ðAð 
ðAð Að Að AðH'ð 'ð 'ð 'ð '�Sñ 'ô 'ð 'ðT,"ð ,"ð ,"ð ,"ð ,"�ñ ,"ô ,"ð ,"ð^w@ð w@ð w@ð w@ð w@˜ñ w@ô w@ð w@ðt[@ð [@ð [@ð [@ð [@�}ñ [@ô [@ð [@ð|;)ð ;)ð ;)ð ;)ð ;)Ð(Ð*=ñ ;)ô ;)ð ;)ð ;)ð ;)r=   