# Генерация

Каждый фреймворк имеет метод generate для генерации текста, реализованный в соответствующем классе `GenerationMixin`:

- Функция [generate()](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationMixin.generate) в PyTorch реализована в [GenerationMixin](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationMixin).

Метод generate можно параметризовать с помощью экземпляра класса [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig). Полный список параметров генерации, управляющих поведением метода генерации, см. в документации этого класса.

Чтобы узнать, как проверить конфигурацию генерации модели, какие параметры установлены по умолчанию, как изменять параметры ad hoc, а также как создать и сохранить пользовательскую конфигурацию генерации, обратитесь к [руководству по стратегиям генерации текста](../generation_strategies). В руководстве также объясняется, как использовать связанные функции, например потоковую передачу токенов.

## GenerationConfig[[transformers.GenerationConfig]]

#### transformers.GenerationConfig[[transformers.GenerationConfig]]

```python
transformers.GenerationConfig(**kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L96)

**Параметры, управляющие длиной вывода:**

max_length (`int`, *optional*) : `max_new_tokens` рекомендуется использовать для управления количеством токенов, которые генерирует модель. `max_length` оставлен для обратной совместимости.

max_new_tokens (`int`, *optional*) : Максимальное количество токенов для генерации, не учитывая количество токенов в промпте.

min_length (`int`, *optional*) : Минимальная длина генерируемой последовательности. Соответствует длине входного промпта + `min_new_tokens`. Если задан параметр `min_new_tokens`, его значение имеет приоритет.

min_new_tokens (`int`, *optional*) : Минимальное количество токенов для генерации, не учитывая количество токенов в промпте.

early_stopping (`bool` или `str`, *необязательный*) : Управляет условием остановки для методов на основе лучей, таких как beam-search. Принимает следующие значения: `True`, когда генерация останавливается, как только появляются `num_beams` завершённых кандидата; `False`, когда применяется эвристика и генерация останавливается, если вероятность найти лучших кандидатов крайне мала; `"never"`, когда процедура beam search останавливается только в том случае, если лучшие кандидаты невозможны (канонический алгоритм beam search).

max_time (`float`, *optional*) : Максимальное время, в секундах, которое вы разрешаете для выполнения вычислений. Генерация завершит текущий проход после истечения выделенного времени.

stop_strings (`str` или `list[str]`, *необязательный*) : Строка или список строк, которые должны завершать генерацию, если модель их выводит.

**Параметры, управляющие используемой стратегией генерации:**

do_sample (`bool`) : Использовать ли сэмплирование; в противном случае применяется жадное декодирование.

num_beams (`int`, *optional*) : Количество лучей для beam search. Значение 1 означает, что beam search не используется.

use_mtp : (`bool`): Использовать ли Multi-Token Prediction (MTP), если модель поддерживает эту функцию.

**Параметры, управляющие кэшем:**

use_cache (`bool`) : Использовать ли модели прошлые ключи/значения внимания (если это применимо к модели) для ускорения декодирования.

cache_implementation (`str`, *необязательный*) : Имя класса кэша, который будет создан в `generate` для более быстрого декодирования. Возможные значения:  - `"dynamic"`: [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache) - `"static"`: [StaticCache](/docs/transformers/main/ru/internal/generation_utils#transformers.StaticCache) - `"offloaded"`: `DynamicCache(offloaded=True)` - `"offloaded_static"`: `StaticCache(offloaded=True)` - `"quantized"`: [QuantizedCache](/docs/transformers/main/ru/internal/generation_utils#transformers.QuantizedCache)  Если значение не указано, будет использоваться кэш по умолчанию для модели (часто это [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache)). Дополнительную информацию см. в [документации по кэшированию](https://huggingface.co/docs/transformers/en/kv_cache).

cache_config (`dict`, *необязательный*, по умолчанию `None`) : Аргументы, используемые в классе кэша ключ-значение, можно передать в `cache_config`.

max_cache_len (`int`, *optional*) : Используется только со статическими кэшами (`cache_implementation` установлено в `"static"` или `"offloaded_static"`). Предварительно задаёт размер кэша на эту длину вместо `max_length` текущего вызова. Установите его один раз на максимальную длину ожидаемого вызова, чтобы повторные вызовы `generate()` с более длинным промптом или большим значением `max_new_tokens` (до этого предела) переиспользовали тот же кэш, а не вызывали перераспределение памяти и повторную компиляцию `torch.compile`.

**Параметры для манипуляции логитами вывода модели:**

temperature (`float`, *optional*) : Значение, используемое для модуляции вероятностей следующего токена. Это значение задаётся в файле `generation_config.json` модели. Если оно не задано, используется значение по умолчанию 1.0

top_k (`int`, *optional*) : Количество токенов словаря с наивысшей вероятностью, которые следует сохранить для фильтрации top-k. Это значение задаётся в файле `generation_config.json` модели. Если оно не задано, используется значение по умолчанию — 50.

top_p (`float`, *optional*) : Если установлено значение float < 1, для генерации сохраняются только наименьшие наборы наиболее вероятных токенов, сумма вероятностей которых составляет `top_p` или выше. Это значение задаётся в файле `generation_config.json` модели. Если оно не задано, используется значение по умолчанию 1.0

min_p (`float`, *optional*) : Минимальная вероятность токена, которая масштабируется вероятностью наиболее вероятного токена. Значение должно находиться в диапазоне от 0 до 1. Типичные значения лежат в диапазоне 0.01–0.2, что сопоставимо по селективности с установкой `top_p` в диапазоне 0.99–0.8 (используйте значения, обратные обычным для `top_p`).

top_h (`float`, *optional*) : Коэффициент масштабирования бюджета энтропии, который контролирует, какая часть энтропии распределения сохраняется при выборке. Должно быть значением от 0 до 1. На каждом шаге токены сортируются по вероятности, и сохраняется наименьший префикс токенов, *перенормированная* энтропия которого меньше или равна энтропии полного распределения, умноженной на `top_h`. Меньшие значения (например, 0.2–0.5) приводят к более сфокусированным и детерминированным выводам, тогда как значения, близкие к 1.0, позволяют больший уровень случайности и разнообразия. Типичные значения находятся в диапазоне 0.3–0.6.

typical_p (`float`, *optional*) : Метрика локальной типичности показывает, насколько условная вероятность предсказания целевого токена следующим близка к ожидаемой условной вероятности предсказания случайного токена, учитывая уже сгенерированный частичный текст. Если установлено значение float < 1, для генерации сохраняются наименьшие множества наиболее локально типичных токенов, сумма вероятностей которых составляет `typical_p` или выше. Подробнее см. [эту статью](https://huggingface.co/papers/2202.00666).

epsilon_cutoff (`float`, *optional*) : Если установлено значение float, строго находящееся между 0 и 1, будут выбораться только токены с условной вероятностью, превышающей `epsilon_cutoff`. В статье рекомендуемые значения варьируются от 3e-4 до 9e-4 в зависимости от размера модели. Подробнее см. [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191).

eta_cutoff (`float`, *необязательный*) : Эта-выборка представляет собой гибрид локально-типичного и эпсилон-выбора. Если значение установлено как float строго между 0 и 1, токен учитывается только в том случае, если он больше либо `eta_cutoff`, либо `sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits)))`. Последний член интуитивно представляет собой ожидаемую вероятность следующего токена, масштабированную на `sqrt(eta_cutoff)`. В статье рекомендуемые значения варьируются от 3e-4 до 2e-3 в зависимости от размера модели. Подробнее см. [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191).

repetition_penalty (`float`, *необязательный*) : Параметр для штрафного коэффициента за повторения. Значение 1.0 означает отсутствие штрафа. Подробнее см. в [этой статье](https://huggingface.co/papers/1909.05858).

encoder_repetition_penalty (`float`, *optional*) : Параметр для encoder_repetition_penalty. Экспоненциальное наказание для последовательностей, отсутствующих в исходном вводе. Значение 1.0 означает отсутствие наказания.

length_penalty (`float`, *optional*) : Экспоненциальная штрафная функция за длину, используемая при генерации на основе beam search. Она применяется как показатель степени к длине последовательности, которая, в свою очередь, используется для деления оценки последовательности. Поскольку оценка представляет собой логарифмическую правдоподобность последовательности (т. е. отрицательную), `length_penalty` > 0.0 поощряет более длинные последовательности, а `length_penalty` < 0.0 — более короткие.

no_repeat_ngram_size (`int`, *optional*) : Если установлено значение int > 0, все n-граммы данного размера могут встречаться только один раз.

bad_words_ids (`list[list[int]]`, *необязательный*) : Список списков идентификаторов токенов, которые не должны генерироваться. См. [NoBadWordsLogitsProcessor](/docs/transformers/main/ru/internal/generation_utils#transformers.NoBadWordsLogitsProcessor) для дополнительной документации и примеров.

renormalize_logits (`bool`) : Нужно ли нормализовать логиты после применения всех процессоров логитов (включая пользовательские). Настоятельно рекомендуется установить этот флаг в `True`, так как алгоритмы поиска предполагают, что логиты-оценки нормализованы, но некоторые процессоры логитов нарушают нормализацию.

forced_bos_token_id (`int`, *необязательный*, по умолчанию `model.config.forced_bos_token_id`) : Идентификатор токена, который принудительно используется в качестве первого сгенерированного токена после `decoder_start_token_id`. Полезно для многоязычных моделей, таких как [mBART](../model_doc/mbart), где первым сгенерированным токеном должен быть токен целевого языка.

forced_eos_token_id (`int` or list[int]`, *optional*, defaults to `model.config.forced_eos_token_id`) : The id of the token to force as the last generated token when `max_length` is reached. Optionally, use a list to set multiple *end-of-sequence* tokens.

