§
    ŠŠtjân  ã            	       óî  — U 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mZ d dlZd dlmZ d dlmZ d dlmZ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! d dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 ddl6m7Z7  ej8        e9¦  «        Z:ej;        e<d<   g d¢Z= G d„ de'¦  «        Z> G d„ de$¦  «        Z? G d„ de?¦  «        Z@	 d.deAeBef         dedeCde#fd„ZDdeEe#         deEe#         fd „ZFdeAeBef         d!eCde&fd"„ZG	 d.deEe&         d#eCdeHeEe&         ef         fd$„ZIdedefd%„ZJd&ed'edeCfd(„ZKd)ejL        d*edeCfd+„ZMd,eEe&         dedeEeB         fd-„ZNdS )/é    N)Úbisect_rightÚinsort)ÚChainMap)ÚAnyÚcast)Únarrow_tensor_by_index)Údedup_save_plans)ÚFLATTEN_MAPPINGÚflatten_state_dict)Ú_flatten_sharded_tensors)Úset_element)ÚBytesStorageMetadataÚChunkStorageMetadataÚMetadataÚMetadataIndexÚSTATE_DICT_TYPEÚSTORAGE_TYPESÚStorageMetaÚTensorStorageMetadata)ÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItemÚWriteItemType)Ú_compare_save_plansÚ_contains_usable_planÚ"_create_default_metadata_only_planÚ_create_read_itemsÚ_create_write_itemsÚ_init_state_dictÚ_merge_delta_local_plans)Úfind_state_dict_object)ÚDTensoré   )Ú_versionÚlogger)ÚDefaultSavePlannerÚDefaultLoadPlannerÚcreate_default_local_load_planÚcreate_default_global_load_planÚcreate_default_local_save_planÚcreate_default_global_save_planc                   óÄ  — e Zd ZU eed<   	 	 	 	 	 ddedededz  ded	ed
dfd„Z	 	 d dededz  ded
dfd„Z	d
e
fd„Zdee
         d
ee
         fd„Zdee
         d
eee
         ef         fd„Zdee
         d
eee
         ee
         ef         fd„Zdee
         d
eee
         ef         fd„Zde
d
e
fd„Zde
d
e
fd„Zded
ej        ej        z  fd„Zded
efd„Zdedefd„ZdS )!r)   ÚmappingsTNFr   Úflatten_sharded_tensorsÚdedup_replicated_tensorsÚdedup_save_to_lowest_rankÚenable_plan_cachingÚreturnc                 ó¦   — || _         || _        i | _        || _        |�t                               d¦  «         | j        j        | _        || _	        d S )Nz—DefaultSavePlanner's `dedup_replicated_tensors` argument is being deprecated, and no longer has any effect. Please remove this argument from your call.)
r   r1   r0   r3   r(   ÚwarningÚ	__class__Ú__name__Ú_cached_plans_keyÚ_enable_plan_caching)Úselfr   r1   r2   r3   r4   s         új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/distributed/checkpoint/default_planner.pyÚ__init__zDefaultSavePlanner.__init__I   sa   € ð #5ˆÔØ'>ˆÔ$ØˆŒØ)BˆÔ&Ø#Ð/Ý�NŠNð"ñô ð ð
 '+¤nÔ&=ˆÔØ$7ˆÔ!Ð!Ð!ó    Ú
state_dictÚstorage_metaÚis_coordinatorc                 óŠ   — | j         rt          |¦  «        \  }| _        | j        rt          |¦  «        }|| _        || _        d S ©N)r   r0   r1   r   r@   rB   )r<   r@   rA   rB   s       r=   Úset_up_plannerz!DefaultSavePlanner.set_up_planner^   sQ   € ð Ô"ð 	GÝ(:¸:Ñ(FÔ(FÑ%ˆJ˜œØÔ'ð 	>Ý1°*Ñ=Ô=ˆJØ$ˆŒØ,ˆÔÐÐr?   c                 óx  — t          | j        | j        ¦  «        }| j        rt	          j        || j        ¬¦  «        }|| _        | j        rj| j	        t          j        v rPt          |t          j        | j	                 ¦  «        r+t                               d¦  «         t          g d¬¦  «        S || _        | j        S )N©Úplanner_datazINo change in the local plan. Skipping sending the plan to the coordinatorF©Úusable)r-   r@   rB   r   ÚdataclassesÚreplacer0   Úplanr;   r:   r   Ú_cached_save_planr   r(   Úinfor   Ú_pending_local_plan)r<   rM   s     r=   Úcreate_local_planz$DefaultSavePlanner.create_local_plank   sÃ   € Ý-¨d¬o¸tÔ?RÑSÔSˆØÔ"ð 	IÝÔ& t¸$¼-ÐHÑHÔHˆDØˆŒ	àÔ$ð 	0ð Ô&­+Ô*GÐGÐGÝ'Ø�+Ô7¸Ô8NÔOñô ð Hõ
 —’Ø_ñô ð õ   ¨5Ð1Ñ1Ô1Ð1ð ,0�Ô(àŒyÐr?   Ú	all_plansc                 ó,   — t          || j        ¦  «        S rD   )r	   r3   )r<   rR   s     r=   Ú_dedup_save_plansz$DefaultSavePlanner._dedup_save_plans‡   s   € Ý 	¨4Ô+IÑJÔJÐJr?   c                 óˆ  — |                       |¦  «        }t          |¦  «        \  }}| j        r8d„ |D ¦   «         }t          t	          |Ž ¦  «        }t          j        ||¬¦  «        }t          ||¦  «        }|rGd                     |¦  «        }t          |¦  «        dk    r|d d…         dz   }t          d|› �¦  «        ‚||fS )Nc                 ó   — g | ]	}|j         ‘Œ
