+
    –°³jí)  ã            	       óô  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHtHtHtHtHt ^ R	IHtHtHt ^ R
IHt ^ RI H!t! ^ RI"H#t# ^ RI$H%t% ^ RI&H't' . R)Ot( ! R R]%4      t) ! R R]4      t*R R lt+R R lt,]-R8X  EdÕ    ! R R]4      t.] P^                  ! 4       t0]0Pc                  R]2R]. U u. uF  q Pf                  NK  	  up ].Ph                  R7       ]0Pc                  R]2RR7       ]0Pc                  R ]2R!R7       ]0Pk                  4       t6]7! R"]6Pp                   R#]6Pr                   R$]6Pt                   R%24       R&]6Pp                   R'2t;]6Pt                  ].Ph                  Pf                  8X  dU   ]Px                  P{                  ]6Pp                  4      '       d    ],! ]6Pp                  ]6Pr                  4       R# ]7! ];4       R# ]6Pt                  ].P|                  Pf                  8X  dU   ]Px                  P                  ]6Pp                  4      '       d    ]+! ]6Pp                  ]6Pr                  4       R# ]7! ];4       R# ]@! R(]6Pt                   24      hR# u up i )*é    N)ÚEnum)Úcast)Únarrow_tensor_by_index)ÚFileSystemReaderÚFileSystemWriter)Úflatten_state_dict)Ú_EmptyStateDictLoadPlannerÚDefaultLoadPlanner)ÚMetadataÚSTATE_DICT_TYPEÚSTORAGE_TYPESÚTensorPropertiesÚTensorStorageMetadata)ÚLoadItemTypeÚLoadPlanÚLoadPlanner)Ú_create_chunk_list)Ú_load_state_dict)Ú_save_state_dict)ÚStorageReader)ÚFutureÚBroadcastingTorchSaveReaderÚDynamicMetaLoadPlannerc                   óÆ   a € ] tR t^'t o RtRV 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
RV 3R lR llt]V 3R lR l4       tRtV tR# )r   a  
StorageReader for reading a Torch Save file. This reader will read the entire checkpoint
on the coordinator rank, and then broadcast and shard each tensor to all ranks.

. N.B. Intended to be used with DynamicMetaLoadPlanner

.. warning::
    Current implementation only supports loading Tensors.

