§
    Ÿ²ÅjJ4  ã            	       ó‚  — U d dl Z d dlmZmZmZmZmZ d dl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 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"m#Z# ddl$m%Z%m&Z& dgZ'ee(         e)d<   dej*        defd„Z+dedefd„Z,dedede!fd„Z-de(dede"fd„Z.de(dedede"fd„Z/de(dej*        de"fd„Z0de(defd„Z1d„ Z2d„ Z3de(dedee         dee         fd„Z4d ede fd!„Z5de(d"edee"         fd#„Z6dedefd$„Z7dej*        dee         fd%„Z8de(d&ed'edee         fd(„Z9d ee(ef         defd)„Z:d*ed+ed,ed-efd.„Z;dS )/é    N)ÚAnyÚCallableÚcastÚDictÚList)Ú_get_device_module)ÚShardMetadata)ÚShardedTensor)ÚDTensor)Ú%compute_local_shape_and_global_offseté   )ÚBytesStorageMetadataÚChunkStorageMetadataÚMetadataIndexÚSTATE_DICT_TYPEÚSTORAGE_TYPESÚTensorPropertiesÚTensorStorageMetadata)ÚLoadItemTypeÚReadItemÚSavePlanÚTensorWriteDataÚ	WriteItemÚWriteItemType)Ú"_check_shard_metadata_pair_overlapÚ+_shards_get_overlap_region_wrt_saved_tensorÚ create_read_items_for_chunk_listÚ__all__ÚtensorÚreturnc           	      ó²   — t          t          j        dgt          |                      ¦   «         ¦  «        z  ¦  «        |                      ¦   «         ¬¦  «        S )Nr   ©ÚoffsetsÚsizes)r   ÚtorchÚSizeÚlenÚsize)r   s    ú]C:\Projects\Historical\venv\Lib\site-packages\torch/distributed/checkpoint/planner_helpers.pyÚ_create_chunk_from_tensorr*   '   sG   € ÝÝ”
˜A˜3¥ V§[¢[¡]¤]Ñ!3Ô!3Ñ3Ñ4Ô4¸F¿KºK¹M¼Mðñ ô ð ó    Úshard_mdc                 ó€   — t          t          j        | j        ¦  «        t          j        | j        ¦  «        ¬¦  «        S ©Nr"   )r   r%   r&   Úshard_offsetsÚshard_sizes)r,   s    r)   Ú_chunk_for_shardr1   -   s9   € ÝÝ”
˜8Ô1Ñ2Ô2ÝŒj˜Ô-Ñ.Ô.ðñ ô ð r+   Úsharded_tensorc                 óú   — |                       ¦   «         j        }t          |j        |j        |j        |j        |j        ¬¦  «        }t          t          |¦  «        ||                       ¦   «         j
        ¬¦  «        S )N)ÚdtypeÚlayoutÚrequires_gradÚmemory_formatÚ
