Transformers 文档
DeepSeek-V4
并获得增强的文档体验
开始使用
该模型于 2026 年 5 月 2 日贡献给 Hugging Face Transformers。
DeepSeek-V4
DeepSeek-V4 是 DeepSeek 推出的下一代 MoE 语言模型(论文)。其架构将 DeepSeek-V3 的多头潜注意力(MLA)替换为局部 + 长程混合设计,将残差连接替换为流形约束超连接(mHC),并使用静态 token-id → expert-id 哈希表来引导前几个 MoE 层。
此实现涵盖了 DeepSeek-V4-Flash、DeepSeek-V4-Pro 及其 -Base 预训练版本。这四个模型共享相同的架构,仅在宽度、深度、专家数量和权重上有所不同。
架构(论文 §2)
混合注意力(§2.3)
每个解码器块属于三种注意力类型之一,由 config.layer_types[i] 指定
- 滑动窗口全注意力(
"sliding_attention"):仅关注sliding_windowtoken 的局部窗口,没有长程分支。匹配 V3 用于引导层的“全注意力”风格。 - 压缩稀疏注意力(
"compressed_sparse_attention",CSA — 论文 §2.3.1):包含一个低压缩率池(compress_rate_csa,默认m=4)和重叠窗口,外加一个闪电索引器(公式 13–17),该索引器在查询到达核心注意力层之前,计算查询与池的匹配度,并收集每条查询的前index_topk个块。 - 重度压缩注意力(
"heavily_compressed_attention",HCA — 论文 §2.3.2):包含一个高压缩率池(compress_rate_hca,默认m'=128)和非重叠窗口。没有索引器——每个池化条目都参与注意力计算。
所有三种类型共享相同的主干
- 共享 K=V 多查询注意力:
num_key_value_heads = 1;kv_proj生成单个 KV 头,该张量被同时读取为键和值。 - 部分 RoPE(交错对,论文 §2.3.3 “部分旋转位置编码”),应用于每个头部的后部
qk_rope_head_dim = head_dim * partial_rotary_factor个通道。相同的旋转应用于注意力输出 rope 切片的-i位置(公式 26),因此每个 KV 条目的贡献保持为 相对 距离的函数。 - 逐头可学习注意力池(Attention Sink)(公式 27)。
- 分组低秩输出投影(§2.3.1 “分组输出投影”):
o_groups头组 → 每组o_lora_rank→hidden_size,由DeepseekV4GroupedLinear(o_a_proj) 继以o_b_proj计算得出。在不损失表现力的前提下,降低了宽注意力输出的单 token 代价。 - 共享滑动窗口 K=V 分支,大小为
sliding_window(“滑动窗口注意力的额外分支”,§2.3.1),用于保留局部的细粒度依赖;长程压缩器的输出会在核心注意力之前与该分支的 KV 连接起来。
流形约束超连接(§2.2)
残差连接被 mHC(Xie et al., 2026)替换:在每个块中保持形状为 [B, S, hc_mult, D] 的 hc_mult 个并行残差流。两个 DeepseekV4HyperConnection 模块——attn_hc 和 ffn_hc——通过 (pre, post, comb) 三元组在注意力/MLP 子层周围混合输入输出流。comb 矩阵是一个通过流形上的 hc_sinkhorn_iters Sinkhorn–Knopp 迭代生成的双重随机投影,使得信号传播在深层堆叠中保持非扩张性。最终的 DeepseekV4HyperHead 在模型归一化之前将 hc_mult 个流折叠为单一序列。
MoE 调度(§2.1)
路由根据层级由 config.mlp_layer_types 配置,取值范围为 {"hash_moe", "moe"}
"hash_moe":专家索引来自预先填充自 V4 检查点的静态tid2eid[input_ids]查询。习得的门控weight仍然生成用于加权所选专家的逐专家评分;只有 选择哪些专家 是静态的。用于前几个引导层(默认 3 层,可通过遗留参数num_hash_layers覆盖)。"moe":标准的 top-k 路由 MoE。专家亲和度使用 Sqrt(Softplus(·)) 而非 V3 的 Sigmoid(论文 §2.1:“我们将计算亲和度分数的激活函数从 Sigmoid(·) 更改为 Sqrt(Softplus(·))”),并且取消了 V3 的n_group/topk_group约束。通过e_score_correction_bias缓冲区保留了无辅助损失的策略(DeepSeek 的noaux_tc),该缓冲区在不产生梯度流的情况下偏移 top-k argmax。
路由专家在 Mixtral 标准的 [num_experts, 2 * moe_intermediate_size, hidden_size] 专家权重布局之上,使用了带钳位 (Clamped) 的 SwiGLU(gate.clamp(max=swiglu_limit),up.clamp(min=-swiglu_limit, max=swiglu_limit),然后 act_fn(gate) * up)。单个共享专家(宽度为 moe_intermediate_size 的普通 SwiGLU MLP)在每个 token 上并行运行。
注意力掩码布局
每个 DeepseekV4Attention 层通过其压缩器返回的 block_bias,在键轴上扩展标准的滑动窗口因果掩码,然后将连接后的掩码馈送至 eager_attention_forward。滑动部分(左侧,[S, S])对于每种层类型都是相同的;压缩器部分(右侧)根据层类型而不同,这正是 V4 引入的“新颖”部分。
下图使用了一个极小的配置(sliding_window=8,CSA m=4,HCA m'=8,index_topk=2)并在 16-token 的输入上生成,以便完整的逐层类型掩码能显示在屏幕上。绿色 = 滑动部分中的查询/键对角线,深色 = 可见的标准 KV 位置,浅色 = 已被掩码,琥珀色 = 查询被允许关注的压缩器 / 索引器槽位。虚线之后的列是由压缩器通过 cat([sliding_causal_mask, block_bias], dim=-1) 附加的。
仅滑动层("sliding_attention")。 没有压缩器,没有右侧填充——掩码是形状为 [S, S] 的普通滑动窗口因果掩码(窗口 = 8)。对于 i ≥ window,左下三角形被切掉,从而恢复仅关注局部的注意力模式。
CSA 层("compressed_sparse_attention")。 压缩器将其每查询收集的输出展平为 [B, 1, S·k, D],并在掩码右侧填充 S·k 列。对于查询 t,只有列 [S + t·k, S + (t+1)·k) 中的 k 个槽位携带索引器的选择;所有其他压缩器列均为 -inf。在第一个窗口关闭之前(t < m − 1)的查询什么也得不到——索引器的 -1 哨兵直接传播到掩码。随着 t 的增长,更多的压缩条目就绪,索引器可以填满所有 k 个槽位。
HCA 层("heavily_compressed_attention")。 没有索引器——每个缓存的压缩条目都是潜在可见的。在右侧填充了 T_total = entry_count["compressor"] 列。查询 t 仅在其源窗口关闭后才能看到条目 w,即 w < (t + 1) // m。此处 m=8,条目 0(涵盖位置 0..7)和 1(涵盖 8..15)分别仅在 t ≥ 7 和 t ≥ 15 时变得可见。
这些图表可以通过以下方式端到端重现
python docs/source/en/imgs/deepseek_v4/visualize_attention_masks.py \
--svg docs/source/en/imgs/deepseek_v4该脚本在此微型配置上运行一次前向传递,封装每个注意力层以捕获准确的 cat([attention_mask, block_bias]) 后的掩码,将 CSA 的 [S, S·k] 扁平槽位掩码重新映射回 [S, T_entries] 条目可见性视图(因此每个 C_w 列是一个压缩的 条目,而不是采集槽),并写入上述三个 SVG。它还在标准输出中打印 ANSI 网格以便快速终端检查,并导出索引器的逐查询 top-k 选择,以便可以审计预热哨兵和选择项。
缓存层
每个非滑动注意力块需要在前向调用中传递压缩器 / 索引器状态。V4 提供了两种与 LAYER_TYPE_CACHE_MAPPING 自动注册的缓存层类型
DeepseekV4HCACache:滑动窗口 K=V + HCA 压缩器缓冲区 / 池 / 计数(无重叠,无索引器)。DeepseekV4CSACache:滑动窗口 K=V + CSA 压缩器(具有重叠状态)+index_head_dim处的并行索引器缓冲区 / 池 / 计数 / 重叠。
DynamicCache(config=…) 根据 config.layer_types[i] 构建对应的缓存层。
DeepseekV4Config
class transformers.DeepseekV4Config
< source >( 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 = 129280 hidden_size: int = 4096 moe_intermediate_size: int = 2048 num_hidden_layers: int = 43 num_attention_heads: int = 64 num_key_value_heads: int = 1 head_dim: int = 512 q_lora_rank: int = 1024 num_experts_per_tok: int = 6 n_routed_experts: int = 256 n_shared_experts: int = 1 scoring_func: str = 'sqrtsoftplus' norm_topk_prob: bool = True routed_scaling_factor: float = 1.5 max_position_embeddings: int = 1048576 rope_theta: float | int = 10000.0 layer_types: list[str] | None = None compress_rates: dict | None = None compress_rope_theta: float | int = 160000.0 hc_mult: int = 4 hc_sinkhorn_iters: int = 20 hc_eps: float = 1e-06 mlp_layer_types: list[str] | None = None swiglu_limit: float = 10.0 sliding_window: int = 128 o_groups: int = 8 o_lora_rank: int = 1024 index_n_heads: int = 64 index_head_dim: int = 128 index_topk: int = 512 num_nextn_predict_layers: int = 1 output_router_logits: bool = False router_aux_loss_coef: float = 0.001 router_jitter_noise: float = 0.0 hidden_act: str = 'silu' initializer_range: float = 0.02 rms_norm_eps: float = 1e-06 use_cache: bool = True pad_token_id: int | None = None bos_token_id: int | None = 0 eos_token_id: int | list[int] | None = 1 tie_word_embeddings: bool = False rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None partial_rotary_factor: float | None = None attention_bias: bool = False mlp_bias: bool = False attention_dropout: float = 0.0 )
参数
- vocab_size (
int,可选,默认为129280) — 模型词汇表大小。定义了input_ids可以表示的不同 token 的数量。 - hidden_size (
int,可选,默认为4096) — 隐藏表示的维度。 - moe_intermediate_size (
int,可选,默认为2048) — 路由专家 MLP 的中间层大小。 - num_hidden_layers (
int,可选,默认为43) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int,可选,默认为64) — Transformer 解码器中每个注意力层的注意力头数量。 - num_key_value_heads (
int,可选,默认为1) — 这是用于实现分组查询注意力(GQA)的键值(key_value)头数量。如果num_key_value_heads=num_attention_heads,模型将使用多头注意力(MHA);如果num_key_value_heads=1,模型将使用多查询注意力(MQA);否则使用 GQA。当将多头检查点转换为 GQA 检查点时,每个组的键和值头应通过对该组内的所有原始头进行平均池化来构造。有关更多详细信息,请查看这篇论文。如果未指定,将默认为num_attention_heads。 - head_dim (
int,可选,默认为512) — 注意力头的维度。如果为 None,则默认为 hidden_size // num_attention_heads - q_lora_rank (
int,可选,默认为1024) — 查询投影的 LoRA 矩阵秩。 - num_experts_per_tok (
int, 可选, 默认为6) — 每个 token 要路由到的专家数量。这是 token 选择路由(token-choice routing)的 top-k 值。 - n_routed_experts (
int, 可选, 默认为256) — 路由专家(routed experts)的数量。 - n_shared_experts (
int, 可选, 默认为1) — 共享专家(shared experts)的数量。 - scoring_func (
str, 可选, 默认为sqrtsoftplus) — 路由激活函数 —sqrtsoftplus,softmax或sigmoid。 - norm_topk_prob (
bool, 可选, 默认为True) — 是否对路由专家的权重进行归一化。 - routed_scaling_factor (
float, 可选, 默认为1.5) — 路由专家的缩放因子。 - max_position_embeddings (
int, 可选, 默认为1048576) — 此模型可能使用的最大序列长度。 - rope_theta (
Union[float, int], 可选, 默认为10000.0) — 主自注意力旋转位置编码(RoPE)的基数。 - layer_types (
list[str], 可选) — 每层注意力调度,值可从{"compressed_sparse_attention", "heavily_compressed_attention"}中选择。V4-Pro 默认值:2× HCA 引导 + 交替 CSA / HCA。 - compress_rates (
dict[str, int]) — 按层类型的压缩率。默认{"compressed_sparse_attention": 4, "heavily_compressed_attention": 128}(CSA 的 m=4,HCA 的 m'=128,论文 §2.3.1 / §2.3.2)。向后兼容 (BC):将compress_rate_csa/compress_rate_hca作为顶层 kwargs 的配置会在__post_init__时被折叠进来。 - compress_rope_theta (
Union[float, int], 可选, 默认为160000.0) — 压缩分支的 RoPE 基数 (与 YaRN 的rope_scaling配对使用)。 - hc_mult (
int, 可选, 默认为4) — 流形约束超连接(mHC)扩张因子 n_hc (始终激活;第 2.2 节)。 - hc_sinkhorn_iters (
int, 可选, 默认为20) — mHC 残差映射投影到双随机矩阵上的 Sinkhorn-Knopp 迭代次数 t_max。 - hc_eps (
float, 可选, 默认为1e-06) — Sinkhorn-Knopp 归一化的数值下限。 - mlp_layer_types (
list[str], 可选) — 每层 MoE 调度,值可从{"hash_moe", "moe"}中选择。hash_moe通过冻结的tid2eid[input_ids]查找进行路由(论文 §2.1,“Hash-MoE bootstrap”);moe是标准的 top-k 路由 MoE。默认:3×hash_moe,其余为moe。向后兼容 (BC):将num_hash_layers作为顶层 kwarg 的旧配置会在__post_init__时被折叠进来。 - swiglu_limit (
float, 可选, 默认为10.0) — 裁剪路由专家的门控/上行预激活值。 - sliding_window (
int, 可选, 默认为128) — 每个注意力模块的滑动窗口分支中使用的局部窗口大小 n_win。 - o_groups (
int, 可选, 默认为8) — 分组输出投影(Grouped Output Projection)中头组 g 的数量 (论文 §2.3.1)。 - o_lora_rank (
int, 可选, 默认为1024) — 分组输出投影中的每组中间维度 d_g。 - index_n_heads (
int, 可选, 默认为64) — 索引器查询头的数量 n_h^I (论文 §2.3.1,等式 14)。 - index_head_dim (
int, 可选, 默认为128) — 索引器头维度 c^I (论文 §2.3.1)。 - index_topk (
int, 可选, 默认为512) — Lightning 索引器通过 top-k 为每个查询保留的压缩条目数 (论文 §2.3.1,等式 17)。 - num_nextn_predict_layers (
int, 可选, 默认为1) — 上游检查点中的 MTP 层数 (此处未实例化)。 - output_router_logits (
bool, 可选, 默认为False) — 是否应由模型返回路由 logits。启用此功能还将允许模型输出辅助损失,包括负载均衡损失和路由 z-loss。 - router_aux_loss_coef (
float, 可选, 默认为0.001) — 辅助负载均衡损失系数。用于惩罚 MoE 模型中不均匀的专家路由。 - router_jitter_noise (
float, 可选, 默认为0.0) — 在训练期间添加到路由 logits 中的噪声量,以实现更好的负载均衡。 - hidden_act (
str, 可选, 默认为silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu","relu","silu"等。 - initializer_range (
float, 可选, 默认为0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器(truncated_normal_initializer)的标准差。 - rms_norm_eps (
float, 可选, 默认为1e-06) — RMS 归一化层使用的 epsilon 值。 - use_cache (
bool, 可选, 默认为True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在config.is_decoder=True或模型是仅解码器生成模型时相关。 - pad_token_id (
int, 可选) — 词表中用于填充(padding)的 token ID。 - bos_token_id (
int, 可选, 默认为0) — 词表中用于流开始(beginning-of-stream)的 token ID。 - eos_token_id (
Union[int, list[int]], 可选, 默认为1) — 词表中用于流结束(end-of-stream)的 token ID。 - tie_word_embeddings (
bool, optional, defaults toFalse) — 是否根据模型的tied_weights_keys映射来绑定权重嵌入。 - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], optional) — 包含 RoPE 嵌入配置参数的字典。该字典应包含rope_theta的值,如果希望在更大的max_position_embeddings下使用 RoPE,还可以选择性地包含用于缩放的参数。 - partial_rotary_factor (
float, optional) — 应用 RoPE 的 head_dim 部分的比例。默认值为qk_rope_head_dim / head_dim,使得 cos/sin 的大小变为qk_rope_head_dim。 - attention_bias (
bool, optional, defaults toFalse) — 在自注意力机制中,是否在 query、key、value 和输出投影层中使用偏置(bias)。 - mlp_bias (
bool, optional, defaults toFalse) — 在 MLP 层中,是否在 up_proj、down_proj 和 gate_proj 层中使用偏置。 - attention_dropout (
float, optional, defaults to0.0) — 注意力概率的丢弃(dropout)比率。
这是用于存储 DeepseekV4Model 配置的配置类。它根据指定的参数实例化 Deepseek V4 模型,从而定义模型架构。使用默认值实例化配置将产生与 deepseek-ai/DeepSeek-V4-Flash-Base 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
V4 将全局 ALLOWED_LAYER_TYPES 缩小为它实际携带的三种注意力块类型和两种 MLP 块类型,并在标准长度/类型检查的基础上增加了验证。
DeepseekV4Model
class transformers.DeepseekV4Model
< 源码 >( config: DeepseekV4Config )
参数
- config (DeepseekV4Config) — 模型配置类,包含模型的所有参数。使用配置文件初始化模型不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法来加载模型权重。
裸 Deepseek V4 模型,输出原始隐藏状态,顶部没有任何特定的头部(head)。
该模型继承自 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] ) → MoeModelOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensorof shape(batch_size, sequence_length), optional) — 输入序列标记在词汇表中的索引。默认情况下会忽略填充(padding)。索引可以通过使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensorof shape(batch_size, sequence_length), optional) — 用于避免对填充标记索引执行注意力计算的掩码。掩码值选自[0, 1]:- 1 表示未被掩码的标记,
- 0 表示已被掩码的标记。
- position_ids (
torch.LongTensorof shape(batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]。 - past_key_values (
~cache_utils.Cache, optional) — 预计算的隐藏状态(自注意力块和交叉注意力块中的 key 和 values),可用于加速顺序解码。这通常由模型在解码的前一阶段返回的past_key_values组成,当use_cache=True或config.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.FloatTensorof shape(batch_size, sequence_length, hidden_size), optional) — 可选地,你可以选择直接传递嵌入表示,而不是传递input_ids。这在你想比模型内部嵌入查找矩阵更精细地控制如何将input_ids索引转换为相关向量时非常有用。 - use_cache (
bool, optional) — 如果设置为True,则返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。
返回
MoeModelOutputWithPast 或 tuple(torch.FloatTensor)
一个 MoeModelOutputWithPast 或一个 torch.FloatTensor 的元组(如果传入了 return_dict=False 或当 config.return_dict=False 时),根据配置(DeepseekV4Config)和输入,包含各种元素。
DeepseekV4Model 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
last_hidden_state (
torch.FloatTensor, 形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。past_key_values (
Cache,*可选*,当传入use_cache=True或config.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=Truein the cross-attention blocks) that can be used (seepast_key_valuesinput) 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=True且config.add_router_probs=True时,或config.output_router_probs=True时返回) — 形状为(batch_size, sequence_length, num_experts)的torch.FloatTensor元组(每一层一个)。由 MoE 路由器计算的原始路由器对数(softmax 后),这些术语用于计算专家混合模型的辅助损失。
DeepseekV4ForCausalLM
class transformers.DeepseekV4ForCausalLM
< 源码 >( 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 (DeepseekV4ForCausalLM) — 模型配置类,包含模型的所有参数。使用配置文件初始化模型不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法来加载模型权重。
用于因果语言建模的 Deepseek V4 模型。
该模型继承自 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] ) → MoeCausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensorof shape(batch_size, sequence_length), optional) — 输入序列标记在词汇表中的索引。默认情况下会忽略填充(padding)。索引可以通过使用 AutoTokenizer 获取。详情请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensorof shape(batch_size, sequence_length), optional) — 用于避免对填充标记索引执行注意力计算的掩码。掩码值选自[0, 1]:- 1 表示未被掩码的标记,
- 0 表示已被掩码的标记。
- position_ids (形状为
(batch_size, sequence_length)的torch.LongTensor,可选) — 每个输入序列 token 在位置嵌入中的位置索引。选择范围为[0, config.n_positions - 1]。 - past_key_values (
~cache_utils.Cache,可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。通常由模型在解码的上一阶段返回的past_key_values组成,当use_cache=True或config.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 (形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor,可选) — 可选地,你可以选择直接传递嵌入表示,而不是传递input_ids。如果你想比模型内部的嵌入查找矩阵更精细地控制如何将input_ids索引转换为相关的向量,这非常有用。 - labels (形状为
(batch_size, sequence_length)的torch.LongTensor,可选) — 用于计算掩码语言建模损失的标签。索引应在[0, ..., config.vocab_size]范围内或为 -100(请参阅input_ids文档字符串)。索引设置为-100的 token 将被忽略(掩码),损失仅针对标签在[0, ..., config.vocab_size]范围内的 token 计算。 - use_cache (
bool,可选) — 如果设置为True,则会返回past_key_values键值状态,并可用于加速解码(参见past_key_values)。 - output_router_logits (
bool,可选) — 是否返回所有路由器的 logits。它们对于计算路由器损失很有用,但在推理过程中不应返回。 - logits_to_keep (
Union[int, torch.Tensor],可选,默认为0) — 如果是int,则计算最后logits_to_keep个 token 的 logits。如果为0,则计算所有input_ids的 logits(特殊情况)。生成时仅需要最后一个 token 的 logits,仅为该 token 计算 logits 可以节省内存,这对于长序列或大词汇量的情况来说非常重要。如果是torch.Tensor,则必须是对应于要在序列长度维度上保留的索引的一维张量。这在使用打包张量格式(batch 和序列长度共享单个维度)时非常有用。
返回
MoeCausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一个 MoeCausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.return_dict=False 时),根据配置 (DeepseekV4Config) 和输入,包含各种元素。
DeepseekV4ForCausalLM 的 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=True且config.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=True或config.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 后的注意力权重,用于计算自注意力头中的加权平均值。
示例
>>> from transformers import AutoTokenizer, DeepseekV4ForCausalLM
>>> model = DeepseekV4ForCausalLM.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."