
本文作者kaiyuan图解DeepSeek V4详细计算流程解析想深耕AI Infra领域欢迎访问InfraTech库内容涵盖大模型基础、PyTorch/vLLM/SGLang框架入门、性能加速等核心方向配套50知识干货及适合初学者的notebook练习:https://github.com/CalvinXKY/InfraTech1 整体架构DeepSeek V4 Pro模型整体结构如下所示参数量达到1.6T激活参数为49B。支持1M上下文推理是纯语言大模型LLM。高清图地址https://github.com/CalvinXKY/InfraTech/tree/main/models/deepseek_v4MoE模块有两种类型一种是常规MoE另一种是hash-MoE。Attention模块有三种类型CSACompressed Sparse Attention带index的压缩注意力压缩比4:1。HCAHeavily Compressed Attention重压缩注意力压缩比128:1。SWASliding Window Attention滑动窗口注意力。模型一共有61层前3层为hash MoE搭配的Attention分别是HCA、HCA、CSA。 Attention与MoE之间的连接方式采用mHC。与residual连接方式相比实现上多了前处理hc_pre和后处理hc_post。从embedding到前三层计算后58层为普通MoE。HCA与CSA交替使用最后一层为SWA。具体层数配置可参考config[1]。 模型最后接了一层MTPMulti-Token Prediction用于预测下一个token。从后58层计算到MTP2 CSA模块CSACompressed Sparse Attention是一种压缩注意力机制通过压缩注意力矩阵来减少计算量。主要计算逻辑如下图所示。相比传统注意力机制CSA的KV通道有以下特点第一路KV通道由sliding window attention组成计算特点是窗口滑动每个token只与窗口内的token计算注意力。 因此KV cache只会存储window_size大小的KV值超出时会循环覆盖。 以Decoder阶段为例(后文对模型的介绍都以Decoder阶段为例即sequence_length1batch_size1)数据输入shape[1,hidden_size]经过KV下采样后KV cache的shape[1,head_dim] 经由RoPE和量化计算后得到KV值并存储到Window KV cache中。head_dim按rope_head_dim长度进行RoPE计算剩余部分进行量化运算。第二路KV通道是压缩通道输入状态值经过Compressor模块后会更新压缩KV cache。压缩模块每次输出T个压缩KV值。 T个压缩KV token经过index模块筛选保留topK个压缩token。该通道的shape变化为[1,hidden_size]-[T,head_dim]-[topK,head_dim]最后两路KV通道的KV值经过Concat模块拼接得到最终KV值。KV值长度window_sizetopK其中window_size是滑动窗口大小topK是压缩通道输出的压缩token数量。Q通道计算与MLA的计算逻辑保持一致。2.1 Token level Compressor (C4A)Token level CompressorC4A是一种压缩token的模块通过压缩token来减少计算量。计算逻辑是当KV cache中的值达到压缩数量时就进行压缩计算。C4A设置为每收集到4个token压缩一次当数量未达到4个时就继续收集不更新KV cache。具体计算过程输入值进入C4A后线性投影得到KV状态值和score状态值当状态值累积数量为4时进行压缩计算否则保存state状态后退出。压缩计算是一次softmax以及乘法计算最后在序列维度进行求和运算尺寸变化为:[1,hidden_size]-[1,2*head_dim]-[8,head_dim]-[1,head_dim]。尺寸变化采用了交替轮转方式即在state压缩过程中state存储数量为压缩比例的2倍即2×4。 kv_state/score_state交替写入与数据拼接方式如下为了方便理解可以将存储state长度为8分为前4个pre state和后4个cur state。每个状态值更新后都写入后4个位置并滚动刷新。数量达到4个时进行压缩计算。取值方式是将pre state的前半段与cur state的后半段拼接得到8个state值最后一维保持head_dim长度。如果state用一个整体表示即定义state尺寸为[2* ratio, 2 * head_dim], 拼接代码如下kv_statetorch.cat([kv_state[:bsz,:ratio,:d],kv_state[:bsz,ratio:,d:]],dim1)每次压缩后cur state会覆盖pre state同样采用滚动刷新kv_state[:bsz,:ratio]kv_state[:bsz,ratio:]score_state[:bsz,:ratio]score_state[:bsz,ratio:]2.2 Index模块Index模块负责从主通道压缩后的token中选择topK个token。与DSA的主要区别是KV值计算也采用C4A压缩器。 压缩比例也为4:1。最后输出topK个压缩token的index。2.3 其他细节Attention计算还有几个值得注意的细节引入了sink值全部采用了MQA模式MQA之后接了一个逆位置编码计算de-rotation/inverse。O运算有上、下采样两次运算。3 HCA模块HCA模块是一种重压缩注意力机制通过重压缩注意力矩阵减少计算量。与CSA的主要区别是HCA的压缩通道没有Index模块压缩计算方式也不同。3.1 Token level CompressorC128A压缩模块的压缩比例为128:1state更新不采用交替轮转而是直接拼接。累积数量达到128时进行压缩计算。4 MoE模块MoE模块在DSv3基础上进行了改进路由有两种方式一种是传统路由方式另一种是hash路由方式。路由计算中的softmax被替换为softplussqrt。hash路由方式的计算逻辑采用直接映射即tid2eidtoken id映射到expert id也就是每个token对应固定expert。结构上的主要特点大致如此后续再详细分析代码和更深入的细节。文中的架构图已上传到InfraTech库中[2]有需要自取https://github.com/CalvinXKY/InfraTech/tree/main/models/deepseek_v4参考:[1]https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main[2]https://github.com/CalvinXKY/InfraTech/tree/main/models/deepseek_v4InfraTech申明未经允许不得转载