pin_memory©ÚchunkÚ
propertiesr(   )ÚmetadataÚtensor_propertiesr   r4   r5   r6   r7   r8   r   r1   r(   )r2   r,   Úshard_propertiesr;   s       r)   Ú_sharded_tensor_metadatar?   4   s„   € ð &×.Ò.Ñ0Ô0ÔBÐå!ØÔ$ØÔ&Ø&Ô4Ø&Ô4Ø#Ô.ðñ ô €Jõ Ý˜xÑ(Ô(ØØ×$Ò$Ñ&Ô&Ô+ðñ ô ð r+   Úfqnc                 ó–  — t          |j        |j        |j        ¦  «        \  }}t	          j        |¦  «        t	          j        |¦  «        }}t          t          | |¦  «        t          j	        t          t          ||¬¦  «        t          j        |                     ¦   «         ¦  «        |                     ¦   «         ¬¦  «        ¬¦  «        S )Nr"   r9   ©ÚindexÚtypeÚtensor_data)r   ÚshapeÚdevice_meshÚ
placementsr%   r&   r   r   r   ÚSHARDr   r   r   Úcreate_from_tensorÚto_localr(   )r@   r   r$   r#   s       r)   Ú_create_write_items_for_dtensorrL   H   s¼   € Ý:ØŒ�fÔ(¨&Ô*;ñô �N€Eˆ7õ ”Z Ñ&Ô&­¬
°7Ñ(;Ô(;ˆ7€EåÝ˜C Ñ)Ô)ÝÔ Ý#Ý&ØØðñ ô õ (Ô:¸6¿?º?Ñ;LÔ;LÑMÔMØ—’‘”ð
ñ 
ô 
ðñ ô ð r+   c                 ó¤   — t          j        |j        ¦  «        }t          t	          | |¦  «        t
          j        t          ||¦  «        ¬¦  «        S )NrB   )r%   r&   r/   r   r   r   rI   r?   )r@   r2   r,   r#   s       r)   Ú_create_write_item_for_shardrN   \   sM   € õ Œj˜Ô/Ñ0Ô0€GÝÝ˜C Ñ)Ô)ÝÔ Ý,¨^¸XÑFÔFðñ ô ð r+   c                 ón  — t          j        dgt          |                     ¦   «         ¦  «        z  ¦  «        }t	          t          | |¦  «        t          j        t          t          ||                     ¦   «         ¬¦  «        t          j        |¦  «        |                     ¦   «         ¬¦  «        ¬¦  «        S )Nr   r"   r9   rB   )r%   r&   r'   r(   r   r   r   ÚTENSORr   r   r   rJ   )r@   r   r#   s      r)   Ú_create_write_item_for_tensorrQ   g   s•   € ÝŒj˜!˜�s 6§;¢;¡=¤=Ñ1Ô1Ñ1Ñ2Ô2€GÝÝ˜C Ñ)Ô)ÝÔ!Ý#Ý&¨w¸f¿kºk¹m¼mÐLÑLÔLÝ'Ô:¸6ÑBÔBØ—’‘”ð
ñ 
ô 
ðñ ô ð r+   Úbytesc                 óR   — t          t          | ¦  «        t          j        ¬¦  «        S )N)rC   rD   )r   r   r   ÚBYTE_IO)r@   rR   s     r)   Ú_create_write_item_for_bytesiorU   t   s*   € ÝÝ˜CÑ Ô ÝÔ"ðñ ô ð r+   c           
      ó²   — t          t          j        | t          j        |f¦  «        |t          j        |f¦  «        t          j        |f¦  «        ¬¦  «        S ©N)rD   Ú
dest_indexÚdest_offsetsÚstorage_indexÚstorage_offsetsÚlengths)r   r   rT   r%   r&   ©rX   Údest_offsetrZ   Ústorage_offsetÚlengths        r)   Ú_create_read_item_for_byteiora   {   sU   € õ ÝÔ!ØÝ”Z  Ñ/Ô/Ø#Ýœ
 NÐ#4Ñ5Ô5Ý”
˜F˜9Ñ%Ô%ðñ ô ð r+   c           
      ó¬   — t          t          j        | t          j        |¦  «        |t          j        |¦  «        t          j        |¦  «        ¬¦  «        S rW   )r   r   rP   r%   r&   ©rX   rY   rZ   r[   r\   s        r)   Ú_create_read_item_for_tensorrd   ˆ   sN   € õ ÝÔ ØÝ”Z Ñ-Ô-Ø#Ýœ
 ?Ñ3Ô3Ý”
˜7Ñ#Ô#ðñ ô ð r+   Úcheckpoint_mdÚlocal_chunksc                 óä  — g }t          |¦  «        D ]Ý\  }}t          |j        ¦  «        D ]Ã\  }}t          ||¦  «        sŒg }g }	g }
t          ||¬¦  «        D ]F\  }}}}|                     |¦  «         |	                     |¦  «         |
                     |¦  «         ŒG|                     t          t          | |j        |¦  «        |	t          | |j        |¦  «        ||
