Transformers documentation

DeepSeek-V4

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Este modelo foi contribuído para o Hugging Face Transformers em 2026-05-02.

DeepSeek-V4

DeepSeek-V4 é o modelo de linguagem MoE de próxima geração da DeepSeek (paper). A arquitetura substitui o Multi-head Latent Attention (MLA) do DeepSeek-V3 por um design híbrido local + 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 abrange DeepSeek-V4-Flash, DeepSeek-V4-Pro e seus equivalentes pré-treinados -Base. Os quatro compartilham a mesma arquitetura; diferem apenas em largura / profundidade / número de especialistas e pesos.

Defina use_kernels=True em from_pretrained() para substituir camadas compatíveis por kernels otimizados do Hub. Consulte Carregando kernels para saber mais.

Arquitetura (artigo §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 ramificação 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 à atenção principal.
  • 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 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.
  • O ramo compartilhado de janela deslizante K=V de tamanho sliding_window (“Additional Branch of Sliding Window Attention”, §2.3.1) preserva as 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 de entrada e 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 padrão top-k. A afinidade dos especialistas usa Sqrt(Softplus(·)) em vez do Sigmoid do V3 (“alteramos a função de ativação que calcula as pontuações de afinidade de Sigmoid(·) para Sqrt(Softplus(·))”, papel §2.1), e a restrição n_group / topk_group do V3 é descartada. A estratégia sem perda auxiliar (noaux_tc do DeepSeek) é mantida por meio do buffer e_score_correction_bias, que aplica um viés ao argmax 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 em 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 é permitida a 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.

DeepSeek-V4 sliding attention mask

Camada CSA ("compressed_sparse_attention"). O compressor achata a saída coletada por consulta em [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 anteriores ao fechamento da primeira janela (t < m − 1) não recebem nada — o sentinela -1 do indexer se propaga diretamente para a máscara. À medida que t aumenta, mais entradas comprimidas ficam prontas e o indexer pode preencher todos os k slots.

DeepSeek-V4 CSA attention mask

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 depois que sua janela de origem foi fechada, 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.

DeepSeek-V4 HCA attention mask

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

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) + indexador paralelo buffer / pool / count / overlap em index_head_dim.

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

DeepseekV4Config

classe transformers.DeepseekV4Config

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 129280hidden_size: int = 4096moe_intermediate_size: int = 2048num_hidden_layers: int = 43num_attention_heads: int = 64num_key_value_heads: int = 1head_dim: int = 512q_lora_rank: int = 1024num_experts_per_tok: int = 6n_routed_experts: int = 256n_shared_experts: int = 1scoring_func: str = 'sqrtsoftplus'norm_topk_prob: bool = Truerouted_scaling_factor: float = 1.5max_position_embeddings: int = 1048576rope_theta: float | int = 10000.0layer_types: list[str] | None = Nonecompress_rates: dict | None = Nonecompress_rope_theta: float | int = 160000.0hc_mult: int = 4hc_sinkhorn_iters: int = 20hc_eps: float = 1e-06mlp_layer_types: list[str] | None = Noneswiglu_limit: float = 10.0sliding_window: int = 128o_groups: int = 8o_lora_rank: int = 1024index_n_heads: int = 64index_head_dim: int = 128index_topk: int = 512num_nextn_predict_layers: int = 1output_router_logits: bool = Falserouter_aux_loss_coef: float = 0.001router_jitter_noise: float = 0.0hidden_act: str = 'silu'initializer_range: float = 0.02rms_norm_eps: float = 1e-06use_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = 0eos_token_id: int | list[int] | None = 1tie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonepartial_rotary_factor: float | None = Noneattention_bias: bool = Falsemlp_bias: bool = Falseattention_dropout: float = 0.0 )

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 por meio do meanpooling de todas as cabeças originais dentro desse grupo. Para mais detalhes, consulte este artigo. 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 deve ser roteado. Este é o valor top-k para o roteamento por 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) — Indica se as pesos dos especialistas roteados devem ser normalizados.
  • routed_scaling_factor (float, opcional, padrão 1.5) — Fator de escala dos especialistas roteados.
  • max_position_embeddings (int, opcional, padrão 1048576) — O comprimento máximo de sequência com o qual este modelo pode ser utilizado.
  • 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, papel §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 (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 mapeamento residual mHC projetado em matrizes duplamente estocásticas.
  • hc_eps (float, opcional, padrão 1e-06) — Limite numérico para a normalização Sinkhorn-Knopp.
  • mlp_layer_types (list[str], opcional) — Agendamento MoE por camada com valores de {"hash_moe", "moe"}. hash_moe roteia por meio de uma consulta tid2eid[input_ids] congelada (papel §2.1, “Hash-MoE bootstrap”); moe é o MoE roteado top-k padrão. Padrão: 3× hash_moe e depois 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) — Limita 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 sliding-window 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 d_g por grupo 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 do cabeçalho do indexador 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) — Quantidade de camadas MTP no checkpoint de origem (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 permitirá que o modelo saída 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) — Se o modelo deve ou não retornar as últimas chaves/valores de atenção (não usado por todos os modelos). Relevante apenas se config.is_decoder=True ou quando o modelo for um modelo generativo somente decodificador.
  • pad_token_id (int, opcional) — 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 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. Padrão é qk_rope_head_dim / head_dim, de modo que o tamanho de cos/sin seja qk_rope_head_dim.
  • attention_bias (bool, opcional, padrão False) — Indica se deve ser usado 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

Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.