S © rG   )Ú.0Úps     r=   ú
<listcomp>z:DefaultSavePlanner._create_global_plan.<locals>.<listcomp>–   s   € Ð EÐ EÐ E°A ¤Ð EÐ EÐ Er?   rG   z; iô  z... (truncated)z Failed to validate global plan: )rT   r.   r   Údictr   rK   rL   Ú_validate_global_planÚjoinÚlenÚ
ValueError)	r<   rR   Údeduped_plansÚglobal_planÚmetadataÚplanner_data_dictÚmerged_mappingsÚvalidation_errorsÚerror_summarys	            r=   Ú_create_global_planz&DefaultSavePlanner._create_global_planŠ   sè   € ð ×.Ò.¨yÑ9Ô9ˆå ?ÀÑ NÔ NÑˆ�XàÔ"ð 	Sð
 !FÐ E¸Ð EÑ EÔ EÐÝ"¥8Ð->Ð#?Ñ@Ô@ˆOÝ"Ô*¨8À/ÐRÑRÔRˆHå1°+¸xÑHÔHÐØð 	QØ ŸIšIÐ&7Ñ8Ô8ˆMÝ�=Ñ!Ô! CÒ'Ð'Ø -¨d¨s¨dÔ 3Ð6GÑ G�ÝÐOÀÐOÐOÑPÔPÐPà˜HÐ$Ð$r?   c                 ó   — g }| j         t          j        vrY|                      |¦  «        \  }}|t          j        | j         <   |t          j        | j         <   |t          j        | j         <   |||fS t          |¦  «        sQt          g d¬¦  «        gt          |¦  «        z  }t          j        | j                  }t          j        | j                  }nüt          t          j        | j                  |¦  «        }|t          j        | j         <   |                      |¦  «        \  }}| j         | j        v rut          t          j        | j                  |¦  «        D ]O\  }}t          ||¦  «        r%|                     t          g d¬¦  «        ¦  «         Œ:|                     |¦  «         ŒP|t          j        | j         <   |t          j        | j         <   |||fS )zw
        Create global plan with caching.
        Returns a tuple of global_plan_delta, global_plan, metadata.
        FrI   )r:   r   Ú_cached_all_plansrg   Ú_cached_global_planÚ_cached_metadatar   r   r^   r#   Úzipr   Úappend)r<   rR   Úglobal_plan_deltara   rb   Úmerged_plansÚcached_planÚnew_plans           r=   Ú _create_global_plan_with_cachingz3DefaultSavePlanner._create_global_plan_with_caching£   sÚ  € ð -/ÐàÔ!­Ô)FÐFÐFð %)×$<Ò$<¸YÑ$GÔ$GÑ!ˆK˜ð EN�KÔ)¨$Ô*@ÑAØFQ�KÔ+¨DÔ,BÑCØCK�KÔ(¨Ô)?Ñ@à ¨XÐ5Ð5õ % YÑ/Ô/ð 	Lõ "*¨"°UÐ!;Ñ!;Ô!;Ð <½sÀ9¹~¼~Ñ MÐÝ%Ô9¸$Ô:PÔQˆKÝ"Ô3°DÔ4JÔKˆHˆHõ 4ÝÔ-¨dÔ.DÔEÀyñô ˆLð EQ�KÔ)¨$Ô*@ÑAØ$(×$<Ò$<¸\Ñ$JÔ$JÑ!ˆK˜àÔ%¨Ô)AÐAÐAÝ-0ÝÔ3°DÔ4JÔKÈ[ñ.ô .ð ;ð ;Ñ)�K õ +¨;¸ÑAÔAð ;Ø)×0Ò0µ¸"ÀUÐ1KÑ1KÔ1KÑLÔLÐLÐLà)×0Ò0°Ñ:Ô:Ð:Ð:ð GR�KÔ+¨DÔ,BÑCØCK�KÔ(¨Ô)?Ñ@à  +¨xÐ7Ð7r?   c                 óª   — g }| j         r|                      |¦  «        \  }}}n|                      |¦  «        \  }}|}|| _        || _        || j        fS rD   )r;   rr   rg   ra   rb   )r<   rR   rn   ra   rb   s        r=   Úcreate_global_planz%DefaultSavePlanner.create_global_planß   st   € ð -/ÐØÔ$ð 	,ð ×5Ò5°iÑ@Ô@ñ	Ø!ØØ�ð %)×$<Ò$<¸YÑ$GÔ$GÑ!ˆK˜à +Ðà&ˆÔØ ˆŒà  $¤-Ð/Ð/r?   rq   c                 ót   — |}|j         st          j        | j                 }n|}|t          j        | j        <   |S rD   )rJ   r   Ú_cached_final_save_planr:   ©r<   rq   Úfinished_plans      r=   Ú_finish_plan_with_cachingz,DefaultSavePlanner._finish_plan_with_cachingõ   s?   € Ø"*ˆàŒð 	SÝ'Ô?ÀÔ@VÔWˆMˆMà$ˆMØJR�KÔ/°Ô0FÑGØÐr?   c                 ó°   — |}| j         r@|                      |¦  «        }t          | d¦  «        r| j        t          j        | j        <   | `|| _        | j        S )NrP   )r;   ry   ÚhasattrrP   r   rN   r:   rM   rw   s      r=   Úfinish_planzDefaultSavePlanner.finish_planÿ   sg   € Ø"*ˆàÔ$ð 	-Ø ×:Ò:¸8ÑDÔDˆMõ �tÐ2Ñ3Ô3ð -àÔ,õ Ô-¨dÔ.DÑEð Ð,à!ˆŒ	ØŒyÐr?   Ú
