# FalconH1

## Visão geral

O modelo [FalconH1](https://huggingface.co/blog/tiiuae/falcon-h1) foi desenvolvido pela equipe de pré-treinamento da TII. Um artigo de pesquisa abrangente, que cobre a arquitetura, a dinâmica de pré-treinamento, os resultados experimentais e as conclusões, será publicado em breve. Você pode ler mais sobre essa série em [este site](https://github.com/tiiuae/Falcon-H1).

## Contribuidores

Este modelo foi contribuído por [DhiyaEddine](https://huggingface.co/DhiyaEddine), [ybelkada](https://huggingface.co/ybelkada), [JingweiZuo](https://huggingface.co/JingweiZuo), [IlyasChahed](https://huggingface.co/IChahed) e [MaksimVelikanov](https://huggingface.co/yellowvm). O código original pode ser encontrado [aqui](https://github.com/tiiuae/Falcon-H1).

## Observações

- Use padding à esquerda para geração em lote. Consulte [Lado do padding](../llm_tutorial#padding-side).

## FalconH1Config[[transformers.FalconH1Config]]

| Model     | Profundidade | Dim  | Cabeças de Attn | KV | Mamba Heads | d_head       | d_state | Compr. do Ctx        |
|-----------|--------|------|------------|----|--------------|--------------|------|-----------------|
| H1 0.5B   | 36     | 1024 | 8          | 2  | 24           | 64 / 64      | 128  | 4K, 16K-SFT     |
| H1 1.5B   | 24     | 2048 | 8          | 2  | 48           | 128 / 64     | 256  | 128K            |
| H1 1.5B-d | 66     | 1280 | 6          | 2  | 24           | 128 / 64     | 256  | 128K            |
| H1 3B     | 32     | 2560 | 10         | 2  | 32           | 128 / 128    | 256  | 128K            |
| H1 7B     | 44     | 3072 | 12         | 2  | 24           | 128 / 128    | 256  | 256K            |
| H1 34B    | 72     | 5120 | 20         | 4  | 32           | 128 / 128    | 256  | 256K            |

#### transformers.FalconH1Config[[transformers.FalconH1Config]]

```python
transformers.FalconH1Config(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 = 128000, tie_word_embeddings: bool = False, hidden_size: int = 4096, intermediate_size: int = 14336, num_hidden_layers: int = 32, num_attention_heads: int = 32, num_key_value_heads: int | None = 8, hidden_act: str = 'silu', initializer_range: float = 0.02, rms_norm_eps: float = 1e-05, use_cache: bool | None = True, num_logits_to_keep: int | None = 1, pad_token_id: int | None = 0, bos_token_id: int | None = 1, eos_token_id: int | list[int] | None = 2, max_position_embeddings: int = 8192, attention_dropout: float | int | None = 0.0, mamba_d_ssm: int | None = 1024, mamba_n_heads: int | None = 128, mamba_d_head: str | int | None = 'auto', mamba_n_groups: int | None = 1, mamba_d_state: int | None = 256, mamba_d_conv: int | None = 4, mamba_expand: int | None = 2, mamba_chunk_size: int | None = 256, mamba_conv_bias: bool | None = True, mamba_proj_bias: bool | None = False, mamba_norm_before_gate: bool | None = True, mamba_rms_norm: bool | None = False, time_step_limit: list[float, float] | tuple[float, float] | None = (0.0, inf), projectors_bias: bool | None = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, lm_head_multiplier: float | None = 1.0, embedding_multiplier: float | None = 1.0, mlp_multipliers: list[float] | None = None, key_multiplier: float | None = 1.0, attention_out_multiplier: float | None = 1.0, attention_in_multiplier: float | None = 1.0, ssm_multipliers: list[float] | None = None, ssm_in_multiplier: float | None = 1.0, ssm_out_multiplier: float | None = 1.0, attention_bias: bool = False, mlp_bias: bool = False)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/configuration_falcon_h1.py#L25)

**Parâmetros:**

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

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.

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

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

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

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

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-05`) : 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.

num_logits_to_keep (`int` ou `None`, *opcional*, padrão 1) : Número de logits de prompt a serem calculados durante a geração. Se `None`, todos os logits serão calculados. Se um valor inteiro, apenas os últimos `num_logits_to_keep` logits serão calculados. O padrão é 1, pois apenas os logits do último token do prompt são necessários para a geração. Para sequências longas, os logits da sequência inteira podem consumir muita memória, portanto, definir `num_logits_to_keep=1` reduzirá significativamente o uso de memória.

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

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

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

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

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

mamba_d_ssm (`int`, *opcional*, padrão `1024`) : Tamanho do estado interno do SSM (modelo de espaço de estado) nas camadas Mamba do FalconH1.

mamba_n_heads (`int`, *opcional*, padrão `128`) : O número de cabeças mamba usadas na implementação v2.

mamba_d_head (`Union[str, int]`, *opcional*, padrão `auto`) : Dimensão do tamanho do embedding da head

mamba_n_groups (`int`, *opcional*, padrão `1`) : O número de grupos mamba usados na implementação v2.

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

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

mamba_expand (`int`, *opcional*, padrão `2`) : Fator de expansão (relativo a hidden_size) usado para determinar o tamanho intermediário do mamba

mamba_chunk_size (`int`, *opcional*, padrão `256`) : Os blocos em que a sequência deve ser dividida durante o prefill/treinamento

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

mamba_proj_bias (`bool`, *opcional*, padrão `False`) : Indica se deve ou não usar viés nas projeções de entrada e saída (["in_proj", "out_proj"]) do bloco mamba mixer

mamba_norm_before_gate (`bool`, *opcional*, padrão `True`) : Indica se a normalização deve ser aplicada antes do mecanismo de gating no mixer Mamba.

mamba_rms_norm (`bool`, *opcional*, padrão `False`) : Se deve usar normalização RMS nas camadas Mamba (em oposição ao LayerNorm padrão).

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

projectors_bias (`bool`, *opcional*, padrão `False`) : Indica se deve ou não usar viés nas projeções de entrada e saída (["in_proj", "out_proj"]) do bloco de atenção

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.

lm_head_multiplier (`float`, *opcional*, padrão 1.0) : O multiplicador para o LM head. Isso é usado para escalar a saída do LM head.

embedding_multiplier (`float`, *opcional*, padrão 1.0) : O multiplicador da camada de incorporação. Isso é usado para escalar a saída da camada de incorporação.

mlp_multipliers (`list[float]`, *opcional*) : Os multiplicadores para as camadas MLP. Isso é usado para escalar a saída das camadas MLP. O primeiro valor é o multiplicador da camada gate, e o segundo valor é o multiplicador da camada down_proj.

key_multiplier (`float`, *opcional*) : O multiplicador da camada de chave. Isso é usado para escalar a saída da camada de chave.

attention_out_multiplier (`float`, *opcional*) : O multiplicador para a camada de saída da atenção. Isso é usado para escalar a saída da atenção

attention_in_multiplier (`float`, *opcional*) : O multiplicador para a camada de entrada da atenção. Isso é usado para escalar a saída da camada de entrada da atenção.

ssm_multipliers (`list[float]`, *opcional*) : Os multiplicadores para as camadas SSM. Isso é usado para escalar a saída das camadas SSM.

ssm_in_multiplier (`float`, *opcional*) : O multiplicador para a camada de entrada do SSM. Isso é usado para escalar a saída da camada de entrada do SSM.

ssm_out_multiplier (`float`, *opcional*) : O multiplicador da camada de saída do SSM. Isso é usado para escalar a saída da camada de saída do SSM.

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.

Esta é a classe de configuração para armazenar a configuração de um FalconH1Model. Ela é usada para instanciar um modelo Falcon H1 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 [tiiuae/Falcon-H1-1.5B-Deep-Instruct](https://huggingface.co/tiiuae/Falcon-H1-1.5B-Deep-Instruct)

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.

## FalconH1ForCausalLM[[transformers.FalconH1ForCausalLM]]

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("tiiuae/Falcon-H1-7B-Instruct", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("tiiuae/Falcon-H1-7B-Instruct")

message = ["Mamba is a snake with following properties  "]
inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False).to(model.device)
response = model.generate(**inputs, max_new_tokens=64)
print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])
```

#### transformers.FalconH1ForCausalLM[[transformers.FalconH1ForCausalLM]]

```python
transformers.FalconH1ForCausalLM(config: FalconH1Config)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/modeling_falcon_h1.py#L1111)

**Parâmetros:**

config ([FalconH1Config](/docs/transformers/main/pt/model_doc/falcon_h1#transformers.FalconH1Config)) : 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 Falcon H1 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.FalconH1ForCausalLM.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)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/modeling_falcon_h1.py#L1126)

**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:** [CausalLMOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) ou `tuple(torch.Tensor)`

Um [CausalLMOutputWithPast](/docs/transformers/main/pt/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) 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 ([FalconH1Config](/docs/transformers/main/pt/model_doc/falcon_h1#transformers.FalconH1Config)) e das entradas.

O método forward de [FalconH1ForCausalLM](/docs/transformers/main/pt/model_doc/falcon_h1#transformers.FalconH1ForCausalLM) 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).
- **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, FalconH1ForCausalLM

>>> model = FalconH1ForCausalLM.from_pretrained("...")
>>> tokenizer = AutoTokenizer.from_pretrained("...")

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

Esta implementação do HF foi contribuída por [younesbelkada](https://github.com/younesbelkada) e [DhiaEddineRhaiem](https://github.com/dhiaEddineRhaiem).

