Transformers documentation

生成

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

生成

每个框架都在其各自的 GenerationMixin 类中实现了用于文本生成的 generate 方法:

你可以使用 GenerationConfig 类的实例来参数化 generate 方法。有关控制生成方法行为的完整生成参数列表,请参阅该类。

要了解如何检查模型的生成配置、默认值是什么、如何临时更改参数,以及如何创建并保存自定义的生成配置,请参阅文本生成策略指南。该指南还介绍了如何使用相关功能,例如 token 流式传输。

GenerationConfig

类 transformers.GenerationConfig

< >

( **kwargs )

控制输出长度的参数

  • max_length (int, 可选) — 建议使用 max_new_tokens 来控制模型生成的 token 数量。 max_length 仅用于向后兼容。
  • max_new_tokens (int, 可选) — 要生成的最大 token 数量,忽略提示词中的 token 数量。
  • min_length (int,可选) — 要生成的序列的最小长度。对应于输入提示的长度 + min_new_tokens。如果同时设置了 min_new_tokens,则其效果会被 min_new_tokens 覆盖。
  • min_new_tokens (int, 可选) — 要生成的最小 token 数量,忽略提示词中的 token 数量。
  • early_stopping (bool 或 str,可选) — 控制基于 beam 的方法(如 beam-search)的停止条件。它接受以下值: True,当存在 num_beams 个完整候选项时立即停止生成;False,应用启发式方法,当找到更优候选项的可能性极低时停止生成; "never",beam search 过程仅在无法找到更优候选项时才停止(标准 beam search 算法)。
  • max_time (float, 可选) — 允许计算运行的最长时间(以秒为单位)。在分配的时间用尽后,generation 仍会完成当前这一轮处理。
  • stop_strings(str 或 list[str],可选)— 一个字符串或字符串列表,如果模型输出了这些内容,则终止生成。

控制所使用生成策略的参数

  • do_sample (bool) — 是否使用采样;否则使用贪心解码。
  • num_beams (int, 可选) — 束搜索的束数量。1 表示不使用束搜索。
  • use_mtp — (bool): 如果模型支持,是否使用 Multi-Token Prediction (MTP)。

控制缓存的参数

  • use_cache (bool) — 是否让模型使用过去最后的关键/值注意力(如果该模型支持)来加速解码。
  • cache_implementation (str, 可选) — 将在 generate, 中实例化的缓存类名称,用于加速解码。可能的取值如下:

    如果未指定,我们将使用模型的默认缓存(通常是 DynamicCache)。有关更多信息,请参阅我们的 缓存文档。

  • cache_config (dict,可选,默认为 None) — 键值缓存类中使用的参数可以通过 cache_config 传入。
  • max_cache_len (int, 可选) — 仅在使用静态缓存(cache_implementation 设置为 "static" 或 "offloaded_static")时生效。 将缓存预分配为此长度,而不是当前调用的 max_length。请将其一次性设置为预期中最大的调用长度,这样当重复调用 generate() 且提示词更长或 max_new_tokens 更大(不超过此上限)时,可以复用同一缓存,而无需触发重新分配和 torch.compile 重新编译。