write_itemc                 ób   — |                       |j        ¦  «        }|                      ||¦  «        S rD   )Úlookup_objectÚindexÚtransform_object)r<   r}   Úobjects      r=   Úresolve_datazDefaultSavePlanner.resolve_data  s.   € Ø×#Ò# JÔ$4Ñ5Ô5ˆØ×$Ò$ Z°Ñ8Ô8Ð8r?   r€   c                 ó,   — t          | j        |¦  «        S ©zSExtension from the planner interface to make it easy to extend the default planner.©r$   r@   ©r<   r€   s     r=   r   z DefaultSavePlanner.lookup_object  ó   € å% d¤o°uÑ=Ô=Ð=r?   r‚   c                 ó„   — |j         t          j        k    r*t          j        ¦   «         }t          j        ||¦  «         |}|S r…   )Útyper   ÚBYTE_IOÚioÚBytesIOÚtorchÚsave)r<   r}   r‚   Úbytess       r=   r�   z#DefaultSavePlanner.transform_object  s9   € àŒ?�mÔ3Ò3Ð3Ý”J‘L”LˆEÝŒJ�v˜uÑ%Ô%Ð%ØˆFØˆr?   )TTNFF©NF)r9   Ú
__module__Ú__qualname__r
   Ú__annotations__Úboolr>   r   r   rE   r   rQ   ÚlistrT   Útupler   rg   rr   rt   ry   r|   r   rŽ   ÚTensorrŒ   r�   rƒ   r   r   r   r�   rW   r?   r=   r)   r)   F   s}  € € € € € € ØÐÐÑð $(Ø(,Ø04Ø*/Ø$)ð8ð 8à ð8ð "&ð8ð #'¨¡+ð	8ð
 $(ð8ð "ð8ð 
ð8ð 8ð 8ð 8ð0 ,0Ø$ð	-ð -à#ð-ð " DÑ(ð-ð ð	-ð
 
ð-ð -ð -ð -ð 8ð ð ð ð ð8K¨4°¬>ð K¸dÀ8¼nð Kð Kð Kð Kð%Ø˜hœð%à	ˆt�HŒ~˜xÐ'Ô	(ð%ð %ð %ð %ð2:8Ø˜hœð:8à	ˆt�HŒ~˜t Hœ~¨xÐ7Ô	8ð:8ð :8ð :8ð :8ðx0Ø˜hœð0à	ˆt�HŒ~˜xÐ'Ô	(ð0ð 0ð 0ð 0ð,°(ð ¸xð ð ð ð ð Hð °ð ð ð ð ð&9 yð 9°U´\ÀBÄJÑ5Nð 9ð 9ð 9ð 9ð> =ð >°Sð >ð >ð >ð >ð¨9ð ¸cð ð ð ð ð ð r?   r)   c            	       ó,  — e Zd ZU dZeed<   eed<   	 	 	 ddededed	d
fd„Z	 	 ddede	d
z  ded	d
fd„Z
d	efd„Zdee         d	ee         fd„Zded	efd„Zdedej        d	d
fd„Zdefd„Zdedej        d	d
fd„Zded	ej        fd„Zdedej        fd„Zd
S ) r*   ak  
    DefaultLoadPlanner that adds multiple features on top of LoadPlanner.

    In particular it adds the following:

    flatten_state_dict: Handle state_dict with nested dicts
    flatten_sharded_tensors: For FSDP in 2D parallel mode
    allow_partial_load: If False, will raise a runtime error if a key is present in state_dict, but not in the checkpoint.
    Úoriginal_state_dictr0   TFr   r1   Úallow_partial_loadr5   Nc                 óL   — || _         || _        i | _        i | _        || _        d S rD   )r   r1   rš   r0   r›   )r<   r   r1   r›   s       r=   r>   zDefaultLoadPlanner.__init__1  s1   € ð #5ˆÔØ'>ˆÔ$Ø#%ˆÔ ØˆŒØ"4ˆÔÐÐr?   r@   rb   rB   c                 óÄ   — t          |¦  «         || _        | j        rt          |¦  «        }| j        rt	          |¦  «        \  }| _        || _        || _        || _        d S rD   )	r"   rš   r1   r   r   r0   r@   rb   rB   )r<   r@   rb   rB   s       r=   rE   z!DefaultLoadPlanner.set_up_planner=  sn   € õ 	˜Ñ$Ô$Ð$Ø#-ˆÔ àÔ'ð 	>Ý1°*Ñ=Ô=ˆJàÔ"ð 	GÝ(:¸:Ñ(FÔ(FÑ%ˆJ˜œà$ˆŒØ ˆŒØ,ˆÔÐÐr?   c                 óö  — | j         €t          d¦  «        ‚| j        r¼t          | j                             ¦   «         ¦  «        }t          | j         j                             ¦   «         ¦  «        }||z
  }|rddt          _        t          | j	        ¦  «        \  }}t          |                     ¦   «         ¦  «        }||z  r||c| _        | _
        d t          _        t          | j        | j         | j         ¦  «        S )Nzself.metadata is not NoneÚ2_3)rb   ÚAssertionErrorr   Úsetr@   ÚkeysÚstate_dict_metadatar'   Ú_derived_versionrš   r0   r+   r›   )r<   Úcurrent_keysÚ	load_keysÚmissing_keysÚold_state_dictÚold_mappingsÚold_keyss          r=   rQ   z$DefaultLoadPlanner.create_local_planP  sù   € ØŒ=Ð Ý Ð!<Ñ=Ô=Ð=ØÔ"ð 	1õ$ ˜tœ×3Ò3Ñ5Ô5Ñ6Ô6ˆLÝ˜DœMÔ=×BÒBÑDÔDÑEÔEˆIØ$ |Ñ3ˆLØð 