¬¦  «        ¦  «         ŒÄŒÞ|S )aW  
    Create a list of ``ReadItem`` based on the checkpoint and local chunks.

    This applies the resharding algorithm and computes the reads needed
    to satisfy ``local_chunks`` with a checkpoint described by ``checkpoint_md``.

    Args:
        fqn (str) : The state_dict FQN to pass to ``ReadItem``.
        checkpoint_md (TensorStorageMetadata): metadata for a given tensor
            from a checkpoint.
        local_chunks (List[ChunkStorageMetadata]): Local chunks that needs to be
            loaded.

    Returns:
        A list of ``ReadItem`` that will satisfy all input chunks.
    )Úsaved_shardÚcurrent_shardrc   )Ú	enumerateÚchunksr   r   Úappendrd   r   r#   )r@   re   rf   Ú
read_itemsÚidxÚshardÚstorage_idxÚ
storage_mdr[   rY   r\   Ú_dimÚoffset_for_saved_tensorÚoffset_for_current_tensorr`   s                  r)   r   r   •   sD  € ð* €Jå Ñ-Ô-ð ð ‰
ˆˆUÝ'0°Ô1EÑ'FÔ'Fð 	ð 	Ñ#ˆK˜Ý5°e¸ZÑHÔHð Øà ˆOØˆLØˆGõ =Ø&°eðñ ô ð
'ð 
'ñ ØØ'Ø)Øð  ×&Ò&Ð'>Ñ?Ô?Ð?Ø×#Ò#Ð$=Ñ>Ô>Ð>Ø—’˜vÑ&Ô&Ð&Ð&à×ÒÝ,Ý,¨S°%´-ÀÑEÔEØ!-Ý"/°°ZÔ5GÈÑ"UÔ"UØ$3Ø#ðñ ô ñô ð ð ð'	ð8 Ðr+   Ú
state_dictc                 ó.  ‡‡— g }|                       ¦   «         D ]î\  ŠŠt          ‰t          ¦  «        r$|                     t	          ‰‰¦  «        ¦  «         Œ>t          ‰t
          ¦  «        r:|                     ˆˆfd„‰                     ¦   «         j        D ¦   «         ¦  «         Œ�t          ‰t          j
        ¦  «        r$|                     t          ‰‰¦  «        ¦  «         ŒË|                     t          ‰‰¦  «        ¦  «         Œït          |¦  «        S )Nc              3   ó:   •K  — | ]}t          ‰‰|¦  «        V — Œd S )N)rN   )Ú.0r,   r@   Úobjs     €€r)   ú	<genexpr>z5_create_default_metadata_only_plan.<locals>.<genexpr>Ò   sC   øè è € ð ð àõ -¨S°#°xÑ@Ô@ðð ð ð ð ð r+   )ÚitemsÚ
isinstancer   rl   rL   r
   Úextendr<   Úshards_metadatar%   ÚTensorrQ   rU   r   )ru   Úrequestsr@   ry   s     @@r)   Ú"_create_default_metadata_only_planr�   Ì   s&  øø€ Ø€HØ×$Ò$Ñ&Ô&ð Fð F‰ˆˆSÝ�c�7Ñ#Ô#ð 
	FØ�OŠOÕ;¸CÀÑEÔEÑFÔFÐFÐFÝ˜�]Ñ+Ô+ð 	FØ�OŠOð ð ð ð ð à #§¢¡¤Ô >ðñ ô ñ ô ð ð õ ˜�Uœ\Ñ*Ô*ð 	FØ�OŠOÕ9¸#¸sÑCÔCÑDÔDÐDÐDà�OŠOÕ:¸3ÀÑDÔDÑEÔEÐEÐEÝ�HÑÔÐr+   Úobjectc                 ó6  ‡ ‡— t          ‰d¦  «        r‰                     ‰ ‰¦  «        S t          ‰t          ¦  «        r!ˆ ˆfd„‰                     ¦   «         D ¦   «         S t          ‰t
          j        ¦  «        rt          ‰ ‰¦  «        gS t          ‰ ‰¦  «        gS )NÚ__create_write_items__c                 ó<   •— g | ]}t          ‰‰|j        ¦  «        ‘ŒS © )rN   r<   )rx   ro   r@   r‚   s     €€r)   ú
<listcomp>z'_create_write_items.<locals>.<listcomp>â   s7   ø€ ð 
ð 
ð 
àõ )¨¨f°e´nÑEÔEð
ð 
ð 
r+   )	Úhasattrr„   r|   r
   Úlocal_shardsr%   r   rQ   rU   )r@   r‚   s   ``r)   Ú_create_write_itemsrŠ   Ý   s·   øø€ ÝˆvÐ/Ñ0Ô0ð =à×,Ò,¨S°&Ñ9Ô9Ð9Ý	�F�MÑ	*Ô	*ð =ð
ð 
ð 
ð 
ð 
à×,Ò,Ñ.Ô.ð
ñ 
ô 
ð 	
õ 
�F�EœLÑ	)Ô	)ð =Ý-¨c°6Ñ:Ô:Ð;Ð;å.¨s°FÑ;Ô;Ð<Ð<r+   c                 óº   — t          | j        | j        | j        ¦  «        \  }}t	          j        |¦  «        t	          j        |¦  «        }}t          ||¬¦  «        S r.   )r   rF   rG   rH   r%   r&   r   )r   r$   r#   s      r)   Ú_create_chunk_from_dtensorrŒ   ì   s`   € Ý:ØŒ�fÔ(¨&Ô*;ñô �N€Eˆ7õ ”Z Ñ&Ô&­¬
°7Ñ(;Ô(;ˆ7€EÝØØðñ ô ð r+   c                 óL  — t          | d¦  «        r|                      ¦   «         }n~t          | t          ¦  «        rd„ |                      ¦   «         D ¦   «         }nJt          | t
          j        ¦  «        rt          | ¦  «        g}nt          dt          | ¦  «        › �¦  «        ‚|S )NÚ__create_chunk_list__c                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS r†   )r1   r<   )rx   ro   s     r)   r‡   z&_create_chunk_list.<locals>.<listcomp>ü   s0   € ð 
