Ë
    g^(h?  ã            	       ó¦  — U d dl Z d dl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dede)fd„Z*de&e   de&e   de&e   fd„Z+dejX                  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„Z0de'dedede fd„Z1de'dejX                  de fd„Z2de'defd „Z3d!„ Z4d"„ Z5de'd#ed$e&e   de&e   fd%„Z6d&edefd'„Z7de'd(ede&e    fd)„Z8dedefd*„Z9dejX                  de&e   fd+„Z:de'd,ed-ede&e   fd.„Z;d&e<e'ef   defd/„Z=d0ed1ed2ed3efd4„Z>y)5é    N)ÚAnyÚCallableÚcast)Ú_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__ÚplanÚ
other_planÚreturnc                 ó"  — | j                   |j                   k7  ryt        | j                  «      t        |j                  «      k7  ryt        | j                  |j                  «      D �]%  \  }}|j                  |j                  k7  r y|j
                  }|j
                  }|j                  |j                  k7  s2|j                  |j                  k7  s|j
                  |j
                  k7  r y|j                  }|j                  }|r|r|s|r y|sŒ¬|sŒ¯|j                  |j                  k7  r y|j                  }|j                  }	|r|	r|s|	r y|sŒï|	sŒò|j                  |	j                  k7  s|j                  |	j                  k7  s�Œ& y y)a  
    Compare the two Save plans and return True if they are equal.

    Args:
        plan (SavePlan): First SavePlan to compare.
        other_plan (SavePlan): Second SavePlan to compare.

    Returns:
       True if the two plans are equal, False otherwise.
    FT)ÚusableÚlenÚitemsÚzipÚtypeÚindexÚfqnÚoffsetÚtensor_dataÚsizeÚchunkÚoffsetsÚsizes)
r   r   Ú	plan_itemÚother_plan_itemÚplan_metadata_indexÚother_plan_metadata_indexr)   Úother_tensor_datar+   Úother_chunks
             új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/distributed/checkpoint/planner_helpers.pyÚ_compare_save_plansr5   '   sn  € ð ‡{�{�j×'Ñ'Ò'Øô ˆ4�:‰:ƒœ#˜j×.Ñ.Ó/Ò/Øô '*¨$¯*©*°j×6FÑ6FÓ&Gó )!Ñ"ˆ	�?à�>‰>˜_×1Ñ1Ò1Ùà'Ÿo™oÐØ$3×$9Ñ$9Ð!ð  ×#Ñ#Ð'@×'DÑ'DÒDØ"×)Ñ)Ð-F×-MÑ-MÒMØ"×(Ñ(Ð,E×,KÑ,KÒKáð  ×+Ñ+ˆØ+×7Ñ7ÐÙÑ 1ÙÑ 1áâÒ,à×ÑÐ#4×#9Ñ#9Ò9Ùð  ×%Ñ%ˆEØ+×1Ñ1ˆKÙ™k±5¹[Ùò šà—M‘M [×%8Ñ%8Ò8Ø—{‘{ k×&7Ñ&7Ô7á ðS)!ðV ó    Úcached_plansÚdelta_plansc                 ó”   — g }t        | |«      D ]6  \  }}|r|j                  s|j                  |«       Œ&|j                  |«       Œ8 |S )ac  
    Merge a list of delta plans into a single plan.

    Args:
        cached_plans (List[SavePlan]): A list of cached plans.
        delta_plans (List[SavePlan]): A list of delta plans to merge. It can contain empty plans

    Returns:
        A single merged plan. If a delta plan is not usable, use the cached plan. Otherwise, use the delta plan.
    )r$   r!   Úappend)r7   r8   Úmerged_plansÚcached_planÚ
