深度解读DeepSeek:从原理到模型(二)
基础术语
- 自然语言处理(Natural Language Processing,NLP)
- 监督微调 (Supervised Fine-Tuning,SFT)
- 强化学习(Reinforcement Learning,RL)
DeepSeek模型简介
DeepSeek当前主要包括三种模型满足不同场景的差异化诉求:
- DeepSeek-V3:NLP预训练基础模型。采用传统预训练 + 监督微调(SFT)模式,依赖人工标注数据。
- DeepSeek-R1:复杂逻辑任务的深度推理模型。以强化学习(RL)为核心,减少对标注数据的依赖,通过自我演化和冷启动技术降低成本。例如,R1-Zero 完全通过 RL 训练,无需 SFT
- DeepSeek-Distill:轻量化部署推理模型蒸馏版本
DeepSeek V3
从技术报告中看出,DeepSeek V3是经典的Transformer架构,比较亮眼的就是前馈网络使用的DeepSeek MoE架构、Attention机制使用MLA架构,其实这两个在DeepSeekV2模型已经被验证使用过。与DeepSeek-V2相比,V3额外引入了一种无辅助损失的负载均衡策略,用于DeepSeekMoE,以减轻因需要保证Expert负载均衡而导致的性能下降。
创新点:
- 架构设计:通过 MLA 和 DeepSeekMoE 架构实现高效的推理和低成本训练。
- 辅助无损策略:采用了辅助无损策略来实现负载均衡。
- 多 token 预测:通过多 token 预测训练目标提高数据效率和模型表现。
- FP8 混合精度训练:在极大规模模型上验证了 FP8 训练的有效性,通过支持 FP8 计算和存储,实现加速训练和减少 GPU 内存使用。
工作成果:
- 模型性能优秀:DeepSeek-V3 在多个基准测试中超越了其他开源模型,与领先的闭源模型相当。
- 训练成本较低:完整训练仅需要 2.788M H800 GPU 小时,训练成本相对较低。
- 良好的稳定性:在整个训练过程中,没有经历任何无法挽回的 loss spikes 或需要执行任何回滚操作。
DeepSeek R1
DeepSeek R1 的技术创新核心在于强化学习驱动的推理能力跃升与动态架构优化,通过自我进化、显式思维链和多模态迁移,突破了传统大模型的局限性。其开源生态与部署优化进一步推动技术普惠,尽管存在幻觉率上升等挑战,但为垂直领域的深度应用提供了新范式。未来,R1 与 V3 的互补将加速通用 AI 向专业化场景渗透。
主要贡献:
- 基于 DeepSeek-V3-Base,通过强化学习(RL)提升推理能力,而不使用任何SFT数据。
- 引入冷启动数据和多阶段训练流程,优化模型的可读性和性能。
为什么DeepSeekV3训练成本这么低?
-
MoE 架构:通过MoE稀疏激活机制大幅减少了计算量
-
MLA 机制:通过对KV做联合低秩压缩大幅减少KV Cache
-
FP8 训练:通过低精度计算减少了 GPU 内存使用和计算开销,技术报告中也提到FP8混合精度训练框架是首次在一个极大规模的模型上验证了其有效性,这一点也看出DeepSeek的Infra工程团队的底蕴
DeepSeek V3/R1核心技术
一、模型架构创新
混合专家模型(Mixture of Experts,MoE)
在LLM的上下文中,MoE通常指的是用MoE层替换Transformer模型中的前馈神经网络(FFN)层,如下图所示:
传统的MoE基本两部分组成:Gating门控网络、稀疏MoE层:
- 稀疏 MoE 层: 这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干“专家”(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。
- 门控网络或路由: 这个部分用于决定哪些Token被发送到哪个专家。Token的路由方式是 MoE 使用中的一个关键点,因为路由器由学习的参数组成,并且与网络的其他部分一同进行预训练。
DeepSeekMoE的插图。子图(a)展示了采用传统前2路由策略的MoE层。子图(b)说明了细粒度专家细分策略。随后,子图(c)展示了共享专家隔离策略的集成,构成了完整的DeepSeekMoE架构。值得注意的是,在这三种架构中,专家参数的数量和计算成本保持不变。
和传统的MoE架构相比,DeepSeekMoE使用更细粒度的专家,并将一些专家隔离为共享专家,减少专家间的知识冗余。模型总参数量为6710亿,但每个Token仅激活370亿参数。这种设计通过动态路由机制将任务分配给不同的专家网络(如8个路由专家),既保持了模型容量,又大幅减少了实际计算量。
门控网络路由策略:TopK表示第t个Token和所有路由专家计算出的亲和力分数中K个最高分数的集合。在DeepSeekV3中,使用sigmoid函数计算亲和力分数,然后在所有选择的亲和力分数中应用归一化来生成门控值。
无辅助损失负载均衡策略:传统MoE模型需通过辅助损失函数强制均衡专家负载,但DeepSeek V3通过自研的负载均衡策略,无需额外损失函数即可优化专家利用率,减少了训练复杂度并提升了效率。
通常在MoE模型的训练过程中,不同专家因为路由策略的因素会导致接收的训练数据分布不均,比如所有的Token都被发送到只有少数几个受欢迎的专家,那么有些专家就可能没有被训练到。业界通用的解决方案就是引入辅助损失,但是,有时候过大的辅助损失会损害模型性能。为了在负载均衡和模型性能之间取得更好的平衡,DeepSeek开创了一种无辅助损失的负载均衡策略:
为每个专家引入一个偏置项bi,并将其添加到相应的亲和力得分Si,t中,以确定top-K路由:
在这种设计中,偏置项仅用于路由选择,而门控值(用于与 FFN 输出相乘)仍基于原始相关度分数Si,t计算。训练过程中,系统会实时监控每个训练步骤中所有批次的专家负载分布。在每个步骤结束时,对于负载过高的专家,其偏置项会减少 𝛾;对于负载不足的专家,其偏置项会增加 𝛾 ,其中 𝛾是控制偏置更新速率的超参数。通过这种动态调整机制,DeepSeek-V3 在训练过程中实现了专家负载的均衡分布,其性能优于传统仅依靠辅助损失来实现负载均衡的模型。
多头潜在注意力(Multi-Head Latent Attention,MLA)
大模型推理过程KV Cache机制一般是限制推理效率的一大瓶颈,而标准的Transformer 架构里面的多头自注意力MHA架构会产出非常多的KV Cache,为了减少对应的KV Cache业界实践过很多方案,例如PagedAttention、多查询注意力(MQA)和分组查询注意力(GQA),但是性能相比原生的MHA有一定差距。DeepSeek-V2,提出一种创新的注意力机制:多头潜在注意力(MLA),取代传统的多头自注意力(MHA)。
MLA通过低秩联合压缩键值(KV)缓存,显著减少了推理阶段的显存占用和计算量。同时,MLA在训练时保持了较高的计算效率,避免了传统注意力机制中KV缓存过大的问题。
低秩矩阵是指其秩(rank)远小于其行数和列数的矩阵。假设我们有一个4×5的矩阵A,这个矩阵可以通过两个更小的矩阵的乘积来表示,比如一个4×2的矩阵B和一个2×5的矩阵C。这意味着原始矩阵A的信息可以通过这两个较小的矩阵来捕捉,表明A是一个低秩矩阵。
- 标准多头注意力:
- 低阶键值联合压缩:
多Token预测( Multi-Token Prediction, ,MTP)
通过预测多个未来Token而非单一目标,提高了模型在大多数评估基准上的性能,而且MTP模块还可以用于推理加速。
具体来说,MTP实现使用 D 个顺序模块来预测 D 个额外的令牌。
第 k个MTP模块由一个共享向量层Emb(⋅)、一个共享输出头OutHead(⋅),一个 Transformer 块TRM(⋅) 和一个维度投影矩阵组成。
二、训练推理优化
HAI-LLM 训练框架
DeepSeekV3 采用分布式训练的高效并行方案。 基于自研的HAI-LLM框架,综合运用了四种并行策略:
- ZeRO数据并行:减少显存冗余,支持大规模模型训练。
- 流水线并行(16路)与专家并行(64路):通过DualPipe技术重叠计算与通信,减少了流水线中的“气泡时间”,提升GPU利用率。
- 张量切片
- 序列并行:进一步优化显存分配和计算效率。
DeepSeek-V3在一个配备了2048个NVIDIA H800 GPU的集群上进行训练,使用的是自研的HAI-LLM框架。这种并行能力支持不同工作负载的需求,可以支持数万亿规模的超大模型并扩展到数千个 GPU,同时还自研了一些配套的高性能算子haiscale,可以帮助 HAI-LLM 极大优化大模型训练的显存效率和计算效率。
FP8混合精度训练
在激活和权重中引入FP8量化(如128维分组量化),结合TensorCore的矩阵乘法加速,显著降低了训练过程中的计算量和通信开销,同时保持了模型精度。
FP8训练是指使用8位浮点数进行混合精度训练。举个具体的例子:想象你要教AI认猫。
传统方法:给AI看超高清照片(高精度),每张照片占手机1GB空间,训练慢且费电。
DeepSeek的FP8:把照片分成小块(分块量化),猫耳朵用稍高精度,背景草丛用低精度压缩。关键特征(胡须、眼睛)保持清晰,其他部分适当模糊化。结果:训练速度提升40%,存储空间减少30%,但AI依然能准确认出不同品种的猫。
技术创新的核心秘诀:
- 灵活调节精度:像手机相机的"智能省电模式",重要场景自动高清,普通场景适度模糊。
- 分段优化:像整理行李箱,把衣服卷成小卷分开放(分块处理),比胡乱塞满更省空间。
- 软硬件配合:专门设计了"快写笔"(DeepGEMM库),让缩印书写和正常书写一样流畅。
预填充(Prefilling)与解码(Decoding)分离
- 预填充(Prefilling)技术本质:
把用户输入的整段文字(比如"中国的首都是_“)一次性分析完,生成所有文字对应的"概率地图”。相当于把用户输入的提示文本一次性处理完,提前计算好所有文字之间的关联概率 - 解码(Decoding)技术本质
根据预填充的"概率地图",像玩文字接龙一样逐个生成后续文字。通过温度系数控制随机性,温度高就更天马行空,温度低就保守稳妥
再举个现实例子:假设你要用AI续写《西游记》新章节:
预填充时:AI用0.5秒通读你写的开头"孙悟空掏出手机,发现唐僧发了10条微信语音…",分析师徒四人此刻该有什么反应。
解码时:AI开始逐字创作:“他/她/它(概率计算)…点开(概率计算)…第一条(概率计算)…”,每个字都基于前文动态调整。
(1)Prefill 阶段
这个阶段简单说就是并行处理用户的Prompt,将其转为KV Cache。
预填充阶段的最小部署单元由4个节点组成,每个节点配备32个GPU。注意力部分采用4路张量并行(TP4)和序列并行(SP),并结合8路数据并行(DP8)。其较小的TP规模(4路)限制了TP通信的开销。对于MoE部分,我们使用32路专家并行(EP32)
(2) Decoder 阶段
这个阶段就是做自回归的每个Token的输出。
解码阶段的最小部署单元由40个节点和320个GPU组成。注意力部分采用TP4和SP,结合DP80,而MoE部分使用EP320。对于MoE部分,每个GPU只承载一个专家,64个GPU负责承载冗余专家和共享专家
参考:
https://youcans.blog.csdn.net/article/details/145391398
https://blog.csdn.net/EnjoyEDU/article/details/145450995