remove_invalid_values (`bool`) : Указывает, следует ли удалять возможные выходные значения *nan* и *inf* модели, чтобы предотвратить сбой метода генерации. Обратите внимание, что использование `remove_invalid_values` может замедлить генерацию.

exponential_decay_length_penalty (`tuple(int, float)`, *optional*) : Этот кортеж добавляет экспоненциально возрастающее штрафное значение после генерации определённого количества токенов. Кортеж должен состоять из: `(start_index, decay_factor)`, где `start_index` указывает, с какого токена начинается штраф, а `decay_factor` представляет собой коэффициент экспоненциального затухания

suppress_tokens (`list[int]`, *необязательный*) : Список токенов, которые будут подавляться при генерации. Процессор логитов `SuppressTokens` установит их лог-вероятности в `-inf`, чтобы они не были отобраны.

begin_suppress_tokens  (`list[int]`, *optional*) : Список токенов, которые будут подавляться в начале генерации. Процессор логитов `SuppressBeginTokens` установит их лог-вероятности в `-inf`, чтобы они не были отобраны.

sequence_bias (`dict[tuple[int], float]`, *необязательный*)) : Словарь, сопоставляющий последовательность токенов её смещению. Положительные смещения повышают вероятность выбора последовательности, а отрицательные — снижают. См. [SequenceBiasLogitsProcessor](/docs/transformers/main/ru/internal/generation_utils#transformers.SequenceBiasLogitsProcessor) для дополнительной документации и примеров.

token_healing (`bool`) : Исправляет хвостовые токены промптов, заменяя их на соответствующие расширения. Это повышает качество завершений для промптов, затронутых предвзятостью жадной токенизации.

guidance_scale (`float`, *optional*) : Масштаб направляющего коэффициента для classifier free guidance (CFG). CFG включается при установке `guidance_scale > 1`. Более высокий масштаб направляющего коэффициента побуждает модель генерировать образцы, более тесно связанные с входным промптом, обычно за счёт ухудшения качества.

watermarking_config (`BaseWatermarkingConfig` или `dict`, *необязательный*) : Аргументы, используемые для добавления водяного знака к выводам модели путём добавления небольшого смещения к случайно выбранному набору «зелёных» токенов. Подробности см. в документации [SynthIDTextWatermarkingConfig](/docs/transformers/main/ru/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig) и [WatermarkingConfig](/docs/transformers/main/ru/internal/generation_utils#transformers.WatermarkingConfig). Если передано в виде `Dict`, оно будет преобразовано во внутренний объект `WatermarkingConfig`.

**Параметры, определяющие выходные переменные generate:**

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

output_attentions (`bool`) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробности см. в `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`) : Возвращать ли скрытые состояния всех слоёв. Подробности см. в `hidden_states` в разделе возвращаемых тензоров.

output_scores (`bool`) : Нужно ли возвращать оценки предсказаний. Дополнительные сведения см. в `scores` в разделе возвращаемых тензоров.

output_logits (`bool`) : Нужно ли возвращать необработанные оценки логитов предсказаний. Дополнительные сведения см. в `logits` в разделе возвращаемых тензоров.

return_dict_in_generate (`bool`) : Возвращать ли [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо только сгенерированной последовательности. Этот флаг должен быть установлен в `True`, чтобы вернуть кэш генерации (когда `use_cache` равно `True`) или необязательные выходные данные (см. флаги, начинающиеся с `output_`)

**Специальные токены, которые можно использовать при генерации:**

pad_token_id (`int`, *необязательный*) : идентификатор токена *padding*.

bos_token_id (`int`, *необязательный*) : идентификатор токена *beginning-of-sequence*.

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

**Параметры генерации, специфичные для моделей с архитектурой «кодек-декодер»:**

encoder_no_repeat_ngram_size (`int`, *optional*) : Если установлено значение int > 0, все n-граммы данного размера, встречающиеся в `encoder_input_ids`, не могут встречаться в `decoder_input_ids`.

decoder_start_token_id (`int` или `list[int]`, *необязательный*) : Если модель с энкодером-декодером начинает декодирование с токена, отличного от *bos*, то это идентификатор этого токена или список длины `batch_size`. Указание списка позволяет использовать разные идентификаторы начала для каждого элемента в батче (например, для многоязычных моделей с разными целевыми языками в одном батче)

**Параметры генерации, используемые только при генерации ответа ассистента:**

is_assistant (`bool`) : Является ли моделью ассистентом (черновиком).

num_assistant_tokens (`int`, *optional*) : Определяет количество _спекулятивных токенов_, которые модель-ассистент должна сгенерировать до проверки целевой моделью на каждой итерации. Более высокие значения `num_assistant_tokens` делают генерацию более _спекулятивной_ : если модель-ассистент работает эффективно, можно достичь более высокого ускорения; если же модель-ассистент требует множества корректировок, ускорение будет ниже.

num_assistant_tokens_schedule (`str`, *необязательный*) : Определяет расписание, по которому максимальное количество токенов ассистента изменяется во время вывода. - `"heuristic"`: Если все спекулятивные токены верны, увеличить `num_assistant_tokens` на 2, иначе уменьшить на 1. Значение `num_assistant_tokens` сохраняется при нескольких вызовах генерации с одной и той же моделью ассистента. - `"heuristic_transient"`: То же, что и `"heuristic"`, но `num_assistant_tokens` сбрасывается к начальному значению после каждого вызова генерации. - `"constant"`: `num_assistant_tokens` не изменяется в процессе генерации

assistant_confidence_threshold (`float`, *optional*) : Порог уверенности для модели-ассистента. Если уверенность модели-ассистента в её предсказании для текущего токена ниже этого порога, модель-ассистент прекращает текущую итерацию генерации токена, даже если количество _спекулятивных токенов_ (определённое параметром `num_assistant_tokens`) ещё не достигнуто. Порог уверенности ассистента корректируется в ходе спекулятивных итераций для сокращения количества лишних проходов draft и target, с приоритетом на избегание ложных отрицательных результатов. Значение `assistant_confidence_threshold` сохраняется при нескольких вызовах генерации с одной и той же моделью-ассистентом. Это неуправляемая версия динамического спекулятивного обзора из работы Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models .

prompt_lookup_num_tokens (`int`, *необязательный*) : Количество токенов, которые будут выведены в качестве кандидатов.

max_matching_ngram_size (`int`, *optional*) : Максимальный размер n-граммы, учитываемый при сопоставлении в промпте. По умолчанию равно 2, если значение не указано.

assistant_early_exit(`int`, *optional*) : Если установлено положительное целое число, для модели будет использоваться ранний выход в качестве ассистента. Можно использовать только с моделями, поддерживающими ранний выход (то есть моделями, в которых логиты из промежуточных слоёв могут быть интерпретированы головной частью LM).

assistant_lookbehind(`int`, *optional*) : Если установлено положительное целое число, процесс повторного кодирования дополнительно учитывает последние `assistant_lookbehind` токены ассистента для корректного выравнивания токенов. Можно использовать только с различными токенизаторами в спекулятивном декодировании. Подробнее в этой [статье](https://huggingface.co/blog/universal_assisted_generation).

target_lookbehind(`int`, *optional*) : Если установлено положительное целое число, процесс повторного кодирования дополнительно учитывает последние `target_lookbehind` целевых токена для корректного выравнивания токенов. Можно использовать только с различными токенизаторами в спекулятивном декодировании. Подробнее в этой [статье](https://huggingface.co/blog/universal_assisted_generation).

assistant_ensemble_weight (`float`, *optional*) : Включает статическую верификацию ансамбля в спекулятивном декодировании. Если установлено значение из диапазона `(0.0, 1.0)`, верификатор принимает токены относительно смеси `w * p_target + (1 - w) * q_draft` вместо `p_target`, жертвуя контролируемым смещением распределения ради более высокого уровня принятия. По умолчанию `None`, что сохраняет декодирование без потерь. Требует, чтобы модель ассистента возвращала логиты, поэтому несовместима с декодированием с поиском по промпту.

speculation_type (`str`, *необязательный*) : Запрошенный тип спекуляции. Допустимые значения: `dflash`.

**Параметры, связанные с производительностью и компиляцией:**

compile_config (CompileConfig, *необязательный*) : При использовании компилируемого кэша этот параметр определяет, как `generate` будет `compile` прямой проход для ускорения вывода.

disable_compile (`bool`) : Отключает ли автоматическую компиляцию прямого прохода. Автоматическая компиляция выполняется при выполнении определенных условий, в том числе при использовании компилируемого кэша. Пожалуйста, создайте issue, если вам потребуется использовать этот флаг.

Class that holds a configuration for a generation task. A `generate` call supports the following generation methods for text-decoder, text-to-text, speech-to-text, and vision-to-text models:

- *жадкое декодирование*, если `num_beams=1` и `do_sample=False`
- *мультиномиальную выборку*, если `num_beams=1` и `do_sample=True`
- *декодирование с поиском по лучам*, если `num_beams>1` и `do_sample=False`
- *многономиальное сэмплирование с beam search*, если `num_beams>1` и `do_sample=True`
- *assisted decoding*, если в `.generate()` переданы `assistant_model` или `prompt_lookup_num_tokens`

Чтобы узнать больше о стратегиях декодирования, обратитесь к [руководству по стратегиям генерации текста](../generation_strategies).

Большое количество этих флагов управляет логитами или критериями остановки генерации. Убедитесь, что вы проверили [классы, связанные с generate](https://huggingface.co/docs/transformers/internal/generation_utils), чтобы получить полное описание возможных манипуляций, а также примеры их использования.

Примечание: поля конфигурации, которые по-прежнему равны `None`, будут переопределены методом `GenerationConfig._get_default_generation_params()` в цикле генерации. Если вы хотите использовать другие значения для этих полей, убедитесь, что вы явно задали их в конфигурации генерации.

#### from_pretrained[[transformers.GenerationConfig.from_pretrained]]

```python
from_pretrained(pretrained_model_name: str | os.PathLike, config_file_name: str | os.PathLike | None = None, cache_dir: str | os.PathLike | None = None, force_download: bool = False, local_files_only: bool = False, token: str | bool | None = None, revision: str = 'main', **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L950)

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

pretrained_model_name (`str` или `os.PathLike`) : Может быть одним из следующих:  - строка, *model id* конфигурации предобученной модели, размещённой в репозитории моделей на huggingface.co. - путь к *каталогу*, содержащему файл конфигурации, сохранённый с помощью метода [save_pretrained()](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig.save_pretrained), например, `./my_model_directory/`.

config_file_name (`str` или `os.PathLike`, *необязательный*, по умолчанию `"generation_config.json"`) : Имя JSON-файла конфигурации генерации, который будет загружен из `pretrained_model_name`.

cache_dir (`str` или `os.PathLike`, *необязательный*) : Путь к каталогу, в котором должен кэшироваться загруженный конфигурационный файл предобученной модели, если стандартный кэш не используется.

force_download (`bool`, *необязательный*, по умолчанию `False`) : Указывает, следует ли принудительно (пере)загружать файлы конфигурации и заменять кэшированные версии, если они существуют.

proxies (`dict[str, str]`, *необязательный*) : Словарь прокси-серверов, используемых по протоколу или конечной точке, например, `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.` Прокси применяются при каждом запросе.

token (`str` или `bool`, *необязательный*) : Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Если указано значение `True` или параметр не задан, будет использован токен, сгенерированный при выполнении `hf auth login` (хранится в `~/.huggingface`).

revision (`str`, *необязательный*, по умолчанию `"main"`) : Конкретная версия модели, которую следует использовать. Это может быть имя ветки, имя тега или идентификатор коммита, поскольку для хранения моделей и других артефактов на huggingface.co используется система на базе git, поэтому `revision` может быть любым идентификатором, разрешённым git.    Чтобы протестировать pull request, который вы создали на Hub, можно передать `revision="refs/pr/<pr_number>"`.

return_unused_kwargs (`bool`, *необязательный*, по умолчанию `False`) : Если `False`, функция возвращает только итоговый объект конфигурации. Если `True`, функция возвращает `Tuple(config, unused_kwargs)`, где *unused_kwargs* — это словарь, состоящий из пар ключ/значение, ключи которых не являются атрибутами конфигурации, то есть та часть `kwargs`, которая не была использована для обновления `config` и в остальном игнорируется.

subfolder (`str`, *необязательный*, по умолчанию `""`) : Если соответствующие файлы находятся в подпапке репозитория модели на huggingface.co, здесь можно указать имя папки.

kwargs (`dict[str, Any]`, *необязательный*) : Значения в kwargs для любых ключей, являющихся атрибутами конфигурации, будут использоваться для переопределения загруженных значений. Поведение в отношении пар ключ/значение, ключи которых *не* являются атрибутами конфигурации, контролируется параметром `return_unused_kwargs`.

**Возвращает:** [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig)

Объект конфигурации, созданный из этой предобученной модели.

Создайте экземпляр [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig) из файла конфигурации генерации.

Примеры:

```python
>>> from transformers import GenerationConfig

>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")

>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")

>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")

>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
...     "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1

>>> unused_kwargs
{'foo': False}
```

#### from_model_config[[transformers.GenerationConfig.from_model_config]]

```python
from_model_config(model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict])
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L1288)

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

model_config (`PreTrainedConfig | dict`) : Конфигурация модели, которая будет использована для создания конфигурации генерации.

**Возвращает:** [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig)

Объект конфигурации, созданный из этих параметров.

Создаёт экземпляр [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig) на основе [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig). Эта функция полезна для преобразования устаревших объектов [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig), которые могут содержать параметры генерации, в автономный [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig).

#### save_pretrained[[transformers.GenerationConfig.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, config_file_name: str | os.PathLike | None = None, push_to_hub: bool = False, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L891)

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

save_directory (`str` или `os.PathLike`) : Каталог, в котором будет сохранён файл конфигурации JSON (будет создан, если не существует).

config_file_name (`str` или `os.PathLike`, *необязательный*, по умолчанию `"generation_config.json"`) : Имя JSON-файла конфигурации генерации, который будет сохранён в `save_directory`.

push_to_hub (`bool`, *необязательный*, по умолчанию `False`) : Указывает, следует ли после сохранения модели загрузить её в Hugging Face model hub. Репозиторий, в который нужно загрузить модель, можно указать с помощью `repo_id` (по умолчанию используется имя `save_directory` в вашем пространстве имён).

kwargs (`dict[str, Any]`, *необязательный*) : Дополнительные именованные аргументы, передаваемые в метод [push_to_hub()](/docs/transformers/main/ru/main_classes/model#transformers.utils.PushToHubMixin.push_to_hub).

Сохраните объект конфигурации генерации в каталог `save_directory`, чтобы его можно было загрузить с помощью метода класса [from_pretrained()](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig.from_pretrained).

#### обновление[[transformers.GenerationConfig.update]]

```python
update(defaults_only = False, allow_custom_entries = False, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L1338)

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

defaults_only (`bool`, *необязательный*, по умолчанию `False`) : Обновлять ли все ключи в config с помощью `kwargs` или только те, которые установлены в `None` (т.е. значение по умолчанию).

allow_custom_entries (`bool`, *необязательный*, по умолчанию `False`) : Разрешает ли обновление пользовательских записей в конфигурации с помощью `kwargs`, если они отсутствуют в текущей конфигурации.

kwargs (`dict[str, Any]`) : Словарь атрибутов для предварительного обновления этого класса.

**Возвращает:** `dict[str, Any]`

Словарь, содержащий все пары ключ-значение, которые не использовались для обновления экземпляра.

Обновляет атрибуты экземпляра этого класса атрибутами из `kwargs`, если они совпадают с существующими атрибутами, возвращая все неиспользованные kwargs.

#### validate[[transformers.GenerationConfig.validate]]

```python
validate(strict = False, user_set_attributes: set[str] | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L648)

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

strict (bool) : Если True, выбрасывает исключение при обнаружении любых проблем. Если False, только записывает проблемы в журнал.

user_set_attributes (set[str], *optional*) : Имена атрибутов, явно переданных вызывающим кодом. Если указано, предупреждения «незначительная проблема» о конфликтующих комбинациях флагов (например, флаги только для сэмплирования установлены при `do_sample=False`) срабатывают только в том случае, если конфликтующий флаг входит в этот набор, — что позволяет избежать лишних предупреждений, когда значение унаследовано из файла `generation_config.json` по умолчанию модели. Если `None`, все установленные атрибуты считаются заданными пользователем (поведение, совместимое с обратным вызовом для прямых вызовов `validate()`).

Проверяет значения атрибутов экземпляра [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig). Вызывает исключения при обнаружении некорректной параметризации, которую можно определить только по самому экземпляру конфигурации.

Обратите внимание, что некоторые параметры, не проверяемые здесь, лучше всего валидировать во время генерации, поскольку они могут зависеть от других входных данных и/или модели, например, параметры, связанные с длиной генерации.

#### get_generation_mode[[transformers.GenerationConfig.get_generation_mode]]

```python
get_generation_mode(assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L535)

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

assistant_model (`PreTrainedModel`, *необязательный*) : Модель ассистента, используемая для ассистированной генерации. Если задана, режим генерации будет ассистированной генерацией.

**Возвращает:** `GenerationMode`

Режим генерации, запускаемый экземпляром.

Возвращает режим генерации, заданный экземпляром [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig).

## GenerationMixin[[transformers.GenerationMixin]]

#### transformers.GenerationMixin[[transformers.GenerationMixin]]

```python
transformers.GenerationMixin()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L494)

Класс, содержащий все функции для авто-регрессивной генерации текста, предназначенный для использования как миксин в классах моделей. Наследование от этого класса наделяет модель особым поведением, связанным с генерацией, например, загрузкой `GenerationConfig` при инициализации или обеспечением выполнения тестов, связанных с `generate`, в CI `transformers`.

Класс модели должен наследоваться от `GenerationMixin`, чтобы обеспечить возможность вызова методов, таких как `generate`, или если в нём определён собственный метод `generate`, который напрямую или косвенно опирается на `GenerationMixin` и примерно совпадает с ним по интерфейсу публичных методов, таких как `generate`. Три примера:
- `LlamaForCausalLM` должен наследоваться от `GenerationMixin`, чтобы обеспечить возможность вызова `generate` и других публичных методов миксина;
- `BlipForQuestionAnswering` имеет собственный метод `generate`, который примерно соответствует интерфейсу `GenerationMixin.generate` (он содержит несколько дополнительных аргументов и возвращает тот же результат). Эта функция также косвенно вызывает `GenerationMixin.generate` через внутреннюю модель. Таким образом, `BlipForQuestionAnswering` должен наследоваться от `GenerationMixin`, чтобы пользоваться всеми автоматизированными механизмами генерации в нашей кодовой базе;
- `BarkModel` имеет собственный метод `generate`, и одна из его внутренних моделей вызывает `GenerationMixin.generate`. Однако его `generate` не имеет того же интерфейса, что и `GenerationMixin.generate`. В этом случае `BarkModel` НЕ должен наследоваться от `GenerationMixin`, так как это нарушает интерфейс `generate`.

Класс предоставляет метод [generate()](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationMixin.generate), который можно использовать для:
- *жадкое декодирование*, если `num_beams=1` и `do_sample=False`
- *мультиномиальную выборку*, если `num_beams=1` и `do_sample=True`
- *декодирование с поиском по лучам*, если `num_beams>1` и `do_sample=False`
- *многономиальное сэмплирование с beam search*, если `num_beams>1` и `do_sample=True`
- *assisted decoding*, если в `.generate()` переданы `assistant_model` или `prompt_lookup_num_tokens`

Чтобы узнать больше о стратегиях декодирования, обратитесь к [руководству по стратегиям генерации текста](../generation_strategies).

#### generate[[transformers.GenerationMixin.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, logits_processor: transformers.generation.logits_process.LogitsProcessorList | None = None, stopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = None, prefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = None, synced_gpus: bool | None = None, assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None, streamer: typing.Optional[ForwardRef('BaseStreamer')] = None, negative_prompt_ids: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, custom_generate: str | collections.abc.Callable | None = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L2581)

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

inputs (`torch.Tensor` с изменяющейся формой в зависимости от модальности, *необязательный*) : Последовательность, используемая в качестве промпта для генерации или в качестве входных данных для кодировщика. Если `None`, метод инициализирует её с помощью `bos_token_id` и размером батча 1. Для моделей только с декодером `inputs` должен быть в формате `input_ids`. Для моделей с кодировщиком и декодером *inputs* может представлять собой любой из `input_ids`, `input_values`, `input_features` или `pixel_values`.

generation_config ([GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig), *optional*) : Конфигурация генерации, используемая в качестве базовой параметризации для вызова генерации. Аргументы `**kwargs`, переданные в generate и совпадающие с атрибутами `generation_config`, переопределяют их. Если `generation_config` не предоставлен, будет использован вариант по умолчанию, который имеет следующий приоритет загрузки: 1) из файла модели `generation_config.json`, если он существует; 2) из конфигурации модели. Обратите внимание, что не указанные параметры наследуют значения по умолчанию из [GenerationConfig](/docs/transformers/main/ru/main_classes/text_generation#transformers.GenerationConfig), документация по которым должна быть проверена для параметризации генерации.

logits_processor (`LogitsProcessorList`, *необязательный*) : Пользовательские обработчики логитов, дополняющие стандартные обработчики логитов, создаваемые на основе аргументов и конфигурации генерации. Если передан обработчик логитов, который уже был создан с использованием аргументов или конфигурации генерации, возникает ошибка. Эта функция предназначена для опытных пользователей.

stopping_criteria (`StoppingCriteriaList`, *необязательный*) : Пользовательские критерии остановки, дополняющие критерии остановки по умолчанию, создаваемые на основе аргументов и конфигурации генерации. Если передан критерий остановки, который уже был создан с использованием аргументов или конфигурации генерации, будет выброшена ошибка. Если ваш критерий остановки зависит от входного параметра `scores`, убедитесь, что вы передаёте `return_dict_in_generate=True, output_scores=True` в `generate`. Эта функция предназначена для опытных пользователей.

prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], list[int]]`, *необязательный*) : Если указан, эта функция ограничивает поиск луча (beam search) только разрешёнными токенами на каждом шаге. Если не указан, ограничения не применяются. Эта функция принимает 2 аргумента: идентификатор батча `batch_id` и `input_ids`. Она должна возвращать список разрешённых токенов для следующего шага генерации, обусловленный идентификатором батча `batch_id` и ранее сгенерированными токенами `inputs_ids`. Этот аргумент полезен для ограниченной генерации, обусловленной префиксом, как описано в [Autoregressive Entity Retrieval](https://huggingface.co/papers/2010.00904).

synced_gpus (`bool`, *optional*) : Определяет, следует ли продолжать выполнение цикла while до достижения max_length. Если значение не переопределено, этот флаг будет установлен в `True` при использовании `FullyShardedDataParallel` или DeepSpeed ZeRO Stage 3 с несколькими GPU, чтобы избежать блокировки, если один GPU завершает генерацию раньше других. В противном случае по умолчанию устанавливается в `False`.

assistant_model (`PreTrainedModel`, *необязательный*) : Вспомогательная модель, которая может использоваться для ускорения генерации. Вспомогательная модель должна иметь точно такой же токенизатор. Ускорение достигается, когда прогнозирование кандидатных токенов с помощью вспомогательной модели выполняется значительно быстрее, чем запуск генерации с моделью, от которой вы вызываете generate. Таким образом, вспомогательная модель должна быть значительно меньше.

streamer (`BaseStreamer`, *необязательный*) : объект Streamer, который будет использоваться для потоковой передачи сгенерированных последовательностей. Сгенерированные токены передаются через `streamer.put(token_ids)`, а дальнейшая обработка является ответственностью streamer.

negative_prompt_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательный*) : Отрицательный промпт, необходимый для некоторых процессоров, таких как CFG. Размер батча должен совпадать с размером входного батча. Это экспериментальная функция, которая может претерпеть изменения API, нарушающие совместимость, в будущих версиях.

negative_prompt_attention_mask (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательный*) : Attention_mask для `negative_prompt_ids`.

custom_generate (`str` или `Callable`, *необязательный*) : Одно из следующих значений: - `str` (имя репозитория Hugging Face Hub): выполняет пользовательскую функцию `generate`, определённую в файле `custom_generate/generate.py` этого репозитория, вместо стандартного метода `generate`. Репозитория полностью заменяет логику генерации, а тип возвращаемого значения может отличаться. - `str` (путь к локальному репозиторию): то же самое, но из локального пути. Для локальных каталогов также требуется `trust_remote_code=True`, так как выполняется локальный файл `custom_generate/generate.py`. - `Callable`: `generate` выполнит стандартные шаги подготовки входных данных, а затем вызовет переданную вызываемую функцию для запуска цикла декодирования. Подробнее см. [документацию](../../generation_strategies#custom-generation-methods).

kwargs (`dict[str, Any]`, *необязательный*) : Произвольная параметризация `generation_config` и/или дополнительные специфичные для модели kwargs, которые будут переданы в функцию `forward` модели. Если модель является моделью с кодировщиком-декодировщиком, kwargs, специфичные для кодировщика, не должны иметь префикса, а kwargs, специфичные для декодера, должны иметь префикс *decoder_*.

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

Объект [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) (если `return_dict_in_generate=True` или когда `config.return_dict_in_generate=True`) или `torch.LongTensor`.

Если модель *не* является моделью типа «кодировщик-декодировщик» (`model.config.is_encoder_decoder=False`), возможные типы [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput):

- [GenerateDecoderOnlyOutput](/docs/transformers/main/ru/internal/generation_utils#transformers.generation.GenerateDecoderOnlyOutput),
- [GenerateBeamDecoderOnlyOutput](/docs/transformers/main/ru/internal/generation_utils#transformers.generation.GenerateBeamDecoderOnlyOutput)

Если модель является моделью с кодировщиком-декодировщиком (`model.config.is_encoder_decoder=True`), возможные типы [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput):

- [GenerateEncoderDecoderOutput](/docs/transformers/main/ru/internal/generation_utils#transformers.generation.GenerateEncoderDecoderOutput),
- [GenerateBeamEncoderDecoderOutput](/docs/transformers/main/ru/internal/generation_utils#transformers.generation.GenerateBeamEncoderDecoderOutput)

Генерирует последовательности идентификаторов токенов для моделей с заголовком языкового моделирования.

Большинство параметров, управляющих генерацией, задаются в `generation_config`, который, если не передан явно, принимает значение конфигурации генерации по умолчанию для модели. Вы можете переопределить любые параметры `generation_config`, передав соответствующие аргументы в generate(), например, `.generate(inputs, num_beams=4, do_sample=True)`.

Для обзора стратегий генерации и примеров кода см. [следующее руководство](../generation_strategies).

#### compute_transition_scores[[transformers.GenerationMixin.compute_transition_scores]]

```python
compute_transition_scores(sequences: Tensor, scores: tuple, beam_indices: typing.Optional[torch.Tensor] = None, normalize_logits: bool = False)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L1734)

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

