speculators.models
模块
类
-
Eagle3SpeculatorConfig–EAGLE-3 预测器配置,支持词汇表映射。
-
EagleSpeculator–EagleSpeculator 模型实现,用于预测解码的 EAGLE 和 HASS 变体
-
EagleSpeculatorConfig–与 EagleSpeculator 一起使用的 SpeculatorModelConfig 实现
-
MLPSpeculatorConfig–待办事项
Eagle3SpeculatorConfig
EAGLE-3 预测器配置,支持词汇表映射。
EAGLE-3 特征词汇表,在草稿(32K)和目标(128K)词汇表之间映射,支持跨分词器预测。
参数
-
–transformer_layer_configTransformer 解码器层配置
-
–draft_vocab_size预测草稿模型词汇表的大小
-
–norm_before_residual在存储残差之前应用 hidden_norm
方法
-
serialize_transformer_config–将 transformer 配置序列化为字典。
-
validate_transformer_config–验证并转换 transformer 配置。
属性
-
target_vocab_size(int) –从 transformer 配置获取目标词汇表大小。
源代码位于 speculators/config.py
serialize_transformer_config
validate_transformer_config classmethod
验证并转换 transformer 配置。
源代码在 speculators/models/eagle3/config.py
EagleSpeculator
EagleSpeculator(
config: EagleSpeculatorConfig,
verifier: str
| PathLike
| PreTrainedModel
| None = None,
verifier_attachment_mode: Literal[
"detached", "full", "train_only"
]
| None = None,
)
基类: SpeculatorModel
用于预测解码的 EAGLE 和 HASS 变体的 SpeculatorModel 实现: - Eagle / Eagle v1: https://arxiv.org/abs/2401.15077 - Eagle v2: https://arxiv.org/abs/2406.16858 - HASS: https://arxiv.org/abs/2408.15766
架构概述:EAGLE 预测器由以下部分组成: 1. 输入嵌入层(与验证器共享) 2. 可选的嵌入层归一化 3. 融合层:将输入嵌入 + 验证器隐藏状态连接并投影到隐藏大小的潜在空间 4. 单个 transformer 解码器层用于候选 token 生成 5. 可选的预 LM 头层归一化 6. 语言模型头(与验证器共享)
预测解码过程: 1. 验证器模型处理输入并生成隐藏状态 2. EAGLE 预测器使用这些隐藏状态 + 输入嵌入来预测下一个 token 3. 使用 token 提议方法并行生成多个候选 token 4. 验证器根据概率阈值验证候选 token 并接受/拒绝 5. 该过程迭代进行以进行多 token 预测
示例
from speculators import SpeculatorsConfig, VerifierConfig
from speculators.models import EagleSpeculator, EagleSpeculatorConfig
from speculators.proposals import GreedyTokenProposalConfig
from transformers import AutoConfig, AutoTokenizer
config = EagleSpeculatorConfig(
transformer_layer_config=AutoConfig.from_pretrained("meta-llama/Llama-3.1-8B-Instruct"),
speculators_config=SpeculatorsConfig(
algorithm="eagle",
proposal_methods=[
GreedyTokenProposalConfig(),
],
default_proposal_method="greedy",
verifier=VerifierConfig(
name_or_path="meta-llama/Llama-3.1-8B-Instruct",
architectures=["LlamaForCausalLM"],
)
)
speculator = EagleSpeculator(
config, verifier=verifier, verifier_attachment_mode="full"
)
初始化 EAGLE 预测器架构,根据提供的配置配置可配置组件。模型从 verifier-dependent layers(embed_tokens, rotary_emb, lm_head)开始,设置为 None,直到附加 verifier。
参数
-
(configEagleSpeculatorConfig) –指定模型架构、层设置和预测解码参数的配置对象。必须是 EagleSpeculatorConfig 的实例,其中包含 transformer 层配置和 EAGLE 特定的设置。
-
(verifierstr | PathLike | PreTrainedModel | None, 默认值:None) –可选的验证器模型,用于附加到预测器进行预测解码。可以是模型目录的路径、Hugging Face 模型标识符或 PreTrainedModel 实例。如果为 None,则必须稍后通过 attach_verifier() 附加,然后才能使用模型。
-
(verifier_attachment_modeLiteral['detached', 'full', 'train_only'] | None, 默认值:None) –验证器附加模式。“detached”模式即使提供了验证器也不会附加。“full”模式启用用于训练和生成的完整集成。“train_only”模式仅附加所需的组件进行训练,优化内存使用。
方法
-
attach_verifier–将验证器模型附加到 EagleSpeculator 进行预测解码。
-
detach_verifier–移除对已附加验证器模型的引用并释放
-
forward–执行前向传播以生成预测 token。
源代码在 speculators/models/eagle.py
attach_verifier
attach_verifier(
verifier: str | PathLike | PreTrainedModel,
mode: Literal["full", "train_only"] | None = None,
)
将验证器模型附加到 EagleSpeculator 进行预测解码。利用验证器的 embed_tokens、rotary_emb 和 lm_head 层进行预测器的前向传播和生成方法。此外,对于 `generate`,它使用验证器的隐藏状态来生成预测 token 预测。
如果模式为“full”,则验证器将完全集成,用于 `generate` 和 `forward` 方法。
如果模式为“train_only”,则仅附加前向传播所需的验证器层,从而在训练期间更好地利用资源。直到附加了完整的验证器,`generate` 才可用。
示例
# Load and attach a verifier
verifier = EagleSpeculator(...)
# For generation
speculator.attach_verifier(verifier)
outputs = speculator.generate(input_ids)
speculator.detach_verifier()
# For training
speculator.attach_verifier(verifier, mode="train_only")
outputs = speculator(input_ids, hidden_states)
speculator.detach_verifier()
参数
-
(verifierstr | PathLike | PreTrainedModel) –要附加的验证器模型。这可以是本地模型目录的路径、Hugging Face 模型标识符或 PreTrainedModel 实例。如果提供了路径或标识符,模型将自动加载。如果提供了实例,它将直接使用。
-
(模式Literal['full', 'train_only'] | None, 默认值:None) –附加验证器的模式。可以是“full”或“train_only”。如果为 None,则默认为“full”。在“train_only”模式下,仅附加前向传播所需的层,并且在附加了完整的验证器之前,预测器无法执行生成。
返回
- –
已附加的验证器的 PreTrainedModel 实例。
源代码在 speculators/models/eagle.py
detach_verifier
移除对已附加验证器模型的引用并释放关联的内存。调用此方法后,推测器将无法执行前向传播或生成,直到附加新的验证器。
源代码在 speculators/models/eagle.py
forward
forward(
input_ids: LongTensor,
hidden_states: FloatTensor,
attention_mask: Tensor | None = None,
position_ids: LongTensor | None = None,
past_key_values: tuple[tuple[FloatTensor]]
| None = None,
use_cache: bool | None = None,
output_attentions: bool | None = None,
output_hidden_states: bool | None = None,
return_dict: bool | None = None,
) -> torch.FloatTensor | CausalLMOutputWithPast
执行前向传播以生成预测 token。
通过 EAGLE 架构处理输入 token 和验证器隐藏状态,以生成用于预测解码的候选 token。该方法通过融合层将输入嵌入与验证器隐藏状态结合,并通过 transformer 解码器层进行处理,从而产生下一个 token 预测的 logits。
参数
-
(input_idsLongTensor) –当前输入序列的 token ID。形状:(batch_size, sequence_length)。这些代表将被转换为嵌入并与验证器隐藏状态合并的 token。
-
(hidden_statesFloatTensor) –来自验证器模型与输入序列对应的隐藏状态表示。形状:(batch_size, sequence_length, hidden_size)。这些捕获了验证器对上下文的理解。
-
(attention_maskTensor | None, 默认值:None) –可选的注意力掩码,用于避免关注填充 token。形状:(batch_size, sequence_length)(2D)或 (batch_size, 1, sequence_length, sequence_length)(4D 因果掩码)。
-
(position_idsLongTensor | None, 默认值:None) –序列中 token 的可选位置索引。形状:(batch_size, sequence_length)。如果为 None,则根据序列长度和过去的键值自动生成。
-
(past_key_valuestuple[tuple[FloatTensor]] | None, 默认值:None) –来自先前前向传播的可选缓存键值状态,用于高效生成。层键值对的元组。
-
(use_cachebool | None, 默认值:None) –是否返回键值状态以供后续前向传播缓存。对自回归生成效率有用。
-
(output_attentionsbool | None, 默认值:None) –是否返回 transformer 层中的注意力权重。用于分析和可视化。
-
(output_hidden_statesbool | None, 默认值:None) –是否返回 transformer 层中的隐藏状态。在此模型中当前未实现。
-
(return_dictbool | None, 默认值:None) –是否返回结构化的 CausalLMOutputWithPast 而不是原始 logits。如果为 None,则使用 config.use_return_dict 默认值。
返回
-
FloatTensor | CausalLMOutputWithPast–如果 return_dict=False,则为原始 logits 张量 (batch_size, sequence_length, vocab_size),或者为包含 logits、过去键值和可选注意力权重的 CausalLMOutputWithPast。
引发
-
ValueError–如果未附加验证器组件(embed_tokens、rotary_emb、lm_head)。在使用 forward() 之前调用 attach_verifier()。
源代码在 speculators/models/eagle.py
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 | |
EagleSpeculatorConfig
用于预测解码的 EAGLE 和 HASS 变体的 EagleSpeculator 的 SpeculatorModelConfig 实现: - Eagle / Eagle v1: https://arxiv.org/abs/2401.15077 - Eagle v2: https://arxiv.org/abs/2406.16858 - HASS: https://arxiv.org/abs/2408.15766
模型配置: - EAGLE1: layernorms=False, fusion_bias=False - EAGLE2: layernorms=False, fusion_bias=False - HASS: layernorms=False, fusion_bias=True
示例
from speculators import SpeculatorsConfig, VerifierConfig
from speculators.models import EagleSpeculatorConfig
from speculators.proposals import GreedyTokenProposalConfig
from transformers import AutoConfig
config = EagleSpeculatorConfig(
transformer_layer_config=AutoConfig.from_pretrained("meta-llama/Llama-3.1-8B-Instruct"),
speculators_config=SpeculatorsConfig(
algorithm="eagle",
proposal_methods=[
GreedyTokenProposalConfig(),
],
default_proposal_method="greedy",
verifier=VerifierConfig(
name_or_path="meta-llama/Llama-3.1-8B-Instruct",
architectures=["LlamaForCausalLM"],
)
)
方法
-
check_add_architectures–如果 transformer 层架构未包含在内,则自动将其添加到
-
serialize_transformer_layer_config–将 transformer_layer_config 序列化为字典,用于 JSON 存储。
-
validate_transformer_layer_config–验证并转换 transformer_layer_config 为 PretrainedConfig 实例。
源代码位于 speculators/config.py
check_add_architectures
如果 transformer 层架构未包含在内,则自动将其添加到架构列表中。
返回
-
Self–已验证的配置实例,包含更新后的架构
源代码在 speculators/models/eagle.py
serialize_transformer_layer_config
将 transformer_layer_config 序列化为字典,用于 JSON 存储。
使用 to_diff_dict() 将 PretrainedConfig 对象转换为其字典表示形式,仅包含非默认值。
参数
-
(值PretrainedConfig) –要序列化的 PretrainedConfig 实例
返回
-
dict–Transformer 层配置的字典表示
源代码在 speculators/models/eagle.py
validate_transformer_layer_config classmethod
验证并转换 transformer_layer_config 为 PretrainedConfig 实例。
接受可以转换为 PretrainedConfig 的字典或现有的 PretrainedConfig 实例。
参数
-
(值Any) –要验证的值(字典或 PretrainedConfig)
返回
-
PretrainedConfig–已验证的 PretrainedConfig 实例
引发
-
ValueError–如果值无法转换为 PretrainedConfig
源代码在 speculators/models/eagle.py
MLPSpeculatorConfig
待办事项