Transformers 文档

Ernie 4.5 Moe

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于2025年7月21日贡献给 Hugging Face Transformers。

FlashAttention SDPA Tensor parallelism

Ernie 4.5 Moe

概述

Ernie 4.5 Moe 模型是由百度在 Ernie 4.5 模型家族中发布的。该模型系列包含多种不同的架构和模型规模。具体而言,此模型针对的是采用混合专家模型 (MoE) 的基础文本模型——其中一个版本拥有 21B 总参数和 3B 激活参数,另一个版本拥有 300B 总参数和 47B 激活参数。它以标准的 Llama 为核心,结合了基于 Mixtral 的专用 MoE 架构,并增加了共享专家层。

该系列中的其他模型可以在 Ernie 4.5Ernie 4.5 VL MoE 中找到。

使用技巧

生成文本

from transformers import AutoModelForCausalLM, AutoTokenizer


model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)

使用张量并行进行分布式生成

from transformers import AutoModelForCausalLM, AutoTokenizer


model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    tp_plan="auto",
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)

使用 Bitsandbytes 进行量化

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig


model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    quantization_config=BitsAndBytesConfig(load_in_4bit=True),
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)

该模型由 Anton Vlasjuk 贡献。原始代码可以在 这里找到。

Ernie4_5_MoeConfig

class transformers.Ernie4_5_MoeConfig

< >

( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None vocab_size: int = 103424 pad_token_id: int | None = 0 bos_token_id: int | None = 1 eos_token_id: int | list[int] | None = 2 hidden_size: int = 2560 intermediate_size: int = 12288 num_hidden_layers: int = 28 num_attention_heads: int = 20 num_key_value_heads: int | None = 4 hidden_act: str = 'silu' max_position_embeddings: int = 131072 initializer_range: float = 0.02 rms_norm_eps: float = 1e-05 use_cache: bool = True tie_word_embeddings: bool = True rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None use_bias: bool | None = False moe_intermediate_size: int = 1536 moe_k: int | None = 6 moe_num_experts: int | None = 64 moe_num_shared_experts: int | None = 2 moe_layer_start_index: int | None = 1 moe_layer_end_index: int | None = -1 moe_layer_interval: int | None = 1 moe_norm_min: float | None = 1e-12 output_router_logits: bool | None = False router_aux_loss_coef: float | None = 0.001 )

