o
    i,                     @   sd   d dl Z d dlZd dlmZ d dlZd dlm  mZ d dl	m
Z
mZ dd Zdede
fdd	ZdS )
    N)OrderedDict)
GPT2Config	OPTConfigc              	      s  dd t fdd|  D } dd t fdd|  D } | d}|d	d  | d< | d
}t|dd}t|j| | }t|ddd||j	d  f| d
< | d
 | d< dd t fdd|  D } dd t fdd|  D } t
|jD ]X}| d| d}| d| d}| d| d}	| d| d}
| d| d}| d| d}tj|||	gdd| d| d< tj|
||gdd| d| d< qdd   t  fd!d|  D } | S )"Nc                 S   s    t dd| } t dd| } | S )Nz^model.decoder.ztransformer.z	^decoder.resubkey r
   K/home/ubuntu/vllm_env/lib/python3.10/site-packages/flash_attn/models/opt.pykey_mapping_model   s   z2remap_state_dict_hf_opt.<locals>.key_mapping_modelc                 3        | ]\}} ||fV  qd S Nr
   .0kv)r   r
   r   	<genexpr>       z*remap_state_dict_hf_opt.<locals>.<genexpr>c                 S   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz^transformer.embed_tokens.z'transformer.embeddings.word_embeddings.z^transformer.project_in.z"transformer.embeddings.project_in.z^transformer.project_out.zproject_out.z^transformer.embed_positions.z+transformer.embeddings.position_embeddings.r   r   r
   r
   r   key_mapping_emb   s   z0remap_state_dict_hf_opt.<locals>.key_mapping_embc                 3   r   r   r
   r   )r   r
   r   r      r   z1transformer.embeddings.position_embeddings.weight   z-transformer.embeddings.word_embeddings.weightpad_vocab_size_multiple   r   zlm_head.weightc                 S   s<   t dd| } t dd| } t dd| } t dd| } | S )Nz^transformer.final_layer_norm.ztransformer.ln_f.z^transformer.layer_norm.z/^transformer.layers.(\d+).self_attn_layer_norm.ztransformer.layers.\1.norm1.z+^transformer.layers.(\d+).final_layer_norm.ztransformer.layers.\1.norm2.r   r   r
   r
   r   key_mapping_ln-   s   z/remap_state_dict_hf_opt.<locals>.key_mapping_lnc                 3   r   r   r
   r   )r   r
   r   r   9   r   c                 S      t dd| S )Nz"^transformer.layers.(\d+).fc(1|2).ztransformer.layers.\1.mlp.fc\2.r   r   r
   r
   r   key_mapping_mlp<   s   z0remap_state_dict_hf_opt.<locals>.key_mapping_mlpc                 3   r   r   r
   r   )r   r
   r   r   A   r   ztransformer.layers.z.self_attn.q_proj.weightz.self_attn.k_proj.weightz.self_attn.v_proj.weightz.self_attn.q_proj.biasz.self_attn.k_proj.biasz.self_attn.v_proj.bias)dimz.mixer.Wqkv.weightz.mixer.Wqkv.biasc                 S   r   )Nz-^transformer.layers.(\d+).self_attn.out_proj.z%transformer.layers.\1.mixer.out_proj.r   r   r
   r
   r   key_mapping_attnN   s
   z1remap_state_dict_hf_opt.<locals>.key_mapping_attnc                 3   r   r   r
   r   )r   r
   r   r   U   r   )r   itemspopgetattrmathceil
vocab_sizeFpadshaperangen_layertorchcat)
state_dictconfigpos_embeddingsword_embeddingsr   r#   lWqWkWvbqbkbvr
   )r   r   r   r   r   r   remap_state_dict_hf_opt   s:   


 "r6   
opt_configreturnc                 C   sp   | j dksJ | jsJ | j| jkrd n| j}t| j| j| j| j| j| j	| j
| j| j| j| j| j| j| j|dS )Ng        )r#   n_positionsn_embdr(   n_headn_inneractivation_functionresid_pdrop
embd_pdrop
attn_pdropinitializer_rangebos_token_ideos_token_idprenormword_embed_proj_dim)	layerdroplayer_norm_elementwise_affinerE   hidden_sizer   r#   max_position_embeddingsnum_hidden_layersnum_attention_headsffn_dimr=   dropoutattention_dropoutinit_stdrB   rC   do_layer_norm_before)r7   rE   r
   r
   r   opt_config_to_gpt2_configZ   s.   
rQ   )r!   r   collectionsr   r)   torch.nn.functionalnn
functionalr$   transformersr   r   r6   rQ   r
   r
   r
   r   <module>   s   N