ð 
ð 
Ø16Õ˜Uœ^Ñ,Ô,ð
ð 
ð 
r+   zMUnsupported Type, expecting one of [Tensor, DTensor, ShardedTensor] ,but got )
rˆ   rŽ   r|   r
   r‰   r%   r   r*   Ú
ValueErrorrD   )r   rf   s     r)   Ú_create_chunk_listr‘   ÷   sÀ   € ÝˆvÐ.Ñ/Ô/ð 
à×3Ò3Ñ5Ô5ˆˆÝ	�F�MÑ	*Ô	*ð 

ð
ð 
Ø:@×:MÒ:MÑ:OÔ:Oð
ñ 
ô 
ˆˆõ 
�F�EœLÑ	)Ô	)ð 
Ý1°&Ñ9Ô9Ð:ˆˆåð'Ý˜V™œð'ð 'ñ
ô 
ð 	
ð
 Ðr+   Úmdry   c                 ó@  — t          |t          ¦  «        s[	 t          |¦  «        }n9# t          $ r,}t          d| › d�dt	          |¦  «        › �z   ¦  «        |‚d }~ww xY wt          | ||¦  «        S t          t          | ¦  «        dt          | ¦  «        dd¬¦  «        gS )Nz Invalid checkpoint metadata for z, z(expected BytesStorageMetadata but found r   r]   )r|   r   r‘   r�   rD   r   ra   r   )r@   r’   ry   rf   Úexs        r)   Ú_create_read_itemsr•   
  sÕ   € Ý�bÕ.Ñ/Ô/ð 