>>> # xdoctest: +SKIP("undefined vars")
>>> sd = {"mode": model}
>>> dcp.load(
>>>    sd,
>>>    storage_reader=BroadcastingTorchSaveReader(),
>>>    planner=DynamicMetaLoadPlanner(),
>>>    checkpoint_id="path_to_model.pt"
>>> )
Nc                ó\   <€ V ^8„  d   QhRS[ S[P                  ,          R,          RS[RR/# )é   Úcheckpoint_idNÚcoordinator_rankÚreturn)ÚstrÚosÚPathLikeÚint)ÚformatÚ__classdict__s   "€Új/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/checkpoint/format_utils.pyÚ__annotate__Ú(BroadcastingTorchSaveReader.__annotate__;   s7   ø€ ÷ 1ñ 1á™RŸ[™[Õ(¨4Õ/ð1ñ ð1ð 
ñ	1ó    c                ó   € Wn         W n        R # ©N)r   r   )Úselfr   r   s   &&&r&   Ú__init__Ú$BroadcastingTorchSaveReader.__init__;   s   € ð
 +ÔØ 0Ör)   c                ó    <€ V ^8„  d   QhRS[ /# )r   r   ©r   )r$   r%   s   "€r&   r'   r(   D   s   ø€ ÷ 0ñ 0™xñ 0r)   c                ó   € \        / R7      # )zGExtends the default StorageReader to support building the metadata file©Ústate_dict_metadatar0   )r,   s   &r&   Úread_metadataÚ)BroadcastingTorchSaveReader.read_metadataD   s   € ô ¨BÔ/Ð/r)   c                ó:   <€ V ^8„  d   QhRS[ RS[RS[R,          /# )r   ÚplanÚplannerr   N)r   r   r   )r$   r%   s   "€r&   r'   r(   J   s&   ø€ ÷ 4ñ 4™hð 4±ð 4ÁÈÅñ 4r)   c           
     ó  € \        \        V4      pV P                  '       d]   V P                  f   \	        R4      h\
        P                  ! V P                  RRR7      pVP                  '       d   \        V4      w  r4MRpVP                   EFÓ  pVP                  \        P                  8X  d:   \        RVP                  P                   R\        V 4      P                   R24      hV P                  '       dK   \         P"                  P%                  4       pW5P                  P                  ,          P'                  V4      pM;\
        P(                  ! VP*                  VP                  P                  ,          4      p\         P,                  ! WpP.                  RR	7       \1        WuP2                  VP4                  4      pVP7                  V4      P9                  4       pVP;                  4       VP;                  4       8X  g;   \	        R
VP                   RVP;                  4        RVP;                  4        24      hVP=                  V4       VP?                  WX4       EKÖ  	  \A        4       p	V	PC                  R4       V	# )zÊ
Reads torch save data on the coordinator rank, and broadcast afterwards
this incurrs a communication cost, but avoids having to load
the entire checkpoint on each rank, hopefully preventing OOM issues
Nz-checkpoint_id must be set before reading dataÚcpuF)Úmap_locationÚweights_onlyúNon-tensor value identified at ú. At this time ú only supports loading Tensors.)ÚsrcÚasync_opzreq z mismatch sizes, z vs )"r   r
   Úis_coordinatorr   ÚAssertionErrorÚtorchÚloadr   ÚitemsÚtyper   ÚBYTE_IOÚRuntimeErrorÚstorage_indexÚfqnÚ__name__ÚdistÚdistributed_c10dÚ_get_pg_default_deviceÚtoÚ
empty_likeÚ
state_dictÚ	broadcastr   r   Ústorage_offsetsÚlengthsÚresolve_tensorÚdetachÚsizeÚcopy_Úcommit_tensorr   Ú
set_result)
r,   r7   r8   Útorch_state_dictÚ_ÚreqÚ	pg_deviceÚtensorÚtarget_tensorÚfuts
   &&&       r&   Ú	read_dataÚ%BroadcastingTorchSaveReader.read_dataJ   s  € ô Ô)¨7Ó3ˆð ××ÐØ×!Ñ!Ò)Ü$Ð%TÓUÐUÜ$ŸzšzØ×"Ñ"°ÀUô Ðð ×)×)Ð)Ü&8Ð9IÓ&JÑ#Ð øà#Ðà—:•:ˆCØ�x‰xœ<×/Ñ/Ô/Ü"Ø5°c×6GÑ6G×6KÑ6KÐ5Lð M$Ü$(¨£J×$7Ñ$7Ð#8Ð8WðYóð ð ×"×"Ð"Ü ×1Ñ1×HÑHÓJ�	à)×*;Ñ*;×*?Ñ*?Õ@×CÑCÀIÓN‘ä×)Ò)¨'×*<Ñ*<¸S×=NÑ=N×=RÑ=RÕ*SÓT�ä�NŠN˜6×'<Ñ'<ÀuÕMä+¨F×4GÑ4GÈÏÉÓUˆFØ#×2Ñ2°3Ó7×>Ñ>Ó@ˆMØ ×%Ñ%Ó'¨6¯;©;«=Ô8Ü$Ø˜3×,Ñ,Ð-Ð->Ø$×)Ñ)Ó+Ð,¨D°·±³°ðAóð ð ×Ñ Ô'Ø×!Ñ! #×5ñ3 ô6 “hˆØ�‰�tÔØˆ