delta_plans        r4   Ú_merge_delta_local_plansr>   h   sS   € ð €Lä#& |°[Ó#Aò ,Ñˆ�ZÙ˜j×/Ò/Ø×Ñ Õ,à×Ñ 
Õ+ð	,ð Ðr6   Útensorc           	      ó”   — t        t        j                  dgt        | j	                  «       «      z  «      | j	                  «       ¬«      S )Nr   ©r,   r-   )r   ÚtorchÚSizer"   r*   )r?   s    r4   Ú_create_chunk_from_tensorrD   �   s5   € ÜÜ—
‘
˜A˜3¤ V§[¡[£]Ó!3Ñ3Ó4¸F¿K¹K»Môð r6   Úshard_mdc                 ó�   — t        t        j                  | j                  «      t        j                  | j                  «      ¬«      S ©NrA   )r   rB   rC   Úshard_offsetsÚshard_sizes)rE   s    r4   Ú_chunk_for_shardrJ   ‡   s3   € ÜÜ—
‘
˜8×1Ñ1Ó2Ü�j‰j˜×-Ñ-Ó.ôð r6   Úsharded_tensorc                 ó  — | j                  «       j                  }t        |j                  |j                  |j
                  |j                  |j                  ¬«      }t        t        |«      || j                  «       j                  ¬«      S )N)ÚdtypeÚlayoutÚrequires_gradÚmemory_formatÚ
pin_memory©r+   Ú
propertiesr*   )ÚmetadataÚtensor_propertiesr   rM   rN   rO   rP   rQ   r   rJ   r*   )rK   rE   Úshard_propertiesrS   s       r4   Ú_sharded_tensor_metadatarW   Ž   s|   € ð &×.Ñ.Ó0×BÑBÐä!Ø×$Ñ$Ø×&Ñ&Ø&×4Ñ4Ø&×4Ñ4Ø#×.Ñ.ô€Jô Ü˜xÓ(ØØ×$Ñ$Ó&×+Ñ+ôð r6   r'   c                 óŠ  — t        |j                  |j                  |j                  «      \  }}t	        j
                  |«      t	        j
                  |«      }}t        t        | |«      t        j                  t        t        ||¬«      t        j                  |j                  «       «      |j                  «       ¬«      ¬«      S )NrA   rR   ©r&   r%   r)   )r
   ÚshapeÚdevice_meshÚ
placementsrB   rC   r   r   r   ÚSHARDr   r   r   Úcreate_from_tensorÚto_localr*   )r'   r?   r-   r,   s       r4   Ú_create_write_items_for_dtensorr`   ¢   sš   € Ü:Ø�‰�f×(Ñ(¨&×*;Ñ*;ó�N€Eˆ7ô —Z‘Z Ó&¬¯
©
°7Ó(;ˆ7€EäÜ˜C Ó)Ü× Ñ Ü#Ü&ØØôô (×:Ñ:¸6¿?¹?Ó;LÓMØ—‘“ô
ôð r6   c                 ó    — t        j                  |j                  «      }t        t	        | |«      t
        j                  t        ||«      ¬«      S )NrY   )rB   rC   rH   r   r   r   r]   rW   )r'   rK   rE   r,   s       r4   Ú_create_write_item_for_shardrb   ¶   sB   € ô �j‰j˜×/Ñ/Ó0€GÜÜ˜C Ó)Ü× Ñ Ü,¨^¸XÓFôð r6   c                 ó:  — t        j                  dgt        |j                  «       «      z  «      }t	        t        | |«      t        j                  t        t        ||j                  «       ¬«      t        j                  |«      |j                  «       ¬«      ¬«      S )Nr   rA   rR   rY   )rB   rC   r"   r*   r   r   r   ÚTENSORr   r   r   r^   )r'   r?   r,   s      r4   Ú_create_write_item_for_tensorre   Á   sq   € Ü�j‰j˜!˜œs 6§;¡;£=Ó1Ñ1Ó2€GÜÜ˜C Ó)Ü×!Ñ!Ü#Ü&¨w¸f¿k¹k»mÔLÜ'×:Ñ:¸6ÓBØ—‘“ô
ôð r6   Úbytesc                 óJ   — t        t        | «      t        j                  ¬«      S )N)r&   r%   )r   r   r   ÚBYTE_IO)r'   rf   s     r4   Ú_create_write_item_for_bytesiori   Î   s    € ÜÜ˜CÓ Ü×"Ñ"ôð r6   c           
      ó¸   — t        t        j                  | t        j                  |f«      |t        j                  |f«      t        j                  |f«      ¬«      S ©N)r%   Ú