1Ø,1•Ô)Ý/AØÔ,ñ0ô 0Ñ,� õ ˜~×2Ò2Ñ4Ô4Ñ5Ô5�Ø˜lÑ*ð RØ5CÀ\Ð2�D”O T¤]ð -1•Ô)å-ØŒO˜Tœ]°Ô0GÐ,Gñ
ô 
ð 	
r?   ra   c                 ó    — t          |¦  «        S rD   )r,   )r<   ra   s     r=   rt   z%DefaultLoadPlanner.create_global_planx  s   € Ý.¨{Ñ;Ô;Ð;r?   rq   c                 ó   — |S rD   rW   )r<   rq   s     r=   r|   zDefaultLoadPlanner.finish_plan{  s   € Øˆr?   Ú	read_itemÚvaluec                 óæ   — | j         rAt          | j        | j        |j        j                 t          j        |d¬¦  «        ¦  «         d S t          j        |d¬¦  «        | j        |j        j        <   d S )NF)Úweights_only)	r   r   rš   r0   Ú
dest_indexÚfqnrŽ   Úloadr@   )r<   r­   r®   s      r=   Ú
load_byteszDefaultLoadPlanner.load_bytes~  s�   € ØÔ"ð 		ÝØÔ(Ø”˜iÔ2Ô6Ô7Ý”
˜5¨uÐ5Ñ5Ô5ñô ð ð ð õ 9>¼
Ø Eð9ñ 9ô 9ˆDŒO˜IÔ0Ô4Ñ5Ð5Ð5r?   c                 ób   — |                       |j        ¦  «        }|                      ||¦  «        S rD   )Úlookup_tensorr±   Útransform_tensor©r<   r­   Útensors      r=   Úresolve_tensorz!DefaultLoadPlanner.resolve_tensorŠ  s.   € Ø×#Ò# IÔ$8Ñ9Ô9ˆØ×$Ò$ Y°Ñ7Ô7Ð7r?   r¹   c                 ó   — d S rD   rW   r¸   s      r=   Úcommit_tensorz DefaultLoadPlanner.commit_tensorŽ  s   € Øˆr?   r€   c                 ó,   — t          | j        |¦  «        S r…   r†   r‡   s     r=   r¶   z DefaultLoadPlanner.lookup_tensor‘  rˆ   r?   c                 ó8   — t          ||j        |j        ¦  «        S r…   )r   Údest_offsetsÚlengthsr¸   s      r=   r·   z#DefaultLoadPlanner.transform_tensor•  s   € å% f¨iÔ.DÀiÔFWÑXÔXÐXr?   )TTFr‘   )r9   r’   r“   Ú__doc__r   r”   r
   r•   r>   r   rE   r   rQ   r–   rt   r|   r   rŒ   r�   r´   rº   rŽ   r˜   r¼   r   r¶   r·   rW   r?   r=   r*   r*   #  sø  € € € € € € ðð ð )Ð(Ð(Ñ(ØÐÐÑð $(Ø(,Ø#(ð	
5ð 
5à ð
5ð "&ð
5ð !ð	
5ð
 
ð
5ð 
5ð 
5ð 
5ð %)Ø$ð	-ð -à#ð-ð ˜T‘/ð-ð ð	-ð
 
ð-ð -ð -ð -ð&&
 8ð &
ð &
ð &
ð &
ðP<¨d°8¬nð <ÀÀhÄð <ð <ð <ð <ð Hð °ð ð ð ð ð
 Hð 
