Ë
    ÄÓ^j<  ã                   ó\  — 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 d dlZd dlm	Z	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 d dl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& d d
l'm(Z(  ejR                  e*«      Z+ejX                  e-d<   ddgZ. G d„ de
«      Z/ G d„ de	«      Z0y)é    N)ÚAny)ÚFileSystemReaderÚFileSystemWriter)Úconsolidate_safetensors_files)Ú_gen_file_nameÚ_HFStorageInfoÚ_metadata_fnÚCUSTOM_METADATA_KEYÚSAVED_OFFSETS_KEYÚSHARDED_DIR_NAMEÚSUFFIX)ÚSerializationFormat)ÚChunkStorageMetadataÚMetadataÚMetadataIndexÚStorageMetaÚTensorPropertiesÚTensorStorageMetadata)ÚLoadPlanÚLoadPlannerÚReadItemÚSavePlanÚSavePlannerÚ	WriteItem)ÚWriteResult)ÚFutureÚloggerÚHuggingFaceStorageWriterÚHuggingFaceStorageReaderc                   ó  ‡ — e Zd ZdZ	 	 	 	 	 ddedeeef   dz  dedededed	dfˆ fd
„Zde	e
   d	e	e
   fd„Zde
ded	ee	e      fˆ fd„Zdede	e	e      d	dfd„Zdeeef   dz  de	e   d	eee	e   f   fd„Zed	efd„«       Zˆ xZS )r   zP
    A writer that writes to storage in the huggingface safetensors format.
    NÚpathÚfqn_to_index_mappingÚthread_countÚsave_distributedÚenable_consolidationÚthread_count_consolidationÚreturnc                 ó6  •— t         ‰| �  |t        j                  |¬«       || _        || _        || _        d| _        | j                  rIt        | j                  «      | _        | j                  j                  | j                  t        «      | _	        || _        y)a  
        Initialize the huggingface writer pointing to path.

        Args:
            path: directory where the checkpoint will be read from.
            fqn_to_index_mapping: A mapping from tensor FQN to the index of the file that the tensor should be written to.
                              Indices are from 1 to N, where N is the number of files. If not provided,
                              the tensors will be written to a single file. If none, then all the tensors on the
                              same rank will be written to the same file.
            thread_count: Number of threads to use to write distributed checkpoint. Default to 1.
            save_distributed: If True, save the checkpoint using distributed APIs where every rank saves its own shard.
                        Default is False which assumes rank-0 checkpointing of the full state_dict.
            enable_consolidation: If True, consolidate the sharded checkpoint after saving. The sharded tensors will be
                                saved to path/sharded and the full tensors will be saved to path. Default to False.
            thread_count_consolidation: Number of threads to use for parallel processing of saving data
                                to consolidated output files. Default to 1.
        )r!   Úserialization_formatr#   N)ÚsuperÚ__init__r   ÚSAFETENSORSr"   r$   r%   Úconsolidated_output_pathÚstrr!   ÚfsÚconcat_pathr   r&   )Úselfr!   r"   r#   r$   r%   r&   Ú	__class__s          €úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/distributed/checkpoint/hf_storage.pyr+   z!HuggingFaceStorageWriter.__init__6   s‡   ø€ ô6 	‰ÑØÜ!4×!@Ñ!@Ø%ð 	ô 	