用于操作模型输出 logits 的参数

  • temperature (float, 可选) — 用于调节下一个 token 概率的值。该值在模型的 generation_config.json 文件中设置。如果未设置,默认值为 1.0
  • top_k (int, 可选) — 用于 top-k 过滤时保留的最高概率词表 token 数量。该值在模型的 generation_config.json 文件中设置。如果未设置,默认值为 50。
  • top_p (float, 可选) — 如果设置为小于 1 的浮点数,则仅保留概率之和达到或超过 top_p 的最小最可能 token 集合用于生成。该值在模型的 generation_config.json 文件中设置。如果未设置,默认值为 1.0
  • min_p (float, 可选) — 最小 token 概率,该值会按最可能 token 的概率进行缩放。它必须是 0 到 1 之间的值。典型值在 0.01-0.2 范围内,其选择性类似于将 top_p 设置在 0.99-0.8 范围内(使用与常规 top_p 值相反的值)。
  • top_h (float, 可选) — 熵预算缩放因子,用于控制在采样过程中保留分布中多少熵。 取值必须在 0 到 1 之间。在每一步中,token 按概率排序,并保留最小的 token 前缀,使其重归一化熵小于或等于完整分布熵的 top_h 倍。 较小的值(例如 0.2–0.5)会产生更集中、更确定性的输出,而接近 1.0 的值则允许更多的随机性和多样性。典型取值范围在 0.3–0.6 之间。
  • typical_p (float, 可选) — 局部典型性衡量了在已生成部分文本的条件下,预测下一个目标 token 的条件概率与预测下一个随机 token 的期望条件概率之间的相似程度。如果设置为小于 1 的 float 值,则保留概率之和达到 typical_p 或更高的、最局部典型的 token 集合用于生成。有关更多详细信息,请参阅 这篇论文。
  • epsilon_cutoff (float, 可选) — 如果设置为严格介于 0 和 1 之间的浮点数,则仅会采样条件概率大于 epsilon_cutoff 的 token。论文中建议的取值范围在 3e-4 到 9e-4 之间,具体取决于模型的大小。有关更多详细信息,请参阅 Truncation Sampling as Language Model Desmoothing。
  • eta_cutoff (float, 可选) — Eta 采样是局部典型采样(locally typical sampling)与 epsilon 采样的混合。如果设置为严格介于 0 和 1 之间的浮点数,则仅当某个 token 大于 eta_cutoff 或 sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))) 时,该 token 才会被考虑。后一项在直观上表示期望的下一个 token 概率,并按 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 的生成过程中,对序列长度施加的指数惩罚。它作为指数作用于序列长度,进而用于除以序列的得分。由于得分是序列的对数似然(即为负值),length_penalty > 0.0 会促进生成更长的序列,而 length_penalty < 0.0 则鼓励生成更短的序列。
  • no_repeat_ngram_size (int, 可选) — 如果设置为大于 0 的整数,则所有该大小的 n-gram 只能出现一次。
  • bad_words_ids(list[list[int]],可选)— 不允许生成的 token id 列表的列表。有关更多文档和示例,请参阅 NoBadWordsLogitsProcessor。
  • renormalize_logits (bool) — 是否在对所有 logits 处理器(包括自定义处理器)应用之后重新归一化 logits。强烈建议将此标志设置为 True,因为搜索算法假设分数 logits 已归一化,但某些 logits 处理器会破坏归一化。
  • forced_bos_token_id (int,可选,默认为 model.config.forced_bos_token_id) — 在 decoder_start_token_id 之后强制作为首个生成 token 的 token id。对于像 mBART 这样的多语言模型非常有用,因为首个生成的 token 需要是目标语言的 token。
  • 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),可选) — 此元组在生成一定数量的 token 后,添加一个指数增长的长度惩罚。该元组应包含:(start_index, decay_factor),其中 start_index 指示惩罚开始的位置,decay_factor 表示指数衰减的因子
  • suppress_tokens (list[int], 可选) — 生成时将被抑制的 token 列表。SuppressTokens logit 处理器会将它们的 log probs 设置为 -inf,从而确保它们不会被采样。
  • begin_suppress_tokens (list[int], 可选) — 在生成开始时将被抑制的 token 列表。SuppressBeginTokens logit 处理器会将它们的 log prob 设置为 -inf,从而避免对其进行采样。
  • sequence_bias (dict[tuple[int], float],可选) — 一个字典,将 token 序列映射到其偏置项。正偏置会增加该序列被选中的概率,而负偏置则相反。有关更多文档和示例,请参阅 SequenceBiasLogitsProcessor。
  • token_healing (bool) — 通过用相应的扩展替换提示的尾部 token 来修复它们。 这可以提升受贪心分词偏差影响的提示的补全质量。
  • guidance_scale (float, 可选) — 无分类器引导(CFG)的引导尺度。将 guidance_scale > 1 设置为大于 1 即可启用 CFG。 较高的引导尺度会促使模型生成与输入提示词关联更紧密的样本,但通常以牺牲生成质量为代价。
  • watermarking_config (BaseWatermarkingConfig 或 dict,可选) — 用于通过向随机选定的“绿色”token 集合添加微小偏差,从而为模型输出添加水印的参数。有关更多详细信息,请参阅 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) — 是否返回未经处理的预测 logit 分数。有关更多详细信息,请参阅返回张量中的 logits。
  • return_dict_in_generate (bool) — 是否返回 ModelOutput,而不是仅返回生成的序列。若要返回生成缓存(当 use_cache 为 True 时)或可选输出(参见以 output_ 开头的标志),必须将此标志设置为 True。