ð	Ý-¨cÑ2Ô2ˆLˆLøÝð 	ð 	ð 	ÝØ:°3Ð:Ð:Ð:ØG½TÀ"¹X¼XÐGÐGñHñô ð ðøøøøð	øøøõ 0°°R¸ÑFÔFÐFõ )Ý(¨Ñ-Ô-ØÝ+¨CÑ0Ô0Ø Øðñ ô ð
ð 	
s   —' §
A±'AÁAc                 óv   — dt           fd„}dt          fd„}dt          j        fd„}t	          | |||¦  «         dS )zP
    Initializes meta tensor if the meta tensor is DTensor or torch.Tensor.
    Úvaluec                 óò  — t          | dd ¦  «        }|t          j        d¦  «        k    rÍt          j                             ¦   «         j        }t          t          j        t          |¦  «         	                    ¦   «         ¦  «        }t          j
        |                      ¦   «         |¬¦  «        }t          j        || j        | j        |                      ¦   «         |                      ¦   «         ¬¦  «        }|S | S )NÚdeviceÚmeta©r™   )rG   rH   rF   Ústride)Úgetattrr%   r™   ÚdistÚdistributed_c10dÚ_get_pg_default_devicerD   r   r   Úcurrent_deviceÚ
empty_likerK   r   Ú
from_localrG   rH   r(   rœ   )r—   r™   Údevice_typeÚnew_local_tensorÚdtensors        r)   Údtensor_funcz&_init_state_dict.<locals>.dtensor_func&  sÖ   € Ý˜ ¨$Ñ/Ô/ˆØ•U”\ &Ñ)Ô)Ò)Ð)ÝÔ/×FÒFÑHÔHÔMˆKÝÝ”Õ0°Ñ=Ô=×LÒLÑNÔNñô ˆFõ  %Ô/°·²Ñ0@Ô0@ÈÐPÑPÔPÐõ Ô(Ø Ø!Ô-Ø Ô+Ø—j’j‘l”lØ—|’|‘~”~ðñ ô ˆGð ˆNàˆLr+   c                 ó˜   — t          | dd ¦  «        }|t          j        d¦  «        k    r t          dt	          | ¦  «        › d�¦  «        ‚| S )Nr™   rš   zFound unsupported type z for meta device loading.)r�   r%   r™   ÚRuntimeErrorrD   )r—   r™   s     r)   Úsharded_tensor_funcz-_init_state_dict.<locals>.sharded_tensor_func;  sU   € Ý˜ ¨$Ñ/Ô/ˆØ•U”\ &Ñ)Ô)Ò)Ð)ÝØP­$¨u©+¬+ÐPÐPÐPñô ð ð ˆLr+   c                 ó@  — t          | dd ¦  «        }|t          j        d¦  «        k    rtt          j                             ¦   «         j        }t          t          j        t          |¦  «         	                    ¦   «         ¦  «        }t          j
        | |¬¦  «        }|S | S )Nr™   rš   r›   )r�   r%   r™   rž   rŸ   r    rD   r   r   r¡   r¢   )r—   r™   r¤   r   s       r)   Útensor_funcz%_init_state_dict.<locals>.tensor_funcD  s‹   € Ý˜ ¨$Ñ/Ô/ˆØ•U”\ &Ñ)Ô)Ò)Ð)ÝÔ/×FÒFÑHÔHÔMˆKÝÝ”Õ0°Ñ=Ô=×LÒLÑNÔNñô ˆFõ Ô% e°FÐ;Ñ;Ô;ˆFØˆMàˆLr+   N)r   r   r%   r   Ú_iterate_state_dict)ru   r§   rª   r¬   s       r)   Ú_init_state_dictr®   !  s   € ð
�Gð ð ð ð ð*¥3ð ð ð ð ð
�5œ<ð 
ð 
ð 
ð 
õ ØØØØñ	ô ð ð ð r+   Úiter_objectr§   rª   r¬   c                 ót  ‡‡‡— t          | t          ¦  «        r ‰| ¦  «        S t          | t          ¦  «        r ‰| ¦  «        S t          | t          j        ¦  «        r ‰| ¦  «        S t          | t
          t          t          t          t          j
        f¦  «        s| €| S t          | t          ¦  «        r1|                      ¦   «         D ]\  }}t          |‰‰‰¦  «        | |<   Œ| S t          | t          t          f¦  «        r6ˆˆˆfd„| D ¦   «         }t          | t          ¦  «        rt          |¦  «        }|S dS )a$  
    Iterate through the state dict, applying the given functions to each tensor type
    and update the state dict in place.

    Args:
        iter_object (Any): the target state_dict.
        sharded_tensor_func (Callable): the function to apply to ShardedTensor
        dtensor_func (Callable): the function to apply to DTensor
        tensor_func (Callable): the function to apply to Tensor

    # TODO: let state_dict_util._iterate_state_dict() to support in place option
    so we don't need to have two versions of _iterate_state_dict.
    Nc                 ó4   •— g | ]}t          |‰‰‰¦  «        ‘ŒS r†   )r­   )rx   Úvr§   rª   r¬   s     €€€r)   r‡   z'_iterate_state_dict.<locals>.<listcomp>~  s8   ø€ ð 
