# Mamba 2

[Mamba 2](https://huggingface.co/papers/2405.21060) é baseado no framework de dualidade de espaço de estado (SSD), que conecta modelos de espaço de estado estruturados (SSMs) e variantes de atenção. Ele utiliza um algoritmo SSD mais eficiente, que é de 2 a 8 vezes mais rápido que o Mamba, e modifica a arquitetura para habilitar paralelismo de tensor e uma estrutura de cabeçalho de atenção com valores agrupados (GVA).

Você pode encontrar todos os checkpoints originais do Mamba 2 na organização [State Space Models](https://huggingface.co/state-spaces), mas os exemplos mostrados abaixo utilizam [mistralai/Mamba-Codestral-7B-v0.1](https://huggingface.co/mistralai/Mamba-Codestral-7B-v0.1), pois uma implementação no Hugging Face ainda não é suportada para os checkpoints originais.

Outras arquiteturas baseadas em Mamba 2 incluem [Bamba](./bamba), [FalconH1](./falcon_h1) e [Zamba2](./zamba2).

> [!TIP]
> Este modelo foi contribuído por [ArthurZ](https://huggingface.co/ArthurZ). Clique nos modelos Mamba na barra lateral à direita para ver mais exemplos de como aplicar o Mamba a diferentes tarefas de linguagem.

O exemplo abaixo demonstra como gerar texto com [Pipeline](/docs/transformers/main/pt/main_classes/pipelines#transformers.Pipeline), [AutoModel](/docs/transformers/main/pt/model_doc/auto#transformers.AutoModel) e pela linha de comando.

```python
from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="mistralai/Mamba-Codestral-7B-v0.1",
    device=0
)
pipeline("Plants create energy through a process known as")
```

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)

output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

A quantização reduz a carga de memória de modelos grandes ao representar os pesos em uma precisão menor. Consulte a visão geral de [Quantização](../quantization/overview) para mais backends de quantização disponíveis.

O exemplo abaixo usa [torchao](../quantization/torchao) para quantizar apenas os pesos para inteiros de 4 bits.

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig

quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", quantization_config=quantization_config, device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)

output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

## Observações

- O Codestral Mamba possui `groups=8`, que são semelhantes ao número de cabeças de kv em um modelo baseado em atenção.
- O Codestral Mamba possui dois passes de forward diferentes, `torch_forward` ou `cuda_kernels_forward`, e seus resultados são esperados para serem ligeiramente diferentes.
  - `torch_forward` sem compilação é 3 a 4 vezes mais rápido que `cuda_kernels_forward`.
  - `cuda_kernels_forward` usa os kernels CUDA originais, caso estejam disponíveis no seu ambiente. Ele é mais lento durante o prefill, pois exige uma "execução de aquecimento" devido ao maior overhead de CPU (veja [esses](https://github.com/state-spaces/mamba/issues/389#issuecomment-2171755306) [comentários](https://github.com/state-spaces/mamba/issues/355#issuecomment-2147597457) para mais detalhes).

- Este modelo não possui embeddings posicionais, mas há um `attention_mask` e uma lógica específica para mascarar estados ocultos em dois locais no caso de geração em lote (veja este [comentário](https://github.com/state-spaces/mamba/issues/66#issuecomment-1863563829) para mais detalhes). Isso (e a adição dos kernels Mamba 2 reimplementados) resulta em uma pequena discrepância entre a geração em lote e a geração com cache.

- O algoritmo SSM depende fortemente de contrações de tensores, que possuem equivalentes em matmul, mas a ordem das operações é ligeiramente diferente. Isso torna a diferença maior em precisões menores.

- O padding é testado apenas com padding à esquerda. O padding à direita atualiza o cache com as posições de padding e produz resultados não confiáveis. Defina `tokenizer.padding_side="left"` para geração em lote. Consulte [Lado do padding](../llm_tutorial#padding-side).

- O exemplo abaixo demonstra como fazer o ajuste fino do Mamba 2 com [PEFT](https://huggingface.co/docs/peft).

```python
from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer

model_id = "mistralai/Mamba-Codestral-7B-v0.1"
dataset = load_dataset("Abirate/english_quotes", split="train")
training_args = SFTConfig(dataset_text_field="quote", gradient_checkpointing=True, per_device_train_batch_size=4)
lora_config =  LoraConfig(target_modules=["x_proj", "embeddings", "in_proj", "out_proj"])
trainer = SFTTrainer(
    model=model_id,
    args=training_args,
    train_dataset=dataset,
    peft_config=lora_config,
)
trainer.train()
```

## Mamba2Config[[transformers.Mamba2Config]]

#### transformers.Mamba2Config[[transformers.Mamba2Config]]

```python
transformers.Mamba2Config(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, num_heads: int = 128, head_dim: int = 64, vocab_size: int = 32768, hidden_size: int = 4096, state_size: int = 128, num_hidden_layers: int = 64, layer_norm_epsilon: float = 1e-05, pad_token_id: int | None = 1, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 2, expand: int = 2, conv_kernel: int = 4, n_groups: int = 8, use_bias: bool = False, use_conv_bias: bool = True, hidden_act: str = 'silu', initializer_range: float = 0.1, residual_in_fp32: bool = True, time_step_rank: str | int = 'auto', time_step_min: float = 0.001, time_step_max: float = 0.1, time_step_floor: float = 0.0001, time_step_limit: list[float] | tuple[float, ...] = (0.0, inf), rescale_prenorm_residual: bool = False, use_cache: bool = True, chunk_size: int = 256, tie_word_embeddings: bool = False)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mamba2/configuration_mamba2.py#L26)

**Parâmetros:**

num_heads (`int`, *opcional*, padrão `128`) : Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer.

head_dim (`int`, *opcional*, padrão `64`) : A dimensão da cabeça de atenção. Se for None, o valor padrão será hidden_size // num_attention_heads

vocab_size (`int`, *opcional*, padrão `32768`) : Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelos `input_ids`.

hidden_size (`int`, *opcional*, padrão `4096`) : Dimensão das representações ocultas.

state_size (`int`, *opcional*, padrão `128`) : Tamanho do estado do SSM (dimensão do estado latente) nas camadas Mamba.

num_hidden_layers (`int`, *opcional*, padrão `64`) : Número de camadas ocultas no decodificador do Transformer.

layer_norm_epsilon (`float`, *opcional*, padrão 1e-05) : O epsilon a ser usado nas camadas de normalização de camada.

pad_token_id (`int`, *opcional*, padrão `1`) : ID do token usado para preenchimento no vocabulário.

bos_token_id (`int`, *opcional*, padrão `0`) : ID do token usado para o início do fluxo no vocabulário.

eos_token_id (`Union[int, list[int]]`, *opcional*, padrão `2`) : ID do token usado para o fim do fluxo no vocabulário.

expand (`int`, *opcional*, padrão 2) : Fator de expansão usado para determinar o tamanho intermediário.

conv_kernel (`int`, *opcional*, padrão `4`) : O tamanho do kernel de convolução.

n_groups (`int`, *opcional*, padrão 8) : Número de grupos para as matrizes de evolução do mamba 2.

use_bias (`bool`, *opcional*, padrão `False`) : Se deve ou não usar viés em ["in_proj", "out_proj"] do bloco mixer

use_conv_bias (`bool`, *opcional*, padrão `True`) : Indica se deve ou não usar viés na camada de convolução do bloco mixer.

hidden_act (`str`, *opcional*, padrão `silu`) : A função de ativação não linear (função ou string) no decodificador. Por exemplo, `"gelu"`, `"relu"`, `"silu"`, etc.

initializer_range (`float`, *opcional*, padrão `0.1`) : O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos.

residual_in_fp32 (`bool`, *opcional*, padrão `True`) : Indica se os resíduos devem estar em `float32`. Se definido como `False`, os resíduos manterão o mesmo `dtype` do restante do modelo

time_step_rank (`Union[str, int]`, *opcional*, padrão `auto`) : Rango da projeção do delta (passo de tempo). Pode ser `"auto"` para configurá-lo automaticamente.

time_step_min (`float`, *opcional*, padrão `0.001`) : `time_step` mínimo usado para limitar `dt_proj.bias`.

time_step_max (`float`, *opcional*, padrão `0.1`) : `time_step` máximo usado para limitar `dt_proj.bias`.

time_step_floor (`float`, *opcional*, padrão `0.0001`) : Valor mínimo permitido para o passo de tempo discreto delta após a ativação softplus.

time_step_limit (`Union[list[float], tuple[float, ...]]`, *opcional*, padrão `(0.0, inf)`) : Intervalo aceito de valores de passo de tempo para clamping.

rescale_prenorm_residual (`bool`, *opcional*, padrão `False`) : Se as pesos de `out_proj` devem ser reescalados durante a inicialização.

use_cache (`bool`, *opcional*, padrão `True`) : Indica se o modelo deve retornar as últimas atenções de chave/valor (não utilizado por todos os modelos). Relevante apenas se `config.is_decoder=True` ou quando o modelo for um modelo generativo somente de decodificador.

chunk_size (`int`, *opcional*, padrão 256) : Tamanho dos blocos que comporão a sequência.

tie_word_embeddings (`bool`, *opcional*, padrão `False`) : Se deve vincular as embeddings de pesos de acordo com o mapeamento `tied_weights_keys` do modelo.

Esta é a classe de configuração para armazenar a configuração de um Mamba2Model. Ela é usada para instanciar um modelo Mamba2 de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do [state-spaces/mamba2-2.8b](https://huggingface.co/state-spaces/mamba2-2.8b)

Os objetos de configuração herdam de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) e podem ser usados para controlar as saídas do modelo. Leia a documentação de [PreTrainedConfig](/docs/transformers/main/pt/main_classes/configuration#transformers.PreTrainedConfig) para mais informações.

Exemplo:

```python
>>> from transformers import Mamba2Config, Mamba2Model

>>> # Initializing a Mamba2 configuration
>>> configuration = Mamba2Config()

>>> # Initializing a model (with random weights) from the configuration
>>> model = Mamba2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## Mamba2Model[[transformers.Mamba2Model]]

#### transformers.Mamba2Model[[transformers.Mamba2Model]]

```python
transformers.Mamba2Model(config: Mamba2Config)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mamba2/modeling_mamba2.py#L731)

**Parâmetros:**

config ([Mamba2Config](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2Config)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

O modelo Mamba2 puro, que produz estados ocultos brutos sem nenhum cabeçalho específico no topo.

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

#### forward[[transformers.Mamba2Model.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.LongTensor] = None, cache_params: transformers.cache_utils.Cache | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, attention_mask: typing.Optional[torch.Tensor] = None, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mamba2/modeling_mamba2.py#L756)

**Parâmetros:**

input_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices dos tokens da sequência de entrada no vocabulário. O preenchimento (padding) será ignorado por padrão. Os índices podem ser obtidos usando [AutoTokenizer](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer). Consulte [PreTrainedTokenizer.encode()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) e [PreTrainedTokenizer.__call__()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) para mais detalhes. [O que são IDs de entrada?](../glossary#input-ids)

inputs_embeds (`torch.LongTensor` de forma `(batch_size, sequence_length, hidden_size)`, *opcional*) : Opcionalmente, em vez de passar `input_ids`, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices de `input_ids` nos vetores associados do que a matriz de busca de incorporação interna do modelo.

cache_params (`Cache`, *opcional*) : Se for passado, o modelo usa o estado anterior em todos os blocos (o que resultará na saída para os `input_ids` fornecidos, como se o modelo adicionasse `state_input_ids + input_ids` como contexto).

use_cache (`bool`, *opcional*) : Se definido como `True`, o `cache_params` é retornado e pode ser usado para gerar rapidamente os próximos logits.

output_hidden_states (`bool`, *opcional*) : Indica se os estados ocultos de todas as camadas devem ser retornados. Consulte `hidden_states` em tensores retornados para mais detalhes.

return_dict (`bool`, *opcional*) : Se deve ou não retornar um [ModelOutput](/docs/transformers/main/pt/main_classes/output#transformers.utils.ModelOutput) em vez de uma tupla simples.

attention_mask (`torch.Tensor` de forma `(batch_size, sequence_length)`, *opcional*) : Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em `[0, 1]`:  - 1 para tokens que **não estão mascarados**, - 0 para tokens que **estão mascarados**.  [O que são máscaras de atenção?](../glossary#attention-mask)

**Retorna:** `Mamba2Output` ou `tuple(torch.Tensor)`

Um `Mamba2Output` ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`) contendo vários elementos, dependendo da configuração ([Mamba2Config](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2Config)) e das entradas.

O método forward do [Mamba2Model](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2Model) substitui o método especial `__call__`.

Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de `Module` em seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.

- **last_hidden_state** (`torch.Tensor` de forma `(batch_size, sequence_length, hidden_size)`, *opcional*) -- Sequência de hidden-states na saída da última camada do modelo.
- **cache_params** (`~cache_utils.Cache`, *opcional*) -- O estado do modelo no último passo de tempo. Pode ser usado em um método forward com o próximo `input_ids` para evitar fornecer os `input_ids` antigos.

  Inclui tanto as matrizes de estado do modelo de espaço de estados após o scan seletivo quanto os estados convolucionais
- **hidden_states** (`tuple[torch.Tensor]`, *opcional*, retornado quando `output_hidden_states=True` é passado ou quando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma `(batch_size, sequence_length, hidden_size)`.

  Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.

## Mamba2LMHeadModel[[transformers.Mamba2ForCausalLM]]

#### transformers.Mamba2ForCausalLM[[transformers.Mamba2ForCausalLM]]

```python
transformers.Mamba2ForCausalLM(config: Mamba2Config)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mamba2/modeling_mamba2.py#L834)

**Parâmetros:**

config ([Mamba2Config](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2Config)) : Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para carregar os pesos do modelo.

O transformer do modelo MAMBA2 com uma cabeça de modelagem de linguagem no topo (camada linear com pesos não vinculados aos embeddings de entrada).

Este modelo herda de [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel). Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.).

Este modelo também é uma subclasse de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso e comportamento gerais.

#### forward[[transformers.Mamba2ForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, cache_params: transformers.cache_utils.Cache | None = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, use_cache: bool | None = None, attention_mask: typing.Optional[torch.Tensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mamba2/modeling_mamba2.py#L875)

**Parâmetros:**

input_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices dos tokens da sequência de entrada no vocabulário. O preenchimento (padding) será ignorado por padrão. Os índices podem ser obtidos usando [AutoTokenizer](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer). Consulte [PreTrainedTokenizer.encode()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) e [PreTrainedTokenizer.__call__()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) para mais detalhes. [O que são IDs de entrada?](../glossary#input-ids)

inputs_embeds (`torch.Tensor` de forma `(batch_size, sequence_length, hidden_size)`, *opcional*) : Opcionalmente, em vez de passar `input_ids`, você pode escolher passar diretamente uma representação incorporada. Isso é útil se você quiser ter mais controle sobre como converter os índices de `input_ids` nos vetores associados do que a matriz de busca de incorporação interna do modelo.

cache_params (`Cache`, *opcional*) : Se for passado, o modelo usa o estado anterior em todos os blocos (o que resultará na saída para os `input_ids` fornecidos, como se o modelo adicionasse `state_input_ids + input_ids` como contexto).

labels (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Rótulos para modelagem de linguagem. Observe que os rótulos **são deslocados** dentro do modelo, ou seja, você pode definir `labels = input_ids` Os índices são selecionados em `[-100, 0, ..., config.vocab_size]` Todos os rótulos definidos como `-100` são ignorados (mascarados); a perda é calculada apenas para rótulos em `[0, ..., config.vocab_size]`

output_hidden_states (`bool`, *opcional*) : Indica se os estados ocultos de todas as camadas devem ser retornados. Consulte `hidden_states` em tensores retornados para mais detalhes.

return_dict (`bool`, *opcional*) : Se deve ou não retornar um [ModelOutput](/docs/transformers/main/pt/main_classes/output#transformers.utils.ModelOutput) em vez de uma tupla simples.

use_cache (`bool`, *opcional*) : Se definido como `True`, o `cache_params` é retornado e pode ser usado para gerar rapidamente os próximos logits.

attention_mask (`torch.Tensor` de forma `(batch_size, sequence_length)`, *opcional*) : Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em `[0, 1]`:  - 1 para tokens que **não estão mascarados**, - 0 para tokens que **estão mascarados**.  [O que são máscaras de atenção?](../glossary#attention-mask)

logits_to_keep (`Union[int, torch.Tensor]`, *opcional*, padrão `0`) : Se for um `int`, calcula os logits para os últimos `logits_to_keep` tokens. Se for `0`, calcula os logits para todos os `input_ids` (caso especial). Apenas os logits do último token são necessários para a geração, e calculá-los apenas para esse token pode economizar memória, o que se torna bastante significativo para sequências longas ou tamanho de vocabulário grande. Se for um `torch.Tensor`, deve ser 1D, correspondendo aos índices a serem mantidos na dimensão de comprimento da sequência. Isso é útil ao usar o formato de tensor empacotado (uma única dimensão para lote e comprimento da sequência).

**Retorna:** `Mamba2CausalLMOutput` ou `tuple(torch.Tensor)`

Um `Mamba2CausalLMOutput` ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`) contendo vários elementos, dependendo da configuração ([Mamba2Config](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2Config)) e das entradas.

O método forward de [Mamba2ForCausalLM](/docs/transformers/main/pt/model_doc/mamba2#transformers.Mamba2ForCausalLM) substitui o método especial `__call__`.

Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de `Module` em seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.

- **loss** (`torch.Tensor` de forma `(1,)`, *opcional*, retornado quando `labels` é fornecido) -- Perda de modelagem de linguagem (para previsão do próximo token).
- **logits** (`torch.Tensor` de forma `(batch_size, sequence_length, config.vocab_size)`) -- Pontuações de previsão da cabeça de modelagem de linguagem (pontuações para cada token do vocabulário antes do SoftMax).
- **cache_params** (`~cache_utils.Cache`, *opcional*) -- O estado do modelo no último passo de tempo. Pode ser usado em um método forward com o próximo `input_ids` para evitar fornecer os `input_ids` antigos.

  Inclui tanto as matrizes de estado do modelo de espaço de estados após o scan seletivo quanto os estados convolucionais
- **hidden_states** (`tuple[torch.Tensor]`, *opcional*, retornado quando `output_hidden_states=True` é passado ou quando `config.output_hidden_states=True`) -- Tupla de `torch.Tensor` (um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma `(batch_size, sequence_length, hidden_size)`.

  Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.

Exemplo:

```python
```

