o
    TÃi  ã                   @   s€   d dl mZ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 G d
d„ deƒZG dd„ deƒZdS )é    )ÚAnyÚDictÚOptionalÚTypeN)ÚDeepSpeedConfigModelé   )ÚRaggedBatchWrapperé   )ÚDSModuleBase)ÚDSModuleRegistryBase©ÚDSUnembedConfigc                       s†   e Zd ZdZedee fdd„ƒZdede	e
ef ddf‡ fdd	„Z		dd
ejdejdedeej deej dejfdd„Z‡  ZS )ÚDSUnembedBasez¿
    Base mixin for unmebedding modules. The interface represented by this module is:

    if config.do_normalization
        hidden = layer_norm(hidden)
    logits = hidden @ projection
    Úreturnc                   C   ó   t S ©Nr   © r   r   új/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/inference/v2/modules/interfaces/unembed_base.pyÚconfig_class   ó   zDSUnembedBase.config_classÚconfigÚimplementation_configNc                    s   t ƒ  ||¡ d S r   )ÚsuperÚ__init__)Úselfr   r   ©Ú	__class__r   r   r      s   zDSUnembedBase.__init__Úhidden_statesÚvocab_embeddingÚragged_metadataÚgammaÚbetac                 C   s   t ƒ ‚)a’  
        Forward interface. Gamma and beta are optional parameters passed depending on
        `self.config.do_normalization`.

        Args:
            hidden_states (torch.Tensor): Hidden states of shape [tokens, model_dim]
            vocab_embedding (torch.Tensor): Embedding matrix of shape [vocab_size, model_dim]
            ragged_metadata (RaggedBatchWrapper): Metadata for the ragged batch.
            gamma (Optional[torch.Tensor]): Gamma parameter for layer norm.
            beta (Optional[torch.Tensor]): Beta parameter for layer norm.

        Returns:
            torch.Tensor: Unembedded hidden states of shape [n_seqs, model_dim]
        )ÚNotImplementedError)r   r   r   r   r    r!   r   r   r   Úforward!   s   zDSUnembedBase.forward)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r   r   r   Ústrr   r   ÚtorchÚTensorr   r   r#   Ú__classcell__r   r   r   r   r      s(    "ûÿþýüûûr   c                   @   s0   e Zd ZU i Zeed< edee fdd„ƒZ	dS )ÚDSUnembedRegistryÚregistryr   c                   C   r   r   )r   r   r   r   r   Úassociated_class;   r   z"DSUnembedRegistry.associated_classN)
r$   r%   r&   r.   r   Ú__annotations__r(   r   r
   r/   r   r   r   r   r-   8   s   
 r-   )Útypingr   r   r   r   r*   Údeepspeed.runtime.config_utilsr   Úraggedr   Ú	ds_moduler
   Úmodule_registryr   Úconfigsr   r   r-   r   r   r   r   Ú<module>   s   '