Transformers documentation

Beam

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2026-10-16 贡献至 Hugging Face Transformers。

FlashAttention SDPA Tensor parallelism Expert parallelism

Beam

概述

Beam 是 Reflection 推出的首个开放权重模型,它是一个稀疏混合专家(MoE)语言模型,总参数量为 501B,每个 token 激活 23B 参数,专为编码、推理和智能体工作负载而构建。该模型在 23.8T token 上进行预训练,并通过大规模异步强化学习进行后训练。Beam 仅支持文本,且在给出每个答案前都会进行推理。聊天模板中的推理努力设置可控制推理的程度。

Beam 拥有 52 个解码器层,并集成了以下特性:

  • 混合滑动窗口与全注意力。 每第六层以及最后一层使用全注意力,其余层则关注最近的 sliding_window(512)个 token。layer_types 用于设置该模式。
  • 滑动层使用 RoPE,全注意力层使用 NoPE。 rope_parameters 以层类型作为键,None 表示该层类型不使用位置编码。全注意力层则对查询进行缩放(可扩展 softmax):位于 1 起始位置 n 的查询会乘以 (1 + n / 2048) ** 0.1,从而避免上下文增长时注意力分布变得过于平坦。
  • 门控注意力。采用分组查询注意力,包含 48 个查询头和 8 个键/值头,并对每个查询头和键头应用 RMSNorm。一个从注意力输入计算得出的 sigmoid 门控,带有每个头独立学习的偏置,在输出投影之前对注意力输出进行逐元素缩放。
  • 稀疏 MoE。 前 3 层使用稠密 SwiGLU MLP,其余 49 层将每个 token 路由到 256 个专家中的 8 个,且没有共享专家(mlp_layer_types 用于设置该模式)。路由器使用 sigmoid 对专家进行评分,通过为每个专家学习一个偏置来平衡负载,而非使用辅助损失,并将每个 token 限制在 n_group 个专家组中得分最高的 topk_group 个组内。路由权重经过归一化,MoE 的输出会乘以 routed_scaling_factor 进行缩放。
  • 采用深度缩放残差的三明治式归一化。 每个注意力层和 MLP 块的前后都包裹了一层 RMSNorm。残差相加会进行重新缩放,使得在 k 次贡献之后(将嵌入视为第一次),残差流等于它们的总和除以 sqrt(k)。
  • 最终 logit 软截断。Logits 通过 30 * tanh(logits / 30)(final_logit_softcapping)进行截断。

该实现以 FP32 精度计算 RMSNorm 缩放、SwiGLU 激活、RoPE、查询缩放、路由以及 softcapping,以匹配 Beam 训练和推理时的数值表现。路由权重和专家偏置在加载时保持为 FP32,返回的 logits 始终为 FP32。

您可以在 Reflection 组织下找到所有原始的 Beam 检查点。

该模型由 yonigozlan 贡献。

使用示例

Beam 的聊天模板将对话格式化为 Beam 的 Harmony 格式,其 响应模板 会将生成的文本解析回包含 thinking、content 和 tool_calls 字段的消息。以下示例使用 Pipeline 或 AutoModelForCausalLM 类生成回复。

BF16 检查点的大小约为 1 TB,因此示例通过 专家并行 将其分片到 8 个设备上,并在每个设备上放置完整的 routed experts。请使用 torchrun --nproc-per-node 8 <script.py> 启动它们。

Pipeline
AutoModel
from transformers import DistributedConfig, pipeline

pipe = pipeline(
    task="text-generation",
    model="reflection/Beam-1.0-501B-A23B",
    model_kwargs={"distributed_config": DistributedConfig(tp_size=8, ep_size=8)},
)

messages = [{"role": "user", "content": "Explain in one sentence why the sky is usually blue."}]
output = pipe(messages, max_new_tokens=2048)
reply = output[0]["generated_text"][-1]
print(reply["thinking"])
print(reply["content"])