可在生成时使用的特殊标记

  • pad_token_id (int,可选) — padding 令牌的 id。
  • bos_token_id (int,可选) — 序列起始令牌的 id。
  • eos_token_id (Union[int, list[int]], 可选) — 序列结束标记的 id。可选地,使用列表来设置多个 序列结束标记。

仅适用于编码器-解码器模型的生成参数

  • encoder_no_repeat_ngram_size (int, 可选) — 如果设置为大于 0 的整数,则 encoder_input_ids 中出现的所有该大小的 n-gram 都不能出现在 decoder_input_ids 中。
  • decoder_start_token_id (int 或 list[int],可选) — 如果编码器-解码器模型使用与 bos 不同的 token 开始解码,则指定该 token 的 id,或一个长度为 batch_size 的列表。指定列表可为批次中的每个元素设置不同的起始 id(例如,在一个批次中包含不同目标语言的多语言模型)。

专用于助手生成的生成参数

  • is_assistant (bool) — 模型是否为助手(草稿)模型。
  • num_assistant_tokens (int, 可选) — 定义在每次迭代中,由 assistant 模型生成、随后交由 target 模型校验的 speculative tokens 数量。num_assistant_tokens 的值越大,生成过程就越具 speculative 特性:如果 assistant 模型表现良好,可以获得更大的加速效果;如果 assistant 模型需要大量修正,则加速效果会较小。
  • num_assistant_tokens_schedule (str, 可选) — 定义在推理过程中更改最大助手 token 数的调度策略。
    • "heuristic":当所有推测 token 均正确时,将 num_assistant_tokens 增加 2,否则减少 1。num_assistant_tokens 的值在多次使用相同 assistant 模型的生成调用中保持不变。
    • "heuristic_transient":与 "heuristic" 相同,但每次生成调用后,num_assistant_tokens 会重置为其初始值。
    • "constant":num_assistant_tokens 在生成过程中保持不变
  • assistant_confidence_threshold (float, 可选) — 助手模型的置信度阈值。如果助手模型对当前 token 预测的置信度低于此阈值,即使尚未达到 speculative tokens(由 num_assistant_tokens 定义)的数量,助手模型也会停止当前的 token 生成迭代。助手模型的置信度阈值会在推测迭代过程中动态调整,以减少不必要的 draft 和 target 前向传播次数,并倾向于避免假阴性。 assistant_confidence_threshold 的值在使用相同助手模型的多次生成调用中保持不变。 它是 Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models https://huggingface.co/papers/2405.04304 中动态推测前瞻的无监督版本。
  • prompt_lookup_num_tokens (int, 可选) — 要作为候选 token 输出的 token 数量。
  • max_matching_ngram_size (int, 可选) — 用于提示中匹配的 ngram 最大尺寸。如果未提供,默认为 2。
  • assistant_early_exit(int, optional) — 如果设置为正整数,将使用模型的 early exit 作为 assistant。仅适用于支持 early exit 的模型(即中间层的 logits 可以被 LM head 解释的模型)。
  • assistant_lookbehind(int, optional) — 如果设置为正整数,重新编码过程将额外考虑最后 assistant_lookbehind 个 assistant token,以正确对齐 token。此参数仅可用于在推测解码中使用不同 tokenizer 的场景。 有关更多详细信息,请参阅此 博客。
  • target_lookbehind(int, 可选) — 如果设置为正整数,重新编码过程将额外考虑最后 target_lookbehind 个目标 token,以正确对齐 token。此参数仅可用于在推测解码中使用不同 tokenizer 的场景。 有关更多详细信息,请参阅此 博客。
  • assistant_ensemble_weight (float, 可选) — 在推测解码中启用静态集成验证。如果设置为 (0.0, 1.0) 范围内的值,验证器将针对混合分布 w * p_target + (1 - w) * q_draft 而非 p_target 来接受 token,以可控的分布偏差换取更高的接受率。默认值为 None,可保持解码无损。要求 assistant 模型返回 logits,因此与 prompt lookup decoding 不兼容。
  • speculation_type (str, 可选) — 请求的推测类型。可接受的值为 dflash。