ð
 <PˆÔ!Ø&6ˆÔØ*>ˆÔ!Ø48ˆÔ%Ø×$Ò$Ü,/°·	±	«NˆDÔ)ØŸ™×+Ñ+¨D¯I©IÔ7GÓHˆDŒIØ*DˆÕ'ó    Úplansc                 óÜ   — g }t        |d¬«      D ]Y  \  }}i }| j                  �| j                  |d<   | j                  r||d<   |j                  t	        j
                  ||¬«      «       Œ[ |S )Né   )Ústartr"   Úshard_index)Ústorage_data)Ú	enumerater"   r$   ÚappendÚdataclassesÚreplace)r1   r5   Ú	new_plansÚiÚplanr:   s         r3   Úprepare_global_planz,HuggingFaceStorageWriter.prepare_global_plan_   s{   € Øˆ	Ü  ¨aÔ0ò 	S‰GˆAˆtØ+-ˆLØ×(Ñ(Ð4Ø7;×7PÑ7P�Ð3Ñ4Ø×$Ò$Ø./�˜]Ñ+à×Ñœ[×0Ñ0°ÀLÔQÕRð	Sð Ðr4   rA   Úplannerc                 ó&  •— t        |j                  «      dk(  rt        «       }|j                  g «       |S |j                  }d }d }d|v r|d   }d|v r|d   }| j                  ||j                  «      }|�t        |j                  «       «      nd}t        j                  «       }	|j                  «       D ]J  \  }
}t        |
||«      }|	j                  | j                  j                  | j                  |«      ||f«       ŒL t        ‰| �A  ||	«      S )Nr   r"   r9   r7   )ÚlenÚitemsr   Ú
set_resultr:   Ú_split_by_storage_planÚmaxÚvaluesÚqueueÚQueuer   Úputr/   r0   r!   r*   Ú_write_data)r1   rA   rC   Úfutr:   Ústorage_planr9   ÚbucketsÚhighest_indexÚ
file_queueÚ
file_indexÚwrite_itemsÚ	file_namer2   s                €r3   Ú
write_dataz#HuggingFaceStorageWriter.write_datal   s  ø€ ô
 ˆt�z‰z‹?˜aÒÜ ›(ˆCØ�N‰N˜2ÔØˆJð (,×'8Ñ'8ˆØ.2ˆØ"&ˆØ! \Ñ1Ø'Ð(>Ñ?ˆLØ˜LÑ(Ø& }Ñ5ˆKà×-Ñ-¨l¸D¿J¹JÓGˆØ6BÐ6Nœ˜L×/Ñ/Ó1Ô2ÐTUˆä"'§+¡+£-ˆ
Ø'.§}¡}£ò 	Ñ#ˆJ˜Ü& z°=À+ÓNˆIØ�N‰NØ—‘×$Ñ$ T§Y¡Y°	Ó:¸IÀ{ÐSõð	ô ‰wÑ" 7¨JÓ7Ð7r4   ÚmetadataÚresultsc                 óŽ  — | j                   r"| j                  st        j                  d«       y | j                   r|| j                  �| j                  n-t
        j                  |j                  j                  «       d«      }t        t        | j                  «      | j                  | j                  |¬«      S i }i }d}|D ]z  }|j                  |D �ci c]-  }|j                  j                   |j"                  j$                  “Œ/ c}«       |t'        |D �cg c]  }|j"                  j(                  ‘Œ c}«      z  }Œ| d|i|d<   ||d<   | j*                  j-                  | j                  t.        › «      }	| j*                  j1                  |	d«      5 }
t3        j4                  ||
d	¬
«       d d d «       y c c}w c c}w # 1 sw Y   y xY w)Nz4Not consolidating sharded checkpoint in finish step.r7   )Ú	input_dirÚ
output_dirÚnum_threadsr"   r   Ú
total_sizerX   Ú
weight_mapÚwé   )Úindent)r$   r%   r   Úinfor"   ÚdictÚfromkeysÚstate_dict_metadataÚkeysr   r.   r!   r-   r&   ÚupdateÚindexÚfqnr:   Úrelative_pathÚsumÚlengthr/   r0   r	   Úcreate_streamÚjsonÚdump)r1   rX   rY   r"   Úmetadata_to_writeÚ
storage_mdr^   Úwr_listÚwrÚmetadata_pathÚmetadata_files              r3   ÚfinishzHuggingFaceStorageWriter.finish‹   sœ  € Ø× Ò ¨×)BÒ)Bô
 �K‰KÐNÔOØØ× Ò ð ×,Ñ,Ð8ð ×)Ò)ä—]‘] 8×#?Ñ#?×#DÑ#DÓ#FÈÓJð !ô 1Ü˜dŸi™i›.Ø×8Ñ8Ø ×;Ñ;Ø%9ô	ð ð ÐØˆ