sequences (`torch.LongTensor`) : Сгенерированные последовательности. Второй размер (sequence_length) равен `max_length` или меньше, если все батчи завершились досрочно из-за `eos_token_id`.

scores (`tuple(torch.Tensor)`) : Оценки переходов для каждого токена словаря на каждом шаге генерации. Оценки переходов луча, состоящие из логарифмических вероятностей токенов, обусловленных лог-софтмаксом ранее сгенерированных токенов в этом луче. Кортеж `torch.Tensor` с количеством элементов до `max_new_tokens` (один элемент на каждый сгенерированный токен), где каждый тензор имеет форму `(batch_size*num_beams, config.vocab_size)`.

beam_indices (`torch.LongTensor`, *необязательный*) : Индексы лучей для идентификатора сгенерированного токена на каждом шаге генерации. `torch.LongTensor` формы `(batch_size*num_return_sequences, sequence_length)`. Требуется только при `num_beams>1` во время генерации.

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

**Возвращает:** `torch.Tensor`

`torch.Tensor` формы `(batch_size*num_return_sequences, sequence_length)`, содержащий оценки переходов (логиты)

Вычисляет оценки переходов последовательностей на основе оценок генерации (а также индексов лучей, если использовался поиск по лучам). Это удобный метод для быстрого получения оценок выбранных токенов во время генерации.