与性能和编译相关的参数

  • compile_config (CompileConfig, 可选) — 如果使用可编译缓存,此参数控制 generate 如何 compile 前向传播以加快推理速度。
  • disable_compile (bool) — 是否禁用前向传播的自动编译。当满足特定条件(包括使用可编译缓存)时,会自动触发编译。如果您发现需要使用此标志,请提交一个 issue。

用于保存生成任务配置的类。generate 调用支持以下生成方法,适用于文本解码器、文本到文本、语音到文本以及视觉到文本模型:

  • 当 num_beams=1 且 do_sample=False 时,使用 greedy decoding
  • 当 num_beams=1 且 do_sample=True 时,使用 多项式采样
  • 当 num_beams>1 且 do_sample=False 时,使用 beam-search decoding
  • 当 num_beams>1 且 do_sample=True 时,使用 beam-search 多项式采样
  • 如果向 .generate() 传入了 assistant_model 或 prompt_lookup_num_tokens,则使用 assisted decoding

要了解有关解码策略的更多信息,请参阅文本生成策略指南。

这些标志中的许多用于控制生成过程中的 logits 或停止条件。请务必查阅 generate 相关类,以获取所有可能操作的完整说明及其使用示例。

注意:在生成循环中,配置中仍为 None 的字段会被 GenerationConfig._get_default_generation_params() 覆盖。如果你希望这些字段使用不同的值,请确保在生成配置中显式设置它们。

from_pretrained

< >

( 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) — 可以是以下之一:
    • 一个字符串,即托管在 huggingface.co 模型仓库中的预训练模型配置的 model id。
    • 指向一个目录的路径,该目录包含使用save_pretrained()方法保存的配置文件,例如 ./my_model_directory/。
  • config_file_name (str 或 os.PathLike,可选,默认为 "generation_config.json") — 要从 pretrained_model_name 加载的生成配置 JSON 文件的名称。
  • 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 的系统来存储模型和其他工件,因此它可以是分支名称、标签名称或提交 ID,所以 revision 可以是 git 允许的任何标识符。

    要测试您在 Hub 上创建的拉取请求,可以传入 revision="refs/pr/<pr_number>"。

  • return_unused_kwargs (bool, 可选, 默认值为 False) — 如果 False, 为 False,则此函数仅返回最终的配置对象。如果为 True,则此函数返回一个 Tuple(config, unused_kwargs),其中 unused_kwargs 是一个字典,包含那些键不是配置属性的键值对:即 kwargs 中未用于更新 config 且被忽略的部分。

    如果 True,则此函数返回一个 Tuple(config, unused_kwargs),其中 unused_kwargs 是一个字典,包含键不是配置属性的键值对:即 kwargs 中未用于更新 config 且被忽略的部分。

  • subfolder (str,可选,默认为 "") — 如果相关文件位于 huggingface.co 上模型仓库的子文件夹中,您可以在此处指定该文件夹的名称。
  • kwargs (dict[str, Any], 可选) — kwargs 中任何作为配置属性的键的值,将用于覆盖已加载的值。对于键不是配置属性的键值对,其行为由 return_unused_kwargs 关键字参数控制。

返回值

GenerationConfig

从此预训练模型实例化的配置对象。