Øˆ
Øò 	JˆGØ×ÑØGNÖOÀ�—‘—‘˜rŸ™×<Ñ<Ñ<ÒOôð œ#ÀÖH¸"˜rŸ™×5Ó5ÒHÓIÑI‰Jð		Jð
 *6°zÐ(BÐ˜*Ñ%Ø*4Ð˜,Ñ'àŸ™×+Ñ+¨D¯I©I¼,¸ÓIˆØ�W‰W×"Ñ" =°#Ó6ð 	B¸-Ü�I‰IÐ'¨¸qÕA÷	Bð 	Bùò PùâH÷
	Bð 	Bús   Ã2F1
ÄF6ÆF;Æ;GrP   rF   c                 ó˜   — |€d|iS i }|D ]<  }|j                   j                  }||   }||vr|g||<   Œ)||   j                  |«       Œ> |S )Nr7   )ri   rj   r<   )r1   rP   rF   rQ   ÚitemÚkeyÚidxs          r3   rH   z/HuggingFaceStorageWriter._split_by_storage_plan²   sk   € ð ÐØ�u�:ÐàˆØò 	*ˆDØ—*‘*—.‘.ˆCà˜sÑ#ˆCØ˜'Ñ!Ø $˜v�˜’à˜‘×#Ñ# DÕ)ð	*ð ˆr4   c                 ó   — t         S ©N)r	   )r1   s    r3   ru   z&HuggingFaceStorageWriter.metadata_pathÅ   s   € äÐr4   )Nr7   FFr7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   rd   ÚintÚboolr+   Úlistr   rB   r   r   r   rW   r   rw   r   rH   Úpropertyru   Ú__classcell__©r2   s   @r3   r   r   1   s>  ø„ ñð 7;ØØ!&Ø%*Ø*+ñ'Eàð'Eð # 3¨ 8™n¨tÑ3ð'Eð ð	'Eð
 ð'Eð #ð'Eð %(ð'Eð 
õ'EðR¨¨h©ð ¸DÀ¹Nó ð8àð8ð ð8ð 
��[Ñ!Ñ	"õ	8ð>%B˜xð %B°$°t¸KÑ7HÑ2Ið %BÈdó %BðNØ   c ™N¨TÑ1ðØ:>¸y¹/ðà	ˆc�4˜	‘?Ð"Ñ	#óð& ð˜sò ó ôr4   c                   ó¬   ‡ — e Zd ZdZddededdfˆ fd„Zdededdfd	„Z	d
e
j                  de
j                  deddfd„Zdededed   fd„Zdefd„Zˆ xZS )r   zQ
    A reader that reads a checkpoint in the huggingface safetensors format.
    r!   r#   r'   Nc                 ó4   •— t         ‰| �  |¬«       || _        y)zù
        Initialize the huggingface reader pointing to path.

        Args:
            path: directory where the checkpoint will be read from.
            thread_count: Number of threads to use to read distributed checkpoint. Default to 1.
        )r!   N)r*   r+   r#   )r1   r!   r#   r2   s      €r3   r+   z!HuggingFaceStorageReader.__init__Ï   s   ø€ ô 	‰Ñ˜dÐÔ#Ø(ˆÕr4   ÚreqrC   c           	      óî  — t        d„ t        |j                  |j                  «      D «       «      }|j	                  |j
                  j                  «      |   }|j                  |«      j                  «       }|j                  «       |j                  «       k7  r:t        d|j
                  › d|j                  «       › d|j                  «       › �«      ‚|j                  |«       |j                  ||«       y)z1Helper function to process a single read request.c              3   ó@   K  — | ]  \  }}t        |||z   «      –— Œ y ­wr}   )Úslice)Ú.0Úoffsetrm   s      r3   ú	<genexpr>zAHuggingFaceStorageReader._process_read_request.<locals>.<genexpr>Þ   s'   è ø€ ò 
