# GLM-5, GLM-5.1, GLM-5.2, GLM-5.3

## Обзор

Языковые модели **GLM-5**, **GLM-5.1**, **GLM-5.2** и **GLM-5.3** используют этот класс. Реализация в transformers не включает слой MTP.

### GLM-5.3

GLM-5.3 использует ту же базовую модель, что и GLM-5.2 — все улучшения получены на этапе пост-обучения. По сравнению с GLM-5.2, он значительно лучше справляется со сложным кодированием и задачами с длинным горизонтом:

+ Улучшенное программирование: GLM-5.3 — самая мощная модель с открытыми весами для программирования, демонстрирующая улучшение на 50% по сравнению с GLM-5.2 на нашем внутреннем тесте Z.ai Code Bench. Она также достигает SOTA среди открытых моделей на публичных бенчмарках, включая Terminal Bench 3.0 и Agents' Last Exam.
+ Эмерджентные кибервозможности: по мере масштабирования постобучения кибервозможности развивались быстрее, чем мы ожидали. GLM-5.3 демонстрирует передовые результаты на CyberGym в области обнаружения уязвимостей, а наибольший прирост наблюдается на более высоких этапах цепочки эксплуатации, где он более чем вдвое превосходит GLM-5.2 на бенчмарках эксплуатации.