°R´Zð 
ÀDð 
ð 
ð 
ð 
ð8¨ð 8ð 8ð 8ð 8ð xð ¸¼ð È$ð ð ð ð ð> =ð >°U´\ð >ð >ð >ð >ðY¨(ð Y¸E¼Lð Yð Yð Yð Yð Yð Yr?   r*   c            	       ó`   ‡ — e Zd ZdZdˆ fd„	Zdededefd„Z	 	 dd	e	dedz  d
eddfˆ fd„Z
ˆ xZS )Ú_EmptyStateDictLoadPlanneraí  
    Extension of DefaultLoadPlanner, which rebuilds state_dict from the saved metadata.
    Useful for loading in state_dict without first initializing a model, such as
    when converting a DCP checkpoint into a Torch save file.

    . N.B. `state_dict` must be an empty dictionary when used with this LoadPlanner

    .. warning::
        Because the entire state dict is initialized, It's recommended to only utilize
        this LoadPlanner on a single rank or process to avoid OOM.

    Nc                 óH   •— || _          t          ¦   «         j        |i |¤Ž d S rD   )r¢   Úsuperr>   )r<   r¢   ÚargsÚkwargsr8   s       €r=   r>   z#_EmptyStateDictLoadPlanner.__init__¨  s,   ø€ ØˆŒ	Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r?   Úkeyrb   r5   c           	      óV  ‡ — ‰ j         €dS |‰ j         v rdS g }|j                             |¦  «        }|D ]W}|r>|                     d                     |d         t          |¦  «        g¦  «        ¦  «         ŒB|                     |¦  «         ŒXt          ˆ fd„|D ¦   «         ¦  «        rdS dS )NTú.éÿÿÿÿc              3   ó*   •K  — | ]}|‰j         v V — Œd S rD   )r¢   )rX   Úunflattened_keyr<   s     €r=   ú	<genexpr>zA_EmptyStateDictLoadPlanner._should_include_key.<locals>.<genexpr>¾  s*   øè è € ÐTÐT°ˆ $¤)Ð+ÐTÐTÐTÐTÐTÐTr?   F)r¢   rH   Úgetrm   r]   ÚstrÚany)r<   rÈ   rb   Úunflattened_keysrH   rÍ   s   `     r=   Ú_should_include_keyz._EmptyStateDictLoadPlanner._should_include_key¬  sÝ   ø€ ØŒ9ÐØ�4à�$”)ÐÐØ�4à&(ÐØÔ,×0Ò0°Ñ5Ô5ˆØ+ð 	9ð 	9ˆOØð 9Ø ×'Ò'Ø—H’HÐ.¨rÔ2µC¸Ñ4HÔ4HÐIÑJÔJñô ð ð ð
 !×'Ò'¨Ñ8Ô8Ð8Ð8åÐTÐTÐTÐTÐCSÐTÑTÔTÑTÔTð 	Ø�4àˆur?   Fr@   rB   c                 óÖ  •— |rt          d¦  «        ‚|€t          d¦  «        ‚|j                             ¦   «         D ]ˆ\  }}|                      ||¦  «        sŒt	          |t
          ¦  «        r%t          j        |j        |j	        j
        ¬¦  «        }|j        �&||j        v rt          ||j        |         |¦  «         Œƒ|||<   Œ‰t          ¦   «                              |||¦  «         d S )Nznot state_dictzmetadata is not None)Údtype)r    r£   ÚitemsrÓ   Ú
isinstancer   rŽ   ÚemptyÚsizeÚ
propertiesrÕ   rH   r   rÅ   rE   )r<   r@   rb   rB   ÚkÚvr8   s         €r=   rE   z)_EmptyStateDictLoadPlanner.set_up_plannerÃ  sÿ   ø€ ð ð 	3Ý Ð!1Ñ2Ô2Ð2ØÐÝ Ð!7Ñ8Ô8Ð8ð Ô0×6Ò6Ñ8Ô8ð 		"ð 		"‰DˆAˆqØ×+Ò+¨A¨xÑ8Ô8ð Øå˜!Õ2Ñ3Ô3ð BÝ”K ¤¨a¬lÔ.@ÐAÑAÔA�ØÔ$Ð0°Q¸(Ô:OÐ5OÐ5OÝ˜J¨Ô(=¸aÔ(@À!ÑDÔDÐDÐDà !�
˜1‘�å‰Œ×Ò˜z¨8°^ÑDÔDÐDÐDÐDr?   rD   r‘   )r9   r’   r“   rÁ   r>   rÐ   r   r•   rÓ   r   rE   Ú__classcell__)r8   s   @r=   rÃ   rÃ   š  sÔ   ø€ € € € € ðð ð*ð *ð *ð *ð *ð *ð sð °hð À4ð ð ð ð ð4 %)Ø$ð	Eð Eà#ðEð ˜T‘/ðEð ð	Eð
 
