# Beam

## Visão geral

[Beam](https://reflection.ai/blog/introducing-beam) é o primeiro modelo de pesos abertos da Reflection, um modelo de linguagem do tipo mistura de especialistas esparsa (MoE) com 501B de parâmetros totais e 23B de parâmetros ativos por token, desenvolvido para cargas de trabalho de codificação, raciocínio e agentes. Ele foi pré-treinado com 23,8T de tokens e pós-treinado com aprendizado por reforço assíncrono em larga escala. O Beam é apenas de texto e raciocina antes de cada resposta. Uma configuração de esforço de raciocínio no modelo de chat controla a intensidade desse processo.

O Beam possui 52 camadas de decodificador e combina os seguintes recursos:

- **Atenção deslizante híbrida e atenção completa.** A cada sexta camada e a última camada usam atenção completa, e as demais prestam atenção aos `sliding_window` (512) tokens mais recentes. `layer_types` define o padrão.
- **RoPE nas camadas deslizantes, NoPE nas camadas completas.** `rope_parameters` é indexado pelo tipo de camada, e `None` indica um tipo de camada sem codificação posicional. As camadas de atenção completa escalam as consultas (softmax escalável): a consulta na posição `n` (base 1) é multiplicada por `(1 + n / 2048) ** 0.1`, o que impede que a atenção se aplane à medida que o contexto cresce.
- **Atenção com portão (gated attention).** Atenção de consulta agrupada (grouped-query attention) com 48 cabeças de consulta e 8 cabeças de chave/valor, e RMSNorm em cada cabeça de consulta e chave. Um portão sigmoide calculado a partir da entrada da atenção, com um viés aprendido por cabeça, escala a saída da atenção elemento a elemento antes da projeção de saída.
- **MoE esparsa.** As 3 primeiras camadas usam um MLP SwiGLU denso, e as 49 camadas restantes roteiam cada token para 8 de 256 especialistas, sem especialista compartilhado (`mlp_layer_types` define o padrão). O roteador pontua os especialistas com uma sigmoid, equilibra a carga com um viés aprendido por especialista em vez de uma perda auxiliar, e restringe cada token aos melhores `topk_group` de `n_group` grupos de especialistas. Os pesos de roteamento são normalizados, e a saída do MoE é escalada por `routed_scaling_factor`.
- **Normas em sanduíche com resíduos escalados pela profundidade.** Cada bloco de atenção e MLP é envolvido por um RMSNorm antes e depois. As adições de resíduo são reescaladas de modo que, após `k` contribuições (contando os embeddings como a primeira), o fluxo de resíduo seja a soma delas dividida por `sqrt(k)`.
- **Limitação suave dos logits finais.** Os logits são limitados com `30 * tanh(logits / 30)` (`final_logit_softcapping`).

A implementação calcula o escalonamento do RMSNorm, a ativação SwiGLU, o RoPE, o escalonamento da query, o roteamento e o softcapping em FP32 para corresponder à numérica com a qual o Beam foi treinado e servido. Os pesos do roteador e o viés dos especialistas são mantidos em FP32 no momento do carregamento, e os `logits` retornados são sempre em FP32.

Você pode encontrar todos os checkpoints originais do Beam na organização [Reflection](https://huggingface.co/reflection).

Este modelo foi contribuído por [yonigozlan](https://huggingface.co/yonigozlan).

## Exemplos de uso

O chat template do Beam formata conversas no formato Harmony do Beam, e seu [response template](../chat_response_parsing) interpreta o texto gerado de volta em uma mensagem com os campos `thinking`, `content` e `tool_calls`. Os exemplos abaixo geram uma resposta com [Pipeline](/docs/transformers/main/pt/main_classes/pipelines#transformers.Pipeline) ou com a classe [AutoModelForCausalLM](/docs/transformers/main/pt/model_doc/auto#transformers.AutoModelForCausalLM).

O checkpoint BF16 tem cerca de 1 TB, portanto os exemplos o dividem em 8 dispositivos, alocando especialistas roteados inteiros em cada dispositivo com [parallelismo de especialistas](../expert_parallelism). Inicie-os com `torchrun --nproc-per-node 8 <script.py>`.

```python
from transformers import DistributedConfig, pipeline

pipe = pipeline(
    task="text-generation",
    model="reflection/Beam-1.0-501B-A23B",
    model_kwargs={"distributed_config": DistributedConfig(tp_size=8, ep_size=8)},
)

messages = [{"role": "user", "content": "Explain in one sentence why the sky is usually blue."}]
output = pipe(messages, max_new_tokens=2048)
reply = output[0]["generated_text"][-1]
print(reply["thinking"])
print(reply["content"])
```

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

model_id = "reflection/Beam-1.0-501B-A23B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, distributed_config=DistributedConfig(tp_size=8, ep_size=8))

messages = [{"role": "user", "content": "Explain in one sentence why the sky is usually blue."}]
inputs = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True, return_tensors="pt", return_dict=True, reasoning_effort="low"
).to(model.device)

outputs = model.generate(**inputs, max_new_tokens=2048)
generated = tokenizer.decode(outputs[0, inputs["input_ids"].shape[1] :])
message = tokenizer.parse_response(generated, prefix=inputs["input_ids"][0])
print(message["thinking"])
print(message["content"])
```

Prefira isso em vez de `device_map="auto"`, que coloca camadas inteiras em cada dispositivo, as executa um dispositivo por vez e pode esgotar a memória durante o carregamento.

Gerações de amostras com `temperature=0.7` e `top_p=0.99`, recomendados pelo Beam, que o [GenerationConfig](/docs/transformers/main/pt/main_classes/text_generation#transformers.GenerationConfig) do checkpoint define como padrões. Passe `do_sample=False` para decodificar de forma gulosa.

### Esforço de raciocínio

Passar `reasoning_effort` para [apply_chat_template()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.apply_chat_template) para controlar o quanto o Beam raciocina. Ele aceita um orçamento inteiro ou um dos rótulos abaixo. O Beam não foi treinado com esforços abaixo de 8, portanto, valores menores não são respeitados.

| Rótulo | `minimal` | `low` | `medium` | `high` | `xhigh` | `max` |
|---|---|---|---|---|---|---|
| Esforço | 8 | 32 | 64 | 128 | 256 | 512 |

Quando `reasoning_effort` não está definido, o modelo usa `max`. Se `max_new_tokens` se esgotar durante o raciocínio, a mensagem analisada terá `thinking`, mas não terá `content`.

### Conversas de múltiplas rodadas

Anexe a mensagem analisada ao histórico como está. A saída do Beam se degrada sem seu raciocínio anterior, que o modelo de chat lê de `thinking` (`reasoning_content` e `reasoning` também são aceitos). Por padrão, uma resposta do assistente sem raciocínio é renderizada com um bloco de raciocínio vazio. Passe `allow_missing_thinking=False` para gerar um erro em vez disso quando `add_generation_prompt=True`, o que é recomendado ao servir o Beam.

```python
messages.append(message)
messages.append({"role": "user", "content": "And why are sunsets red?"})
inputs = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True, return_tensors="pt", return_dict=True
).to(model.device)
```

### Chamada de ferramentas

Passe `tools` tanto para [apply_chat_template()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.apply_chat_template) quanto para [parse_response()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.parse_response). Com `tools`, os argumentos analisados são convertidos para os tipos definidos no esquema de cada ferramenta; sem ele, todos os argumentos são strings.

```python
def get_weather(city: str):
    """
    Get the current weather in a city.

    Args:
        city: The city name.
    """
    return "Sunny, 22 C"

messages = [{"role": "user", "content": "What's the weather like in Paris right now?"}]
inputs = tokenizer.apply_chat_template(
    messages, tools=[get_weather], add_generation_prompt=True, return_tensors="pt", return_dict=True
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=2048)
generated = tokenizer.decode(outputs[0, inputs["input_ids"].shape[1] :])
message = tokenizer.parse_response(generated, prefix=inputs["input_ids"][0], tools=[get_weather])
print(message["tool_calls"])
# [{'type': 'function', 'function': {'name': 'get_weather', 'arguments': {'city': 'Paris'}}}]

messages.append(message)
for call in message["tool_calls"]:
    result = get_weather(**call["function"]["arguments"])
    messages.append({"role": "tool", "name": call["function"]["name"], "content": result})
```

Em seguida, gere novamente a partir de `messages` para obter a resposta final. As chamadas de ferramentas analisadas não possuem `id`, e o formato corresponde os resultados às chamadas por posição, portanto, retorne os resultados das ferramentas na ordem das chamadas. A geração é interrompida após uma resposta final (`<|return|>`) ou uma chamada de ferramenta (`<|call|>`); `generation_config.json` lista ambos.

Para streaming, [get_response_parser()](/docs/transformers/main/pt/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.get_response_parser) retorna um parser ao qual você `feed()` os blocos de texto conforme são gerados. Consulte [Response parsing](../chat_response_parsing) para mais detalhes.

## Observações

- **Argumentos de template.** Além de `reasoning_effort`, o template de chat aceita `model_identity` (substitui a primeira linha da mensagem de sistema), `builtin_tools` e `allow_missing_thinking`. `builtin_tools` deve nomear apenas as ferramentas `search` e `browse`, e somente com as definições com as quais o Beam foi treinado. Outras ferramentas precisam apenas de `tools`. As mensagens `system` e `developer` são renderizadas apenas no início da conversa.
- **Treinamento.** O modelo de chat marca a saída do assistente para `apply_chat_template(..., return_dict=True, return_assistant_tokens_mask=True)`, de modo que o `SFTConfig(assistant_only_loss=True)` do TRL treina apenas nos tokens do assistente. A máscara cobre o raciocínio, a resposta e as chamadas de ferramenta de cada turno do assistente.
- **Sem perda auxiliar.** O roteador equilibra a carga dos especialistas por meio do seu viés, portanto `BeamForCausalLM` não calcula nenhuma perda de balanceamento de carga. `output_router_logits=True` ainda retorna os logits do roteador.

## BeamConfig[[transformers.BeamConfig]]

#### transformers.BeamConfig[[transformers.BeamConfig]]

```python
transformers.BeamConfig(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, vocab_size: int = 151936, hidden_size: int = 5120, intermediate_size: int = 20480, num_hidden_layers: int = 52, num_attention_heads: int = 48, num_key_value_heads: int = 8, hidden_act: str = 'silu', max_position_embeddings: int = 8192, initializer_range: float = 0.02, rms_norm_eps: float = 1e-06, use_cache: bool = True, tie_word_embeddings: bool = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, attention_bias: bool = False, sliding_window: int | None = 512, attention_dropout: float | int = 0.0, moe_intermediate_size: int = 2560, num_experts_per_tok: int = 8, num_experts: int = 256, norm_topk_prob: bool = True, output_router_logits: bool = False, pad_token_id: int | None = None, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = None, head_dim: int = 128, layer_types: list[str] | None = None, mlp_layer_types: list[str] | None = None, n_group: int | None = 8, topk_group: int | None = 4, routed_scaling_factor: int | float = 2.5, final_logit_softcapping: int | float | None = 30.0)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/beam/configuration_beam.py#L29)

**Parâmetros:**

vocab_size (`int`, *opcional*, padrão `151936`) : 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 `5120`) : Dimensão das representações ocultas.

intermediate_size (`int`, *opcional*, padrão `20480`) : Dimensão das representações do MLP.

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

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

num_key_value_heads (`int`, *opcional*, padrão `8`) : Este é o número de cabeças de key_value que devem ser usadas para implementar Grouped Query Attention. Se `num_key_value_heads=num_attention_heads`, o modelo usará Multi Head Attention (MHA); se `num_key_value_heads=1`, o modelo usará Multi Query Attention (MQA); caso contrário, será usado GQA. Ao converter um checkpoint multi-head para um checkpoint GQA, cada cabeça de chave e valor do grupo deve ser construída pela média (meanpooling) de todas as cabeças originais dentro desse grupo. Para mais detalhes, consulte [este artigo](https://huggingface.co/papers/2305.13245). Se não for especificado, o valor padrão será `num_attention_heads`.

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.

max_position_embeddings (`int`, *opcional*, padrão `8192`) : O comprimento máximo de sequência com o qual este modelo pode ser usado.

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

rms_norm_eps (`float`, *opcional*, padrão `1e-06`) : O epsilon usado pelas camadas de normalização rms.

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.

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.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *opcional*) : Dicionário contendo os parâmetros de configuração para os embeddings RoPE. O dicionário deve conter um valor para `rope_theta` e, opcionalmente, parâmetros usados para escalonamento, caso você queira usar RoPE com `max_position_embeddings` maiores.

attention_bias (`bool`, *opcional*, padrão `False`) : Se deve usar um viés nas camadas de projeção de query, key, value e output durante a autoatenção.

sliding_window (`int`, *opcional*, padrão `512`) : Tamanho da janela de atenção deslizante. Se `None`, nenhuma janela deslizante é aplicada.

attention_dropout (`Union[float, int]`, *opcional*, padrão `0.0`) : A taxa de dropout para as probabilidades de atenção.

moe_intermediate_size (`int`, *opcional*, padrão `2560`) : Tamanho intermediário dos MLPs dos especialistas roteados.

num_experts_per_tok (`int`, *opcional*, padrão `8`) : Número de especialistas para os quais cada token deve ser roteado. Este é o valor top-k para o roteamento por escolha de token.

num_experts (`int`, *opcional*, padrão `256`) : Número de especialistas roteados nas camadas MoE.

norm_topk_prob (`bool`, *opcional*, padrão `True`) : Se as pesos dos especialistas roteados devem ser normalizados.

output_router_logits (`bool`, *opcional*, padrão `False`) : Indica se os logits do roteador devem ser retornados pelo modelo. Ativar essa opção também permite que o modelo outpute a perda auxiliar, incluindo a perda de balanceamento de carga e a perda z do roteador.

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

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

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

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

layer_types (`list[str]`, *opcional*) : Uma lista que mapeia explicitamente cada índice de camada com seu tipo de camada. Se não for fornecida, será gerada automaticamente com base nos valores de config.

mlp_layer_types (`list[str]`, *opcional*) : Tipo de MLP por camada, `"dense"` para um MLP SwiGLU ou `"sparse"` para o bloco MoE. O comprimento deve ser igual a `num_hidden_layers`. O padrão é três camadas densas seguidas por camadas esparsas.

n_group (`int`, *opcional*, padrão 8) : Número de grupos para especialistas roteados.

topk_group (`int`, *opcional*, padrão `4`) : Número de grupos selecionados para cada token (para cada token, garantindo que os especialistas selecionados estejam apenas dentro de `topk_group` grupos).

routed_scaling_factor (`Union[int, float]`, *opcional*, padrão `2.5`) : Fator de escala ou especialistas roteados.

final_logit_softcapping (`Union[int, float]`, *opcional*, padrão `30.0`) : Valor de soft-capping aplicado aos logits finais antes de calcular a distribuição de probabilidade. Os logits são escalados por `tanh(logit / cap) * cap`.

Esta é a classe de configuração para armazenar a configuração de um BeamModel. Ela é usada para instanciar um modelo Beam 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 [reflection/Beam-1.0-501B-A23B](https://huggingface.co/reflection/Beam-1.0-501B-A23B)

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.

```python
>>> from transformers import BeamConfig

>>> # Initializing a Beam configuration
>>> configuration = BeamConfig()
```

## BeamModel[[transformers.BeamModel]]

#### transformers.BeamModel[[transformers.BeamModel]]

```python
transformers.BeamModel(config: BeamConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/beam/modeling_beam.py#L498)

**Parâmetros:**

config ([BeamConfig](/docs/transformers/main/pt/model_doc/beam#transformers.BeamConfig)) : 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 Beam 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.BeamModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/beam/modeling_beam.py#L515)

**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)

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)

position_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo `[0, config.n_positions - 1]`.  [O que são IDs de posição?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *opcional*) : hidden-states pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados para acelerar a decodificação sequencial. Isso geralmente consiste nos `past_key_values` retornados pelo modelo em uma etapa anterior da decodificação, quando `use_cache=True` ou `config.use_cache=True`.  Apenas uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache) é permitida como entrada, consulte nosso [guia de kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Se nenhum `past_key_values` for passado, [DynamicCache](/docs/transformers/main/pt/internal/generation_utils#transformers.DynamicCache) será inicializado por padrão.  O modelo sairá no mesmo formato de cache que foi fornecido como entrada.  Se `past_key_values` forem usados, espera-se que o usuário insira apenas `input_ids` não processados (aqueles que não têm seus estados de chave e valor passados para este modelo) com a forma `(batch_size, unprocessed_length)` em vez de todos os `input_ids` com a forma `(batch_size, sequence_length)`.

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.

use_cache (`bool`, *opcional*) : Se definido como `True`, os estados de chave-valor de `past_key_values` são retornados e podem ser usados para acelerar a decodificação (veja `past_key_values`).

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

Um `MoeModelOutputWithPast` ou uma tupla de `torch.Tensor` (se `return_dict=False` for passado ou quando `config.return_dict=False`), composta por diversos elementos, dependendo da configuração ([BeamConfig](/docs/transformers/main/pt/model_doc/beam#transformers.BeamConfig)) e das entradas.

O método forward do [BeamModel](/docs/transformers/main/pt/model_doc/beam#transformers.BeamModel) sobrescreve 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)`) -- Sequência de estados ocultos na saída da última camada do modelo.
- **past_key_values** (`Cache`, *opcional*, retornado quando `use_cache=True` é passado ou quando `config.use_cache=True`) -- Trata-se de uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache). Para mais detalhes, consulte nosso [guia de cache kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Contém estados ocultos pré-computados (chaves e valores nos blocos de autoatenção e, opcionalmente, se `config.is_encoder_decoder=True`, nos blocos de atenção cruzada) que podem ser usados (veja a entrada `past_key_values`) para acelerar a decodificação sequencial.
- **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) com a 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.
- **attentions** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_attentions=True` é passado ou quando `config.output_attentions=True`) -- Tupla de `torch.Tensor` (um para cada camada) com a forma `(batch_size, num_heads, sequence_length, sequence_length)`.

  Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.
- **router_logits** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_router_probs=True` e `config.add_router_probs=True` são passados ou quando `config.output_router_probs=True`) -- Tupla de `torch.Tensor` (um para cada camada) com a forma `(batch_size, sequence_length, num_experts)`.

  Logits brutos do roteador (pós-softmax) calculados pelos roteadores de MoE; esses termos são usados para calcular a perda auxiliar em modelos Mixture of Experts.