Примеры:

```python
>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np

>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")

>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
...     # | token | token string | log probability | probability
...     print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
|   262 |  the     | -1.414 | 24.33%
|  1110 |  day     | -2.609 | 7.36%
|   618 |  when    | -2.010 | 13.40%
|   356 |  we      | -1.859 | 15.58%
|   460 |  can     | -2.508 | 8.14%

>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
...     **inputs,
...     max_new_tokens=5,
...     num_beams=4,
...     num_return_sequences=4,
...     return_dict_in_generate=True,
...     output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True
```

## ContinuousMixin[[transformers.ContinuousMixin]]

#### transformers.ContinuousMixin[[transformers.ContinuousMixin]]

```python
transformers.ContinuousMixin()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1249)

Класс-миксин для моделей, добавляющий возможности непрерывного батчинга. Непрерывный батчинг имеет три точки входа:
- `init_continuous_batching`, который является фактической точкой входа для непрерывного батчинга
- `continuous_batching_context_manager`, который сам является обёрткой вокруг `init_continuous_batching`
- `generate_batch`, который по сути является обёрткой вокруг `continuous_batching_context_manager`

Они определены в этом порядке. Любое изменение, внесённое в любой из этих трёх точек входа, должно быть отражено в двух других.

#### continuous_batching_context_manager[[transformers.ContinuousMixin.continuous_batching_context_manager]]

```python
continuous_batching_context_manager(generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, block: bool = True, timeout: float | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, persistent_manager: bool = False, warmup: bool = True, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1328)