dest_indexÚdest_offsetsÚstorage_indexÚstorage_offsetsÚlengths)r   r   rh   rB   rC   ©rl   Údest_offsetrn   Ústorage_offsetÚlengths        r4   Ú_create_read_item_for_byteioru   Õ   sK   € ô Ü×!Ñ!ØÜ—Z‘Z  Ó/Ø#ÜŸ
™
 NÐ#4Ó5Ü—
‘
˜F˜9Ó%ôð r6   c           
      ó²   — t        t        j                  | t        j                  |«      |t        j                  |«      t        j                  |«      ¬«      S rk   )r   r   rd   rB   rC   ©rl   rm   rn   ro   rp   s        r4   Ú_create_read_item_for_tensorrx   â   sD   € ô Ü× Ñ ØÜ—Z‘Z Ó-Ø#ÜŸ
™
 ?Ó3Ü—
‘
˜7Ó#ôð r6   Úcheckpoint_mdÚlocal_chunksc                 ó¶  — g }t        |«      D ]È  \  }}t        |j                  «      D ]«  \  }}t        ||«      sŒg }g }	g }
t        ||¬«      D ]:  \  }}}}|j	                  |«       |	j	                  |«       |
j	                  |«       Œ< |j	                  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_shardrw   )Ú	enumerateÚchunksr   r   r:   rx   r   r,   )r'   ry   rz   Ú
read_itemsÚidxÚshardÚstorage_idxÚ
storage_mdro   rm   rp   Ú_dimÚoffset_for_saved_tensorÚoffset_for_current_tensorrt   s                  r4   r   r   ï   sý   € ð* €Jä Ó-ò ‰
ˆˆUÜ'0°×1EÑ1EÓ'Fò 	Ñ#ˆK˜Ü5°e¸ZÔHØà ˆOØˆLØˆGô =Ø&°eôò
'ñ ØØ'Ø)Øð  ×&Ñ&Ð'>Ô?Ø×#Ñ#Ð$=Ô>Ø—‘˜vÕ&ð
'ð ×ÑÜ,Ü,¨S°%·-±-ÀÓEØ!-Ü"/°°Z×5GÑ5GÈÓ"UØ$3Ø#ôõñ'	ðð: Ðr6   Ú
state_dictc                 óÒ  ‡‡— g }| j                  «       D ]Æ  \  ŠŠt        ‰t        «      r|j                  t	        ‰‰«      «       Œ2t        ‰t
        «      r4|j                  ˆˆfd„‰j                  «       j                  D «       «       Œvt        ‰t        j                  «      r|j                  t        ‰‰«      «       Œ¬|j                  t        ‰‰«      «       ŒÈ t        |«      S )Nc              3   ó8   •K  — | ]  }t        ‰‰|«      –— Œ y ­w)N)rb   )Ú.0rE   r'   Úobjs     €€r4   ú	<genexpr>z5_create_default_metadata_only_plan.<locals>.<genexpr>,  s"   øè ø€ ò àô -¨S°#°x×@ñùs   ƒ)r#   Ú