## BeamForCausalLM[[transformers.BeamForCausalLM]]

#### transformers.BeamForCausalLM[[transformers.BeamForCausalLM]]

```python
transformers.BeamForCausalLM(config: BeamConfig)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/beam/modeling_beam.py#L587)

**Parâmetros:**

config ([BeamConfig](/docs/transformers/main/pt/model_doc/beam#transformers.BeamConfig)) : 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 Beam Model para modelagem de linguagem causal.

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.BeamForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/beam/modeling_beam.py#L602)

**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)

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)

position_ids (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Índices das posições dos tokens de cada sequência de entrada nos embeddings de posição. Selecionados no intervalo `[0, config.n_positions - 1]`.  [O que são IDs de posição?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *opcional*) : hidden-states pré-computados (chaves e valores nos blocos de autoatenção e nos blocos de atenção cruzada) que podem ser usados para acelerar a decodificação sequencial. Isso geralmente consiste nos `past_key_values` retornados pelo modelo em uma etapa anterior da decodificação, quando `use_cache=True` ou `config.use_cache=True`.  Apenas uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache) é permitida como entrada, consulte nosso [guia de kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Se nenhum `past_key_values` for passado, [DynamicCache](/docs/transformers/main/pt/internal/generation_utils#transformers.DynamicCache) será inicializado por padrão.  O modelo sairá no mesmo formato de cache que foi fornecido como entrada.  Se `past_key_values` forem usados, espera-se que o usuário insira apenas `input_ids` não processados (aqueles que não têm seus estados de chave e valor passados para este modelo) com a forma `(batch_size, unprocessed_length)` em vez de todos os `input_ids` com a forma `(batch_size, sequence_length)`.

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.

labels (`torch.LongTensor` de forma `(batch_size, sequence_length)`, *opcional*) : Rótulos para calcular a perda de modelagem de linguagem mascarada. Os índices devem estar em `[0, ..., config.vocab_size]` ou ser -100 (veja a docstring de `input_ids`). Tokens com índices definidos como `-100` são ignorados (mascarados); a perda é calculada apenas para os tokens com rótulos em `[0, ..., config.vocab_size]`.

use_cache (`bool`, *opcional*) : Se definido como `True`, os estados de chave-valor de `past_key_values` são retornados e podem ser usados para acelerar a decodificação (veja `past_key_values`).

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:** `MoeCausalLMOutputWithPast` ou `tuple(torch.Tensor)`

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

O método forward da [BeamForCausalLM](/docs/transformers/main/pt/model_doc/beam#transformers.BeamForCausalLM) 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).
- **aux_loss** (`torch.Tensor`, *opcional*, retornado quando `output_router_logits=True` é passado ou quando `config.output_router_logits=True`, e o modelo treina seu roteador com uma perda de balanceamento de carga) -- Perda auxiliar de balanceamento de carga para os módulos esparsos. Modelos que equilibram seus especialistas com um viés de roteador em vez disso (DeepSeek-V3 e as arquiteturas derivadas dele) retornam `None` aqui, mas ainda retornam `router_logits`.
- **router_logits** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_router_logits=True` é passado ou quando `config.output_router_logits=True`) -- Tupla de `torch.Tensor` (um para cada camada esparsa) com forma `(batch_size * sequence_length, num_experts)`.

  Logits brutos do roteador calculados pelos roteadores MoE. Podem ser usados para calcular uma perda de balanceamento de carga ou para inspecionar como os tokens são distribuídos entre os especialistas.
- **past_key_values** (`Cache`, *opcional*, retornado quando `use_cache=True` é passado ou quando `config.use_cache=True`) -- Trata-se de uma instância de [Cache](/docs/transformers/main/pt/internal/generation_utils#transformers.Cache). Para mais detalhes, consulte nosso [guia de cache kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Contém estados ocultos pré-computados (chaves e valores nos blocos de autoatenção) que podem ser usados (veja a entrada `past_key_values`) para acelerar a decodificação sequencial.
- **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) com a 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.
- **attentions** (`tuple(torch.Tensor)`, *opcional*, retornado quando `output_attentions=True` é passado ou quando `config.output_attentions=True`) -- Tupla de `torch.Tensor` (um para cada camada) com a forma `(batch_size, num_heads, sequence_length, sequence_length)`.

  Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nas cabeças de autoatenção.

Exemplo:

```python
```