Контекстный менеджер для безопасного использования менеджера непрерывного батчинга. Аргументы аналогичны аргументам `init_continuous_batching`, за исключением:
- block: блокировать ли поток при остановке менеджера. По умолчанию True.
- timeout: максимальное время ожидания остановки потока. По умолчанию None (без ограничения по времени).
- warmup: предзахватывать ли графы CUDA на максимальных размерах перед запуском. По умолчанию True.

#### destroy_cached_continuous_batching_manager[[transformers.ContinuousMixin.destroy_cached_continuous_batching_manager]]

```python
destroy_cached_continuous_batching_manager()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1321)

Уничтожьте кэшированный менеджер непрерывного батчинга и освободите ресурсы GPU.

#### generate_batch[[transformers.ContinuousMixin.generate_batch]]

```python
generate_batch(inputs: list, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, record_timestamps: bool = False, progress_bar: bool = False, persistent_manager: bool = False, warmup: bool = True, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1368)

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

inputs : список входных последовательностей токенов (промптов)

generation_config : Необязательная конфигурация генерации

continuous_batching_config : Необязательная конфигурация непрерывного пакетирования

record_timestamps : Если установлено в true, запросы будут содержать метку времени для каждого сгенерированного токена

progress_bar : Если установлено в true, будет отображаться индикатор прогресса

