Transformers documentation
MuseGlimmerAssistant
该模型于 2026-08-09 贡献至 Hugging Face Transformers。
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)备注
- Drafter 需要主模型的隐藏状态,因此当
speculation_type="dflash"时,generate会强制目标模型使用output_hidden_states=True。 - 有关更多详细信息和使用示例,请参阅Meta 携 Muse Glimmer 回归:本地、智能体、多模态且开源!博客文章。
MuseGlimmerAssistantConfig
class transformers.MuseGlimmerAssistantConfig
< source >( 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.configMuseGlimmerAssistantPreTrainedModel
class transformers.MuseGlimmerAssistantPreTrainedModel
< source >( config: PreTrainedConfig*inputs**kwargs )
参数
- config (PreTrainedConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
MuseGlimmerAssistantModel
class transformers.MuseGlimmerAssistantModel
< source >( config: MuseGlimmerAssistantConfig )
参数
- config (MuseGlimmerAssistantConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
未添加任何特定头部的裸 Muse Glimmer Assistant 模型,直接输出原始隐藏状态。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( 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 之后的权重,用于在自注意力头中计算加权平均值。