ð 
ð 
àõ    <Ð1DÀkÑRÔRð
ð 
ð 
r+   )r|   r   r
   r%   r   ÚintÚfloatÚstrrR   ÚioÚBytesIOÚdictr{   r­   ÚlistÚtuple)r¯   r§   rª   r¬   Úkeyr—   Úrets    ```   r)   r­   r­   X  sk  øøø€ õ( �+�wÑ'Ô'ð Øˆ|˜KÑ(Ô(Ð(Ý	�K¥Ñ	/Ô	/ð Ø"Ð" ;Ñ/Ô/Ð/Ý	�K¥¤Ñ	.Ô	.ð Øˆ{˜;Ñ'Ô'Ð'å�;¥¥e­Sµ%½¼Ð DÑEÔEðàÐàÐÝ	�K¥Ñ	&Ô	&ð Ø%×+Ò+Ñ-Ô-ð 	ð 	‰JˆC�Ý2Ø�|Ð%8¸+ñ ô  ˆK˜ÑÐð ÐÝ	�K¥$­ Ñ	/Ô	/ð ð
ð 
ð 
ð 
ð 
ð 
à ð
ñ 
ô 
ˆõ �k¥5Ñ)Ô)ð 	Ý˜‘*”*ˆCØˆ
ðð r+   )<r¶   Útypingr   r   r   r   r   r%   Útorch.distributedÚdistributedrž   Útorch._utilsr   Ú!torch.distributed._shard.metadatar	   Ú'torch.distributed._shard.sharded_tensorr
   Útorch.distributed.tensorr   Útorch.distributed.tensor._utilsr   r<   r   r   r   r   r   r   r   Úplannerr   r   r   r   r   r   Ú
reshardingr   r   r   rµ   Ú__annotations__r   r*   r1   r?   rL   rN   rQ   rU   ra   rd   r   r�   rŠ   rŒ   r‘   r•   r®   r­   r†   r+   r)   ú<module>rÈ      sV  ðà 	€	€	€	€	Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø +Ð +Ð +Ð +Ð +Ð +Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø AÐ AÐ AÐ AÐ AÐ AØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø QÐ QÐ QÐ QÐ QÐ Qðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð 9Ð9€ˆˆcŒÐ 9Ð 9Ñ 9ð e¤lð Ð7Kð ð ð ð ð˜}ð Ð1Eð ð ð ð ðØ!ðØ-:ðàðð ð ð ð(¨ð °gð À)ð ð ð ð ð(Ø	ðØ+ðØ7Dðàðð ð ð ð
 sð 
°E´Lð 
ÀYð 
ð 
ð 
ð 
ð¨ð °Cð ð ð ð ð
ð 
ð 
ð
ð 
ð 
ð4Ø	ð4à(ð4ð Ð+Ô,ð4ð 
ˆ(„^ð	4ð 4ð 4ð 4ðn°?ð Àxð ð ð ð ð"=˜Sð =¨#ð =°$°y´/ð =ð =ð =ð =ð wð Ð3Gð ð ð ð ð˜uœ|ð °Ð5IÔ0Jð ð ð ð ð&
˜Cð 
 ]ð 
¸ð 
ÀÀhÄð 
ð 
ð 
ð 
ð.4  c¨3 h¤ð 4°Cð 4ð 4ð 4ð 4ðn,Øð,àð,ð "ð,ð ð	,ð ,ð ,ð ,ð ,ð ,r+   