á�˜ô �&˜& 6™/×*ñ
ùs   ‚zreq z mismatch sizes z vs N)ÚtupleÚzipÚstorage_offsetsÚlengthsÚ	get_sliceÚstorage_indexrj   Úresolve_tensorÚdetachÚsizeÚAssertionErrorÚcopy_Úcommit_tensor)r1   ÚfrŠ   rC   ÚslicesÚtensorÚtarget_tensors          r3   Ú_process_read_requestz.HuggingFaceStorageReader._process_read_requestÛ   sÝ   € ô ñ 
ä"% c×&9Ñ&9¸3¿;¹;Ó"Gô
ó 
ˆð —‘˜S×.Ñ.×2Ñ2Ó3°FÑ;ˆØ×.Ñ.¨sÓ3×:Ñ:Ó<ˆà×ÑÓ 6§;¡;£=Ò0Ü Ø�s×(Ñ(Ð)Ð)9¸-×:LÑ:LÓ:NÐ9OÈtÐTZ×T_ÑT_ÓTaÐSbÐcóð ð 	×Ñ˜FÔ#Ø×Ñ˜c =Õ1r4   rS   Úresult_queuec                 ó  — ddl m} 	 	 |j                  «       \  }} ||d¬«      5 }|D ]  }| j                  |||«       Œ 	 d d d «       |j	                  d«       ŒS# 1 sw Y   ŒxY w# t
        j                  $ r Y y w xY w)Nr   ©Ú	safe_openTÚpt©ÚfilenameÚ	framework)Úsafetensorsr¥   Ú
get_nowaitr¡   rM   rK   ÚEmpty)	r1   rS   r¢   rC   r¥   rV   Úreqsr�   rŠ   s	            r3   Ú_read_files_from_queuez/HuggingFaceStorageReader._read_files_from_queueí   s•   € õ 	*ð	ØØ",×"7Ñ"7Ó"9‘�	˜4Ù¨	¸TÔBð DÀaØ#ò D˜Ø×2Ñ2°1°c¸7ÕCñD÷Dð × Ñ  Ô&ð ÷Dð Dûô �{‰{ò 	Ùð	ús(   ˆA( ¦AÁA( ÁA%Á!A( Á(A>Á=A>rA   c                 óT  — ddl m} i }|j                  D ]H  }| j                  |j                     }|j
                  }|j                  |g «      j                  |«       ŒJ | j                  dk  st        |«      dk  rG|j                  «       D ]3  \  }} ||d¬«      5 }	|D ]  }
