# DeepSeek-V4

[DeepSeek-V4](https://huggingface.co/deepseek-ai) é o modelo de linguagem MoE de próxima geração da DeepSeek ([paper](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash/blob/main/DeepSeek_V4.pdf)). A arquitetura substitui o Multi-head Latent Attention (MLA) do DeepSeek-V3 por um design híbrido de curto e longo alcance, troca as conexões residuais por Manifold-Constrained Hyper-Connections (mHC) e inicializa as primeiras camadas MoE com uma tabela de hash estática de token-id → expert-id.

Esta implementação cobre `DeepSeek-V4-Flash`, `DeepSeek-V4-Pro` e seus equivalentes pré-treinados `-Base`. Os quatro modelos compartilham a mesma arquitetura; diferem apenas em largura / profundidade / número de especialistas e pesos.

> [!TIP]
> Defina `use_kernels=True` em [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) para substituir camadas compatíveis por kernels otimizados do Hub. Consulte [Carregando kernels](../kernel_doc/loading_kernels) para saber mais.

## Architecture (paper §2)

### Atenção híbrida (§2.3)

Cada bloco do decodificador é um dos três tipos de atenção, despachado por `config.layer_types[i]`:

* **Atenção completa com janela deslizante** (`"sliding_attention"`): apenas a janela local de `sliding_window` tokens, sem ramo de longo alcance. Corresponde ao estilo "Full Attention" do V3 para as camadas de bootstrap.
* **Compressed Sparse Attention** (`"compressed_sparse_attention"`, **CSA** — paper §2.3.1): um pool de baixa compressão (`compress_rate_csa`, padrão `m=4`) com janelas sobrepostas, além de um **Lightning Indexer** (eqs. 13–17) que pontua as queries em relação ao pool e coleta os blocos top `index_topk` por query antes de chegarem ao core attention.
* **Atenção altamente comprimida** (`"heavily_compressed_attention"`, **HCA** — paper §2.3.2): um pool de alta compressão (`compress_rate_hca`, padrão `m'=128`) com janelas não sobrepostas. Sem indexer — cada entrada do pool contribui para a atenção.

Todos os três tipos compartilham o mesmo backbone:

* **Atenção Multi-Query com K=V compartilhado**: `num_key_value_heads = 1`; `kv_proj` produz um único cabeçalho KV e o mesmo tensor é lido como chave e valor.
* **RoPE parcial** (interleaved-pair, seção 2.3.3 do paper, "Partial Rotary Positional Embedding") nos canais finais `qk_rope_head_dim = head_dim * partial_rotary_factor` de cada head. A mesma rotação é aplicada com a posição `-i` ao slice de rope da saída de atenção (eq. 26), de modo que a contribuição de cada entrada KV permaneça uma função da distância *relativa* em relação à query.
* **Sumidouro de atenção aprendível por cabeça** (eq. 27).
* **Projeção de saída de baixo posto agrupada** (§2.3.1 "Grouped Output Projection"): `o_groups` grupos de cabeças → `o_lora_rank` por grupo → `hidden_size`, calculada por `DeepseekV4GroupedLinear` (`o_a_proj`) seguida de `o_b_proj`. Reduz o custo por token da saída de atenção larga sem perder expressividade.
* **Ramo compartilhado de janela deslizante K=V** de tamanho `sliding_window` ("Additional Branch of Sliding Window Attention", §2.3.1) preserva dependências locais de granularidade fina; a saída do compressor de longo alcance é concatenada com os KVs deste ramo antes da atenção principal.

### Conexões Hiper Restricas por Variedade (§2.2)

As conexões residuais são substituídas por mHC (Xie et al., 2026): `hc_mult` fluxos residuais paralelos mantidos na forma `[B, S, hc_mult, D]` ao longo de cada bloco. Dois módulos `DeepseekV4HyperConnection` — `attn_hc` e `ffn_hc` — misturam os fluxos na entrada e na saída em torno das subcamadas de atenção / MLP por meio de uma tríade `(pre, post, comb)`. A matriz `comb` é uma projeção duplamente estocástica produzida por `hc_sinkhorn_iters` iterações de Sinkhorn–Knopp no manifold, tornando a propagação do sinal não expansiva em pilhas profundas. Um `DeepseekV4HyperHead` final reduz os `hc_mult` fluxos para uma única sequência antes da normalização do modelo.

### Agendamento de MoE (§2.1)

O roteamento é configurado por camada por `config.mlp_layer_types`, com valores de `{"hash_moe", "moe"}`:

* `"hash_moe"`: os índices de especialistas vêm de uma consulta congelada `tid2eid[input_ids]` preenchida a partir do checkpoint V4. O `weight` aprendido do gate ainda produz as pontuações por especialista que ponderam os especialistas selecionados; apenas *quais especialistas* é estático. Usado para as primeiras camadas de bootstrap (padrão 3, sobrescreva via `num_hash_layers` legado).
* `"moe"`: MoE roteado top-k padrão. A afinidade dos especialistas usa **Sqrt(Softplus(·))** em vez do Sigmoid do V3 ("we change the activation function that computes the affinity scores from Sigmoid(·) into Sqrt(Softplus(·))", paper §2.1), e a restrição `n_group` / `topk_group` do V3 é descartada. A estratégia sem perda auxiliar (DeepSeek's `noaux_tc`) é mantida por meio do buffer `e_score_correction_bias`, que aplica um viés ao argmax do top-k sem propagar gradientes.

Os especialistas roteados utilizam um **SwiGLU limitado** (`gate.clamp(max=swiglu_limit)`, `up.clamp(min=-swiglu_limit, max=swiglu_limit)`, em seguida `act_fn(gate) * up`) sobre o layout padrão de pesos dos especialistas do Mixtral `[num_experts, 2 * moe_intermediate_size, hidden_size]`. Um único especialista compartilhado (um MLP SwiGLU simples com largura `moe_intermediate_size`) é executado em paralelo para cada token.

### Layout da máscara de atenção

Cada camada `DeepseekV4Attention` estende a máscara causal de janela deslizante padrão ao longo do eixo das chaves com um `block_bias` retornado pelo seu compressor e, em seguida, passa a máscara concatenada para `eager_attention_forward`. A seção deslizante (esquerda, `[S, S]`) é a mesma para todos os tipos de camada; a seção do compressor (direita) varia conforme o tipo de camada e é a parte realmente "nova" introduzida pela V4.

Os diagramas abaixo foram produzidos com uma configuração mínima (`sliding_window=8`, CSA `m=4`, HCA `m'=8`, `index_topk=2`) em uma entrada de 16 tokens, para que a máscara completa por tipo de camada caiba na tela. Verde = a diagonal de query/key na seção deslizante, escuro = uma posição KV padrão visível, claro = mascarado, âmbar = um slot de compressor/indexador para o qual a query pode prestar atenção. As colunas após a linha tracejada são adicionadas pelo compressor via `cat([sliding_causal_mask, block_bias], dim=-1)`.

**Camada apenas deslizante (`"sliding_attention"`).** Sem compressor, sem preenchimento à direita — a máscara é a máscara causal de janela deslizante simples, de forma `[S, S]` (janela = 8). Para `i ≥ window`, o triângulo inferior esquerdo é cortado, recuperando o padrão de atenção apenas local.

**Camada CSA (`"compressed_sparse_attention"`).** O compressor achata a saída coletada por consulta para `[B, 1, S·k, D]` e adiciona padding à direita na máscara com `S·k` colunas. Para a consulta `t`, apenas os `k` slots nas colunas `[S + t·k, S + (t+1)·k)` contêm as escolhas do indexer; todas as outras colunas do compressor são `-inf`. Consultas antes do fechamento da primeira janela (`t < m − 1`) não recebem nada — o sentinela `-1` do indexer é propagado diretamente para a máscara. À medida que `t` aumenta, mais entradas comprimidas ficam prontas e o indexer pode preencher todos os `k` slots.

**Camada HCA (`"heavily_compressed_attention"`).** Sem indexer — cada entrada comprimida em cache é potencialmente visível. Preenchida à direita com `T_total = entry_count["compressor"]` colunas. A query `t` só pode ver a entrada `w` após o fechamento da sua janela de origem, ou seja, `w < (t + 1) // m`. Com `m=8` aqui, as entradas 0 (cobre as posições `0..7`) e 1 (cobre `8..15`) só se tornam visíveis em `t ≥ 7` e `t ≥ 15`, respectivamente.

Estes diagramas são reproduzíveis de ponta a ponta por meio de:

```bash
python docs/source/en/imgs/deepseek_v4/visualize_attention_masks.py \
    --svg docs/source/en/imgs/deepseek_v4
```

O script executa uma passagem direta nesta configuração mínima, envolve cada camada de atenção para capturar a máscara exata pós-`cat([attention_mask, block_bias])`, remapeia a máscara de slots planos `[S, S·k]` do CSA de volta para uma visão de visibilidade de entradas `[S, T_entries]` (de modo que cada coluna `C_w` seja uma *entrada* comprimida, e não um slot de coleta) e grava os três SVGs acima. Ele também imprime uma grade ANSI no stdout para inspeção rápida no terminal e despeja as escolhas top-k por consulta do indexador, para que os sentinelas de aquecimento e as escolhas de coleta sejam auditáveis.

### Camadas de cache

Cada bloco de atenção não deslizante precisa encadear o estado do compressor / indexador entre as chamadas de forward. O V4 oferece dois tipos de camada de cache que se registram automaticamente com `LAYER_TYPE_CACHE_MAPPING`:

* `DeepseekV4HCACache`: janela deslizante K=V + buffer/pool/contador do compressor HCA (sem sobreposição, sem indexador).
* `DeepseekV4CSACache`: janela deslizante K=V + compressor CSA (com estado de sobreposição) + buffer de indexador paralelo / pool / contagem / sobreposição em `index_head_dim`.

`DynamicCache(config=…)` constrói a camada de cache adequada para cada `config.layer_types[i]`.

## DeepseekV4Config[[transformers.DeepseekV4Config]]

#### transformers.DeepseekV4Config[[transformers.DeepseekV4Config]]

```python
transformers.DeepseekV4Config(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 = 129280, hidden_size: int = 4096, moe_intermediate_size: int = 2048, num_hidden_layers: int = 43, num_attention_heads: int = 64, num_key_value_heads: int = 1, head_dim: int = 512, q_lora_rank: int = 1024, num_experts_per_tok: int = 6, n_routed_experts: int = 256, n_shared_experts: int = 1, scoring_func: str = 'sqrtsoftplus', norm_topk_prob: bool = True, routed_scaling_factor: float = 1.5, max_position_embeddings: int = 1048576, rope_theta: float | int = 10000.0, layer_types: list[str] | None = None, compress_rates: dict | None = None, compress_rope_theta: float | int = 160000.0, hc_mult: int = 4, hc_sinkhorn_iters: int = 20, hc_eps: float = 1e-06, mlp_layer_types: list[str] | None = None, swiglu_limit: float = 10.0, sliding_window: int = 128, o_groups: int = 8, o_lora_rank: int = 1024, index_n_heads: int = 64, index_head_dim: int = 128, index_topk: int = 512, num_nextn_predict_layers: int = 1, output_router_logits: bool = False, router_aux_loss_coef: float = 0.001, router_jitter_noise: float = 0.0, hidden_act: str = 'silu', initializer_range: float = 0.02, rms_norm_eps: float = 1e-06, use_cache: bool = True, pad_token_id: int | None = None, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 1, tie_word_embeddings: bool = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, partial_rotary_factor: float | None = None, attention_bias: bool = False, mlp_bias: bool = False, attention_dropout: float = 0.0)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/deepseek_v4/configuration_deepseek_v4.py#L40)

**Parâmetros:**

vocab_size (`int`, *opcional*, padrão `129280`) : 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.

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

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

num_attention_heads (`int`, *opcional*, padrão `64`) : 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 `1`) : 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`.

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

q_lora_rank (`int`, *opcional*, padrão `1024`) : Rank das matrizes LoRA para as projeções de query.

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

n_routed_experts (`int`, *opcional*, padrão `256`) : Número de especialistas roteados.

n_shared_experts (`int`, *opcional*, padrão `1`) : Número de especialistas compartilhados.

scoring_func (`str`, *opcional*, padrão `sqrtsoftplus`) : Ativação do roteador — `sqrtsoftplus`, `softmax` ou `sigmoid`.

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

routed_scaling_factor (`float`, *opcional*, padrão `1.5`) : Fator de escala ou especialistas roteados.

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

rope_theta (`Union[float, int]`, *opcional*, padrão `10000.0`) : base do RoPE para a rotação principal da autoatenção.

layer_types (`list[str]`, *opcional*) : Agendamento de atenção por camada com valores de `{"compressed_sparse_attention", "heavily_compressed_attention"}`. Padrão do V4-Pro: 2× bootstrap HCA + CSA / HCA intercalados.

compress_rates (`dict[str, int]`) : Taxa de compressão por tipo de camada. Padrão `{"compressed_sparse_attention": 4, "heavily_compressed_attention": 128}` (m=4 para CSA, m'=128 para HCA, artigo §2.3.1 / §2.3.2). BC: configurações que incluem `compress_rate_csa` / `compress_rate_hca` como kwargs de nível superior são incorporadas no momento do `__post_init__`.

compress_rope_theta (`Union[float, int]`, *opcional*, padrão `160000.0`) : Base do RoPE para os ramos comprimidos (usada em conjunto com `rope_scaling` para YaRN).

hc_mult (`int`, *opcional*, padrão `4`) : Fator de expansão n_hc do Manifold-Constrained Hyper-Connection (mHC) (sempre ativo; Seção 2.2).

hc_sinkhorn_iters (`int`, *opcional*, padrão `20`) : Iterações t_max de Sinkhorn-Knopp para o mHC residual mapping, projetando em matrizes duplamente estocásticas.

hc_eps (`float`, *opcional*, padrão `1e-06`) : Limite numérico para a normalização de Sinkhorn-Knopp.

mlp_layer_types (`list[str]`, *opcional*) : Agendamento MoE por camada com valores de `{"hash_moe", "moe"}`. `hash_moe` faz o roteamento por meio de uma consulta congelada `tid2eid[input_ids]` (seção 2.1 do artigo, "Hash-MoE bootstrap"); `moe` é o MoE roteado padrão top-k. Padrão: 3× `hash_moe` e, em seguida, `moe` para o restante. BC: configurações legadas que incluem `num_hash_layers` como um kwarg de nível superior são incorporadas no momento do `__post_init__`.

swiglu_limit (`float`, *opcional*, padrão `10.0`) : Recorta as pré-ativações de gate/up dos especialistas roteados.

sliding_window (`int`, *opcional*, padrão `128`) : Tamanho da janela local n_win usado no ramo de janela deslizante de cada bloco de atenção.

o_groups (`int`, *opcional*, padrão `8`) : Número de grupos de cabeças g na projeção de saída agrupada (papel §2.3.1, "Grouped Output Projection").

o_lora_rank (`int`, *opcional*, padrão `1024`) : Dimensão intermediária por grupo d_g na projeção de saída agrupada.

index_n_heads (`int`, *opcional*, padrão `64`) : Número de cabeças de consulta do indexador n_h^I (artigo §2.3.1, eq. 14).

index_head_dim (`int`, *opcional*, padrão `128`) : Dimensão da cabeça do indexer c^I (papel §2.3.1).

index_topk (`int`, *opcional*, padrão `512`) : Número de entradas comprimidas por consulta que o Lightning Indexer mantém por meio de top-k (papel §2.3.1, eq. 17).

num_nextn_predict_layers (`int`, *opcional*, padrão `1`) : número de camadas MTP no checkpoint upstream (não instanciadas aqui).

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.

router_aux_loss_coef (`float`, *opcional*, padrão `0.001`) : Coeficiente da perda auxiliar de balanceamento de carga. Usado para penalizar o roteamento desigual de especialistas em modelos MoE.

router_jitter_noise (`float`, *opcional*, padrão `0.0`) : Quantidade de ruído a ser adicionada aos logits do roteador durante o treinamento para um melhor balanceamento de carga.

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.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.

pad_token_id (`int`, *opcional*) : ID do token usado para preenchimento (padding) 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 `1`) : ID do token usado para o fim do fluxo no vocabulário.

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.

partial_rotary_factor (`float`, *opcional*) : Fração de head_dim que recebe RoPE. O valor padrão é `qk_rope_head_dim / head_dim`, de modo que os tamanhos de cos/sin sejam `qk_rope_head_dim`.

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.

mlp_bias (`bool`, *opcional*, padrão `False`) : Se deve usar um viés nas camadas up_proj, down_proj e gate_proj das camadas MLP.

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

Esta é a classe de configuração para armazenar a configuração de um DeepseekV4Model. Ela é usada para instanciar um modelo Deepseek V4 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 [deepseek-ai/DeepSeek-V4-Flash-Base](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Base)

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.

#### validate_layer_type[[transformers.DeepseekV4Config.validate_layer_type]]

```python
validate_layer_type()
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/deepseek_v4/configuration_deepseek_v4.py#L214)

A V4 restringe o `ALLOWED_LAYER_TYPES` global aos três tipos de blocos de atenção e aos dois tipos de blocos MLP que ela realmente distribui, além das verificações padrão de comprimento e de pertencimento ao tipo.

## DeepseekV4Model[[transformers.DeepseekV4Model]]

#### transformers.DeepseekV4Model[[transformers.DeepseekV4Model]]

```python
transformers.DeepseekV4Model(config: DeepseekV4Config)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/deepseek_v4/modeling_deepseek_v4.py#L1296)

**Parâmetros:**

config ([DeepseekV4Config](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4Config)) : 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 Deepseek V4 puro, que gera 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.DeepseekV4Model.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/deepseek_v4/modeling_deepseek_v4.py#L1314)

**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`) contendo vários elementos, dependendo da configuração ([DeepseekV4Config](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4Config)) e das entradas.

O método forward do [DeepseekV4Model](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4Model) 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)`) -- 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.

## DeepseekV4ForCausalLM[[transformers.DeepseekV4ForCausalLM]]

#### transformers.DeepseekV4ForCausalLM[[transformers.DeepseekV4ForCausalLM]]

```python
transformers.DeepseekV4ForCausalLM(config: DeepseekV4Config)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/deepseek_v4/modeling_deepseek_v4.py#L1441)

**Parâmetros:**

config ([DeepseekV4Config](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4Config)) : 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 Deepseek V4 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.DeepseekV4ForCausalLM.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, output_router_logits: 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/deepseek_v4/modeling_deepseek_v4.py#L1459)

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

output_router_logits (`bool`, *opcional*) : Indica se os logits de todos os roteadores devem ser retornados. Eles são úteis para calcular a perda do roteador e não devem ser retornados durante a inferência.

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`) contendo vários elementos, dependendo da configuração ([DeepseekV4Config](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4Config)) e das entradas.

O método forward de [DeepseekV4ForCausalLM](/docs/transformers/main/pt/model_doc/deepseek_v4#transformers.DeepseekV4ForCausalLM) 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
>>> from transformers import AutoTokenizer, DeepseekV4ForCausalLM

>>> model = DeepseekV4ForCausalLM.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
```