请优先使用此方式,而非 device_map="auto"。后者会将完整的层放置在每个设备上,逐个设备执行,并且在加载过程中可能会耗尽内存。

使用 Beam 推荐的 temperature=0.7 和 top_p=0.99 生成样本,这些值由检查点的 GenerationConfig 设为默认值。传入 do_sample=False 以进行贪心解码。

推理努力

将 reasoning_effort 传递给 apply_chat_template() 以控制 Beam 的推理程度。它接受一个整数预算或以下标签之一。由于 Beam 并非使用低于 8 的 effort 进行训练,因此较小的值不会被遵循。

标签minimallowmediumhighxhighmax
工作量83264128256512

当 reasoning_effort 未设置时,模板会使用 max。如果在推理过程中 max_new_tokens 耗尽,解析后的消息将包含 thinking 但不包含 content。

多轮对话

将解析后的消息原样追加到历史记录中。如果缺少之前的推理内容,Beam 的输出质量会下降,而聊天模板会从 thinking 中读取该内容(reasoning_content 和 reasoning 同样被接受)。默认情况下,没有推理内容的助手轮次会以空的推理块进行渲染。当 add_generation_prompt=True 时,传入 allow_missing_thinking=False 可以改为抛出错误,在部署 Beam 时建议采用此设置。

messages.append(message)
messages.append({"role": "user", "content": "And why are sunsets red?"})
inputs = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True, return_tensors="pt", return_dict=True
).to(model.device)

工具调用

将 tools 同时传递给 apply_chat_template() 和 parse_response()。使用 tools 时,解析后的参数会被转换为各工具 schema 中定义的类型;未提供时,所有参数均为字符串。

def get_weather(city: str):
    """
    Get the current weather in a city.

    Args:
        city: The city name.
    """
    return "Sunny, 22 C"


messages = [{"role": "user", "content": "What's the weather like in Paris right now?"}]
inputs = tokenizer.apply_chat_template(
    messages, tools=[get_weather], add_generation_prompt=True, return_tensors="pt", return_dict=True
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=2048)
generated = tokenizer.decode(outputs[0, inputs["input_ids"].shape[1] :])
message = tokenizer.parse_response(generated, prefix=inputs["input_ids"][0], tools=[get_weather])
print(message["tool_calls"])
# [{'type': 'function', 'function': {'name': 'get_weather', 'arguments': {'city': 'Paris'}}}]

messages.append(message)
for call in message["tool_calls"]:
    result = get_weather(**call["function"]["arguments"])
    messages.append({"role": "tool", "name": call["function"]["name"], "content": result})

然后再次从 messages 生成,以获取最终答案。解析后的工具调用没有 id,并且该格式通过位置将结果与调用匹配,因此请按调用的顺序返回工具结果。生成会在最终答案(<|return|>)或工具调用(<|call|>)之后停止;generation_config.json 中列出了这两者。

对于流式处理,get_response_parser() 会返回一个解析器,你可以在文本块生成时通过 feed() 向其输入这些文本块。有关更多详细信息,请参阅 响应解析。

备注

  • 模板参数。 除了 reasoning_effort 之外,聊天模板还接受 model_identity(用于替换系统消息的第一行)、builtin_tools 以及 allow_missing_thinking。builtin_tools 仅应指定 search 和 browse 工具,且必须使用 Beam 训练时所用的定义。其他工具只需使用 tools。system 和 developer 消息仅在对话开始时渲染。
  • 训练。 聊天模板会为 apply_chat_template(..., return_dict=True, return_assistant_tokens_mask=True) 标记助手输出,因此 TRL 的 SFTConfig(assistant_only_loss=True) 仅针对助手 token 进行训练。该掩码涵盖每个助手轮次中的推理、答案和工具调用。
  • 无辅助损失。路由器通过其偏置来平衡专家负载,因此 BeamForCausalLM 不会计算负载均衡损失。output_router_logits=True 仍会返回路由器 logits。

BeamConfig