![bench_53](https://raw.githubusercontent.com/zai-org/GLM-5/refs/heads/main/resources/bench_53_2.png)

### GLM-5.2

GLM-5.2, наша новейшая флагманская модель для задач с длительным горизонтом. Она демонстрирует существенный скачок в возможностях для таких задач по сравнению с предшественником GLM-5.1 и впервые обеспечивает их на **стабильном контексте в 1 млн токенов**.

Среди новых возможностей GLM-5.2:
- **Надёжный контекст в 1 млн токенов:** стабильно поддерживает работу с длинными временными горизонтами
- **Продвинутое программирование с гибким уровнем усилий**: Усиленные возможности программирования с несколькими уровнями усилий для размышлений, позволяющими балансировать между производительностью и задержкой
- **Улучшенная архитектура**: мы предлагаем [IndexShare](https://huggingface.co/papers/2603.12201), который переиспользует один и тот же индексатор для каждой группы из четырёх слоёв разреженного внимания, сокращая FLOPs на токен в 2,9 раза при длине контекста 1M. Мы также улучшили слой MTP в GLM-5.2 для спекулятивного декодирования, увеличив длину принятия до 20%

![bench_52](https://raw.githubusercontent.com/zai-org/GLM-5/refs/heads/main/resources/bench_52.png)

На стандартных бенчмарках по программированию GLM-5.2 является самой сильной open-source моделью, значительно превосходя GLM-5.1: 81.0 против 62.0 на Terminal-Bench 2.1 и 62.1 против 58.4 на SWE-bench Pro. Модель также сокращает разрыв с закрытыми frontier-моделями — на Terminal-Bench 2.1 (81.0) она уступает Claude Opus 4.8 (85.0) всего несколько пунктов — при этом сохраняя преимущество перед Gemini 3.1 Pro.

Подробнее — в нашем [блоге](https://z.ai/blog/glm-5.2).

### GLM-5.1

GLM-5.1 — наша флагманская модель нового поколения для агентной инженерии, обладающая значительно более мощными возможностями в области программирования по сравнению с предыдущей версией. Она демонстрирует наилучшие в своем классе результаты на SWE-Bench Pro и значительно превосходит GLM-5 по показателям на NL2Repo (генерация репозиториев) и Terminal-Bench 2.0 (задачи реального мира в терминале).

![bench_51](https://raw.githubusercontent.com/zai-org/GLM-5/refs/heads/main/resources/bench_51.png)

Но наиболее значимый скачок выходит за рамки производительности на первом проходе. Предыдущие модели, включая GLM-5, склонны исчерпывать свой арсенал на ранних этапах: они применяют знакомые техники для быстрого начального прироста, а затем упираются в потолок. Выделение им большего времени не помогает.

GLM-5.1, напротив, создан для сохранения эффективности на агентных задачах с гораздо более длительным горизонтом. Мы обнаружили, что модель справляется с неоднозначными проблемами с более взвешенным суждением и сохраняет продуктивность на протяжении более длительных сессий. Она разбивает сложные проблемы на части, проводит эксперименты, анализирует результаты и выявляет блокирующие факторы с реальной точностью. За счет повторного пересмотра рассуждений и корректировки стратегии в ходе итераций GLM-5.1 поддерживает оптимизацию на протяжении сотен раундов и тысяч вызовов инструментов. Чем дольше она работает, тем лучше результат.

### GLM-5

GLM-5 ([GlmMoeDsa](https://huggingface.co/papers/2602.15763)) — это модель mixture-of-experts с 744 млрд параметров и 40 млрд активных параметров на токен, использующая DeepSeek Sparse Attention (DSA) для эффективной обработки контекста длиной 200K токенов. Модель обучалась исключительно на чипах Huawei Ascend и демонстрирует производительность на уровне передовых моделей в задачах рассуждений и работы с длинным контекстом.

Благодаря прогрессу как в предобучении, так и в постобучении, GLM-5 демонстрирует значительное улучшение по сравнению с GLM-4.7 на широком спектре академических бенчмарков и обеспечивает наилучшие в классе результаты среди всех открытых моделей в мире на задачах рассуждений, программирования и агентных задач, сокращая разрыв с передовыми моделями.

![bench](https://raw.githubusercontent.com/zai-org/GLM-5/refs/heads/main/resources/bench.png)

## GlmMoeDsaConfig[[transformers.GlmMoeDsaConfig]]

#### transformers.GlmMoeDsaConfig[[transformers.GlmMoeDsaConfig]]

```python
transformers.GlmMoeDsaConfig(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 = 154880, hidden_size: int = 6144, intermediate_size: int = 12288, moe_intermediate_size: int = 2048, num_hidden_layers: int = 78, num_attention_heads: int = 64, num_key_value_heads: int = 64, n_shared_experts: int = 1, n_routed_experts: int = 256, output_router_logits: bool = False, routed_scaling_factor: float = 2.5, kv_lora_rank: int = 512, q_lora_rank: int = 2048, qk_rope_head_dim: int = 64, v_head_dim: int = 256, qk_nope_head_dim: int = 192, n_group: int = 1, topk_group: int = 1, num_experts_per_tok: int = 8, norm_topk_prob: bool = True, hidden_act: str = 'silu', max_position_embeddings: int = 202752, initializer_range: float = 0.02, rms_norm_eps: float = 1e-05, 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: dict | None = None, mlp_layer_types: list[str] | None = None, attention_bias: bool = False, attention_dropout: float | int = 0.0, index_topk: int = 2048, index_head_dim: int = 128, index_n_heads: int = 32, mlp_bias: bool = False, head_dim: int = 64, first_k_dense_replace: int = 3, layer_types: list[str] | None = None, indexer_types: list[str] | None = None)
```

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

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

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

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

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

moe_intermediate_size (`int`, *необязательный*, по умолчанию `2048`) : Промежуточный размер MLP маршрутизированных экспертов.

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

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

num_key_value_heads (`int`, *optional*, по умолчанию `64`) : Это количество ключевых и 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`.

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

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

output_router_logits (`bool`, *необязательный*, по умолчанию `False`) : Нужно ли модели возвращать логиты роутера. Включение этого параметра также позволит модели выводить вспомогательную потерю, включая потерю балансировки нагрузки и z-потерю роутера.

routed_scaling_factor (`float`, *необязательный*, по умолчанию `2.5`) : Коэффициент масштабирования или маршрутизированных экспертов.

kv_lora_rank (`int`, *необязательный*, по умолчанию `512`) : Ранг матриц LoRA для проекций ключей и значений.

q_lora_rank (`int`, *необязательный*, по умолчанию `2048`) : Ранг матриц LoRA для проекций запросов.

qk_rope_head_dim (`int`, *optional*, по умолчанию `64`) : Размерность заголовков запроса/ключа, использующих вращательные позиционные эмбеддинги.

v_head_dim (`int`, *необязательный*, по умолчанию `256`) : Размерность heads значений.

qk_nope_head_dim (`int`, *необязательный*, по умолчанию `192`) : Размерность заголовков запроса/ключа, которые не используют вращательные позиционные эмбеддинги.

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

topk_group (`int`, *optional*, по умолчанию `1`) : Количество выбранных групп для каждого токена (для каждого токена, чтобы выбранные эксперты находились только в пределах `topk_group` групп).

num_experts_per_tok (`int`, *optional*, по умолчанию `8`) : Количество экспертов, к которым маршрутизируется каждый токен. Это значение top-k для маршрутизации по выбору токена.

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

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

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

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` или если модель является генеративной моделью только с декодером.

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

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

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

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

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

mlp_layer_types (`list`, *optional*) : шаблон типа MLP для каждого слоя (`"dense"` или `"sparse"`). По умолчанию: 3 плотных + остальные разреженные.

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

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

index_topk (`int`, *optional*, по умолчанию 2048) : Количество верхних токенов, выбранных индексатором для разреженного внимания.

index_head_dim (`int`, *optional*, по умолчанию 128) : Размерность головы для проекций индексатора (DSA).

index_n_heads (`int`, *optional*, по умолчанию 32) : Количество голов для проекций индексатора (DSA).

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

head_dim (`int`, *необязательный*, по умолчанию `64`) : Размер измерения головы внимания. Если None, по умолчанию будет hidden_size // num_attention_heads

first_k_dense_replace (`int`, *optional*, по умолчанию 3) : Количество начальных слоев, использующих плотный MLP; остальные используют блок MoE.

layer_types (`list[str]`, *необязательный*) : Список, который явно сопоставляет каждый индекс слоя с его типом. Если не указан, будет автоматически сгенерирован на основе значений конфигурации.

indexer_types (`list[str]`, *необязательный*) : Режим индексатора для каждого слоя (`"full"` запускает индексатор, `"shared"` переиспользует top-k предыдущего полного слоя). По умолчанию используется шаблон, выводимый из `index_topk_freq` / `index_skip_topk_offset` (или `index_topk_pattern`).

Это класс конфигурации для хранения настроек модели GlmMoeDsaModel. Он используется для создания модели Glm Moe Dsa в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [zai-org/GLM-5](https://huggingface.co/zai-org/GLM-5)

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

```python
>>> from transformers import GlmMoeDsaConfig, GlmMoeDsaModel

>>> # Initializing a GLM-MoE-DSA configuration
>>> configuration = GlmMoeDsaConfig()

>>> # Initializing a model from the configuration
>>> model = GlmMoeDsaModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## GlmMoeDsaModel[[transformers.GlmMoeDsaModel]]

#### transformers.GlmMoeDsaModel[[transformers.GlmMoeDsaModel]]

```python
transformers.GlmMoeDsaModel(config: GlmMoeDsaConfig)
```

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

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

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

Модель GlM Moe Dsa без дополнительных слоёв, выводящая необработанные скрытые состояния.

Эта модель наследуется от [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.GlmMoeDsaModel.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'>)
```

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

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

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` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

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

**Возвращает:** `MoeModelOutputWithPast` или `tuple(torch.Tensor)`

`MoeModelOutputWithPast` или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([GlmMoeDsaConfig](/docs/transformers/main/ru/model_doc/glm_moe_dsa#transformers.GlmMoeDsaConfig)) и входных данных.

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

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

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя модели.
- **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).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если `config.is_encoder_decoder=True`, в блоках кросс-внимания), которые можно использовать (см. входной параметр `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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
- **router_logits** (`tuple(torch.Tensor)`, *необязательный*, возвращается, если переданы `output_router_probs=True` и `config.add_router_probs=True` или если `config.output_router_probs=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, sequence_length, num_experts)`.

  Сырые логиты маршрутизатора (после softmax), вычисляемые маршрутизаторами MoE; эти значения используются для вычисления вспомогательной функции потерь в моделях Mixture of Experts.

## GlmMoeDsaForCausalLM[[transformers.GlmMoeDsaForCausalLM]]

#### transformers.GlmMoeDsaForCausalLM[[transformers.GlmMoeDsaForCausalLM]]

```python
transformers.GlmMoeDsaForCausalLM(config: GlmMoeDsaConfig)
```

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

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

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

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

Эта модель наследуется от [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.GlmMoeDsaForCausalLM.forward]]

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

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

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

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 и длины последовательности).

**Возвращает:** `MoeCausalLMOutputWithPast` или `tuple(torch.Tensor)`

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

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

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

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потеря языковой модели (для предсказания следующего токена).
- **logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.vocab_size)`) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).
- **aux_loss** (`torch.Tensor`, *необязательный*, возвращается при передаче `output_router_logits=True` или при `config.output_router_logits=True`, если модель обучает свой роутер с потерей балансировки нагрузки) -- Вспомогательная потеря балансировки нагрузки для разреженных модулей. Модели, которые балансируют своих экспертов с помощью смещения роутера (DeepSeek-V3 и архитектуры, производные от него), возвращают здесь `None`, при этом по-прежнему возвращая `router_logits`.
- **router_logits** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_router_logits=True` или когда `config.output_router_logits=True`) -- Кортеж `torch.Tensor` (по одному для каждого разреженного слоя) формы `(batch_size * sequence_length, num_experts)`.

  Сырые логиты маршрутизатора, вычисленные маршрутизаторами MoE. Их можно использовать для вычисления функции потерь балансировки нагрузки или для анализа того, как токены распределяются по экспертам.
- **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, GlmMoeDsaForCausalLM

>>> model = GlmMoeDsaForCausalLM.from_pretrained("meta-glm_moe_dsa/GlmMoeDsa-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-glm_moe_dsa/GlmMoeDsa-2-7b-hf")

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