validate_layer_type

< >

( )

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

classe transformers.DeepseekV4Model

< >

( config: DeepseekV4Config )

Parâmetros

  • config (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() 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. 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 do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeModelOutputWithPast or tuple(torch.Tensor)

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 padding será ignorado por padrão.

    Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.

    O que são IDs de entrada?

  • 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?

  • 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?

  • past_key_values (~cache_utils.Cache, opcional) — Estados ocultos 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 no past_key_values retornado pelo modelo em uma etapa anterior da decodificação, quando use_cache=True ou config.use_cache=True.

    Apenas uma instância de Cache é permitida como entrada, consulte nosso guia de cache de kv. Se nenhum past_key_values for passado, DynamicCache será inicializado por padrão.

    O modelo sairá no mesmo formato de cache que é fornecido como entrada.

    Se past_key_values forem usados, espera-se que o usuário insira apenas os input_ids não processados (aqueles que não têm seus estados de chave e valor passados fornecidos a 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 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) e das entradas.

O método forward do 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) — É uma instância de Cache. Para mais detalhes, consulte nosso guia de cache kv.

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

  • 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 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 nos cabeçalhos 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 forma (batch_size, sequence_length, num_experts).

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

DeepseekV4ForCausalLM

classe transformers.DeepseekV4ForCausalLM

< >

( config: DeepseekV4Config )

Parâmetros

  • config (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() para carregar os pesos do modelo.

O Modelo Deepseek V4 para modelagem de linguagem causal.

Este modelo herda de 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 do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_router_logits: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeCausalLMOutputWithPast or tuple(torch.Tensor)

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 padding será ignorado por padrão.

    Os índices podem ser obtidos usando AutoTokenizer. Consulte PreTrainedTokenizer.encode() e PreTrainedTokenizer.call() para mais detalhes.

    O que são IDs de entrada?

  • 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?

  • 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?

  • past_key_values (~cache_utils.Cache, opcional) — Estados ocultos 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 no past_key_values retornado pelo modelo em uma etapa anterior da decodificação, quando use_cache=True ou config.use_cache=True.

    Apenas uma instância de Cache é permitida como entrada, consulte nosso guia de cache de kv. Se nenhum past_key_values for passado, DynamicCache será inicializado por padrão.

    O modelo sairá no mesmo formato de cache que é fornecido como entrada.

    Se past_key_values forem usados, espera-se que o usuário insira apenas os input_ids não processados (aqueles que não têm seus estados de chave e valor passados fornecidos a 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 causal. Os índices devem estar em [-100, 0, ..., config.vocab_size] (veja input_ids docstring). 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].

    Os rótulos são deslocados internamente para que labels[..., 1:] sejam usados para prever logits[..., :-1, :]. Passe rótulos não deslocados que correspondam a input_ids (ou seja, labels = input_ids). Não desloque os rótulos você mesmo antes de passá-los.

    Se os rótulos já estiverem deslocados (por exemplo, com paralelismo de sequência), passe-os como o argumento de palavra-chave shift_labels e eles serão usados como estão. labels ainda deve ser passado para que a perda seja calculada.

  • use_cache (bool, opcional) — Se definido como True, os estados de chave-valor 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) e das entradas.

O método forward de 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) — É uma instância de Cache. Para mais detalhes, consulte nosso guia de cache kv.

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

  • 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 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 nos cabeçalhos de autoatenção.

Exemplo:

>>> 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."
Update on GitHub