| j                  |	|
|«       Œ 	 d d d «       Œ5 nút        j                  «       }t        j                  «       }|j                  «       D ]  \  }}|j                  ||f«       Œ g }t        | j                  t        |«      «      }t        |«      D ]G  }t!        j"                  | j$                  |||f¬«      }|j'                  «        |j                  |«       ŒI |D ]  }|j)                  «        Œ d}	 	 |j+                  «        |dz  }Œt1        «       }|j3                  d «       |S # 1 sw Y   �ŒXxY w# t        j,                  $ r Y nw xY w|t        |«      k7  sŒRt/        d|› dt        |«      › �«      ‚)	Nr   r¤   r7   r¦   r§   )ÚtargetÚargszNot all files were processed: z out of )rª   r¥   rF   r:   r–   rk   Ú
setdefaultr<   r#   rE   r¡   rK   rL   rM   ÚminÚrangeÚ	threadingÚThreadr®   r8   Újoinr«   r¬   rš   r   rG   )r1   rA   rC   r¥   Úper_fileÚ	read_itemÚitem_mdrV   r­   r�   rŠ   rS   r¢   Úthreadsr]   Ú_ÚtÚprocessed_countrO   s                      r3   Ú	read_dataz"HuggingFaceStorageReader.read_dataÿ   s8  € Ý)à.0ˆàŸ™ò 	AˆIØ&*×&7Ñ&7¸	×8OÑ8OÑ&PˆGØ×-Ñ-ˆIØ×Ñ 	¨2Ó.×5Ñ5°iÕ@ð	Að
 ×Ñ Ò!¤S¨£]°aÒ%7Ø#+§>¡>Ó#3ò D‘�	˜4Ù¨	¸TÔBð DÀaØ#ò D˜Ø×2Ñ2°1°c¸7ÕCñD÷Dð DñDô ',§k¡k£mˆJÜ(-¯©«ˆLð $,§>¡>Ó#3ò 2‘�	˜4Ø—‘ 	¨4Ð0Õ1ð2ð ˆGÜ˜d×/Ñ/´°X³Ó?ˆKÜ˜;Ó'ò "�Ü×$Ñ$Ø×6Ñ6Ø$ l°GÐ<ô�ð —‘”	Ø—‘˜qÕ!ð"ð ò �Ø—‘•ðð  ˆOðØØ ×+Ñ+Ô-Ø# qÑ(�Oð ô “hˆØ�‰�tÔØˆ
÷WDñ DûôB —;‘;ò Ùðúð ¤# h£-Ó/Ü$Ø4°_Ð4EÀXÌcÐRZËmÈ_Ð]óð s   ÂGÆ'G( ÇG%	Ç(G>Ç=G>c                 ó‚  — ddl m} ddlm} i }i }g }| j                  j                  | j                  «      D ])  }|j                  t        «      sŒ|j                  |«       Œ+ |D �]~  } ||d¬«      5 }|j                  «       }	|j                  «       }
d }|
r=|
j                  t        «      r(t        j                  |
j                  t        «      «      }|	D �]   }|j!                  |«      j#                  «       }|j!                  |«      j%                  «       }|�||   t&           }ndgt)        |«      z  }||vr‡t+        t-         ||«      ¬«      t/        j0                  t3        ||«      D ��cg c]
  \  }}||z   ‘Œ c}}«      t5        t/        j0                  «      t/        j0                  |«      ¬«      g¬«      ||<   n¸||   j6                  j                  t5        t/        j0                  |«      t/        j0                  |«      ¬	«      «       t9        ||   j:                  «      }t=        t)        |«      «      D ]  }t?        ||   ||   ||   z   «      ||<   Œ t/        j0                  |«      ||   _        |�tA        |||   t&           ¬