r)   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   ÚmetadatarB   r   N)r   Úbool)r$   r%   s   "€r&   r'   r(   �   s#   ø€ ÷ ñ ©hð Éð ÐQUñ r)   c                ó  € W n         V P                   '       dS   \        P                  ! 4       V P                  8X  g/   \	        RV P                   R\        P                  ! 4        24      hV P
                  f   \	        R4      hR# )ú*Implementation of the StorageReader methodz$Coordinator rank mismatch: expected z, got Nz:checkpoint_id must be set before setting up storage reader)rB   rM   Úget_rankr   rC   r   )r,   rf   rB   s   &&&r&   Úset_up_storage_readerÚ1BroadcastingTorchSaveReader.set_up_storage_reader�   s}   € à,ÔØ××ÐÜ—=’=“? d×&;Ñ&;Ô;Ü$Ø:¸4×;PÑ;PÐ:Qð RÜŸ=š=›?Ð+ð-óð ð
 ×ÑÒ%Ü ØLóð ñ &r)   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   r7   r   )r   )r$   r%   s   "€r&   r'   r(   �   s   ø€ ÷ ñ ¡xð ±Hñ r)   c                ó   € V# ©ri   © )r,   r7   s   &&r&   Úprepare_local_planÚ.BroadcastingTorchSaveReader.prepare_local_plan�   s   € àˆr)   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# )r   Úglobal_planr   )Úlistr   )r$   r%   s   "€r&   r'   r(   ”   s#   ø€ ÷ ñ ©t±H­~ð Á$ÁxÅ.ñ r)   c                ó   € V# ro   rp   )r,   rt   s   &&r&   Úprepare_global_planÚ/BroadcastingTorchSaveReader.prepare_global_plan”   s   € àÐr)   c                óV   <€ V ^8„  d   QhRS[ S[P                  ,          R,          RR/# )r   r   Nr   ©r    r!   r"   )r$   r%   s   "€r&   r'   r(   ˜   s)   ø€ ÷ +ñ +¡3©¯©Õ#4°tÕ#;ð +Àtñ +r)   c                ó   € Wn         R# )ri   N)r   )r,   r   s   &&r&   ÚresetÚ!BroadcastingTorchSaveReader.reset˜   s   € à*Ör)   c                óJ   <€ V ^8„  d   QhRS[ S[P                  ,          RS[/# )r   r   r   )r    r!   r"   rg   )r$   r%   s   "€r&   r'   r(   �   s$   ø€ ÷ -ñ -±3¹¿¹Õ3Dð -Éñ -r)   c                ó@   € \         P                  P                  V4      # ro   )r!   ÚpathÚisfile)Úclsr   s   &&r&   Úvalidate_checkpoint_idÚ2BroadcastingTorchSaveReader.validate_checkpoint_idœ   s   € ô �w‰w�~‰~˜mÓ,Ð,r)   )r   r   rB   )Nr   r+   )rL   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r-   r4   rc   rk   rq   rw   r|   Úclassmethodrƒ   Ú__static_attributes__Ú__classdictcell__)r%   s   @r&   r   r   '   se   ø‡ € ñ÷&1ò 1÷0ð 0÷4ð 4÷nð ÷ð ÷ð ÷+ò +ð ÷-ó ö-r)   c                   óF   a a€ ] tR t^¢t oRtRV3R lV 3R llltRtVtV ;t# )r   a`  
Extension of DefaultLoadPlanner, which creates a new Metadata object based on the passed in state dict,
avoiding the need to read metadata from disk. This is useful when reading formats which don't have a
metadata file, like Torch Save files.

. N.B. Intended to be used with BroadcastingTorchSaveReader

.. warning::
    Current implementation only supports loading Tensors.

>>> # xdoctest: +SKIP("undefined vars")
>>> sd = {"mode": model}
>>> dcp.load(
>>>    sd,
>>>    storage_reader=BroadcastingTorchSaveReader(),
>>>    planner=DynamicMetaLoadPlanner(),
>>>    checkpoint_id="path_to_model.pt"
>>> )
c                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# )r   rR   rf   NrB   r   )r   r   rg   )r$   r%   s   "€r&   r'   Ú#DynamicMetaLoadPlanner.__annotate__·   s=   ø€ ÷ Jñ Já#ðJñ ˜T•/ðJñ ð	Jð
 
ñJr)   c           	     óŠ  <€ \         SV `  WV4       / pV P                  P                  4        F€  w  rV\        P
                  ! V4      '       g&   \        RV R\        V 4      P                   R24      h\        \        VP                  R7      VP                  4       \        V4      4      WE&   K‚  	  \        VR7      V n        R# )zdSetups of the planner, extnding default behavior by creating the Metadata object from the state dictr=   r>   r?   )Údtyper2   N)ÚsuperÚset_up_plannerrR   rF   rD   Ú	is_tensorrI   rG   rL   r   r   r�   rX   r   r   rf   )r,   rR   rf   rB   r3   Úkeyr`   Ú	__class__s   &&&&   €r&   r’   Ú%DynamicMetaLoadPlanner.set_up_planner·   s°   ø€ ô 	‰Ñ˜z°^ÔDà8:ÐØŸ?™?×0Ñ0Ö2‰KˆCÜ—?’? 6×*Ò*Ü"Ø5°c°Uð ;$Ü$(¨£J×$7Ñ$7Ð#8Ð8WðYóð ô
 (=Ü  v§|¡|Ô4Ø—‘“Ü" 6Ó*ó(ÐÓ$ñ 3ô !Ð5HÔIˆŽr)   )rf   )NF)	rL   r…   r†   r‡   rˆ   r’   rŠ   r‹   Ú__classcell__)r•   r%   s   @@r&   r   r   ¢   s   ù‡ € ñ÷(J÷ Jõ Jr)   c                ó„   € V ^8„  d   QhR\         \        P                  ,          R\         \        P                  ,          /# )r   Údcp_checkpoint_dirÚtorch_save_pathrz   )r$   s   "r&   r'   r'   Ð   s.   € ÷ $ñ $ÜœbŸk™kÕ)ð$äœ2Ÿ;™;Õ&ñ$r)   c                óv   € / p\        V\        V 4      \        4       RR7       \        P                  ! W!4       R# )aQ  