persistent_manager : следует ли сохранять менеджер после завершения генерации. По умолчанию — False.

warmup : следует ли предварительно захватывать CUDA-графы до обработки запросов. По умолчанию — True.

**Возвращает:** `dict[str, GenerationOutput]`

словарь, сопоставляющий идентификаторы запросов с объектами GenerationOutput

Генерация последовательностей для пакета промптов с использованием непрерывного пакетирования.

#### init_continuous_batching[[transformers.ContinuousMixin.init_continuous_batching]]

```python
init_continuous_batching(generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1261)

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

generation_config : необязательная конфигурация генерации, которая может содержать объект CompileConfig

continuous_batching_config : Необязательная конфигурация непрерывного пакетирования

workload_hints : Необязательные WorkloadHints, помогающие менеджеру непрерывного батчинга принимать более обоснованные решения относительно значений по умолчанию

**Возвращает:** `ContinuousBatchingManager`

Экземпляр менеджера, к которому добавляются запросы и из которого извлекаются результаты.

Инициализируйте менеджер для непрерывного пакетного вывода.

## ContinuousBatchingManager[[transformers.ContinuousBatchingManager]]

#### transformers.ContinuousBatchingManager[[transformers.ContinuousBatchingManager]]

```python
transformers.ContinuousBatchingManager(model: ProtoPretrainedModel, generation_config: GenerationConfig, continuous_batching_config: ContinuousBatchingConfig, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L658)

