# FalconH1

## Обзор

Модель [FalconH1](https://huggingface.co/blog/tiiuae/falcon-h1) была разработана командой TII Pretraining. Комплексная научная статья, охватывающая архитектуру, динамику предобучения, результаты экспериментов и выводы, будет опубликована в ближайшее время. Подробнее об этой серии можно прочитать на [этом сайте](https://github.com/tiiuae/Falcon-H1).

## Вкладчики

Эта модель была добавлена [DhiyaEddine](https://huggingface.co/DhiyaEddine), [ybelkada](https://huggingface.co/ybelkada), [JingweiZuo](https://huggingface.co/JingweiZuo), [IlyasChahed](https://huggingface.co/IChahed) и [MaksimVelikanov](https://huggingface.co/yellowvm). Исходный код можно найти [здесь](https://github.com/tiiuae/Falcon-H1).

## Примечания

- Используйте левое выравнивание (left padding) для пакетной генерации. См. [Сторона выравнивания](../llm_tutorial#padding-side).

## FalconH1Config[[transformers.FalconH1Config]]

| Модель     | Глубина | Размер  | Головки внимания | KV | Mamba Heads | d_head       | d_state | Длина контекста        |
|-----------|--------|------|------------|----|--------------|--------------|------|-----------------|
| 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)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/configuration_falcon_h1.py#L25)

**Параметры:**

vocab_size (`int`, *необязательный*, по умолчанию `128000`) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в `input_ids`.

tie_word_embeddings (`bool`, *необязательный*, по умолчанию `False`) : Связывать ли веса эмбеддингов согласно отображению `tied_weights_keys` модели.

hidden_size (`int`, *optional*, по умолчанию `4096`) : Размерность скрытых представлений.

intermediate_size (`int`, *необязательный*, по умолчанию `14336`) : Размерность представлений MLP.

num_hidden_layers (`int`, *необязательный*, по умолчанию `32`) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (`int`, *необязательный*, по умолчанию `32`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

num_key_value_heads (`int`, *optional*, по умолчанию `8`) : Это количество ключевых и value-голов, которое следует использовать для реализации Grouped Query Attention. Если `num_key_value_heads=num_attention_heads`, модель будет использовать Multi Head Attention (MHA), если `num_key_value_heads=1` — Multi Query Attention (MQA), в противном случае используется GQA. При конвертации multi-head checkpoint в GQA checkpoint каждая группа ключевых и value-голов должна быть построена путем усреднения (meanpooling) всех исходных голов в этой группе. Подробнее см. в [этой статье](https://huggingface.co/papers/2305.13245). Если значение не указано, по умолчанию используется `num_attention_heads`.

hidden_act (`str`, *необязательный*, по умолчанию `silu`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

initializer_range (`float`, *необязательный*, по умолчанию `0.02`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

rms_norm_eps (`float`, *необязательный*, по умолчанию `1e-05`) : Значение epsilon, используемое слоями нормализации rms.

use_cache (`bool`, *необязательный*, по умолчанию `True`) : Следует ли модели возвращать последние значения внимания key/values (не используется во всех моделях). Актуально только при `config.is_decoder=True` или если модель является генеративной моделью только с декодером.

num_logits_to_keep (`int` или `None`, *необязательный*, по умолчанию 1) : Количество логитов промпта, которые нужно вычислить во время генерации. Если `None`, будут вычислены все логиты. Если указано целое число, будут вычислены только последние `num_logits_to_keep` логитов. По умолчанию значение равно 1, так как для генерации нужны только логиты последнего токена промпта. Для длинных последовательностей логиты для всей последовательности могут занимать много памяти, поэтому установка `num_logits_to_keep=1` значительно уменьшит потребление памяти.

pad_token_id (`int`, *необязательный*, по умолчанию `0`) : Идентификатор токена, используемый для выравнивания в словаре.

bos_token_id (`int`, *необязательный*, по умолчанию `1`) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (`Union[int, list[int]]`, *необязательный*, по умолчанию `2`) : Идентификатор токена, используемого для обозначения конца потока в словаре.

max_position_embeddings (`int`, *необязательный*, по умолчанию `8192`) : Максимальная длина последовательности, с которой может использоваться данная модель.

attention_dropout (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Коэффициент dropout для вероятностей внимания.

mamba_d_ssm (`int`, *optional*, по умолчанию `1024`) : Размер внутреннего состояния SSM (модели пространства состояний) в слоях Mamba в FalconH1.

mamba_n_heads (`int`, *необязательный*, по умолчанию `128`) : Количество mamba-голов, используемых в реализации v2.

mamba_d_head (`Union[str, int]`, *необязательный*, по умолчанию `auto`) : Размерность встраивания для головы

mamba_n_groups (`int`, *необязательный*, по умолчанию `1`) : Количество групп mamba, используемых в реализации v2.

mamba_d_state (`int`, *optional*, по умолчанию `256`) : Размер состояния SSM (размерность латентного состояния) в слоях Mamba.

mamba_d_conv (`int`, *optional*, по умолчанию `4`) : Размер ядра свёртки mamba

mamba_expand (`int`, *optional*, по умолчанию `2`) : Коэффициент расширения (относительно hidden_size), используемый для определения промежуточного размера mamba

mamba_chunk_size (`int`, *необязательный*, по умолчанию `256`) : Размер блоков, на которые разбивается последовательность при выполнении prefill/обучения

mamba_conv_bias (`bool`, *необязательный*, по умолчанию `True`) : Флаг, указывающий, следует ли использовать смещение (bias) в слое свёртки блока mamba mixer.

mamba_proj_bias (`bool`, *необязательный*, по умолчанию `False`) : Флаг, указывающий, следует ли использовать смещение (bias) во входных и выходных проекциях (["in_proj", "out_proj"]) блока mamba mixer

mamba_norm_before_gate (`bool`, *необязательный*, по умолчанию `True`) : Нужно ли применять нормализацию перед механизмом гейтинга в миксере Mamba.

mamba_rms_norm (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли нормализацию RMS в слоях Mamba (вместо стандартной LayerNorm).

time_step_limit (`Union[list[float, float], tuple[float, float]]`, *необязательный*, по умолчанию `(0.0, inf)`) : Допустимый диапазон значений шага времени для ограничения.

projectors_bias (`bool`, *необязательный*, по умолчанию `False`) : Флаг, указывающий, следует ли использовать смещение (bias) во входных и выходных проекциях (["in_proj", "out_proj"]) блока внимания

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *optional*) : Словарь, содержащий параметры конфигурации для вложений RoPE. Словарь должен содержать значение для `rope_theta` и, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длинными `max_position_embeddings`.

lm_head_multiplier (`float`, *optional*, по умолчанию 1.0) : Множитель для LM head. Используется для масштабирования вывода LM head.

embedding_multiplier (`float`, *optional*, по умолчанию 1.0) : Множитель для слоя эмбеддингов. Используется для масштабирования вывода слоя эмбеддингов.

mlp_multipliers (`list[float]`, *optional*) : Множители для слоёв MLP. Используется для масштабирования выходных значений слоёв MLP. Первое значение — множитель для слоя gate, второе значение — множитель для слоя down_proj.

key_multiplier (`float`, *необязательный*) : Множитель для слоя ключей. Используется для масштабирования вывода слоя ключей.

attention_out_multiplier (`float`, *необязательный*) : Множитель для выходного слоя внимания. Используется для масштабирования выхода слоя внимания

attention_in_multiplier (`float`, *необязательный*) : Множитель для входного слоя внимания. Используется для масштабирования выходных значений входного слоя внимания.

ssm_multipliers (`list[float]`, *необязательный*) : Множители для слоёв SSM. Используется для масштабирования вывода слоёв SSM.

ssm_in_multiplier (`float`, *optional*) : Множитель для входного слоя SSM. Используется для масштабирования выходных значений входного слоя SSM.

ssm_out_multiplier (`float`, *optional*) : Множитель для выходного слоя SSM. Используется для масштабирования выхода выходного слоя SSM.

attention_bias (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли смещение (bias) в слоях проекции запроса, ключа, значения и вывода при само-внимании.

mlp_bias (`bool`, *необязательный*, по умолчанию `False`) : Использовать ли смещение (bias) в слоях up_proj, down_proj и gate_proj в слоях MLP.

Это класс конфигурации для хранения настроек модели FalconH1Model. Он используется для создания модели Falcon H1 в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [tiiuae/Falcon-H1-1.5B-Deep-Instruct](https://huggingface.co/tiiuae/Falcon-H1-1.5B-Deep-Instruct)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

## 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)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/modeling_falcon_h1.py#L1111)

**Параметры:**

config ([FalconH1Config](/docs/transformers/main/ru/model_doc/falcon_h1#transformers.FalconH1Config)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Falcon H1 для моделирования языка с причинно-следственной связью.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### 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)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_h1/modeling_falcon_h1.py#L1126)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `past_key_values`, возвращаемые моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного значения допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `past_key_values` не переданы, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель будет выводить тот же формат кэша, который был передан на вход. Если используются `past_key_values`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)` вместо всех `input_ids` с формой `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Метки для вычисления потерь маскированного языкового моделирования. Индексы должны находиться в диапазоне `[0, ..., config.vocab_size]` или равняться -100 (см. docstring `input_ids`). Токены с индексами, установленными в `-100`, игнорируются (маскируются); потери вычисляются только для токенов с метками в диапазоне `[0, ..., config.vocab_size]`.

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

logits_to_keep (`Union[int, torch.Tensor]`, *необязательный*, по умолчанию `0`) : Если передано значение типа `int`, вычисляются logits для последних `logits_to_keep` токенов. Если передано `0`, logits вычисляются для всех `input_ids` (специальный случай). Для генерации нужны logits только последнего токена, и вычисление их только для этого токена позволяет сэкономить память, что становится весьма значимым для длинных последовательностей или большого размера словаря. Если передано значение типа `torch.Tensor`, оно должно быть одномерным и соответствовать индексам, которые нужно сохранить в измерении длины последовательности. Это полезно при использовании упакованного формата тензоров (одно измерение для batch и длины последовательности).

**Возвращает:** [CausalLMOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) или `tuple(torch.Tensor)`

Объект [CausalLMOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([FalconH1Config](/docs/transformers/main/ru/model_doc/falcon_h1#transformers.FalconH1Config)) и входных данных.

Метод forward класса [FalconH1ForCausalLM](/docs/transformers/main/ru/model_doc/falcon_h1#transformers.FalconH1ForCausalLM) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потеря языковой модели (для предсказания следующего токена).
- **logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.vocab_size)`) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).
- **past_key_values** (`Cache`, *необязательный*, возвращается при передаче `use_cache=True` или когда `config.use_cache=True`) -- это экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход `past_key_values`) для ускорения последовательного декодирования.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Пример:

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

Эта реализация HF предоставлена [younesbelkada](https://github.com/younesbelkada) и [DhiaEddineRhaiem](https://github.com/dhiaEddineRhaiem).

