Transformers documentation
Генерация
Генерация
Каждый фреймворк имеет метод generate для генерации текста, реализованный в соответствующем классе GenerationMixin:
- Функция generate() в PyTorch реализована в GenerationMixin.
Метод generate можно параметризовать с помощью экземпляра класса GenerationConfig. Полный список параметров генерации, управляющих поведением метода генерации, см. в документации этого класса.
Чтобы узнать, как проверить конфигурацию генерации модели, какие параметры установлены по умолчанию, как изменять параметры ad hoc, а также как создать и сохранить пользовательскую конфигурацию генерации, обратитесь к руководству по стратегиям генерации текста. В руководстве также объясняется, как использовать связанные функции, например потоковую передачу токенов.
GenerationConfig
класс transformers.GenerationConfig
< source >( **kwargs )
Параметры, управляющие длиной вывода
- max_length (
int, необязательный) —max_new_tokensрекомендуется использовать для управления количеством токенов, которые генерирует модель.max_lengthоставлен для обратной совместимости. - max_new_tokens (
int, необязательный) — Максимальное количество токенов для генерации, не учитывающее количество токенов в запросе. - min_length (
int, необязательный) — Минимальная длина генерируемой последовательности. Соответствует длине входного промпта +min_new_tokens. Если задан параметрmin_new_tokens, его значение имеет приоритет. - min_new_tokens (
int, необязательный) — Минимальное количество токенов, которое необходимо сгенерировать, без учёта количества токенов в запросе. - early_stopping (
boolorstr, необязательный) — Управляет условием остановки для методов на основе beam, таких как beam-search. Принимает следующие значения:True, когда генерация останавливается, как только найденоnum_beamsзавершённых кандидатов;False, когда применяется эвристика и генерация останавливается, если вероятность найти лучших кандидатов крайне мала;"never", когда процедура beam search останавливается только в том случае, если лучшие кандидаты невозможны (канонический алгоритм beam search). - max_time (
float, необязательный) — Максимальное время, которое вы разрешаете вычислениям выполняться, в секундах. Генерация всё равно завершит текущий проход после истечения выделенного времени. - stop_strings (
strилиlist[str], необязательный) — Строка или список строк, которые должны завершать генерацию, если модель их выводит.
Параметры, управляющие используемой стратегией генерации
- do_sample (
bool) — Использовать ли сэмплирование; в противном случае применяется жадное декодирование. - num_beams (
int, необязательный) — Количество лучей для beam search. Значение 1 означает, что beam search не используется. - use_mtp — (
bool): Использовать ли Multi-Token Prediction (MTP), если модель это поддерживает.
Параметры, управляющие кэшем
- use_cache (
bool) — Указывает, следует ли модели использовать значения прошлых ключей/значений внимания (если это применимо к модели) для ускорения декодирования. - cache_implementation (
str, необязательный) — Имя класса кэша, который будет создан вgenerate, для более быстрого декодирования. Допустимые значения:"dynamic": DynamicCache"static": StaticCache"offloaded":DynamicCache(offloaded=True)"offloaded_static":StaticCache(offloaded=True)"quantized": QuantizedCache
Если значение не указано, будет использован кэш по умолчанию для модели (часто это DynamicCache). Дополнительную информацию см. в документации по кэшированию.
- cache_config (
dict, необязательный, по умолчаниюNone) — Аргументы, используемые в классе кэша ключей и значений, можно передать вcache_config. - max_cache_len (
int, необязательный) — Используется только со статическими кэшами (когдаcache_implementationустановлено в"static"или"offloaded_static"). Заранее выделяет память кэша на эту длину, а не на текущее значениеmax_length. Установите его один раз на наибольшую ожидаемую длину вызова, чтобы повторные вызовыgenerate()с более длинным промптом или большимmax_new_tokens(до этого предела) переиспользовали тот же кэш, а не вызывали повторное выделение памяти и пересборкуtorch.compile.
Параметры для управления логитами вывода модели
- temperature (
float, необязательный) — Значение, используемое для модуляции вероятностей следующего токена. Это значение задаётся в файлеgeneration_config.jsonмодели. Если оно не задано, используется значение по умолчанию 1.0 - top_k (
int, необязательный) — Количество токенов словаря с наивысшей вероятностью, которые сохраняются для фильтрации top-k. Это значение задаётся в файлеgeneration_config.jsonмодели. Если оно не задано, используется значение по умолчанию — 50. - top_p (
float, необязательный) — Если установлено значение float < 1, для генерации сохраняются только наименьшие наборы наиболее вероятных токенов, сумма вероятностей которых составляетtop_pили больше. Это значение задаётся в файлеgeneration_config.jsonмодели. Если оно не задано, используется значение по умолчанию 1.0 - min_p (
float, необязательный) — Минимальная вероятность токена, которая масштабируется вероятностью наиболее вероятного токена. Значение должно находиться в диапазоне от 0 до 1. Типичные значения лежат в диапазоне 0.01–0.2, что сопоставимо по селективности с установкойtop_pв диапазоне 0.99–0.8 (используются значения, обратные обычным дляtop_p). - top_h (
float, необязательный) — Коэффициент масштабирования энтропийного бюджета, который управляет тем, какая часть энтропии распределения сохраняется при выборке. Должно быть значением от 0 до 1. На каждом шаге токены сортируются по вероятности, и сохраняется наименьший префикс токенов, для которого перенормированная энтропия не превышает энтропию полного распределения, умноженную наtop_h. Меньшие значения (например, 0.2–0.5) приводят к более сфокусированным и детерминированным результатам, тогда как значения, близкие к 1.0, допускают больше случайности и разнообразия. Типичные значения находятся в диапазоне 0.3–0.6. - typical_p (
float, необязательный) — Локальная типичность измеряет, насколько условная вероятность предсказания целевого токена следующим близка к ожидаемой условной вероятности предсказания случайного токена следующим, с учётом уже сгенерированного частичного текста. Если установлено значение float < 1, для генерации сохраняются наименьшее множество наиболее локально типичных токенов, сумма вероятностей которых составляетtypical_pили больше. Подробности см. в этой статье. - epsilon_cutoff (
float, необязательный) — Если установлено значение float, строго находящееся между 0 и 1, будут выбираться только токены с условной вероятностью, превышающейepsilon_cutoff. В статье рекомендуемые значения варьируются от 3e-4 до 9e-4 в зависимости от размера модели. Дополнительные сведения см. в разделе Truncation Sampling as Language Model Desmoothing. - eta_cutoff (
float, необязательный) — Eta-выборка представляет собой гибрид локально-типичной выборки и epsilon-выборки. Если значение установлено как 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. - repetition_penalty (
float, необязательный) — Параметр штрафа за повторение. Значение 1.0 означает отсутствие штрафа. Подробнее см. в этой статье. - encoder_repetition_penalty (
float, необязательный) — Параметр для encoder_repetition_penalty. Экспоненциальное наказание для последовательностей, отсутствующих в исходном вводе. Значение 1.0 означает отсутствие наказания. - length_penalty (
float, необязательный) — Экспоненциальное штрафное значение за длину, используемое при генерации на основе beam search. Оно применяется как показатель степени к длине последовательности, которая затем используется для деления оценки последовательности. Поскольку оценка представляет собой логарифмическую правдоподобность последовательности (т. е. отрицательное значение),length_penalty> 0.0 поощряет более длинные последовательности, аlength_penalty< 0.0 — более короткие. - no_repeat_ngram_size (
int, необязательный) — Если установлено значение int > 0, все n-граммы этого размера могут встречаться только один раз. - bad_words_ids (
list[list[int]], необязательный) — Список списков идентификаторов токенов, которые не допускаются к генерации. См. документацию и примеры в NoBadWordsLogitsProcessor. - renormalize_logits (
bool) — Следует ли перенормировать логиты после применения всех процессоров логитов (включая пользовательские). Настоятельно рекомендуется установить этот флаг вTrue, поскольку алгоритмы поиска предполагают, что логиты нормированы, однако некоторые процессоры логитов нарушают нормировку. - forced_bos_token_id (
int, необязательный, по умолчаниюmodel.config.forced_bos_token_id) — Идентификатор токена, который принудительно используется в качестве первого сгенерированного токена послеdecoder_start_token_id. Полезно для многоязычных моделей, таких как mBART, где первым сгенерированным токеном должен быть токен целевого языка. - forced_eos_token_id (
intor list[int], *optional*, defaults tomodel.config.forced_eos_token_id) -- The id of the token to force as the last generated token whenmax_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), необязательный) — Этот кортеж добавляет экспоненциально возрастающее штрафное значение за длину после генерации определённого количества токенов. Кортеж должен состоять из:(start_index, decay_factor), гдеstart_indexуказывает, с какого токена начинается штраф, аdecay_factorпредставляет собой коэффициент экспоненциального затухания - suppress_tokens (
list[int], необязательный) — Список токенов, которые подавляются при генерации. Процессор логитовSuppressTokensустановит их лог-вероятности в-inf, чтобы они не выбирались при сэмплинге. - begin_suppress_tokens (
list[int], необязательный) — Список токенов, которые подавляются в начале генерации. Процессор логитовSuppressBeginTokensустанавливает их лог-вероятности в-inf, чтобы они не выбирались при сэмплинге. - sequence_bias (
dict[tuple[int], float], необязательный) — Словарь, сопоставляющий последовательность токенов её смещающему члену. Положительные смещения увеличивают вероятность выбора данной последовательности, а отрицательные — уменьшают. См. документацию и примеры в SequenceBiasLogitsProcessor. - token_healing (
bool) — Исправление хвостовых токенов промптов путём их замены на соответствующие расширения. Это повышает качество завершений для промптов, затронутых предвзятостью жадной токенизации. - guidance_scale (
float, необязательный) — Масштаб руководства для classifier free guidance (CFG). CFG включается при установкеguidance_scale > 1. Более высокое значение масштаба руководства побуждает модель генерировать образцы, более тесно связанные с входным промптом, обычно за счёт ухудшения качества. - watermarking_config (
BaseWatermarkingConfigилиdict, необязательный) — Аргументы, используемые для добавления водяного знака к выводам модели путём введения небольшого смещения для случайно выбранного набора «зелёных» токенов. Подробности см. в документации SynthIDTextWatermarkingConfig и 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, а не только сгенерированную последовательность. Этот флаг должен быть установлен в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, необязательный) — Если установлено значение 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, необязательный) — Определяет количество спекулятивных токенов, которые модель-ассистент должна сгенерировать до проверки целевой моделью на каждой итерации. Большие значения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, необязательный) — Порог уверенности для модели ассистента. Если уверенность модели ассистента в её предсказании для текущего токена ниже этого порога, модель ассистента прекращает текущую итерацию генерации токена, даже если количество спекулятивных токенов (определённое параметромnum_assistant_tokens) ещё не достигнуто. Порог уверенности ассистента корректируется в ходе спекулятивных итераций, чтобы сократить количество лишних проходов draft- и target-моделей, с приоритетом на избегание ложных отрицательных результатов. Значениеassistant_confidence_thresholdсохраняется при нескольких вызовах генерации с одной и той же моделью ассистента. Это неуправляемая версия динамического спекулятивного обзора (dynamic speculation lookahead) из работы Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models https://huggingface.co/papers/2405.04304. - prompt_lookup_num_tokens (
int, необязательный) — Количество токенов, которые будут выведены в качестве кандидатов. - max_matching_ngram_size (
int, необязательный) — Максимальный размер n-граммы, учитываемый при сопоставлении в промпте. По умолчанию равно 2, если значение не указано. - assistant_early_exit(
int, optional) — Если установлено положительное целое число, для ассистента будет использоваться ранний выход модели. Можно использовать только с моделями, поддерживающими ранний выход (то есть моделями, в которых логиты из промежуточных слоёв могут быть интерпретированы LM head). - assistant_lookbehind(
int, optional) — Если задано положительное целое число, процесс повторного кодирования дополнительно учитывает последниеassistant_lookbehindтокены ассистента для корректного выравнивания токенов. Можно использовать только при применении разных токенизаторов в спекулятивном декодировании. Подробнее — в этой статье. - target_lookbehind(
int, необязательный) — Если установлено положительное целое число, процесс повторного кодирования дополнительно учитывает последниеtarget_lookbehindцелевых токена, чтобы правильно выровнять токены. Можно использовать только с различными токенизаторами в спекулятивном декодировании. Подробнее в этой статье. - assistant_ensemble_weight (
float, необязательный) — Включает статическую ансамблевую верификацию в спекулятивном декодировании. Если установлено значение из диапазона(0.0, 1.0), верификатор принимает токены относительно смесиw * p_target + (1 - w) * q_draftвместоp_target, жертвуя контролируемым смещением распределения ради более высокого уровня принятия. По умолчаниюNone, что сохраняет декодирование без потерь. Требует, чтобы модель-ассистент возвращала логиты, поэтому не совместима с декодированием с поиском по промпту. - speculation_type (
str, необязательный) — Запрошенный тип спекуляции. Допустимые значения:dflash.
Параметры, связанные с производительностью и компиляцией
- compile_config (CompileConfig, optional) —
If using a compilable cache, this controls how
generatewillcompilethe forward pass for faster inference. - 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
Чтобы узнать больше о стратегиях декодирования, обратитесь к руководству по стратегиям генерации текста.
Большое количество этих флагов управляет логитами или критериями остановки генерации. Убедитесь, что вы проверили классы, связанные с generate, чтобы получить полное описание возможных манипуляций, а также примеры их использования.
Примечание: поля конфигурации, которые по-прежнему равны None, будут переопределены методом GenerationConfig._get_default_generation_params() в цикле генерации. Если вы хотите использовать другие значения для этих полей, убедитесь, что вы явно задали их в конфигурации генерации.
from_pretrained
< source >( pretrained_model_name: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs ) → GenerationConfig
Параметры
- pretrained_model_name (
strилиos.PathLike) — Это может быть:- строка, model id конфигурации предобученной модели, размещенной в репозитории моделей на huggingface.co.
- путь к каталогу, содержащему файл конфигурации, сохранённый с помощью метода
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 из файла конфигурации генерации.
Примеры:
>>> 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
< source >( model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict] ) → GenerationConfig
Создаёт экземпляр GenerationConfig на основе PreTrainedConfig. Эта функция полезна для преобразования устаревших объектов PreTrainedConfig, которые могут содержать параметры генерации, в автономный GenerationConfig.
save_pretrained
< source >( save_directory: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonepush_to_hub: bool = False**kwargs )
Параметры
- 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().
Сохраните объект конфигурации генерации в каталог save_directory, чтобы его можно было загрузить с помощью метода класса from_pretrained().
обновление
< source >( defaults_only = Falseallow_custom_entries = False**kwargs ) → dict[str, Any]
Параметры
- defaults_only (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли обновлять все ключи в конфигурации с помощьюkwargsили только те, которые установлены вNone(т. е. значение по умолчанию). - allow_custom_entries (
bool, необязательный, по умолчаниюFalse) — Разрешает ли добавление пользовательских записей в конфигурацию черезkwargs, если их нет в текущей конфигурации. - kwargs (
dict[str, Any]) — Словарь атрибутов для предварительного обновления этого класса.
Возвращает
dict[str, Any]
Словарь, содержащий все пары ключ-значение, которые не использовались для обновления экземпляра.
Обновляет атрибуты экземпляра этого класса атрибутами из kwargs, если они совпадают с существующими атрибутами, возвращая все неиспользованные kwargs.
validate
< source >( strict = Falseuser_set_attributes: set[str] | None = None )
Параметры
- strict (bool) — Если True, при обнаружении любых проблем будет выброшено исключение. Если False, проблемы будут только записаны в журнал.
- user_set_attributes (set[str], необязательный) — Имена атрибутов, явно переданных вызывающим кодом. Если этот параметр указан, предупреждения о «незначительных проблемах» при конфликтующих комбинациях флагов (например, флаги, используемые только для сэмплирования, установлены при
do_sample=False) срабатывают только в том случае, если конфликтующий флаг входит в этот набор. Это позволяет избежать лишних предупреждений, когда значение унаследовано из файлаgeneration_config.jsonпо умолчанию для модели. Если значение равноNone, все установленные атрибуты считаются заданными пользователем (поведение, совместимое с предыдущими версиями для прямых вызововvalidate()).
Проверяет значения атрибутов экземпляра GenerationConfig. Вызывает исключения, если по самому экземпляру конфигурации можно обнаружить некорректную параметризацию.
Обратите внимание, что некоторые параметры, не проверяемые здесь, лучше всего проверять во время выполнения generate, поскольку они могут зависеть от других входных данных и/или модели, например, параметры, связанные с длиной генерации.
get_generation_mode
< source >( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode
Возвращает режим генерации, заданный экземпляром GenerationConfig.
GenerationMixin
Класс, содержащий все функции для авто-регрессивной генерации текста, предназначенный для использования как миксин в классах моделей.
Наследование от этого класса наделяет модель особым поведением, связанным с генерацией, например, загрузкой 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(), который можно использовать для:
- жадкое декодирование, если
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
Чтобы узнать больше о стратегиях декодирования, обратитесь к руководству по стратегиям генерации текста.
generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
Параметры
- inputs (
torch.Tensorпроизвольной формы в зависимости от модальности, необязательный) — Последовательность, используемая в качестве промпта для генерации или в качестве входных данных для энкодера. ЕслиNone, метод инициализирует её с помощьюbos_token_idи размером батча, равным 1. Для моделей только с декодеромinputsдолжен быть в форматеinput_ids. Для моделей с энкодером-декодером inputs может представлять собойinput_ids,input_values,input_featuresилиpixel_values. - generation_config (GenerationConfig, optional) —
Конфигурация генерации, используемая в качестве базовой параметризации для вызова генерации.
**kwargs, передаваемые в generate и совпадающие с атрибутамиgeneration_config, будут переопределять их. Еслиgeneration_configне указан, будет использован вариант по умолчанию, который имеет следующий приоритет загрузки: 1) из файла моделиgeneration_config.json, если он существует; 2) из конфигурации модели. Обратите внимание, что не указанные параметры наследуют значения по умолчанию GenerationConfig, документация по которым должна быть проверена для параметризации генерации. - logits_processor (
LogitsProcessorList, необязательный) — Пользовательские обработчики logits, дополняющие стандартные обработчики logits, создаваемые на основе аргументов и конфигурации генерации. Если передан обработчик logits, который уже был создан с помощью аргументов или конфигурации генерации, возникает ошибка. Эта функция предназначена для опытных пользователей. - 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) только разрешёнными токенами на каждом шаге. Если не указан, ограничения не применяются. Функция принимает два аргумента: идентификатор батчаbatch_idиinput_ids. Она должна возвращать список разрешённых токенов для следующего шага генерации, зависящий от идентификатора батчаbatch_idи ранее сгенерированных токеновinputs_ids. Этот аргумент полезен для ограниченной генерации, обусловленной префиксом, как описано в Autoregressive Entity Retrieval. - synced_gpus (
bool, необязательный) — Определяет, следует ли продолжать выполнение цикла while до достижения max_length. Если значение не переопределено, этот флаг будет установлен вTrueпри использованииFullyShardedDataParallelили DeepSpeed ZeRO Stage 3 с несколькими GPU, чтобы избежать блокировки, если один GPU завершает генерацию раньше других. В противном случае по умолчанию устанавливаетсяFalse. - assistant_model (
PreTrainedModel, необязательный) — Модель ассистента, которая может использоваться для ускорения генерации. Модель ассистента должна использовать точно такой же токенизатор. Ускорение достигается, когда прогнозирование кандидатных токенов с помощью модели ассистента выполняется значительно быстрее, чем запуск генерации с моделью, от которой вы вызываете generate. В связи с этим модель ассистента должна быть значительно меньше. - streamer (
BaseStreamer, необязательный) — Объект, который будет использоваться для потоковой передачи сгенерированных последовательностей. Сгенерированные токены передаются через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выполнит стандартные шаги подготовки входных данных, а затем вызовет переданную callable для запуска цикла декодирования. Подробнее см. документацию.
- kwargs (
dict[str, Any], необязательный) — Служебная параметризацияgeneration_configи/или дополнительные специфичные для модели kwargs, которые будут переданы в функциюforwardмодели. Если модель является моделью с кодировщиком-декодировщиком, kwargs, специфичные для кодировщика, не должны иметь префикса, а kwargs, специфичные для декодера, должны иметь префикс decoder_.
Возвращает
ModelOutput или torch.LongTensor
ModelOutput (если return_dict_in_generate=True
или когда config.return_dict_in_generate=True) или torch.LongTensor.
Если модель не является моделью типа «кодировщик-декодировщик» (model.config.is_encoder_decoder=False), допустимые типы
ModelOutput:
Если модель является моделью с кодировщиком-декодировщиком (model.config.is_encoder_decoder=True), возможные типы
ModelOutput:
Генерирует последовательности идентификаторов токенов для моделей с заголовком языкового моделирования.
Большинство параметров, управляющих генерацией, задаются в
generation_config, который, если не передан явно, принимает значения конфигурации генерации по умолчанию для модели. Вы можете переопределить любые параметрыgeneration_config, передав соответствующие аргументы в generate(), например,.generate(inputs, num_beams=4, do_sample=True).Обзор стратегий генерации и примеры кода приведены в следующем руководстве.
compute_transition_scores
< source >( sequences: Tensorscores: tuplebeam_indices: typing.Optional[torch.Tensor] = Nonenormalize_logits: bool = False ) → torch.Tensor
Параметры
- sequences (
torch.LongTensor) — Сгенерированные последовательности. Второй размер (sequence_length) равенmax_lengthили меньше, если все батчи завершились досрочно из-заeos_token_id. - scores (
tuple(torch.FloatTensor)) — Оценки переходов для каждого токена словаря на каждом шаге генерации. Оценки переходов луча, состоящие из логарифмов вероятностей токенов, обусловленных лог-softmax ранее сгенерированных токенов в этом луче. Кортежtorch.FloatTensorс количеством элементов до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), содержащий
оценки переходов (логиты)
Вычисляет оценки переходов для последовательностей на основе оценок генерации (а также индексов лучей, если использовался поиск по лучам). Это удобный метод для быстрого получения оценок выбранных токенов во время генерации.
Примеры:
>>> 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))
TrueContinuousMixin
Класс-миксин для моделей, добавляющий возможности непрерывного батчинга. Непрерывный батчинг имеет три точки входа:
init_continuous_batching, который является фактической точкой входа для непрерывного батчингаcontinuous_batching_context_manager, который сам является обёрткой вокругinit_continuous_batchinggenerate_batch, который по сути является обёрткой вокругcontinuous_batching_context_manager
Они определены в этом порядке. Любые изменения, внесённые в любой из этих трёх точек входа, должны быть отражены в двух других.
continuous_batching_context_manager
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Noneblock: bool = Truetimeout: float | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonepersistent_manager: bool = Falsewarmup: bool = Trueworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
Контекстный менеджер для безопасного использования менеджера непрерывного батчинга. Аргументы аналогичны аргументам init_continuous_batching, за исключением:
- block: блокировать ли поток при остановке менеджера. По умолчанию True.
- timeout: максимальное время ожидания остановки потока. По умолчанию None (без ограничения по времени).
- warmup: предзахватывать ли графы CUDA на максимальных размерах перед запуском. По умолчанию True.
Уничтожьте кэшированный менеджер непрерывного батчинга и освободите ресурсы GPU.
generate_batch
< source >( inputs: listgeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonerecord_timestamps: bool = Falseprogress_bar: bool = Falsepersistent_manager: bool = Falsewarmup: bool = True**kwargs ) → dict[str, GenerationOutput]
Параметры
- 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
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Noneworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None ) → ContinuousBatchingManager
Параметры
- generation_config — необязательная конфигурация генерации, которая может содержать объект CompileConfig
- continuous_batching_config — Необязательная конфигурация непрерывного батчинга
- workload_hints — Необязательные WorkloadHints, помогающие менеджеру непрерывного батчинга принимать более обоснованные решения относительно значений по умолчанию
Возвращает
ContinuousBatchingManager
Экземпляр менеджера, к которому добавляются запросы и из которого извлекаются результаты.
Инициализируйте менеджер для непрерывного пакетного вывода.
ContinuousBatchingManager
класс transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
Менеджер для обработки непрерывного батчинга запросов на генерацию. Он предоставляет пользовательский интерфейс для отправки запросов на генерацию, получения результатов и управления фоновым потоком генерации. Этот класс не следует создавать напрямую, а использовать один из следующих точек входа (все методы миксина ContinuousMixin):
init_continuous_batchingcontinuous_batching_context_managergenerate_batch
add_request
< source >( input_ids: listrequest_id: str | None = Nonemax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = Falseeos_token_id: int | list[int] | None = None**logit_processor_kwargs: Any ) → str | None
Параметры
- input_ids — ID входных токенов, используемые в качестве промпта
- request_id — Необязательный пользовательский идентификатор запроса (генерируется автоматически, если значение равно None)
- max_new_tokens — Максимальное количество новых токенов для генерации
- streaming — Флаг, определяющий, следует ли передавать токены по мере их генерации
- record_timestamps — Записывать ли временные метки для каждого сгенерированного токена
- eos_token_id — ID токена(ов) конца последовательности
- logit_processor_kwargs — Именованные аргументы для процессора логитов.
Возвращает
str | None
Идентификатор запроса, если процесс является драйвером TP, иначе None.
Добавляет новый запрос генерации в очередь. Если процесс не является драйвером TP, это действие не выполняется.
add_requests
< source >( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
Вспомогательная функция для пакетного вызова add_request и возврата их идентификаторов. Подробности смотрите в документации.
Отмена запроса по его ID. Если этот метод вызывается из процесса, который не является драйвером TP, он ничего не делает: с менеджером взаимодействуют только процессы драйвера TP.
Завершает работу менеджера и освобождает распределённые ресурсы. Безопасно вызывать несколько раз. После вызова этого метода менеджер не может быть перезапущен.
Получить один результат из очереди вывода. Если указан ID, возвращается первое совпадающее запрос. Если указан timeout, возвращается None после истечения тайм-аута (в секундах).
Возвращает True, если фоновый поток генерации был запущен и по-прежнему активен.
Дождитесь завершения фонового потока. Ожидание можно ограничить с помощью аргумента timeout (в секундах).
Контекстный менеджер, приостанавливающий цикл генерации, чтобы вызывающий поток мог использовать модель, как правило, для её обновления на месте. Поток входит в этот контекст только после того, как цикл будет приостановлен, а при выходе цикл возобновляется, сохраняя свой кэш и текущие запросы: ничего не сбрасывается и ни один запрос не теряется. Несколько потоков могут удерживать паузу одновременно, и цикл возобновляется после выхода последнего из них. Если включён TP, все ранки должны войти в этот контекст, иначе другие ранки будут блокироваться навсегда.
register_result_handler
< source >( request_id: strcallback: Callable )
Зарегистрируйте обратный вызов для доставки результата (потокового или непотокового).
Обработчик вызывается в цикле событий через call_soon_threadsafe каждый раз, когда для данного запроса формируется результат. Для потоковых запросов это происходит для каждого токена; для непотоковых — только по завершении. Обработчик автоматически удаляется после завершения запроса.
Итерировать по результатам, соответствующим конкретному идентификатору запроса (блокирующий режим).
Использует общую очередь вывода с повторной постановкой в очередь. Для обслуживания с высокой степенью параллелизма используйте вместо этого register_result_handler.
Запустите фоновый поток генерации.
остановка
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
Останавливает фоновый поток генерации. Если флаг block установлен в True, метод ожидает остановки потока в течение максимального времени timeout секунд (None означает отсутствие тайм-аута). Если флаг keep_for_next_session установлен в True, менеджер кэшируется в модели для будущего использования. Если установлен флаг hard_stop, фоновый поток генерации будет остановлен немедленно, а ожидающие запросы будут завершены с ошибкой.
switch_to_cb_friendly_attn
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
Переключите реализацию attn на совместимую с CB. Если auto_switch_to_flash равно True, а реализация attn — SDPA или eager, также переключитесь на flash, если он поддерживается и доступен.
Предварительный захват графов CUDA для путей varlen и decode путём выполнения тестовых батчей. Инициализирует процессор батчей, если это ещё не было сделано.
Планировщик
класс transformers.generation.Scheduler
< source >( cache: PagedAttentionCachesafety_margin: floatmax_requests_per_batch: int )
Абстрактный базовый класс для планирования запросов в непрерывном обработчике пакетов. Планировщики управляют жизненным циклом запросов с момента их добавления в очередь ожидания до момента, когда они планируются для обработки. Различные планировщики реализуют разные стратегии приоритизации и пакетирования запросов.
Добавляет запрос в список ожидания.
Удалите все отменённые запросы из активных и ожидающих очередей.
Завершает обработку запроса и освобождает выделенные для него блоки кэша. Этот метод вызывается, когда запрос завершил генерацию или произошла ошибка.
Получает сгенерированные токены для активного запроса.
Проверяет, есть ли запросы, готовые к обработке.
Проверяет, отменён ли запрос или удалён.
Сбросить состояние планировщика для нового цикла генерации.
Планирует запросы для следующей партии на основе доступных бюджетов токенов и кэша. Этот метод определяет, какие запросы следует обработать в текущей партии, учитывая бюджеты и правила приоритизации планировщика. Параметр token_budget — это максимальное количество токенов, которое может быть обработано в партии, а cache_budget — максимальное количество записей KV-кэша, которые могут быть прочитаны в партии. Возвращает список запланированных запросов в форме «FutureRequestState», булево значение, указывающее, можно ли использовать быстрый путь декодирования, общее количество query-токенов и максимальное количество прочитанных kv-токенов.
Отмечает запрос на отмену.
FIFOScheduler
класс transformers.generation.FIFOScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
Этот планировщик обрабатывает запросы в порядке их поступления, то есть запросы декодирования имеют приоритет над запросами префиллинга.
PrefillFirstScheduler
класс transformers.generation.PrefillFirstScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
Планировщик, который отдаёт приоритет запросам на раздельный prefill перед запросами на декодирование. Этот планировщик гарантирует, что запросы на раздельный prefill (являющиеся продолжением частично обработанных промптов) будут завершены до обработки новых запросов на декодирование.