Given a directory containing a DCP checkpoint, this function will convert it into a
Torch save file.

Args:
    dcp_checkpoint_dir: Directory containing the DCP checkpoint.
    torch_save_path: Filename to store the converted Torch save file.

.. warning::
    To avoid OOM, it's recommended to only run this function on a single rank.
T)Ústorage_readerr8   Úno_distN)r   r   r	   rD   Úsave)r™   rš   Úsds   && r&   Údcp_to_torch_saver    Ð   s4   € ð €BÜØ
Ü'Ð(:Ó;Ü*Ó,Øõ	ô 
‡J‚JˆrÖ#r)   c                ó„   € V ^8„  d   QhR\         \        P                  ,          R\         \        P                  ,          /# )r   rš   r™   rz   )r$   s   "r&   r'   r'   é   s.   € ÷ ñ Üœ2Ÿ;™;Õ&ðäœbŸk™kÕ)ñr)   c                ód   € \         P                  ! V RR7      p\        V\        V4      RR7       R# )a&  
Given the location of a torch save file, converts it into a DCP checkpoint.

Args:
    torch_save_path: Filename of the Torch save file.
    dcp_checkpoint_dir: Directory to store the DCP checkpoint.

.. warning::
    To avoid OOM, it's recommended to only run this function on a single rank.
F)r<   T)Ústorage_writerr�   N)rD   rE   r   r   )rš   r™   rR   s   && r&   Útorch_save_to_dcpr¤   é   s-   € ô —’˜O¸%Ô@€Jô ØÔ#3Ð4FÓ#GÐQU÷r)   Ú__main__c                   ó   € ] tR tRtRtRtRtR# )Ú
FormatModei  Útorch_to_dcpÚdcp_to_torchrp   N)rL   r…   r†   r‡   ÚTORCH_TO_DCPÚDCP_TO_TORCHrŠ   rp   r)   r&   r§   r§     s   † Ø%ˆØ%Œr)   r§   ÚmodezConversion mode)rG   ÚhelpÚchoicesÚdefaultr@   zPath to the source model)rG   r­   ÚdstzPath to the destination modelzConverting checkpoint from z to z using method: 'Ú'zNo checkpoint found at z. Skipping conversion.zUnknown conversion mode: )r    r¤   r   r   )AÚargparser!   Úenumr   Útypingr   rD   Útorch.distributedÚdistributedrM   Útorch.distributed._shard._utilsr   Útorch.distributed.checkpointr   r   Ú)torch.distributed.checkpoint._nested_dictr   Ú,torch.distributed.checkpoint.default_plannerr	   r
   Ú%torch.distributed.checkpoint.metadatar   r   r   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   Ú,torch.distributed.checkpoint.planner_helpersr   Ú.torch.distributed.checkpoint.state_dict_loaderr   Ú-torch.distributed.checkpoint.state_dict_saverr   Ú$torch.distributed.checkpoint.storager   Útorch.futuresr   Ú__all__r   r   r    r¤   rL   r§   ÚArgumentParserÚparserÚadd_argumentr    Úvaluerª   Ú
parse_argsÚargsÚprintr@   r°   r¬   Úcheckpoint_missing_warningr€   r�   r«   ÚisdirÚ
ValueError)Úms   0r&   Ú<module>rÎ      s  ðã Û 	Ý Ý ã Ý  Ý Bß KÝ H÷÷õ ÷ UÑ TÝ KÝ KÝ JÝ >Ý  ò€ôx- -ô x-ôv+JÐ/ô +Jõ\$õ2ð. ˆzÕô&�Tô &ð
 ×$Ò$Ó&€FØ
×ÑØØØÙ",Ó-¡*˜Q—”¡*Ñ-Ø×'Ñ'ð ô ð ×Ñ˜ CÐ.HÐÔIØ
×Ñ˜ CÐ.MÐÔNØ×ÑÓ€Dá	Ø
% d§h¡h Z¨t°D·H±H°:Ð=MÈdÏiÉiÈ[ÐXYÐZôð " $§(¡( Ð+AÐBð ð ‡y�y�J×+Ñ+×1Ñ1Ô1Ø�7‰7�>‰>˜$Ÿ(™(×#Ò#Ù˜dŸh™h¨¯©Ö1áÐ,Ö-Ø	�‰�j×-Ñ-×3Ñ3Ô	3Ø�7‰7�=‰=˜Ÿ™×"Ò"Ù˜dŸh™h¨¯©Ö1áÐ,Ö-áÐ4°T·Y±Y°KÐ@ÓAÐAñI ùò .s   ÃI5