Менеджер для обработки непрерывного пакетирования (continuous batching) запросов на генерацию. Он предоставляет пользовательский интерфейс для отправки запросов на генерацию, получения результатов и управления фоновым потоком генерации. Этот класс не следует создавать напрямую, а использовать один из следующих точек входа (все методы миксина `ContinuousMixin`):
- `init_continuous_batching`
- `continuous_batching_context_manager`
- `generate_batch`

#### add_request[[transformers.ContinuousBatchingManager.add_request]]

```python
add_request(input_ids: list, request_id: str | None = None, max_new_tokens: int | None = None, streaming: bool = False, record_timestamps: bool = False, eos_token_id: int | list[int] | None = None, **logit_processor_kwargs: Any)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L914)

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

input_ids : ID входных токенов, используемых в качестве подсказки

request_id : Необязательный пользовательский идентификатор запроса (если не указан, генерируется автоматически)

max_new_tokens : Максимальное количество новых токенов для генерации

streaming : Указывает, следует ли передавать токены по мере их генерации

record_timestamps : Флаг, определяющий, следует ли записывать временные метки для каждого сгенерированного токена

eos_token_id : ID токена(ов) конца последовательности

logit_processor_kwargs : Именованные аргументы для процессора логитов.

**Возвращает:** `str | None`

Идентификатор запроса, если процесс является драйвером TP, иначе None.

Добавляет новый запрос генерации в очередь. Если процесс не является драйвером TP, это действие не выполняется.

#### add_requests[[transformers.ContinuousBatchingManager.add_requests]]

```python
add_requests(inputs: list, max_new_tokens: int | None = None, streaming: bool = False, record_timestamps: bool = False, **logit_processor_kwargs: Any)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L972)

Вспомогательная функция для пакетного вызова `add_request` и возврата их идентификаторов. Подробности смотрите в документации.

#### cancel_request[[transformers.ContinuousBatchingManager.cancel_request]]

```python
cancel_request(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1007)

Отмена запроса по его ID. Если этот метод вызывается из процесса, который не является драйвером TP, он ничего не делает: с менеджером взаимодействуют только процессы драйвера TP.

#### destroy[[transformers.ContinuousBatchingManager.destroy]]

```python
destroy()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L887)

Завершает работу менеджера и освобождает распределённые ресурсы. Безопасно вызывать несколько раз. После вызова этого метода менеджер не может быть перезапущен.

#### get_result[[transformers.ContinuousBatchingManager.get_result]]

```python
get_result(request_id: str | None = None, timeout: float | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1016)

Получить один результат из очереди вывода. Если указан ID, возвращается первое совпадающее запрос. Если указан тайм-аут, по истечении тайм-аута (в секундах) возвращается None.

#### is_running[[transformers.ContinuousBatchingManager.is_running]]

```python
is_running()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L801)

Возвращает True, если фоновый поток генерации был запущен и по-прежнему активен.

#### join[[transformers.ContinuousBatchingManager.join]]

```python
join(stop_trigger_time: float, timeout: float | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L872)

Дождитесь завершения фонового потока. Ожидание можно ограничить с помощью аргумента timeout (в секундах).

#### пауза[[transformers.ContinuousBatchingManager.pause]]

```python
pause()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L894)