ðEð Eð Eð Eð Eð Eð Eð Eð Eð Er?   rÃ   Tr@   rb   Ústrictr5   c           	      óD  — g }	 |                       ¦   «         D ]ú\  }}||j        vr|rt          d|› d�¦  «        ‚Œ$|j        |         }t          |t          ¦  «        r]t          |dd ¦  «        �L|j        |                     ¦   «         k    r/t          d|j        › d|                     ¦   «         › d|› �¦  «        ‚t          |t          ¦  «        r.|j	         
                    ¦   «         �|t          |||¦  «        z  }Œæ|t          |||¦  «        z  }Œût          |¦  «        S )Nz&Missing key in checkpoint state_dict: rÊ   rÙ   zSize mismatch between saved z and current: z for )rÖ   r£   ÚRuntimeErrorr×   r   ÚgetattrrÙ   r_   r%   Údevice_meshÚget_coordinater    r   )r@   rb   rÞ   Úrequestsr²   ÚobjÚmds          r=   r+   r+   Ý  sH  € ð €Hðð ×$Ò$Ñ&Ô&ð 9ð 9‰ˆˆSà�hÔ2Ð2Ð2Øð Ý"Ð#RÈCÐ#RÐ#RÐ#RÑSÔSÐSààÔ)¨#Ô.ˆå�rÕ0Ñ1Ô1ð	å˜˜V TÑ*Ô*Ð6Ø”˜3Ÿ8š8™:œ:Ò%Ð%åØ\¨r¬wÐ\Ð\ÀcÇhÂhÁjÄjÐ\Ð\ÐWZÐ\Ð\ñô ð õ
 �c�7Ñ#Ô#ð 	9ØŒ×-Ò-Ñ/Ô/Ð;ØÕ.¨s°B¸Ñ<Ô<Ñ<�øàÕ*¨3°°CÑ8Ô8Ñ8ˆHˆHå�HÑÔÐr?   rR   c                 ó   — | S )z¼
    Create global load plan used by DefaultLoadPlanner.

    The default load behavior involved no global coordination and this function
    currently doesn't change the local plans.
    rW   )rR   s    r=   r,   r,     s
   € ð Ðr?   rB   c                 ó  — g }|                       ¦   «         D ]Z\  }}t          |t          ¦  «        r-|j                             ¦   «         �|t          ||¦  «        z  }ŒG|t          ||¦  «        z  }Œ[t          |¦  «        S )a  
    Create the ``SavePlan`` used by DefaultSavePlanner.

    On non-coordinator ranks, this function ignores tensors and non-tensor objects,
    only producing writes for ShardedTensor objects.

    On the coordinator rank, produce writes for all values.
    )rÖ   r×   r%   râ   rã   r!   r   )r@   rB   rä   r²   rå   s        r=   r-   r-     s�   € ð €HØ×$Ò$Ñ&Ô&ð 
6ð 
6‰ˆˆSõ �c�7Ñ#Ô#ð 	6ØŒ×-Ò-Ñ/Ô/Ð;ØÕ/°°SÑ9Ô9Ñ9�øð
 Õ+¨C°Ñ5Ô5Ñ5ˆHˆHå�HÑÔÐr?   Úrewrite_index_hintsc                 óÄ  — i }g }| D �]È}g }|j         D �]‘}|j        t          j        k    r|j        j        |v rt          d¦  «        ‚|j        t          j        k    r1t          ¦   «         ||j        j        <   | 	                    |¦  «         Œ{|j
        €t          d¦  «        ‚t          t          |                     |j        j        t          |j
        j        |j
        j        g ¬¦  «        ¦  «        ¦  «        }|}|rCt!          j        |j        t%          |j        ¦  «        ¬¦  «        }	t!          j        ||	¬¦  «        }| 	                    |¦  «         |j
        j        €t          d|j        j        › d�¦  «        ‚|j         	                    |j
        j        ¦  «         �Œ“| 	                    t!          j        ||¬¦  «        ¦  «         �ŒÊ|t+          |¦  «        fS )	a6  
    Create the global plan and metadata used by DefaultSavePlanner.

    Metadata is produced by concatenating the metadata of all ``WriteItem`` from the supplied plans.

    The only global planning change is to update index hints in all ``MetadataIndex`` objects if
    ``rewrite_index_hints`` is True.
    zitem.index.fqn not in mdNzitem.tensor_data is not None)rÚ   rÙ   Úchunks)r€   zZ
                    Cannot create MD for tensor without bounds.
                    FQN: z
                )rÖ   )rÖ   rŠ   r   ÚSHARDr€   r²   r    r‹   r   rm   Útensor_datar   r   Ú
setdefaultrÚ   rÙ   rK   rL   r^   rë   Úchunkr   )
rR   ré   ræ   Ú	new_plansrM   Ú	new_itemsÚitemÚ	tensor_mdÚnew_itemÚ	new_indexs
             r=   r.   r.   .  s   € ð $&€BØ€IØð &Eñ &EˆØˆ	Ø”Jð #	@ñ #	@ˆDØŒy�MÔ/Ò/Ð/Ø”:”> RÐ'Ð'Ý(Ð)CÑDÔDÐDàŒy�MÔ1Ò1Ð1Ý%9Ñ%;Ô%;��4”:”>Ñ"Ø× Ò  Ñ&Ô&Ð&Ð&àÔ#Ð+Ý(Ð)GÑHÔHÐHÝ Ý)Ø—M’MØœ
