o
    
۾i                     @   s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ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 d d
lmZ G dd dejZG dd deZG dd deZdS )    )isliceN)nn)PretrainedConfig)CacheConfig
VllmConfig)get_pp_group)RMSNorm)QuantizationConfig)InternLM2AttentionInternLM2ForCausalLMInternLM2MLPInternLM2Model)IntermediateTensorsc                       s   e Zd Z			ddededB dedB deddf
 fdd	Z	dd
ej	dej	dej	dB dej	dB de
ej	ej	f f
ddZ  ZS )InternLM2VEDecoderLayerN configcache_configquant_configprefixreturnc              
      s   t    |j| _t|dd}t| j|j|j|j|||| dd| _t	| j|j
|j|| dd| _t	| j|j
|j|| dd| _t|j|jd| _t|j|jd| _d S )	Nmax_position_embeddingsi    z
.attention)hidden_size	num_headsnum_kv_headsrope_parametersr   r   r   r   z.feed_forward)r   intermediate_size
hidden_actr   r   z.feed_forward_ve)eps)super__init__r   getattrr
   num_attention_headsnum_key_value_headsr   	attentionr   r   r   feed_forwardfeed_forward_ver   rms_norm_epsattention_normffn_norm)selfr   r   r   r   r   	__class__ [/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/models/internlm2_ve.pyr      s:   

z InternLM2VEDecoderLayer.__init__	positionshidden_statesresidualvisual_token_maskc                 C   s   |d u r|}|  |}n|  ||\}}| j||d}| ||\}}|d ur_| r_|d| j }| }| || d| j	 ||< | r[| 
|| d| j	 ||< ||fS | 
|}||fS )N)r.   r/      )r'   r#   r(   anyrepeatr   boolr%   reshapeflattenr$   )r)   r.   r/   r0   r1   text_token_maskr,   r,   r-   forward=   s4   
zInternLM2VEDecoderLayer.forward)NNr   )N)__name__
__module____qualname__r   r   r	   strr   torchTensortupler:   __classcell__r,   r,   r*   r-   r      s6    *r   c                       st   e Zd Zdddedef fddZ			ddejdB d	ejd
edB dejdB dejdB dejeB fddZ	  Z
S )InternLM2VEModelr   r   vllm_configr   c                      t  j||td d S )N)rE   r   
layer_type)r   r   r   r)   rE   r   r*   r,   r-   r   a      
zInternLM2VEModel.__init__N	input_idsr.   intermediate_tensorsinputs_embedsr1   r   c           
      C   s   t  jr|d ur|}n| |}d }n|d usJ |d }|d }t| j| j| jD ]}|||||d\}}q*t  jsBt||dS | 	||\}}	|S )Nr/   r0   )r1   )r/   r0   )
r   is_first_ranktok_embeddingsr   layersstart_layer	end_layeris_last_rankr   norm)
r)   rJ   r.   rK   rL   r1   r/   r0   layer_r,   r,   r-   r:   f   s*   
zInternLM2VEModel.forward)NNN)r;   r<   r=   r   r>   r   r?   r@   r   r:   rB   r,   r,   r*   r-   rC   `   s$    	rC   c                       s,   e Zd Zdddedef fddZ  ZS )InternLM2VEForCausalLMr   rD   rE   r   c                   rF   )N)rE   r   
model_type)r   r   rC   rH   r*   r,   r-   r      rI   zInternLM2VEForCausalLM.__init__)r;   r<   r=   r   r>   r   rB   r,   r,   r*   r-   rV      s    $rV   )	itertoolsr   r?   r   transformersr   vllm.configr   r   vllm.distributedr   $vllm.model_executor.layers.layernormr   'vllm.model_executor.layers.quantizationr	   $vllm.model_executor.models.internlm2r
   r   r   r   vllm.sequencer   Moduler   rC   rV   r,   r,   r,   r-   <module>   s   I'