o
    Tim                     @   s   d dl Z d dlZd dlZddlmZ d dlmZmZ d dlm	Z	 ddl
mZ G dd	 d	eZed
krGedddZe D ]\ZZeeej q<dS dS )    N   )CheckpointEngineBase)IterableTuple)partial   )inference_loggerc                       sP   e Zd Zddededdf fddZdd Zdeeeej	f  fd	d
Z
  ZS )HuggingFaceCheckpointEngineNmodel_name_or_path
auth_tokenreturnc                    s   t    ddlm}m} || _|| _|j| jfi || _t	| jds<t	| jdr1| jj
| j_n|| j}|j| j_d | _|  | _d S )Nr   )
AutoConfigGenerationConfigmax_seq_lengthmax_position_embeddings)super__init__transformersr   r   r
   r   from_pretrainedmodel_confighasattrr   r   
max_length_local_checkpoint_dir_fetch_checkpoint_files_all_ckpt_paths)selfr
   r   	hf_kwargsr   r   generation_config	__class__ h/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/inference/v2/checkpoint/huggingface_engine.pyr      s   

z$HuggingFaceCheckpointEngine.__init__c                    s<  ddl m}m  dtdtf fdd}tjjrj_	n|jr)ddg}ng d	}|j|d
j
d_	tjj	sHJ dj	 d|j	r[ddlm} d}d}|_nd}d}ttjddd_tjj	|}tj|stjj	|g}|S tt|d}	|	d }
t|
 }fdd|D }|S )zF
        Fetch the checkpoint files from the HuggingFace Hub.
        r   )snapshot_downloadlist_repo_treer
   r   c                    sH   t j| rt | }n	dd  | D }|D ]
}|dr! dS qdS )Nc                 S   s   g | ]}|j qS r    )path).0rfr    r    r!   
<listcomp>1   s    zfHuggingFaceCheckpointEngine._fetch_checkpoint_files.<locals>.model_has_safetensors.<locals>.<listcomp>z.safetensorsTF)osr$   isdirlistdirendswith)r
   	file_listf)r#   r    r!   model_has_safetensors-   s   
zRHuggingFaceCheckpointEngine._fetch_checkpoint_files.<locals>.model_has_safetensorsz*.safetensors*.json)z*.binr/   z*.ptN)allow_patternsrevisiontokenzCheckpoint dir z, is not a directory, cannot load checkpoint.)	load_filezmodel.safetensors.index.jsonzmodel.safetensorszpytorch_model.bin.index.jsonzpytorch_model.bincpuF)map_locationweights_onlyr
weight_mapc                    s   g | ]
}t j j|qS r    )r(   r$   joinr   )r%   r-   )r   r    r!   r'   d   s    zGHuggingFaceCheckpointEngine._fetch_checkpoint_files.<locals>.<listcomp>)huggingface_hubr"   r#   strboolr(   r$   r)   r
   r   r   safetensors.torchr3   _checkpoint_load_fnr   torchloadr9   isfilejsonopensetvalues)r   r"   r.   r0   r3   model_param_json_fnamemodel_file_fnamemodel_param_jsonall_checkpoint_files	param_mapr8   r    )r#   r   r!   r   #   sD   




z3HuggingFaceCheckpointEngine._fetch_checkpoint_filesc                 c   s    | j D ];}t d|  | |}t| jdr*| jjr*| jjdkr*|d |d< t|	 }|D ]}|| }||fV  q2~qdS )z_
        Generator of model parameters (satisfies the CheckpointEngineBase interface).
        zLoading checkpoint: tie_word_embeddingsqwen2zmodel.embed_tokens.weightzlm_head.weightN)
r   r   infor>   r   r   rK   
model_typelistkeys)r   
checkpointcheckpoint_sd
param_keys
param_nameparamr    r    r!   
parametersh   s   

z&HuggingFaceCheckpointEngine.parameters)N)__name__
__module____qualname__r;   r   r   r   r   r?   TensorrV   __classcell__r    r    r   r!   r	      s    $Er	   __main__zmeta-llama/Llama-2-7b-hfhf_xxxxxxxxxxxxxxxxx)r
   r   )r(   rB   r?   base_enginer   typingr   r   	functoolsr   loggingr   r	   rW   enginerV   namerU   printshaper    r    r    r!   <module>   s    m