œÝ-Ø'+Ô'7Ô'BØ!%Ô!1Ô!6Ø#%ðñ ô ñô ñ
ô 
�	ð  �Ø&ð JÝ +Ô 3Øœ
­#¨iÔ.>Ñ*?Ô*?ð!ñ !ô !�Iõ  +Ô2°4¸yÐIÑIÔI�HØ× Ò  Ñ*Ô*Ð*àÔ#Ô)Ð1Ý(ð *àœ*œ.ð*ð *ð *ñ ô ð ð Ô ×'Ò'¨Ô(8Ô(>Ñ?Ô?Ð?Ñ?Ø×Ò�Ô,¨T¸ÐCÑCÔCÑDÔDÐDÑDØ•x ‘|”|Ð$Ð$r?   c                 óJ   — t          | ¦  «        }t          |g¦  «        \  }}|S )zTReturn the ``Metadata`` if DefaultSavePlanner was used to checkpoint ``state_dict``.)r   r.   )r@   rM   Ú_ræ   s       r=   Ú_create_default_local_metadatarø   f  s'   € å-¨jÑ9Ô9€DÝ+¨T¨FÑ3Ô3�E€A€rØ€Ir?   Úbox0Úbox1c                 ó  — t          | j        ¦  «        }t          |¦  «        D ]\}| j        |         |j        |         |j        |         z   k    r dS |j        |         | j        |         | j        |         z   k    r dS Œ]dS )z9Check if two boxes overlap. Tuples are (offset, lengths).FT)r^   ÚoffsetsÚrangeÚsizes)rù   rú   ÚndimsÚis       r=   Ú_check_box_overlapr  m  s†   € õ �”ÑÔ€EÝ�5‰\Œ\ð ð ˆØŒ<˜Œ?˜dœl¨1œo°´
¸1´Ñ=Ò=Ð=Ø�5�5ØŒ<˜Œ?˜dœl¨1œo°´
¸1´Ñ=Ò=Ð=Ø�5�5ð >ð ˆ4r?   Úouter_box_sizeÚ	inner_boxc                 óä   — t          t          | ¦  «        ¦  «        D ]R}|j        |         dk     r dS |j        |         dk     r dS |j        |         |j        |         z   | |         k    r dS ŒSdS )Nr   FT)rý   r^   rü   rþ   )r  r  r   s      r=   Ú_check_box_boundsr  }  sŽ   € õ •3�~Ñ&Ô&Ñ'Ô'ð ð ˆØÔ˜QÔ !Ò#Ð#Ø�5�5ØŒ?˜1Ô Ò!Ð!Ø�5�5ØÔ˜QÔ )¤/°!Ô"4Ñ4°~ÀaÔ7HÒHÐHØ�5�5ð Ið ˆ4r?   ra   c           	      óð  ‡‡‡‡— g }|j                              ¦   «         D �]T\  }Št          ‰t          ¦  «        rŒt	          ‰j        ¦  «        dk    rŒ5‰j        Šd}‰D ]r}t          ‰j        |¦  «        s?d|› d‰j        › d|› �}t           	                    |¦  «         | 
                    |¦  «         |t          j        |j        ¦  «        z  }Œst	          ‰¦  «        dk    �r!t	          ‰j        ¦  «        Št          t          ‰¦  «        dˆfd„¬¦  «        Št!          t          t	          ‰¦  «        ¦  «        ˆˆˆfd„¬	¦  «        }g }|D ]¶}	‰|	         }
|
j        ‰         }||
j        ‰         z   }t%          ||t&          j        f¦  «        }|r|d
|…= |D ]W\  }}‰|         }t+          |
|¦  «        r:d|› d|
› d|› �}t           	                    |¦  «         | 
                    |¦  «         ŒXt-          |||	f¦  «         Œ·t          j        ‰j        ¦  «        }t	          | ¦  «        dk    r@||k    r:d|› d|› d|› �}t           	                    |¦  «         | 
                    |¦  «         �ŒV|S )zNValidate the global plan and return a list of error messages (empty if valid).r   zkey:z& has out of bounds chunk: tensor-size:z chunk: r&   c                 ó   •— ‰j         |          S rD   )rÙ   )Údr®   s    €r=   ú<lambda>z'_validate_global_plan.<locals>.<lambda>¢  s   ø€ À%Ä*ÈQÄ-€ r?   )ÚdefaultrÈ   c                 óh   •‡ — ‰‰          j         ‰         gˆˆ fd„t          ‰¦  «        D ¦   «         ¢R S )Nc              3   ó>   •K  — | ]}‰‰         j         |         V — Œd S rD   )rü   )rX   r  rë   Úidxs     €€r=   rÎ   z:_validate_global_plan.<locals>.<lambda>.<locals>.<genexpr>§  s/   øè è € ÐBÐB°�f˜S”kÔ)¨!Ô,ÐBÐBÐBÐBÐBÐBr?   )rü   rý   )r  rë   ÚdimsÚ	sweep_dims   `€€€r=   r	  z'_validate_global_plan.<locals>.<lambda>¥  sD   øø€ Ø˜3”KÔ'¨	Ô2ð!àBÐBÐBÐBÐBµe¸D±k´kÐBÑBÔBð!ð !€ r?   )rÈ   Nz has overlapping chunks: ú z invalid fill tensor-volume: z chunks-volume: )r£   rÖ   r×   r   r^   rÙ   rë   r  r(   r7   rm   ÚmathÚprodrþ   Úmaxrý   Úsortedrü   r   ÚsysÚmaxsizer  r   )ra   rb   ÚerrorsrÈ   Úchunks_volumerï   ÚmsgÚsorted_indicesÚactiver  ÚcurrentÚstartÚendÚcutoffr÷   Ú	other_idxÚotherÚtensor_volumerë   r  r  r®   s                     @@@@r=   r\   r\   ‹  sû  øøøø€ à€FØÔ2×8Ò8Ñ:Ô:ð 7ñ 7‰