从生成配置文件中实例化一个 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

< >

( model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict] ) → GenerationConfig

参数

  • model_config (PreTrainedConfig | dict) — 用于实例化生成配置的模型配置。

返回值

GenerationConfig

由这些参数实例化的配置对象。

从 PreTrainedConfig 实例化一个 GenerationConfig。此函数用于将可能包含生成参数的旧版 PreTrainedConfig 对象转换为独立的 GenerationConfig。

save_pretrained

< >

( 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") — 要保存在 save_directory 中的生成配置 JSON 文件的名称。
  • push_to_hub (bool,可选,默认为 False) — 是否在保存模型后将其推送到 Hugging Face 模型库。您可以使用 repo_id 指定要推送到的仓库(默认使用您命名空间中 save_directory 的名称)。
  • kwargs (dict[str, Any],可选) — 传递给 push_to_hub() 方法的额外关键字参数。

将生成配置对象保存到目录 save_directory,以便之后可以使用 from_pretrained() 类方法重新加载。

更新

< >

( defaults_only = Falseallow_custom_entries = False**kwargs ) → dict[str, Any]

参数

  • defaults_only (bool,可选,默认为 False) — 是否使用 kwargs 更新 config 中的所有键,还是仅更新那些设置为 None(即默认值)的键。
  • allow_custom_entries (bool,可选,默认为 False) — 如果当前配置中不存在,是否允许通过 kwargs 将自定义条目更新到配置中。
  • kwargs (dict[str, Any]) — 用于临时更新此类的属性字典。

返回值

dict[str, Any]

包含所有未用于更新实例的键值对的字典。

如果 kwargs 中的属性与现有属性匹配,则使用它们更新此类实例的属性,并返回所有未使用的 kwargs。

验证

< >

( 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

< >

( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode

参数

  • assistant_model (PreTrainedModel,可选) — 用于辅助生成的助手模型。如果设置,生成模式将为辅助生成。

返回值

GenerationMode

由该实例触发的生成模式。

返回由 GenerationConfig 实例触发的生成模式。

GenerationMixin

类 transformers.GenerationMixin

< >

( )

一个包含所有自回归文本生成函数的类,用作模型类中的混入(mixin)。 继承此类会使模型具备与生成相关的特殊行为,例如在初始化时加载 GenerationConfig,或确保在 transformers CI 中运行与 generate 相关的测试。

模型类应继承自 GenerationMixin,以便能够调用诸如 generate 之类的方法;或者,当它定义了一个自定义的 generate 方法,且该方法直接或间接依赖于 GenerationMixin 时,也应如此,因为 GenerationMixin 与诸如 generate 等公开方法大致共享相同的接口。以下是三个示例:

  • LlamaForCausalLM 应继承自 GenerationMixin,以便调用该 mixin 中的 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 时,使用 greedy decoding
  • 当 num_beams=1 且 do_sample=True 时,使用 多项式采样
  • 当 num_beams>1 且 do_sample=False 时,使用 beam-search decoding
  • 当 num_beams>1 且 do_sample=True 时,使用 beam-search 多项式采样
  • 如果向 .generate() 传入了 assistant_model 或 prompt_lookup_num_tokens,则使用 assisted decoding

要了解有关解码策略的更多信息,请参阅文本生成策略指南。

generate

< >

( 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, 可选) — 用作生成调用基础参数化的生成配置。传递给 generate 且与 generation_config 属性匹配的 **kwargs 将覆盖这些属性。如果未提供 generation_config,则使用默认值,其加载优先级如下:1) 如果存在 generation_config.json 模型文件,则从中加载;2) 从模型配置中加载。请注意,未指定的参数将继承 GenerationConfig 的默认值,应查阅其文档以参数化生成。
  • logits_processor (LogitsProcessorList, 可选) — 自定义的 logits 处理器,用于补充由参数和生成配置构建的默认 logits 处理器。如果传入的 logit 处理器已经由参数或生成配置创建,则会抛出错误。此功能面向高级用户。
  • stopping_criteria (StoppingCriteriaList,可选) — 自定义停止条件,用于补充由参数和生成配置构建的默认停止条件。如果传入的停止条件已经由参数或生成配置创建,则会抛出错误。如果你的停止条件依赖于 scores 输入,请确保向 generate 传入 return_dict_in_generate=True, output_scores=True。此功能面向高级用户。
  • prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], list[int]], 可选) — 如果提供,此函数会在每一步将束搜索限制为仅使用允许的 token。如果未提供,则不施加任何约束。此函数接受 2 个参数:批次 ID batch_id 和 input_ids。它必须返回一个列表,其中包含根据批次 ID batch_id 和之前生成的 token inputs_ids 条件化后,用于下一步生成的允许 token。此参数对于基于前缀的约束生成非常有用,如 Autoregressive Entity Retrieval 中所述。
  • synced_gpus (bool, 可选) — 是否继续执行 while 循环直到达到 max_length。除非被覆盖,否则在使用 FullyShardedDataParallel 或 DeepSpeed ZeRO Stage 3 且涉及多 GPU 时,此标志将设置为 True,以避免某个 GPU 在其他 GPU 之前完成生成时发生死锁。否则,默认为 False。
  • assistant_model (PreTrainedModel, 可选) — 可用于加速生成的辅助模型。辅助模型必须使用完全相同的 tokenizer。当使用辅助模型预测候选 token 的速度远快于从你调用 generate 的模型运行生成时,即可实现加速。因此,辅助模型应小得多。
  • streamer (BaseStreamer,可选) — 用于流式传输生成序列的 Streamer 对象。生成的 token 会通过 streamer.put(token_ids) 传入,由 streamer 负责后续处理。
  • negative_prompt_ids(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选) — 某些处理器(例如 CFG)所需的负面提示。批处理大小必须与输入批处理大小相匹配。这是一个实验性功能,未来版本中可能会发生破坏性的 API 变更。
  • negative_prompt_attention_mask(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选)— negative_prompt_ids 的 attention_mask。
  • custom_generate (str 或 Callable, 可选) — 以下之一:
    • str(Hugging Face Hub 仓库名称):运行该仓库中 custom_generate/generate.py 定义的自定义 generate 函数,而不是标准的 generate 方法。该仓库会完全替换生成逻辑,且返回类型可能有所不同。
    • str(本地仓库路径):与上述相同,但来自本地路径。本地目录也需要 trust_remote_code=True,因为会执行本地的 custom_generate/generate.py。
    • Callable:generate 将执行常规的输入准备步骤,然后调用提供的可调用对象来运行解码循环。 有关更多信息,请参阅 文档。
  • kwargs (dict[str, Any], 可选) — generation_config 的临时参数设置,和/或将被转发给模型 forward 函数的额外模型特定 kwargs。如果模型是编码器-解码器模型,编码器特定的 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 类型为:

为具有语言建模头的模型生成 token id 序列。

大多数生成控制参数都在 generation_config 中设置,如果未传入该参数,则会使用模型的默认生成配置。你可以通过向 generate() 传入相应参数来覆盖 generation_config 中的任意设置,例如 .generate(inputs, num_beams=4, do_sample=True)。

有关生成策略和代码示例的概述,请参阅以下指南。

compute_transition_scores

< >

( sequences: Tensorscores: tuple[torch.Tensor]beam_indices: typing.Optional[torch.Tensor] = Nonenormalize_logits: bool = False ) → torch.Tensor

参数

  • sequences (torch.LongTensor) — 生成的序列。第二个维度(sequence_length)等于 max_length,或者更短(如果所有批次都因 eos_token_id 而提前结束)。
  • scores (tuple(torch.Tensor)) — 每个生成步骤中每个词汇表 token 的转移分数。由 token 的对数概率组成的 beam 转移分数,这些概率以该 beam 中先前生成的 token 的 log softmax 为条件。 torch.Tensor 的元组,最多包含 max_new_tokens 个元素(每个生成的 token 对应一个元素),每个张量的形状为 (batch_size*num_beams, config.vocab_size)。
  • beam_indices (torch.LongTensor, 可选) — 生成步骤中每个生成 token id 的 beam 索引。torch.LongTensor,形状为 (batch_size*num_return_sequences, sequence_length)。仅在生成时 num_beams>1 的情况下需要。
  • normalize_logits (bool,可选,默认为 False) — 是否对 logits 进行归一化(出于历史原因,logits 可能未归一化)。