参数

  • vocab_size (int, 可选, 默认为 103424) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 的数量。
  • pad_token_id (int, 可选, 默认为 0) — 词汇表中用于填充(padding)的 token id。
  • bos_token_id (int, 可选, 默认为 1) — 词汇表中用于表示序列开始(beginning-of-stream)的 token id。
  • eos_token_id (Union[int, list[int]], 可选, 默认为 2) — 词汇表中用于表示序列结束(end-of-stream)的 token id。
  • hidden_size (int, 可选, 默认为 2560) — 隐藏层表示的维度。
  • intermediate_size (int, 可选, 默认为 12288) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认为 28) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 20) — Transformer 解码器中每个注意力层的注意力头数量。
  • num_key_value_heads (int, 可选, 默认为 4) — 用于实现分组查询注意力 (Grouped Query Attention) 的 key_value 头数量。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA);如果 num_key_value_heads=1,模型将使用多查询注意力 (MQA);否则使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对组内所有原始头进行平均池化来构建。有关更多详细信息,请查看 这篇论文。如果未指定,将默认为 num_attention_heads
  • hidden_act (str, 可选, 默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如:"gelu", "relu", "silu" 等。
  • max_position_embeddings (int, 可选, 默认为 131072) — 此模型可能使用的最大序列长度。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float, 可选, 默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的 key/values 注意力(并非所有模型都使用)。仅在 config.is_decoder=True 或模型为仅解码器的生成模型时相关。
  • tie_word_embeddings (bool, 可选, 默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,以及(可选)如果您希望在更长的 max_position_embeddings 下使用 RoPE 时所需的缩放参数。
  • use_bias (bool, 可选, 默认为 False) — 是否在任何投影(包括 MLP 和注意力)中使用偏置项(bias)。
  • moe_intermediate_size (int, 可选, 默认为 1536) — 路由专家 MLP 的中间层大小。
  • moe_k (int, 可选, 默认为 6) — 所选专家的数量。
  • moe_num_experts (int, 可选, 默认为 64) — 路由专家的数量。
  • moe_num_shared_experts (int, 可选, 默认为 2) — 所有 MoE 前向计算所共享的专家数量。
  • moe_layer_start_index (int, 可选, 默认为 1) — MoE 层开始出现的第一个索引。
  • moe_layer_end_index (int, 可选, 默认为 -1) — MoE 层可能出现的最后一个索引。
  • moe_layer_interval (int, 可选, 默认为 1) — MoE 层出现的间隔。
  • moe_norm_min (float, 可选, 默认为 1e-12) — 路由归一化过程中的最小除数值。
  • output_router_logits (bool, 可选, 默认为 False) — 模型是否应该返回路由器的 logits。启用此项将允许模型输出辅助损失,包括负载均衡损失和路由 z-loss。
  • router_aux_loss_coef (float, 可选, 默认为 0.001) — 辅助负载均衡损失系数。用于惩罚 MoE 模型中不均匀的专家路由。

这是用于存储 Ernie4_5_MoeModel 配置的配置类。它根据指定的参数实例化一个 Ernie4 5 Moe 模型,从而定义模型架构。使用默认值实例化配置将生成与 baidu/ERNIE-4.5-21B-A3B-PT 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。

示例

>>> from transformers import Ernie4_5_MoeModel, Ernie4_5_MoEConfig

>>> # Initializing a Ernie4_5_MoE style configuration
>>> configuration = Ernie4_5_MoEConfig()

>>> # Initializing a model from the ERNIE-4.5-21B-A3B style configuration
>>> model = Ernie4_5_MoeModel(configuration)

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

Ernie4_5_MoeModel

class transformers.Ernie4_5_MoeModel

< >

( config: Ernie4_5_MoeConfig )

参数

  • config (Ernie4_5_MoeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

基础的 Ernie4 5 Moe 模型,输出原始隐藏状态,顶部不带任何特定头部。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None position_ids: torch.LongTensor | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None use_cache: bool | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) MoeModelOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词表中输入序列标记的索引。默认情况下填充将被忽略。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力机制的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 ID?

  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的前一阶段返回的 past_key_values(当 use_cache=Trueconfig.use_cache=True 时)。

    仅允许使用 Cache 实例作为输入,请参阅我们的 kv 缓存指南。如果没有传入 past_key_values,则默认初始化 DynamicCache

    模型将输出与输入时相同格式的缓存。

    如果使用了 past_key_values,用户应仅输入形状为 (batch_size, unprocessed_length) 的未处理 input_ids(那些其过去键值状态未提供给此模型的标记),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 作为一个选项,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您想比模型内部的嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联向量,这将非常有用。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参阅 past_key_values)。

返回

MoeModelOutputWithPasttuple(torch.FloatTensor)

一个 MoeModelOutputWithPast 或一个 torch.FloatTensor 元组(如果传入了 return_dict=Falseconfig.return_dict=False 时),根据配置(Ernie4_5_MoeConfig)和输入,包含各种元素。

Ernie4_5_MoeModel 的 forward 方法,重写了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。

  • past_key_values (Cache,*可选*,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。欲了解更多细节,请参阅我们的 KV 缓存指南

    Contains pre-computed hidden-states (key and values in the self-attention blocks and optionally if config.is_encoder_decoder=True in the cross-attention blocks) that can be used (see past_key_values input) to speed up sequential decoding.

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层的输出,如果模型有嵌入层;+一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

  • router_logits (tuple(torch.FloatTensor), 可选, 当传递 output_router_probs=Trueconfig.add_router_probs=True 时,或 config.output_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    由 MoE 路由器计算的原始路由器对数(softmax 后),这些术语用于计算专家混合模型的辅助损失。

Ernie4_5_MoeForCausalLM

class transformers.Ernie4_5_MoeForCausalLM

< >

( config model_args: ~utils.generic.ModelArgs | None = None adapter_args: ~utils.generic.AdapterArgs | None = None lora_args: ~utils.generic.LoRAArgs | None = None tokenizer_args: ~utils.generic.TokenizerArgs | None = None dataset_args: ~utils.generic.DatasetArgs | None = None data_args: ~utils.generic.DataArgs | None = None training_args: ~utils.generic.TrainingArgs | None = None generation_args: ~utils.generic.GenerationArgs | None = None vision_tower_args: ~utils.generic.VisionTowerArgs | None = None qlora_args: ~utils.generic.QLoRAArgs | None = None vision_tower_template_args: ~utils.generic.VisionTowerTemplateArgs | None = None video_tower_args: ~utils.generic.VideoTowerArgs | None = None vision_config: ~utils.generic.VisionConfig | None = None video_config: ~utils.generic.VideoConfig | None = None load_dataset: bool | None = None load_data_collator: bool | None = None load_processor: bool | None = None load_lora_adapter: bool | None = None load_adapter: bool | None = None load_qlora_adapter: bool | None = None **kwargs: typing_extensions.Unpack[transformers.modeling_utils.PreTrainedModelKwargs] )

参数

  • config (Ernie4_5_MoeForCausalLM) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

用于因果语言建模的 Ernie4 5 Moe 模型。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( input_ids: torch.LongTensor | None = None attention_mask: torch.Tensor | None = None position_ids: torch.LongTensor | None = None past_key_values: transformers.cache_utils.Cache | None = None inputs_embeds: torch.FloatTensor | None = None labels: torch.LongTensor | None = None use_cache: bool | None = None output_router_logits: bool | None = None logits_to_keep: int | torch.Tensor = 0 **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) MoeCausalLMOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词表中输入序列标记的索引。默认情况下填充将被忽略。

    索引可以使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力机制的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示未被掩码的标记,
    • 0 表示被掩码的标记。

    什么是注意力掩码?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列标记在位置嵌入中的位置索引。在范围 [0, config.n_positions - 1] 中选择。

    什么是位置 ID?

  • past_key_values (~cache_utils.Cache可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码的前一阶段返回的 past_key_values(当 use_cache=Trueconfig.use_cache=True 时)。

    仅允许使用 Cache 实例作为输入,请参阅我们的 kv 缓存指南。如果没有传入 past_key_values,则默认初始化 DynamicCache

    模型将输出与输入时相同格式的缓存。

    如果使用了 past_key_values,用户应仅输入形状为 (batch_size, unprocessed_length) 的未处理 input_ids(那些其过去键值状态未提供给此模型的标记),而不是所有形状为 (batch_size, sequence_length)input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 作为一个选项,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您想比模型内部的嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联向量,这将非常有用。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算掩码语言建模损失的标签。索引应在 [0, ..., config.vocab_size] 范围内或为 -100(请参阅 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 范围内的标记进行计算。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参阅 past_key_values)。
  • output_router_logits (bool, 可选) — 是否返回所有路由器的逻辑值(logits)。它们对于计算路由器损失(router loss)很有用,不应在推理期间返回。
  • logits_to_keep (Union[int, torch.Tensor], 可选, 默认为 0) — 如果是 int,则计算最后 logits_to_keep 个 token 的逻辑值。如果为 0,则计算所有 input_ids 的逻辑值(特殊情况)。生成时仅需最后一步的 token 逻辑值,仅为该 token 计算逻辑值可以节省内存,这对于长序列或大词汇量的情况非常有效。如果是 torch.Tensor,则必须是一维的,对应于要在序列长度维度上保留的索引。这在使用打包张量格式(batch 和序列长度的单一维度)时非常有用。

返回

MoeCausalLMOutputWithPasttuple(torch.FloatTensor)

一个 MoeCausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(Ernie4_5_MoeConfig)和输入包含不同的元素。

Ernie4_5_MoeForCausalLM 的 forward 方法,重写了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.FloatTensor 形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • aux_loss (torch.FloatTensor可选,当提供 labels 时返回) — 稀疏模块的辅助损失。

  • router_logits (tuple(torch.FloatTensor), 可选, 当传递 output_router_probs=Trueconfig.add_router_probs=True 时,或 config.output_router_probs=True 时返回) — 形状为 (batch_size, sequence_length, num_experts)torch.FloatTensor 元组(每一层一个)。

    由 MoE 路由器计算的原始路由器对数(softmax 后),这些术语用于计算专家混合模型的辅助损失。

  • past_key_values (Cache,*可选*,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。欲了解更多细节,请参阅我们的 KV 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层的输出,如果模型有嵌入层;+一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组(每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

示例

生成

< >

( inputs: torch.Tensor | None = 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: torch.Tensor | None = None negative_prompt_attention_mask: torch.Tensor | None = None custom_generate: str | collections.abc.Callable | None = None **kwargs ) ModelOutputtorch.LongTensor

参数

  • inputs (torch.Tensor,其形状根据模态而异,可选) — 用作生成提示或编码器模型输入的序列。如果为 None,该方法将使用 bos_token_id 和批大小 1 进行初始化。对于纯解码器模型,inputs 应采用 input_ids 的格式。对于编码器-解码器模型,inputs 可以表示 input_idsinput_valuesinput_featurespixel_values 中的任意一种。
  • generation_config (GenerationConfig, 可选) — 用作生成调用基础参数配置的生成配置。传递给 generate 并与 generation_config 属性匹配的 **kwargs 将覆盖这些属性。如果未提供 generation_config,将使用默认配置,其加载优先级如下:1) 如果存在,从 generation_config.json 模型文件加载;2) 从模型配置加载。请注意,未指定的参数将继承 GenerationConfig 的默认值,应查阅其文档以了解如何进行生成参数化。
  • logits_processor (LogitsProcessorList, 可选) — 自定义逻辑值处理器,用于补充从参数和生成配置构建的默认逻辑值处理器。如果传递的逻辑值处理器已经在参数或生成配置中创建,则会抛出错误。此功能旨在供高级用户使用。
  • 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_idinput_ids。它必须返回一个列表,其中包含根据批 ID batch_id 和之前生成的 token inputs_ids 计算出的下一生成步骤的允许 token。此参数对于基于前缀的受限生成非常有用,如 自回归实体检索 中所述。
  • synced_gpus (bool, 可选) — 是否继续运行 while 循环直到达到 max_length。除非被覆盖,否则如果在多 GPU 环境下使用 FullyShardedDataParallel 或 DeepSpeed ZeRO Stage 3,此标志将被设置为 True,以防止如果一个 GPU 在其他 GPU 之前完成生成而导致死锁。否则,默认为 False
  • assistant_model (PreTrainedModel, 可选) — 可用于加速生成的辅助模型。辅助模型必须具有完全相同的分词器(tokenizer)。当使用辅助模型预测候选 token 比使用您调用 generate 的模型进行生成要快得多时,即可实现加速。因此,辅助模型应该小得多。
  • streamer (BaseStreamer, 可选) — 用于流式输出生成序列的流式传输对象。生成的 token 通过 streamer.put(token_ids) 传递,流式对象负责任何后续处理。
  • negative_prompt_ids (torch.LongTensor,形状为 (batch_size, sequence_length), 可选) — 某些处理器(如 CFG)所需的负面提示。批大小必须与输入的批大小匹配。这是一个实验性功能,在未来版本中可能会有破坏性的 API 更改。
  • negative_prompt_attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length), 可选) — negative_prompt_ids 的 attention_mask。
  • custom_generate (strCallable, 可选) — 以下选项之一:
    • str (Hugging Face Hub 仓库名称):运行该仓库中 custom_generate/generate.py 定义的自定义 generate 函数,而不是标准的 generate 方法。该仓库完全替换了生成逻辑,返回类型可能会有所不同。
    • str (本地仓库路径):同上,但从本地路径加载,不需要 trust_remote_code
    • Callablegenerate 将执行通常的输入准备步骤,然后调用提供的可调用对象来运行解码循环。有关更多信息,请参阅 文档
  • kwargs (dict[str, Any], 可选) — generation_config 的临时参数化和/或将转发给模型 forward 函数的其他模型特定 kwargs。如果模型是编码器-解码器模型,编码器特定的 kwargs 不应有前缀,而解码器特定的 kwargs 应以 decoder_ 为前缀。

返回

ModelOutputtorch.LongTensor

一个 ModelOutput(如果 return_dict_in_generate=Trueconfig.return_dict_in_generate=True)或一个 torch.LongTensor

如果模型*不是*编码器-解码器模型(model.config.is_encoder_decoder=False),可能的 ModelOutput 类型为

如果模型是编码器-解码器模型(model.config.is_encoder_decoder=True),可能的 ModelOutput 类型为

为具有语言建模头的模型生成词元 ID 序列。

大多数生成控制参数在 generation_config 中设置,如果未传递 generation_config,则将设置为模型的默认生成配置。您可以通过将相应的参数传递给 generate() 来覆盖任何 generation_config,例如 .generate(inputs, num_beams=4, do_sample=True)

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

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.