Transformers documentation

MuseGlimmerAssistant

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2026-08-09 贡献至 Hugging Face Transformers。

FlashAttention SDPA

MuseGlimmerAssistant

MuseGlimmerAssistant 是 MuseGlimmer 的 DFlash 草稿器。它不是一个独立的语言模型。它包含 5 个滑动窗口层,且没有自己的嵌入层。它借用主模型的输入和输出嵌入,并读取主模型在 target_layer_ids(默认为第 1、13、25、37 和 49 层)处的隐藏状态作为上下文。

与逐个生成 token 不同,草稿模型在单次前向传播中对整个由 block_size 个掩码 token 组成的块进行去噪,类似于扩散窗口。随后,主模型在一步中验证该块。Meta 报告称,在 RTX 5090 上解码速度提升了 3.1 倍,在 Apple M 系列芯片上提升了 1.5 至 1.8 倍。

将 drafter 作为 assistant_model 传递给 generate(),并设置 speculation_type="dflash"。drafter 必须以与主模型相同的 dtype 加载,并位于相同的设备上。

from transformers import AutoProcessor, MuseGlimmerAssistantModel, MuseGlimmerForConditionalGeneration

processor = AutoProcessor.from_pretrained("meta-models/Muse-Glimmer-30B")
model = MuseGlimmerForConditionalGeneration.from_pretrained(
    "meta-models/Muse-Glimmer-30B",
    device_map="auto",
)
drafter = MuseGlimmerAssistantModel.from_pretrained(
    "meta-models/Muse-Glimmer-30B-assistant",
    device_map="auto",
)

messages = [
    {
        "role": "user",
        "content": [{"type": "text", "text": "Write a bash one-liner that counts lines of Python in a repo."}],
    },
]
inputs = processor.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
).to(model.device)
input_len = inputs["input_ids"].shape[-1]

outputs = model.generate(
    **inputs,
    assistant_model=drafter,
    speculation_type="dflash",
    max_new_tokens=256,
)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
print(response)

备注

MuseGlimmerAssistantConfig

class transformers.MuseGlimmerAssistantConfig

< >

( 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 = Nonehidden_size: int = 6656intermediate_size: int = 19968num_hidden_layers: int = 5num_attention_heads: int = 32num_key_value_heads: int = 8head_dim: int = 128rms_norm_eps: float = 1e-05rope_parameters: dict | None = Nonemax_position_embeddings: int = 131072sliding_window: int = 2048layer_types: list[str] | None = Noneattention_dropout: float | int = 0hidden_act: str = 'silu'bos_token_id: int | None = 200000eos_token_id: int | None = 200001pad_token_id: int | None = 200018block_size: int = 16mask_token_id: int = 201818target_layer_ids: list[int] | None = None )

参数

  • hidden_size (int,可选,默认为 6656) — 隐藏表示的维度。
  • intermediate_size (int,可选,默认为 19968) — MLP 表示的维度。
  • num_hidden_layers (int,可选,默认为 5) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int,可选,默认为 32) — 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。
  • head_dim (int,可选,默认为 128) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads
  • rms_norm_eps (float,可选,默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • rope_parameters (dict, 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
  • max_position_embeddings (int,可选,默认为 131072) — 该模型可能使用的最大序列长度。
  • sliding_window (int,可选,默认为 2048) — 滑动窗口注意力的窗口大小。如果为 None,则不应用滑动窗口。
  • layer_types (list[str], 可选) — 一个列表,用于显式地将每个层索引映射到其层类型。如果未提供,将根据 config 值自动生成。
  • attention_dropout (Union[float, int],可选,默认为 0) — 注意力概率的 dropout 比率。
  • hidden_act (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • bos_token_id (int,可选,默认为 200000) — 词表中用于表示流起始的 Token ID。
  • eos_token_id (int,可选,默认为 200001) — 词汇表中用于表示流结束(end-of-stream)的 token id。
  • pad_token_id (int,可选,默认为 200018) — 词表中用于填充的 token id。
  • block_size (int, 可选) — 将被去噪的噪声输入的块大小。
  • mask_token_id (int, 可选) — 用作模型噪声输入的掩码 token id。
  • target_layer_ids (list[int], 可选) — 从 0 开始计数的层 ID,其隐藏状态将被拼接起来,作为模型的上下文。

这是用于存储 MuseGlimmerAssistantModel 配置的类。它根据指定的参数实例化 Muse Glimmer Assistant 模型,并定义模型架构。使用默认值实例化配置,将得到与 meta-models/Muse-Glimmer-30B-assistant 类似的配置。

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

示例:

>>> from transformers import MuseGlimmerAssistantConfig, MuseGlimmerAssistantModel

>>> # Initializing a Muse Glimmer Assistant config similar to `meta-models/Muse-Glimmer-30B-assistant`.
>>> configuration = MuseGlimmerAssistantConfig(text_config)

>>> # Initializing a model from the `meta-models/Muse-Glimmer-30B-assistant` configuration.
>>> model = MuseGlimmerAssistantModel(configuration)

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

MuseGlimmerAssistantPreTrainedModel

class transformers.MuseGlimmerAssistantPreTrainedModel

< >

( config: PreTrainedConfig*inputs**kwargs )

参数

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

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

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

MuseGlimmerAssistantModel

class transformers.MuseGlimmerAssistantModel

< >

( config: MuseGlimmerAssistantConfig )

参数

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

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

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

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

forward

< >

( noise_embeds: Tensorcontext_hidden_states: Tensorattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.DFlashCache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)

参数

  • noise_embeds (torch.Tensor,形状为 [batch_size, config.block_size, dim]) — 最后一个生成的锚点 token 以及待去噪的掩码 token 的输入嵌入。
  • context_hidden_states (torch.Tensor,形状为 [batch_size, number_of_previous_accepted_tokens, dim * len(config.target_layer_ids)]) — 目标模型所选层 ID 的上下文隐藏状态,在最后一个维度上拼接。
  • attention_mask (torch.Tensor,形状为 [batch_size, number_of_previous_accepted_tokens + config.block_size]) — 与常规的 attention_mask 类似,但请注意其长度为 number_of_previous_accepted_tokens + config.block_size, 因为 Attention 会先将 context_hidden_states 与由 noise_embeds 派生的隐藏状态拼接起来,因此 k/v 状态与 q_states 的长度并不相同,即使是在调用 cache.update() 之前也是如此。因此,注意力掩码的 kv_seq_len 维度需要覆盖这些额外的位置。
  • position_ids (torch.Tensor,形状为 [batch_size, number_of_previous_accepted_tokens + config.block_size]) — 与常规的 position_ids 类似,但请注意其长度为 number_of_previous_accepted_tokens + config.block_size, 因为 Attention 会先将 context_hidden_states 与由 noise_embeds 派生的隐藏状态拼接起来,因此 k/v 状态与 q_states 的长度并不相同,即使是在调用 cache.update() 之前也是如此。因此,position_ids 以及由此派生的 position_embeddings 需要覆盖所有这些额外的位置。
  • past_key_values (~cache_utils.DFlashCache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 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。

  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回值

BaseModelOutputWithPast 或 tuple(torch.Tensor)

一个 BaseModelOutputWithPast 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(MuseGlimmerAssistantConfig)和输入。

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

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

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

    如果使用了 past_key_values,则仅输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • 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.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

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

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

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

Update on GitHub