返回值

torch.Tensor

形状为 (batch_size*num_return_sequences, sequence_length) 的 torch.Tensor,包含转移分数(logits)

根据生成分数(如果使用了束搜索,还包括束索引)计算序列的转换分数。这是一个便捷的方法,用于快速获取生成时所选令牌的分数。

示例:

>>> 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

class transformers.ContinuousMixin

< >

( )

用于为模型添加连续批处理能力的 Mixin 类。连续批处理有三个入口点:

  • init_continuous_batching,这是连续批处理的实际入口点
  • continuous_batching_context_manager,它本身是 init_continuous_batching 的封装
  • generate_batch,实际上是对 continuous_batching_context_manager 的封装

它们按此顺序定义。对这三个入口点中的任何一个所做的更改,都应反映在另外两个中。

continuous_batching_context_manager

< >

( 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。

destroy_cached_continuous_batching_manager

< >

( )

销毁缓存的连续批处理管理器并释放 GPU 资源。

generate_batch

< >

( inputs: list[list[int]]generation_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 — 输入 token 序列(提示词)列表
  • generation_config — 可选的生成配置
  • continuous_batching_config — 可选的连续批处理配置
  • record_timestamps — 如果设置为 true,请求将为每个生成的 token 记录时间戳
  • progress_bar — 如果设置为 true,将显示进度条
  • persistent_manager — 生成结束后是否保留管理器。默认值为 False。
  • warmup — 是否在处理请求之前预先捕获 CUDA 图。默认值为 True。

返回值

dict[str, GenerationOutput]

一个字典,将请求 ID 映射到 GenerationOutput 对象

使用连续批处理为一批提示生成序列。

init_continuous_batching

< >

( 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

用于添加请求并获取结果的 manager 实例。

初始化一个用于连续批处理推理的管理器。

ContinuousBatchingManager

class transformers.ContinuousBatchingManager

< >

( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )

用于处理生成请求连续批处理的 Manager。它提供了用于提交生成请求、获取结果以及管理后台生成线程的用户界面。不应直接创建此类,而应通过以下入口点之一(均为 ContinuousMixin 混入类的方法)进行创建:

  • init_continuous_batching
  • continuous_batching_context_manager
  • generate_batch

add_request

< >

( input_ids: list[int]request_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 — 用作提示的输入 token ID
  • request_id — 可选的自定义请求 ID(如果为 None,则自动生成)
  • max_new_tokens — 要生成的新 token 的最大数量
  • streaming — 是否在生成时流式传输 token
  • record_timestamps — 是否记录每个生成 token 的时间戳
  • eos_token_id — 序列结束标记的 ID
  • logit_processor_kwargs — logits 处理器的关键字参数。

返回值

str | None

如果进程是 TP 驱动程序,则为请求 ID,否则为 None。

向队列中添加一个新的生成请求。如果该进程不是 TP 驱动程序,则此操作无效。

add_requests

< >

( inputs: list[list[int]]max_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )

用于批量执行 add_request 并返回其 ID 的实用函数。有关更多详细信息,请查阅其文档。

cancel_request

< >

( request_id: str )

通过 ID 取消请求。如果此调用来自非 TP 驱动程序进程,则此操作无效:只有 TP 驱动程序进程会与管理器进行交互。

销毁

< >

( )

终止管理器并释放分布式资源。可以安全地多次调用。调用此方法后, 无法重新启动管理器。

get_result

< >

( request_id: str | None = Nonetimeout: float | None = None )

从输出队列中获取一个结果。如果提供了 ID,则返回第一个匹配的请求。如果提供了超时时间,则在超时(以秒为单位)后返回 None。

is_running

< >

( )

如果后台生成线程已启动且仍然存活,则返回 True。

join

< >

( stop_trigger_time: floattimeout: float | None = None )

等待后台线程结束。可以使用 timeout 参数(以秒为单位)来设置等待的超时上限。

暂停

< >

( )

一个上下文管理器,用于暂停生成循环,以便调用线程可以使用该模型,通常是为了就地更新它。只有当循环暂停后,线程才会进入此上下文,并在退出时恢复循环,同时保留其缓存和正在处理的请求:不会清空任何内容,也不会丢失任何请求。 多个线程可以同时持有暂停状态,当最后一个线程退出时,循环才会恢复。 如果启用了 TP,所有 rank 都必须进入此上下文,否则其他 rank 将永远挂起。

register_result_handler

< >

( request_id: strcallback: Callable )

参数

  • request_id (str) — 用于接收输出的请求 ID。
  • callback(callable)— 针对每个结果,使用 GenerationOutput 进行调用。

注册用于结果传递(流式或非流式)的回调。

每次为该请求生成结果时,回调都会通过 call_soon_threadsafe 在事件循环中被调用。对于流式请求,这会在每个 token 上发生;对于非流式请求,仅在完成时发生。请求结束时,处理程序会自动清理。

request_id_iter

< >

( request_id: str )

迭代与特定请求 ID 匹配的结果(阻塞)。

使用带有重新入队功能的共享输出队列。对于高并发服务,请改用 register_result_handler。

开始

< >

( )

启动后台生成线程。

停止

< >

( 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

< >

( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )

将 attn 实现切换为与 CB 兼容的实现。如果 auto_switch_to_flash 为 True,且 attn 实现为 SDPA 或 eager,则在支持且可用的情况下也切换到 flash。

预热

< >

( )

通过运行虚拟批次,为变长和解码路径预捕获 CUDA 图。如果尚未初始化,则初始化批次处理器。

调度器

class transformers.generation.Scheduler

< >

( cache: PagedAttentionCachesafety_margin: floatmax_requests_per_batch: int )

用于在连续批处理器中调度请求的抽象基类。调度器管理请求的生命周期,从请求被加入等待队列开始,到被调度处理为止。不同的调度器实现了不同的策略,用于对请求进行优先级排序和批处理。

add_waiting_request

< >

( state: RequestState )

将请求添加到等待列表中。

clear_cancelled_requests

< >

( )

从活动队列和等待队列中移除所有已取消的请求。

finish_request

< >

( request_id: str )

完成请求的处理并释放其已分配的缓存块。当请求完成生成或遇到错误时,会调用此方法。

get_active_request_static_outputs

< >

( request_id: str )

获取活动请求的生成 token。

has_pending_requests

< >

( )

检查是否有待处理的请求。

request_is_cancelled

< >

( request_id: str )

检查请求是否已被取消或移除。

重置

< >

( )

为新的生成循环重置调度器状态。

schedule_batch

< >

( token_budget: intcache_budget: int )

根据可用的 token 和缓存预算,为下一个批次调度请求。此方法会考虑预算以及调度器的优先级规则,选择当前批次中应处理的请求。其中,token_budget 是每个批次中可处理的最大 token 数,cache_budget 是每个批次中可读取的最大 KV 缓存条目数。 返回以 “FutureRequestState” 形式表示的已调度请求列表、一个指示是否可以使用解码快速路径的布尔值、查询 token 的总数以及读取的 kv token 的最大数量。

set_request_cancellation

< >

( request_id: str )

标记取消请求。

FIFOScheduler

class transformers.generation.FIFOScheduler

< >

( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )

该调度器按请求到达的顺序处理请求,这意味着解码请求的优先级高于预填充请求。

PrefillFirstScheduler

class transformers.generation.PrefillFirstScheduler

< >

( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )

一种优先处理拆分预填充请求而非解码请求的调度器。该调度器确保拆分预填充请求(即部分处理提示词的延续)在处理新的解码请求之前完成。

Update on GitHub