DeepseekV3.2 拆解

103 阅读9分钟
  • DeepseekV3.2, 20251201

    Summary

    1. 高效:Deepseek Sparse Attention (DSA) + FP8 精度 + ReLU 优化 =》
      不要试图彻底消灭瓶颈,要把瓶颈挪到更容易被优化的位置,分层结构让你可以替换任意一个组件(特别适合可控的自研 Agent 模型)
      需要一个“索引器”,而且都可以使用类似流程:
      Step 1:用高质量规则/teacher 模型生成密集排序
      Step 2:用 KL 蒸馏训练“轻量索引器”
      Step 3:上线稀疏推理(减少 Token / 减少动作空间)
    2. 稳定:无偏 KL 估计 + 选择性离策略掩码 + MoE 稳定性机制(保持路由/采样)=》
      任何需要多步推理、多工具调用、Agent 规划的工程系统,都应该借鉴这种“序列掩码 + 策略相似过滤”机制来避免策略崩坏。
    3. 功能:冷启动 SFT + 大规模智能体任务合成管线 =》
      智能体不是“靠海量数据喂出来”,而是靠“结构化任务体系”稳态训练出来。
    • 背景,开源与闭源差距在拉大,闭源 GPT5, Gemini3 领先。为了缩小差距需要投入更大算力,但后训练资源超过了预训练的 10%,需要提升训练效率
    • 聚焦点
      • 架构效率瓶颈,长序列的注意力机制效率极低
      • 训练资源瓶颈,对齐阶段需要海量资源来防止策略不稳定和灾难性遗忘,后训练的计算投入严重不足
      • 智能体能力瓶颈,开源 Agent 的泛化能力和指令遵循能力严重不足,需要结构化的训练数据合成和对智能体内在思维过程的稳健管理
    • 创新点
      • Deepseek Sparse Attention DSA:将计算复杂度从 O(L2)\mathcal{O}(L^2)(标准自注意力计算 QKT\mathcal{Q} \mathcal{K}^T) 降低到 O(Lk)\mathcal{O}(Lk),L 为序列长度,K 为局部窗口大小。不是对密集注意力的完全理论替代,而是一个复杂的过滤层,将密集计算转化为稀疏问题,O(c1L2)\mathcal{O}(c_1 \cdot L^2) 代表先建立索引,仍然是基于内容的搜索以识别 top-k 个相关键,保留了标准自注意力计算的依赖性,O(c2Lk)\mathcal{O}(c_2 \cdot Lk) 代表稀疏注意力的计算成本 CostO(c1L2)+O(c2Lk)\text{Cost} \approx \mathcal{O}(c_1 \cdot L^2) + \mathcal{O}(c_2 \cdot Lk)

        机制 (Mechanism)计算复杂度 (大 O 表示)资源增长特性 (Resource Growth Profile)工程启示 (Engineering Implication)
        标准密集注意力 (Standard Dense Attention)O(L2)\mathcal{O}(L^2)二次 (Quadratic)对于 L64KL \ge 64K 个 token,成本和内存是令人望而却步的。
        DSA 核心注意力 (DSA Core Attention)O(Lk)\mathcal{O}(Lk)k=2048k=2048线性 (关于 L) (Linear (in L))训练和解码中效率增益的主要来源。
        DSA 闪电索引器搜索 (DSA Lightning Indexer Search)O(c1L2)\mathcal{O}(c_1 \cdot L^2)(系数 c1 极小)二次(隐藏)隔离了不可避免的二次搜索,通过硬件优化最小化 c1
        • 核心组件
          • 闪电索引器 lightning indexer:通过计算查询 token ht\mathbf{h}_t 与前序 token hs\mathbf{h}_s 之间的索引分数来决定选择哪些 token 进行注意力计算, It,s=j=1HIwt,jIReLU(qt,jIksI)I_{t,s} = \sum_{j=1}^{H^I} w_{t,j}^I \cdot \text{ReLU}({\mathbf{q}}_{t,j}^I \cdot {\mathbf{k}}_s^I) ,其中 HIH^I 是索引头的数量,q 和 k 代表专门用于索引器的查询和键向量,ReLU激活函数的选择是为了提升吞吐量。索引器使用FP8精度,计算效率极高。

          • 细粒度 Token 选择机制:基于索引分数,只检索top-k个key-value条目,然后计算注意力输出,ut=Attn(ht,{csIt,sTop-k(It,:)}){\mathbf{u}}_t = \text{Attn}({\mathbf{h}}_t, \{{\mathbf{c}}_s | I_{t,s} \in \text{Top-k}(I_{t,:})\})

            工程设计至关重要,必须在可忽略的 wall clock time 内执行 O(L2)\mathcal{O}(L^2) 搜索

            • ReLU 激活函数:明确选择 整流线性单元 (ReLU) 是出于“吞吐量考虑”,它的计算简单性(一个简单的最大值操作)优于更复杂、更慢的激活函数(如 GELU 或 SwiGLU),从而最小化了与二次索引器计算相关的延迟
            • FP8 精度:这种低精度格式显著减少了内存占用和数据传输所需的带宽,它利用了针对低精度算术优化的专用硬件加速器(如 NVIDIA Tensor Cores),最大化了速度并最小化了 O(L2)\mathcal{O}(L^2) 操作的常数因子 c1c_1
        • 预训练策略
          • 密集预热阶段 Dense Warm-up Stage:冻结主模型参数,仅训练索引器1000步(21亿tokens),通过KL散度对齐索引器与主注意力分布,旨在训练索引器。目标是只是蒸馏,强制索引器学习高质量、预训练密集注意力模块的优先级模式和分布,通过 KL 散度损失来实现,这个损失衡量密集注意力分布 pt,:\mathcal p_{t,:} 与索引器预测分布之间的差异:LI=tDKL(pt,:Softmax(It,:))\mathcal{L}^I = \sum_t \mathbb{D}_{\text{KL}}(p_{t,:} \parallel \text{Softmax}(I_{t,:}))
          • 稀疏训练阶段 Sparse Training Stage:在热身之后,稀疏机制被激活(选择 Top-k=2048 键值对),并且主模型骨干被解冻。引入token选择机制,训练15000步(943.7亿tokens),学习率 7.3×1067.3 \times 10^{-6},每个查询选择2048个key-value tokens
      • 可扩展的强化学习框架:采用广义奖励策略优化 GRPO generalized reward policy optimization 算法 GRPO 被设计为近端策略优化(PPO)的替代方案,GRPO 的一个关键工程优势是消除了 PPO 所需的值函数(或评论家网络)。相反,GRPO 通过对“一组”蒙特卡洛采样完成的奖励进行标准化来估计优势函数。这种简化降低了训练管线的复杂度,并节省了原本用于训练和维护评论家网络的大量计算资源

        • 无偏 KL 估计: 高规模、离策略(off-policy)强化学习中的一个重大挑战是,当前策略 πθ\pi_\theta 偏离生成训练数据的策略 πold/ref\pi_{\text{old/ref}} 较远时,如何维持稳定的优化。传统K3估计器在πθπref\pi_\theta \ll \pi_{\text{ref}}时会产生有偏梯度。 新方法使用重要性采样比修正:DKL(πθ(oi,t)πref(oi,t))=πθ(oi,tq,oi,<t)πold(oi,tq,oi,<t)(πref(oi,tq,oi,<t)πθ(oi,tq,oi,<t)logπref(oi,tq,oi,<t)πθ(oi,tq,oi,<t)1)\mathbb{D}_{\text{KL}}(\pi_\theta(o_{i,t}) \parallel \pi_{\text{ref}}(o_{i,t})) = \frac{\pi_\theta(o_{i,t}|q,o_{i,<t})}{\pi_{\text{old}}(o_{i,t}|q,o_{i,<t})} \left(\frac{\pi_{\text{ref}}(o_{i,t}|q,o_{i,<t})}{\pi_\theta(o_{i,t}|q,o_{i,<t})}-\log\frac{\pi_{\text{ref}}(o_{i,t}|q,o_{i,<t})}{\pi_\theta(o_{i,t}|q,o_{i,<t})}-1\right) 比率 πθ(oi,tq,oi,<t)πold(oi,tq,oi,<t)\frac{\pi_\theta(o_{i,t}|q,o_{i,<t})}{\pi_{\text{old}}(o_{i,t}|q,o_{i,<t})} 较正规了使用离策略数据引起的分布漂移,最大化了目标函数的稳定性,这在对齐训练的高方差阶段(通常会发生大规模策略更新)至关重要。
        • 离策略序列掩码 off-policy sequence mask: 离策略训练方法虽然在数据重用方面很高效,但当高度发散、低质量的样本受到大的负优势惩罚时,它们存在不稳定的风险。为了解决离策略数据中高方差的问题,引入了序列掩码机制,只计算与当前策略相似的token位置的奖励和KL散度,减少不相关token的影响。 Mi,t={0if A^i,t<0 and 1oit=1oilogπold(oi,tq,oi,<t)πθ(oi,tq,oi,<t)>δ1otherwiseM_{i,t} = \begin{cases} 0 & \text{if } \widehat{A}_{i,t} < 0 \text{ and } \frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\log\frac{\pi_{\text{old}}(o_{i,t}|q,o_{i,<t})}{\pi_{\theta}(o_{i,t}|q,o_{i,<t})} > \delta \\ 1 & \text{otherwise} \end{cases} 它防止策略被源自与当前策略过于不同的样本的负面惩罚所破坏或抑制,从而确保梯度更新仅应用于状态-动作空间中相关且稳定的部分,最终提高鲁棒性和泛化能力。
        • MoE 架构稳定性 MoE 模型在 RL 微调过程中特别容易遭受灾难性遗忘或中断,因为策略更新可能会无意中破坏单个专家内部持有的专业知识。为了应对这一问题,GRPO 框架中引入了两个特定的稳定约束:
          • 保持路由 Keep Routing:对于MoE模型,保留推理时的专家路由路径,在训练时强制使用相同路由,避免参数子空间突变。这种限制阻止了训练过程激进地改变门控网络的路由决策,从而减轻了对专业专家知识的灾难性遗忘
          • 保持采样掩码 Keep Sampling Mask:保留top-p/top-k采样时的截断掩码,确保新旧策略共享相同的动作子空间。这确保了两个策略在相同的定义动作子空间内操作,从而促进了输出生成的一致性和对预期指令格式的遵守。
      • 大规模智能体任务合成管线 旨在将复杂的推理策略与工具使用无缝集成

        • 思考上下文管理
          • 目标转变触发(Goal Shift Trigger): 历史推理内容仅在引入新的用户消息时被丢弃。新的用户查询通常意味着上下文或任务目标的转变,需要重新开始内部推理轨迹。
          • 工具反馈的连续性(Continuity on Tool Feedback): 如果对话轮次仅涉及添加工具相关消息或工具输出(例如,代码执行的观察结果),则模型的内部推理轨迹会被明确保留。这至关重要,因为智能体仅仅是接收反馈以继续其 现有 的推理路线,从而避免了重新阅读和重新处理其先前的内部想法的需要。
          • 永久保留(Permanent Retention): 关键是,工具调用历史和结果在上下文中被保留,无论推理轨迹是否被保留或删除
        • 冷启动机制:为了解决智能体泛化能力差的瓶颈,训练过程包括一个“冷启动”阶段,即在密集的 GRPO 训练开始 之前,使用精心设计的提示进行监督微调(SFT)。这个 SFT 阶段将推理轨迹与工具使用统一起来,教会模型一个可靠的、结构化的思维过程(例如,“观察-思考-行动”循环)。具体的系统提示被精心设计并针对不同的任务类型进行定制,有效地促使模型执行由其内部审议指导的多个连续工具调用。这一结构化基础确保了当模型进入可扩展的 RL 阶段时,它已具备高度的指令遵循能力和输出连贯性,这通常是仅依靠原始 RL 进行微调的模型的弱点。
        • 大规模智能体任务合成 生成的训练数据的绝对规模和多样性对于强大的智能体泛化能力至关重要。任务合成管线通过专门的生成方法创建环境和复杂的提示:
          • 代码智能体数据: 提示和环境直接从真实世界环境中提取,以保持高保真度和真实性
          • 搜索智能体数据: 提示是根据真实世界搜索环境中观察到的逻辑合成的
          • 通用智能体数据: 提示和环境完全从合成设置中合成,最大化推理任务的广度和多样性