class transformers.BeamConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 151936hidden_size: int = 5120intermediate_size: int = 20480num_hidden_layers: int = 52num_attention_heads: int = 48num_key_value_heads: int = 8hidden_act: str = 'silu'max_position_embeddings: int = 8192initializer_range: float = 0.02rms_norm_eps: float = 1e-06use_cache: bool = Truetie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Noneattention_bias: bool = Falsesliding_window: int | None = 512attention_dropout: float | int = 0.0moe_intermediate_size: int = 2560num_experts_per_tok: int = 8num_experts: int = 256norm_topk_prob: bool = Trueoutput_router_logits: bool = Falsepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Nonehead_dim: int = 128layer_types: list[str] | None = Nonemlp_layer_types: list[str] | None = Nonen_group: int | None = 8topk_group: int | None = 4routed_scaling_factor: int | float = 2.5final_logit_softcapping: int | float | None = 30.0 )

参数

  • vocab_size (int,可选,默认为 151936) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 数量。
  • hidden_size (int,可选,默认为 5120) — 隐藏表示的维度。
  • intermediate_size (int,可选,默认为 20480) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认为 52) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int,可选,默认为 48) — Transformer 解码器中每个注意力层的注意力头数量。
  • num_key_value_heads (int, 可选,默认为 8) — 这是用于实现 Grouped Query Attention 的 key_value 头数。如果 num_key_value_heads=num_attention_heads,模型将使用 Multi Head Attention (MHA);如果 num_key_value_heads=1,模型将使用 Multi Query Attention (MQA);否则使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行 meanpooling 来构建。更多详情请参阅 这篇论文。如果未指定,则默认为 num_attention_heads。
  • hidden_act (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • max_position_embeddings (int,可选,默认为 8192) — 该模型可能使用的最大序列长度。
  • initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float,可选,默认为 1e-06) — RMS 归一化层使用的 epsilon 值。
  • use_cache (bool,可选,默认为 True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 或模型为仅解码器生成式模型时相关。
  • tie_word_embeddings (bool,可选,默认为 False) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
  • attention_bias (bool,可选,默认为 False) — 在自注意力机制中,是否在 query、key、value 和 output 投影层中使用偏置。
  • sliding_window (int,可选,默认为 512) — 滑动窗口注意力的窗口大小。如果为 None,则不应用滑动窗口。
  • attention_dropout (Union[float, int],可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • moe_intermediate_size (int,可选,默认为 2560) — 路由专家 MLP 的中间层大小。
  • num_experts_per_tok (int,可选,默认为 8) — 每个 token 路由到的专家数量。这是 token 选择路由的 top-k 值。
  • num_experts (int,可选,默认为 256) — MoE 层中路由专家的数量。
  • norm_topk_prob (bool,可选,默认为 True) — 是否对路由专家的权重进行归一化。
  • output_router_logits (bool,可选,默认为 False) — 是否由模型返回路由器 logits。启用此选项后,模型还将输出辅助损失,包括负载均衡损失和路由器 z-loss。
  • pad_token_id (int, 可选) — 词表中用于填充的 token id。
  • bos_token_id (int, 可选) — 词汇表中用于表示流起始的 Token id。
  • eos_token_id (Union[int, list[int]], 可选) — 词汇表中用于表示流结束(end-of-stream)的 token id。
  • head_dim (int,可选,默认为 128) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads
  • layer_types (list[str], 可选) — 一个列表,用于显式地将每个层索引映射到其层类型。如果未提供,将根据 config 值自动生成。
  • mlp_layer_types (list[str], 可选) — 每层的 MLP 类型,"dense" 表示 SwiGLU MLP,"sparse" 表示 MoE 块。长度必须等于 num_hidden_layers。默认值为前三层为 dense 层,其余为 sparse 层。
  • n_group (int,可选,默认为 8) — 路由专家的分组数量。
  • topk_group (int,可选,默认为 4) — 每个 token 选中的组数(对于每个 token,确保所选专家仅位于 topk_group 个组内)。
  • routed_scaling_factor (Union[int, float],可选,默认为 2.5) — 路由专家的缩放因子。
  • final_logit_softcapping (Union[int, float],可选,默认值为 30.0) — 在计算概率分布之前应用于最终 logits 的软截断值。Logits 会按 tanh(logit / cap) * cap 进行缩放。

这是用于存储 BeamModel 配置的类。它根据指定的参数实例化 Beam 模型,并定义模型架构。使用默认值实例化配置将生成与 reflection/Beam-1.0-501B-A23B 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

>>> from transformers import BeamConfig

>>> # Initializing a Beam configuration
>>> configuration = BeamConfig()

BeamModel

class transformers.BeamModel

< >

( config: BeamConfig )

参数

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

未添加任何特定头部的裸 Beam 模型,直接输出原始隐藏状态。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeModelOutputWithPast or tuple(torch.FloatTensor)

参数

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

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

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

    什么是位置 ID?

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

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

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

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (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)。

返回值

MoeModelOutputWithPast 或 tuple(torch.FloatTensor)

MoeModelOutputWithPast 或 torch.FloatTensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(BeamConfig)和输入。

BeamModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

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

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

    包含预计算的隐藏状态(自注意力块中的键和值,以及如果 config.is_encoder_decoder=True 则还包括交叉注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple(torch.FloatTensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.FloatTensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

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

  • attentions(tuple(torch.FloatTensor),可选,在传入 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=True 且 config.add_router_probs=True,或当 config.output_router_probs=True 时返回) — 一个 torch.FloatTensor 元组(每层一个),形状为 (batch_size, sequence_length, num_experts)。

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

BeamForCausalLM

class transformers.BeamForCausalLM

< >

( config: BeamConfig )

参数

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

用于因果语言建模的 Beam Model。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeCausalLMOutputWithPast or tuple(torch.FloatTensor)

参数

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

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

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

    什么是位置 ID?

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

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

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

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (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 的 token 将被忽略(即被掩码),损失仅针对标签位于 [0, ..., config.vocab_size] 范围内的 token 进行计算。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • logits_to_keep (Union[int, torch.Tensor], 可选,默认为 0) — 如果为 int,则计算最后 logits_to_keep 个 token 的 logits。如果为 0,则计算所有 input_ids 的 logits(特殊情况)。生成过程只需要最后一个 token 的 logits,仅针对该 token 进行计算可以节省内存,对于长序列或大词汇量而言,这种节省相当显著。 如果为 torch.Tensor,则必须是一维张量,对应于序列长度维度中需要保留的索引。 这在使用打包张量格式(将批次和序列长度合并为单一维度)时非常有用。

返回值

MoeCausalLMOutputWithPast 或 tuple(torch.FloatTensor)

MoeCausalLMOutputWithPast 或 torch.FloatTensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(BeamConfig)和输入。

BeamForCausalLM 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

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

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

  • aux_loss (torch.FloatTensor,可选,当传入 output_router_logits=True 或 config.output_router_logits=True,且模型使用负载均衡损失训练其路由器时返回) — 稀疏模块的负载均衡辅助损失。那些改用路由器偏置来平衡其专家(DeepSeek-V3 及由其衍生的架构)的模型,此处返回 None,但仍会返回 router_logits。

  • router_logits (tuple(torch.FloatTensor),可选,在传入 output_router_logits=True 或 config.output_router_logits=True 时返回) — 一个 torch.FloatTensor 元组(每个稀疏层对应一个),形状为 (batch_size * sequence_length, num_experts)。

    由 MoE 路由器计算的原始路由器 logits。可用于计算负载均衡损失,或检查 token 如何被分发到各个专家。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。

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

  • hidden_states (tuple(torch.FloatTensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.FloatTensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

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

  • attentions(tuple(torch.FloatTensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

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

示例:

Update on GitHub