isinstancer	   r:   r`   r   ÚextendrT   Úshards_metadatarB   ÚTensorre   ri   r   )rˆ   Úrequestsr'   rŒ   s     @@r4   Ú"_create_default_metadata_only_planr“   &  s¸   ù€ Ø€HØ×$Ñ$Ó&ò F‰ˆˆSÜ�cœ7Ô#Ø�O‰OÔ;¸CÀÓEÕFÜ˜œ]Ô+Ø�O‰Oô à #§¡£× >Ñ >ôõ ô ˜œUŸ\™\Ô*Ø�O‰OÔ9¸#¸sÓCÕDà�O‰OÔ:¸3ÀÓDÕEðFô �HÓÐr6   Úobjectc                 ó6  — t        |d«      r|j                  | |«      S t        |t        «      r3|j	                  «       D �cg c]  }t        | ||j                  «      ‘Œ c}S t        |t        j                  «      rt        | |«      gS t        | |«      gS c c}w )NÚ__create_write_items__)Úhasattrr–   rŽ   r   Úlocal_shardsrb   rT   rB   r‘   re   ri   )r'   r”   r‚   s      r4   Ú_create_write_itemsr™   7  s’   € ÜˆvÐ/Ô0à×,Ñ,¨S°&Ó9Ð9Ü	�FœMÔ	*ð  ×,Ñ,Ó.ö
àô )¨¨f°e·n±nÕEò
ð 	
ô 
�FœEŸL™LÔ	)Ü-¨c°6Ó:Ð;Ð;ä.¨s°FÓ;Ð<Ð<ùò
s   ÁBc                 óÌ   — t        | j                  | j                  | j                  «      \  }}t	        j
                  |«      t	        j
                  |«      }}t        ||¬«      S rG   )r
   rZ   r[   r\   rB   rC   r   )r?   r-   r,   s      r4   Ú_create_chunk_from_dtensorr›   F  sW   € Ü:Ø�‰�f×(Ñ(¨&×*;Ñ*;ó�N€Eˆ7ô —Z‘Z Ó&¬¯
©
°7Ó(;ˆ7€EÜØØôð r6   c                 óJ  — t        | d«      r| j                  «       }|S t        | t        «      r2| j	                  «       D �cg c]  }t        |j                  «      ‘Œ }}|S t        | t        j                  «      rt        | «      g}|S t        dt        | «      › �«      ‚c c}w )NÚ__create_chunk_list__zMUnsupported Type, expecting one of [Tensor, DTensor, ShardedTensor] ,but got )r—   r�   rŽ   r   r˜   rJ   rT   rB   r‘   rD   Ú
ValueErrorr%   )r?   rz   r‚   s      r4   Ú_create_chunk_listrŸ   Q  s°   € ÜˆvÐ.Ô/à×3Ñ3Ó5ˆð Ðô 
�FœMÔ	*à:@×:MÑ:MÓ:Oö
Ø16Ô˜UŸ^™^Õ,ð
ˆð 
ð Ðô 
�FœEŸL™LÔ	)Ü1°&Ó9Ð:ˆð Ðô ðÜ˜V›�~ð'ó
ð 	
ùò
s   ÁB ÚmdrŒ   c                 óú   — t        |t        «      s	 t        |«      }t        | ||«      S t        t        | «      dt        | «      dd¬«      gS # t        $ r$}t        d| › d�dt	        |«      › �z   «      |‚d }~ww xY w)Nz Invalid checkpoint metadata for z, z(expected BytesStorageMetadata but found r   rq   )rŽ   r   rŸ   rž   r%   r   ru   r   )r'   r    rŒ   rz   Úexs        r4   Ú_create_read_itemsr£   d  sž   € Ü�bÔ.Ô/ð	Ü-¨cÓ2ˆLô 0°°R¸ÓFÐFô )Ü(¨Ó-ØÜ+¨CÓ0Ø Øôð
ð 	
øô ò 	ÜØ2°3°%°rÐ:Ø<¼TÀ"»X¸JÐGñHóð ðûð	ús   ’A Á	A:ÁA5Á5A:c                 óp   — dt         fd„}dt        fd„}dt        j                  fd„}t	        | |||«       y)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                  «       j                  }t        t        j                  t        |«      j                  «       «      }t        j                  | j                  «       |¬«      }t        j                  || j                  | j                  | j!                  «       | j#                  «       ¬«      }|S | S )NÚdeviceÚmeta©r§   )r[   r\   rZ   Ústride)ÚgetattrrB   r§   ÚdistÚdistributed_c10dÚ_get_pg_default_devicer%   r   r   Úcurrent_deviceÚ
empty_liker_   r	   Ú
from_localr[   r\   r*   rª   )r¥   r§   Údevice_typeÚnew_local_tensorÚdtensors        r4   Údtensor_funcz&_init_state_dict.<locals>.dtensor_func€  s¾   € Ü˜ ¨$Ó/ˆØ”U—\‘\ &Ó)Ò)Ü×/Ñ/×FÑFÓH×MÑMˆKÜÜ—‘Ô0°Ó=×LÑLÓNóˆFô  %×/Ñ/°·±Ó0@ÈÔPÐô ×(Ñ(Ø Ø!×-Ñ-Ø ×+Ñ+Ø—j‘j“lØ—|‘|“~ôˆGð ˆNàˆLr6   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«   rB   r§   ÚRuntimeErrorr%   )r¥   r§   s     r4   Úsharded_tensor_funcz-_init_state_dict.<locals>.sharded_tensor_func•  sF   € Ü˜ ¨$Ó/ˆØ”U—\‘\ &Ó)Ò)ÜØ)¬$¨u«+¨Ð6OÐPóð ð ˆLr6   c                 ó4  — t        | dd «      }|t        j                  d«      k(  rrt        j                  j                  «       j                  }t        t        j                  t        |«      j                  «       «      }t        j                  | |¬«      }|S | S )Nr§   r¨   r©   )r«   rB   r§   r¬   r­   r®   r%   r   r   r¯   r°   )r¥   r§   r²   r?   s       r4   Útensor_funcz%_init_state_dict.<locals>.tensor_funcž  s{   € Ü˜ ¨$Ó/ˆØ”U—\‘\ &Ó)Ò)Ü×/Ñ/×FÑFÓH×MÑMˆKÜÜ—‘Ô0°Ó=×LÑLÓNóˆFô ×%Ñ% e°FÔ;ˆFØˆMàˆLr6   N)r	   r   rB   r‘   Ú_iterate_state_dict)rˆ   rµ   r¸   rº   s       r4   Ú_init_state_dictr¼   {  s@   € ð
œGó ð*¤3ó ð
œ5Ÿ<™<ó 
ô ØØØØõ	r6   Úiter_objectrµ   r¸   rº   c           	      ó*  — 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        «      r+| j                  «       D ]  \  }}t        ||||«      | |<   Œ | S t        | t        t        f«      r8| D �cg c]  }t        ||||«      ‘Œ }}t        | t        «      rt        |«      }|S yc c}w )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.
    N)rŽ   r	   r   rB   r‘   ÚintÚfloatÚstrrf   ÚioÚBytesIOÚdictr#   r»   ÚlistÚtuple)r½   rµ   r¸   rº   Úkeyr¥   ÚvÚrets           r4   r»   r»   ²  s  € ô( �+œwÔ'Ù˜KÓ(Ð(Ü	�K¤Ô	/Ù" ;Ó/Ð/Ü	�K¤§¡Ô	.Ù˜;Ó'Ð'ä�;¤¤e¬S´%¼¿¹Ð DÔEØÐàÐÜ	�K¤Ô	&Ø%×+Ñ+Ó-ò 	‰JˆC�Ü2Ø�|Ð%8¸+ó ˆK˜Òð	ð ÐÜ	�K¤$¬ Ô	/ð !ö
àô    <Ð1DÀkÕRð
ˆð 
ô �k¤5Ô)Ü˜“*ˆCØˆ
ð 
0ùò
s   ÃD)?rÂ   Útypingr   r   r   rB   Útorch.distributedÚdistributedr¬   Útorch._utilsr   Ú!torch.distributed._shard.metadatar   Ú'torch.distributed._shard.sharded_tensorr   Útorch.distributed.tensorr	   Útorch.distributed.tensor._utilsr
   rT   r   r   r   r   r   r   r   Úplannerr   r   r   r   r   r   Ú
reshardingr   r   r   rÅ   rÁ   Ú__annotations__Úboolr5   r>   r‘   rD   rJ   rW   r`   rb   re   ri   ru   rx   r   r“   r™   r›   rŸ   r£   rÄ   r¼   r»   © r6   r4   ú<module>r×      s]  ðä 	ß &Ñ &ã Ý  Ý +Ý ;Ý AÝ ,Ý Q÷÷ ñ ÷÷ ÷ð 9Ð9€ˆˆc‰Ó 9ð>˜hð >°Hð >Àó >ðBØ�x‘.ðà�h‘ðð 
ˆ(�^óð2 e§l¡lð Ð7Kó ð˜}ð Ð1Eó ðØ!ðØ-:ðàóð(¨ð °gð À)ó ð(Ø	ðØ+ðØ7Dðàóð
 sð 
°E·L±Lð 
ÀYó 
ð¨ð °Có ò
ò
ð4Ø	ð4à(ð4ð Ð+Ñ,ð4ð 
ˆ(�^ó	4ðn°?ð Àxó ð"=˜Sð =¨#ð =°$°y±/ó =ð wð Ð3Gó ð˜uŸ|™|ð °Ð5IÑ0Jó ð&
˜Cð 
 ]ð 
¸ð 
ÀÀhÁó 
ð.4  c¨3 h¡ð 4°Có 4ðn,Øð,àð,ð "ð,ð ô	,r6   