«      }ntA        |dgt)        |«      z  ¬
«      }tC        |t/        j0                  |«       ||«      ¬«      ||<   �Œ 	 d d d «       �Œ� tE        ||¬«      }tG        |dd «      €tI        «       |_%        | jL                  |jJ                  _&        |S c c}}w # 1 sw Y   �ŒØxY w)Nr   r¤   )Ú	_getdtyper¦   )r©   )Údtype)ÚoffsetsÚsizes)Ú
propertiesr™   Úchunks)rÄ   )rj   r�   )rk   ÚshaperÂ   )rf   r:   Ústorage_meta)'rª   r¥   Úsafetensors.torchrÁ   r/   Úlsr!   Úendswithr   r<   rg   rX   Úgetr
   ro   Úloadsr•   Ú	get_shapeÚ	get_dtyper   rE   r   r   ÚtorchÚSizer’   r   rÆ   r„   r™   r´   rI   r   r   r   Úgetattrr   rÈ   Úload_id)r1   r¥   rÁ   rf   r:   Úsafetensors_filesÚfileÚsafetensor_filer�   rg   Úextra_metadataÚdcp_sharding_inforz   rÇ   rÂ   r�   Úsavedr™   r@   Úmetadata_indexrX   s                        r3   Úread_metadataz&HuggingFaceStorageReader.read_metadata9  s  € Ý)Ý/à@BÐØ<>ˆàÐØ—G‘G—J‘J˜tŸy™yÓ)ò 	/ˆDØ�}‰}œVÕ$Ø!×(Ñ(¨Õ.ð	/ð  1ó 7	ˆOÙ˜?°dÔ;ð 6¸qØ—v‘v“x�Ø!"§¡£�à$(Ð!Ù! n×&8Ñ&8Ô9LÔ&MÜ(,¯
©
Ø&×*Ñ*Ô+>Ó?ó)Ð%ð  ó ,�CØŸK™K¨Ó,×6Ñ6Ó8�EØŸK™K¨Ó,×6Ñ6Ó8�Eà(Ð4Ø!2°3Ñ!7Ô8IÑ!J™à"# ¤s¨5£zÑ!1˜àÐ"5Ñ5Ü3HÜ'7¹iÈÓ>NÔ'OÜ!&§¡ÜEHÈÐPVÓEW× X±M°E¸6 ¨£Ó Xó"ô !5Ü,1¯J©J°vÓ,>Ü*/¯*©*°UÓ*;ô!"ð$ô4Ð+¨CÒ0ð ,¨CÑ0×7Ñ7×>Ñ>Ü0Ü %§
¡
¨6Ó 2¼%¿*¹*ÀUÓ:Kôôô
  $Ð$7¸Ñ$<×$AÑ$AÓB˜Ü!&¤s¨4£yÓ!1ò I˜AÜ&)¨$¨q©'°5¸±8¸fÀQ¹iÑ3GÓ&H˜D šGðIä8=¿
¹
À4Ó8HÐ+¨CÑ0Ô5ð )Ð4Ü)6Ø #Ð,=¸cÑ,BÔCTÑ,Uô*™ô *7¸3ÈÀsÌSÐQVËZÑGWÔ)X˜Ü3AØ&5Ü#Ÿj™j¨Ó/Ù'¨Ó.ô4�L Ó0ñQ,÷6ñ 6ð7	ôr Ø 3Ø%ô
ˆô
 �8˜^¨TÓ2Ð:Ü$/£MˆHÔ!Ø(,¯©ˆ×ÑÔ%àˆùóU !Y÷/6ñ 6ús    Á4C<L4Å0L.Å?EL4Ì.L4Ì4L>	)r7   )r~   r   r€   r�   r.   r‚   r+   r   r   r¡   rK   rL   r®   r   r   r¿   r   rÛ   r†   r‡   s   @r3   r   r   Ê   sœ   ø„ ññ
)˜Sð 
)°ð 
)¸Dõ 
)ð2¨Hð 2¸{ð 2Ètó 2ð$à—K‘Kðð —k‘kðð ð	ð
 
óð$7˜hð 7°ð 7ÀÈÁó 7ðtN˜x÷ Nr4   )1r=   ro   ÚloggingrK   rµ   Útypingr   rÐ   Útorch.distributed.checkpointr   r   Ú8torch.distributed.checkpoint._consolidate_hf_safetensorsr   Ú&torch.distributed.checkpoint._hf_utilsr   r   r	   r
   r   r   r   Ú'torch.distributed.checkpoint.filesystemr   Ú%torch.distributed.checkpoint.metadatar   r   r   r   r   r   Ú$torch.distributed.checkpoint.plannerr   r   r   r   r   r   Ú$torch.distributed.checkpoint.storager   Útorch.futuresr   Ú	getLoggerr~   r   ÚLoggerÚ__annotations__Ú__all__r   r   © r4   r3   ú<module>rë      sš   ðä Û Û Û Û Ý ã ß Kõ÷÷ ñ õ H÷÷ ÷÷ õ =Ý  ð +˜×*Ñ*¨8Ó4€ˆ�‰Ó 4à%Ð'AÐ
B€ôVÐ/ô Vôr}Ð/õ }r4   