Контекстный менеджер, который приостанавливает цикл генерации, чтобы вызывающий поток мог использовать модель, как правило, для её обновления на месте. Поток входит в этот контекст только после того, как цикл будет приостановлен, а при выходе из контекста цикл возобновляется, сохраняя свой кэш и текущие запросы: ничего не сбрасывается и ни один запрос не теряется. Несколько потоков могут удерживать паузу одновременно, и цикл возобновляется, когда последний из них выходит. Если включён TP, все ранки должны войти в этот контекст, иначе другие ранки будут блокироваться навсегда.

#### register_result_handler[[transformers.ContinuousBatchingManager.register_result_handler]]

```python
register_result_handler(request_id: str, callback: Callable)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1053)

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

request_id (*str*) : Идентификатор запроса, для которого необходимо получить выходные данные.

callback (*callable*) : Вызывается с `GenerationOutput` для каждого результата.

Зарегистрируйте обратный вызов для доставки результата (потокового или непотокового).

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

#### request_id_iter[[transformers.ContinuousBatchingManager.request_id_iter]]

```python
request_id_iter(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1040)

Итерировать по результатам, соответствующим конкретному идентификатору запроса (блокирующий режим).

Использует общую очередь вывода с повторной постановкой в очередь. Для обслуживания с высокой степенью параллелизма используйте вместо этого `register_result_handler`.

#### старт[[transformers.ContinuousBatchingManager.start]]

```python
start()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L805)

Запустите фоновый поток генерации.

#### stop[[transformers.ContinuousBatchingManager.stop]]

```python
stop(block: bool = True, timeout: float | None = None, keep_for_next_session: bool = False, hard_stop: bool = False)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L814)

Останавливает фоновый поток генерации. Если флаг `block` установлен в True, метод ожидает остановки потока в течение не более `timeout` секунд (None означает отсутствие ограничения по времени). Если флаг `keep_for_next_session` установлен в True, менеджер кэшируется в модели для последующего использования. Если установлен флаг `hard_stop`, фоновый поток генерации будет остановлен немедленно, а ожидающие запросы завершатся с ошибкой.

#### switch_to_cb_friendly_attn[[transformers.ContinuousBatchingManager.switch_to_cb_friendly_attn]]

```python
switch_to_cb_friendly_attn(model: ProtoPretrainedModel, auto_switch_to_flash: bool = True)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L745)

Переключите реализацию attn на ту, которая совместима с CB. Если auto_switch_to_flash равно True, а реализация attn — SDPA или eager, также переключитесь на flash, если он поддерживается и доступен.

#### warmup[[transformers.ContinuousBatchingManager.warmup]]

```python
warmup()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L791)

Предварительно захватывает CUDA-графы для путей varlen и decode, выполняя фиктивные батчи. Инициализирует обработчик батчей, если это ещё не было сделано.

## Планировщик[[transformers.generation.Scheduler]]

#### transformers.generation.Scheduler[[transformers.generation.Scheduler]]

```python
transformers.generation.Scheduler(cache: PagedAttentionCache, safety_margin: float, max_requests_per_batch: int)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L23)

Абстрактный базовый класс для планирования запросов в непрерывном обработчике пакетов. Планировщики управляют жизненным циклом запросов с момента их добавления в очередь ожидания до момента планирования на обработку. Различные планировщики реализуют разные стратегии приоритизации и пакетирования запросов.

#### add_waiting_request[[transformers.generation.Scheduler.add_waiting_request]]

```python
add_waiting_request(state: RequestState)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L58)

Добавляет запрос в список ожидания.

#### clear_cancelled_requests[[transformers.generation.Scheduler.clear_cancelled_requests]]

```python
clear_cancelled_requests()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L96)

Удалите все отменённые запросы из активных и ожидающих очередей.

#### finish_request[[transformers.generation.Scheduler.finish_request]]

```python
finish_request(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L78)

Завершает обработку запроса и освобождает выделенные для него блоки кэша. Этот метод вызывается, когда запрос завершил генерацию или произошла ошибка.

#### get_active_request_static_outputs[[transformers.generation.Scheduler.get_active_request_static_outputs]]

```python
get_active_request_static_outputs(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L85)

Получает сгенерированные токены для активного запроса.

#### has_pending_requests[[transformers.generation.Scheduler.has_pending_requests]]

```python
has_pending_requests()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L74)

Проверяет, есть ли запросы, готовые к обработке.

#### request_is_cancelled[[transformers.generation.Scheduler.request_is_cancelled]]

```python
request_is_cancelled(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L113)

Проверяет, отменён ли запрос или удалён.

#### сброс[[transformers.generation.Scheduler.reset]]

```python
reset()
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L47)

Сбросить состояние планировщика для нового цикла генерации.

#### schedule_batch[[transformers.generation.Scheduler.schedule_batch]]

```python
schedule_batch(token_budget: int, cache_budget: int)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L63)

Планирует запросы для следующей партии на основе доступных бюджетов токенов и кэша. Этот метод выбирает, какие запросы должны быть обработаны в текущей партии, учитывая бюджеты и правила приоритизации планировщика. Параметр token_budget — это максимальное количество токенов, которое может быть обработано в партии, а cache_budget — максимальное количество записей KV-кэша, которые могут быть прочитаны в партии. Возвращает список запланированных запросов в форме "FutureRequestState", булево значение, указывающее, можно ли использовать быстрый путь декодирования, общее количество query-токенов и максимальное количество прочитанных kv-токенов.

#### set_request_cancellation[[transformers.generation.Scheduler.set_request_cancellation]]

```python
set_request_cancellation(request_id: str)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L91)

Отмечает запрос на отмену.

## FIFOScheduler[[transformers.generation.FIFOScheduler]]

#### transformers.generation.FIFOScheduler[[transformers.generation.FIFOScheduler]]

```python
transformers.generation.FIFOScheduler(cache: PagedAttentionCache, safety_margin: float | None, max_requests_per_batch: int)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L308)

Этот планировщик обрабатывает запросы в порядке их поступления, что означает приоритет запросов на декодирование над запросами на префиллинг.

## PrefillFirstScheduler[[transformers.generation.PrefillFirstScheduler]]

#### transformers.generation.PrefillFirstScheduler[[transformers.generation.PrefillFirstScheduler]]

```python
transformers.generation.PrefillFirstScheduler(cache: PagedAttentionCache, safety_margin: float | None, max_requests_per_batch: int)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L357)

Планировщик, который отдаёт приоритет запросам split prefill перед запросами декодирования. Этот планировщик обеспечивает завершение запросов split prefill (являющихся продолжением частично обработанных промптов) до обработки новых запросов декодирования.