ˆˆUÝ�eÕ1Ñ2Ô2ð 	ØÝˆuŒz‰?Œ?˜aÒÐØØ”ˆØˆØð 		4ð 		4ˆEå$ U¤Z°Ñ7Ô7ð #ð?˜3ð ?ð ?Ø#(¤:ð?ð ?Ø7<ð?ð ?ð õ —’˜sÑ#Ô#Ð#Ø—’˜cÑ"Ô"Ð"Ø�TœY u¤{Ñ3Ô3Ñ3ˆMˆMåˆv‰;Œ;˜Š?‰?Ý�u”z‘?”?ˆDÝ�E $™KœK°Ð8OÐ8OÐ8OÐ8OÐPÑPÔPˆIÝ#Ý•c˜&‘k”kÑ"Ô"ðð ð ð ð ð ðñ ô ˆNð -/ˆFØ%ð +ð +�Ø  œ+�Øœ¨	Ô2�Ø˜gœm¨IÔ6Ñ6�å% f¨uµc´kÐ.BÑCÔC�Øð (Ø˜w ˜w˜à$*ð +ð +‘L�A�yØ" 9Ô-�EÝ)¨'°5Ñ9Ô9ð +ØT SÐTÐTÀ7ÐTÐTÈUÐTÐT˜ÝŸš sÑ+Ô+Ð+ØŸš cÑ*Ô*Ð*øå�v  S˜zÑ*Ô*Ð*Ð*õ œ	 %¤*Ñ-Ô-ˆÝˆ{ÑÔ˜aÒÐ M°]Ò$BÐ$BðB�sð Bð BØ ðBð BØ2?ðBð Bð õ �NŠN˜3ÑÔÐØ�MŠM˜#ÑÔÐùà€Mr?   )T)OrK   rŒ   Úloggingr  r  Úbisectr   r   Úcollectionsr   Útypingr   r   rŽ   Útorch.distributed._shard._utilsr   Ú.torch.distributed.checkpoint._dedup_save_plansr	   Ú)torch.distributed.checkpoint._nested_dictr
   r   Ú2torch.distributed.checkpoint._sharded_tensor_utilsr   Ú&torch.distributed.checkpoint._traverser   Ú%torch.distributed.checkpoint.metadatar   r   r   r   r   r   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   r   r   r   r   Ú,torch.distributed.checkpoint.planner_helpersr   r   r   r    r!   r"   r#   Ú"torch.distributed.checkpoint.utilsr$   Útorch.distributed.tensorr%   Ú r'   Ú	getLoggerr9   r(   ÚLoggerr”   Ú__all__r)   r*   rÃ   r[   rÐ   r•   r+   r–   r,   r-   r—   r.   rø   r  ÚSizer  r\   rW   r?   r=   ú<module>r6     sÑ  ðð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø BÐ BÐ BÐ BÐ BÐ BØ KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð XÐ WÐ WÐ WÐ WÐ WØ >Ð >Ð >Ð >Ð >Ð >ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ EØ ,Ð ,Ð ,Ð ,Ð ,Ð ,à Ð Ð Ð Ð Ð ð +˜Ô*¨8Ñ4Ô4€ˆŒÐ 4Ð 4Ñ 4ðð ð €ðZð Zð Zð Zð Z˜ñ Zô Zð ZðztYð tYð tYð tYð tY˜ñ tYô tYð tYðn@Eð @Eð @Eð @Eð @EÐ!3ñ @Eô @Eð @EðH DHð'ð 'Ø�S˜#�X”ð'Ø*2ð'Ø<@ð'àð'ð 'ð 'ð 'ðT	Ø�HŒ~ð	à	ˆ(„^ð	ð 	ð 	ð 	ðØ�S˜#�X”ðØ04ðàðð ð ð ð: !%ð5%ð 5%Ø�HŒ~ð5%àð5%ð ˆ4�Œ>˜8Ð#Ô$ð5%ð 5%ð 5%ð 5%ðp¨ð À8ð ð ð ð ðÐ1ð Ð9Mð ÐRVð ð ð ð ð Ø”JðØ+?ðà	ðð ð ð ð< t¨H¤~ð <Àð <ÈdÐSVÌið <ð <ð <ð <ð <ð <r?   