⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 zhuanlan.zhihu.com/p/21267744516 「榴莲酥」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一句话:大模型界的拼夕夕,模型本身确实也有创新点,比如MLA、纯RL预训练、FP8混合精度,但更重要的是让我们看到了开源对闭源的生态挑战、中国对美国主导的有效追赶、极致工程优化的显著受益。

DeepSeek-V3

https://github.com/deepseek-ai/DeepSeek-V3

DeepSeekV3模型结构

基础架构

1. MoE结构:

混合专家模型:三个臭皮匠胜于诸葛亮的思想,基本上目前各大模型都在用。简单来说就是包含多个“专家”网络,其中每个专家都是一个相对独立的神经网络,都有各自的参数,每个擅长于处理特定类型的输入或者在数据的某个子空间上表现良好。通过门控网络(Gating Network)调整权重,把不同的输入按照概率路由给不同的专家网络。各个专家网络对分配到的输入进行处理,产生各自的输出,最后根据门控网络分配的权重,将这些专家网络的输出进行组合,得到最终的输出结果。

优点:可以在不显著增加模型整体参数量的情况下,利用多个专家网络的并行处理能力来处理不同类型的输入模式,比如这里DeepSeekV3一共671B参数,实际每个token推理激活的37B的参数就行。

DeepSeekMoE: 使用了更细粒度的专家,并将一些专家隔离为共享专家,这里的Topk就是由第 位 token 和所有路由专家计算出的Affinity得分中最高的 个分组成的集合。

2. MLA (Multi-head Latent Attention) 多层潜注意力架构:

注意力机制:神经网络中的一种重要技术,它允许模型聚焦于输入数据的不同部分。在传统的注意力机制中,模型会计算输入元素之间的关联权重,然后根据这些权重对输入进行加权组合。

多头Multi-head:每个注意力头可以学习到输入数据不同方面的表示。例如,在处理自然语言处理任务中的一个句子时,一个注意力头可能聚焦于句子中的语法结构,另一个可能聚焦于语义信息,还有一个可能关注于词汇的情感倾向等。这些不同的注意力头并行工作,最后将它们的结果进行组合。

MLA是DeepSeek这里新提出的,核心是对注意力 key 和 value 进行低秩联合压缩,这样在生成过程中只需要缓存映射到潜空间的这两个蓝框向量,从而显著减少键值 (KV) 缓存。

3. 无辅助损失的负载均衡 auxiliary-loss-free strategy:

传统:对于 MoE 模型,不平衡的专家负载会导致路由崩溃,并在具有专家并行的场景中降低计算效率。传统解决方案通常依靠辅助损失来避免负载不平衡,但是过大的辅助损失会损害模型性能。

无辅助损失的负载平衡策略:目标是在负载平衡和模型性能之间取得更好的平衡,这里的方法是为每个专家引入一个偏差项 ,并将其添加到相应的affinity分数 , 中以确定topK 的路由:

注意这里的偏差项仅用于路由,与 FFN 输出相乘的门控值仍然来自原始affinity得分 , 。在训练期间持续监控每个训练step对应的整个batch上的专家负载。在step结束时,如果其对应的专家超载,则将偏差项减少 ,如果其对应的专家负载不足,则将偏差项增加 ( 是一个称为偏差更新速度的超参数)。通过动态调整,DeepSeek-V3 在训练期间保持专家负载平衡,并且比通过纯辅助损失来鼓励负载平衡的模型能获得更好的性能。

节点限制路由Node-Limited Routing:使用受限路由机制来限制训练期间的通信成本,确保每个 token 将被发送到最多 个节点,这些节点是根据分布在每个节点上的专家的最高 / 的affinity得分之和来选择的。这样 MoE 训练框架几乎可以实现完全的计算-通信重叠。

4. MTP (Multi-Token prediction)多token预测:

传统:Next-Token-Prediciton方式,每次预测未来的一个token(文本中的基本单元)。

实现:MTP方法最早时 Gloeckle 提出,使用独立输出头并行预测多个连续的token,但是DeepSeek这里按顺序预测token并在每个depth都保留其完整的因果链。

优点:一方面MTP 目标使训练信号密集化并可能提高数据效率,另一方面MTP 可以让模型预先规划,保留token之间的依赖关系,从而更好地预测接下来的token。

高效训练

5. DualPipe跨节点通信:

目标:实现高效的流水线并行。

方法:用更少的流水线bubbles,并通过计算通信重叠隐藏了训练期间的大部分通信,也就是将计算和通信阶段重叠在前向和后向过程中,从而解决了跨节点专家并行性带来的沉重通信开销。这种重叠的意义在于随着模型进一步扩大,只要保持恒定的计算与通信比率,仍然可以在节点之间使用细粒度experts,同时实现接近零的全对全通信开销。数据传输和通信同时进行,数据传输提速50%,通信减少20%。

工程优化:开发了高效的跨节点all-to-all通信内核,以充分利用 IB 和 NVLink 带宽并节省专用于通信的流多处理器 (SM)。并在训练过程中精心优化内存占用,最后是在不使用昂贵的张量并行性 (TP) 的情况下训练出来的 DeepSeek-V3。

6. FP8 混合精度训练框架

数据精度:FP8(Floating - Point 8 - bit)是一种8位的浮点数表示格式,与传统的FP32和FP16相比,它使用更少的位数来表示数字,在表示范围和精度上较差,但是可以减少数据存储和计算的开销。

混合精度训练:在FP8混合精度训练中,通常会将FP8与其他精度(如FP32)的数据结合使用。因为FP8的精度相对较低,在训练过程中可能会导致一定程度的精度损失,从而影响模型的性能。为了应对这个问题,可以通过精度损失管理或者算法适配来达成效率&效果的均衡,如在关键的计算步骤(如梯度更新)中使用更高精度的数据(如FP32)进行计算,以确保模型的收敛性和准确性。

实现:整体框架如图所示,首先,为了加速模型训练,大多数核心计算内核,即通用矩阵乘法GEMM 操作,都是以 FP8 精度实现的。这些 GEMM 操作接受 FP8 张量作为输入,并以 BF16 或 FP32 产生输出。与线性算子相关的所有三个 GEMM,即 Fprop(前向传递)、Dgrad(激活后向传递)和 Wgrad(权重后向传递),都在 FP8 中执行。与原始 BF16 方法相比,这种设计理论上使计算速度翻倍。此外,FP8 Wgrad GEMM 允许将激活存储在 FP8 中以用于后向传递。这显著减少了内存消耗。同时为以下组件保持原始精度 BF16 或 FP32:嵌入模块、输出头、MoE 门控模块、规范化算子和注意算子。

效果:与 BF16 baseline相比,这里 FP8 训练模型的相对损失误差始终保持在 0.25% 以下,这一水平完全在训练随机性的可接受范围内。

其他细节

数据:Pretrain使用了14.8T token

128k的推理窗口长度:对 DeepSeek-V3 进行了两阶段的上下文长度扩展。在第一阶段,最大上下文长度扩展到 32K,在第二阶段,进一步扩展到 128K

SFT:用DeepSeek-R1 模型生成数据,虽然 R1 生成的数据表现出很强的准确性,但它存在过度思考、格式不佳和篇幅过长等问题。所以目标是要平衡 R1 生成的推理数据的高准确性和常规格式的推理数据的清晰度和简洁性。最后生成了1.5M的涵盖各个领域的数据。

RL:基于规则的奖励模型 (RM) + 基于模型的 RM

  • 基于规则的 RM:对于可以使用特定规则验证的问题,采用基于规则的奖励系统来确定反馈。例如,某些数学问题具有确定性结果,要求模型在指定的格式提供最终答案,用规则来验证正确性。对于 LeetCode 问题,使用编译器根据测试用例生成反馈。
  • 基于模型的 RM:对于具有自由形式真实答案的问题,依靠奖励模型来确定响应是否与预期的真实答案相匹配。对于没有明确真实答案的问题,例如涉及创意写作的问题,奖励模型的任务是根据问题和相应的答案作为输入提供反馈。奖励模型是从 DeepSeek-V3 SFT 训练的,为了提高其可靠性,还构建了偏好数据,不仅提供最终奖励,还包括导致奖励的思路链。

成本统计

竞品的效果对比

以相对低的训练成本跻身第一梯队效果

DeepSeek-R1

https://github.com/deepseek-ai/DeepSeek-R1

模型定位

对标OpenAI-o1模型,Deepseek-R1 通过大规模强化学习 (RL) 训练,无需监督微调 (SFT) 作为初步步骤,展示了卓越的推理能力。

通过纯 RL进行自我进化,模型能够自然而然地出现许多强大而有趣的推理行为。然而,之前的Deepseek-R1-zero遇到了可读性差和语言混杂等挑战。为了解决这些问题并进一步提高推理性能,DeekSeek-R1提出了在 RL 之前结合多阶段训练和冷启动数据。最终DeepSeek-R1 在推理任务上实现了与 OpenAI-o1-1217 相当的性能。同时开源了 DeepSeek-R1-Zero、DeepSeek-R1 和基于 Qwen 和 Llama 从 DeepSeek-R1 提炼出的六个密集模型(1.5B、7B、8B、14B、32B、70B)。

openAI-o1模型

OpenAI 的 o1 系列模型首次通过引入思维链推理 CoT ,通过推理时间的延长提升逻辑推理的效果,达成了 inference-time scaling。这种方法在数学、编码和科学推理等各种推理任务中取得了显着的改进,模型通过思维链进行推理、反思,一步步得出最后的结论,但是作为取舍需要较长的推理耗时。

纯RL训练步骤:

Deepseek-R1 使用少量冷启动数据 + 多阶段训练流程:

首先收集数千个冷启动数据来微调 DeepSeek-V3-Base 模型;

然后,执行类似 DeepSeek-R1Zero 的面向推理的 RL,以下是 RL 中涉及到的一些基本原理:

Group Relative Policy Optimization (GRPO群体相对策略优化):是一种在强化学习领域中的优化策略,与传统的仅考虑个体的策略优化不同,GRPO将多个智能体(或策略)视为一个群体。在这个群体中,每个智能体的策略评估和优化不是孤立进行的,而是相对其他智能体的策略进行。

最终的 (advantage),通过对应输出的一组奖励 reward group { 1, 2, . . . , } 计算:

Reward modeling奖励模型:奖励是训练信号的来源,决定了强化学习的优化方向。DeepSeek-R1-Zero 采用了基于规则的奖励系统,主要包含两种类型的奖励:

  • 准确度奖励:评估响应是否正确。例如,对于具有确定性结果的数学问题,要求模型以指定的格式(例如,在框内)提供最终答案,从而实现可靠的基于规则的正确性验证。同样,对于 LeetCode 问题,可以使用编译器根据预定义的测试用例生成反馈。
  • 格式奖励:强制模型将其思考过程置于“”和“”标签之间。
  • 在 DeepSeek-R1-Zero 训练中没有用结果或过程神经奖励模型。

训练:设计了一个简单的模板,指导基础模型遵循指定的指令。如图所示,此模板要求 DeepSeek-R1-Zero 首先生成一个推理过程,然后给出最终答案。

在 RL 过程接近收敛后,通过对 RL 的 ckpt 进行拒绝采样 (rejection sample) 创建新的 SFT 数据:

  • 在上一阶段,只用了那些可以使用基于规则的奖励进行评估的数据。但是,在此阶段,合并较多其他数据来扩展数据集,其中一些数据使用生成奖励模型,将基本事实和模型预测输入 DeepSeek-V3 进行判断。
  • 由于模型输出有时比较混乱,难以阅读,这里过滤掉了混合语言、长段落和代码块的思路链。对于每个prompt都抽取多个响应并仅保留正确的响应。最红一共收集了大约 60 万个与推理相关的训练样本。
  • 对于非推理数据,例如写作、事实问答、自我认知和翻译,采用 DeepSeek-V3 的 pipeline 并重用 DeepSeek-V3 的 SFT 数据集。总共收集了大约 20 万个与推理无关的训练样本。
  • 即共计约 80 万个精选样本对 DeepSeek-V3-Base 进行两阶段的微调。

在使用新数据进行微调后,模型会再用到来自各种场景的prompt来进行额外的 RL 。

Deepseek-R1蒸馏

从 DeepSeek-R1 到较小的 dense 模型的蒸馏:使用 Qwen2.5-32B 作为基础模型,从 DeepSeek-R1 直接蒸馏的效果优于在原本小模型上进行 RL。这表明,更大的基础模型所发现的推理模式对于提高推理能力至关重要。

DeepSeek-R1 开源了蒸馏后的 Qwen 和 Llama 系列。蒸馏后的 14B 模型的表现远胜于最先进的开源 QwQ-32B-Preview ,同时蒸馏后的 32B 和 70B 模型在dense模型的推理 benchmark 上也创下了新纪录。

Janus-Pro

https://github.com/deepseek-ai/Janus/blob/main/janus_pro_tech_report.pdf

理解&生成统一联合建模:

也就是使用一个统一的多模态大模型,同时进行理解+生成的任务。

Transfusion:比较主流的来自 meta 的工作,将语言建模(next-token预测)与扩散相结合,在混合模态序列上训练单个Transformer。

  • 双重训练目标:在模型的训练过程中,文本部分通过预测下一个单词的方式进行训练,而图像部分则使用扩散方法进行处理。
  • 数据混合与表示:模型在处理混合数据时,将图像切割成多个小块,并将这些块编码为连续的向量,然后插入到文本序列中。这使得模型能够在同一时间处理文本和图像。
  • 多模态注意力机制:为了提高模型的生成效果,Transfusion结合了两种注意力机制,一是因果注意力机制来计算损失和梯度;二是图像patch块之间相互“注意”,提高了图像生成的质量。

Janus:

大多数现有的联合建模方法使用相同的 visual encoder 视觉编码器来处理多模态理解和生成任务的输入。由于这两个任务所需的表示不同,这通常会导致多模态理解的性能不佳。

为了解决这个问题,Janus 提出了分离视觉编码的方法,这缓解了多模态理解和生成任务之间的冲突,在两个任务中都取得了出色的表现。然而,由于训练数据量有限,模型容量相对较小,依然存在一些缺点,例如在短提示图像生成上性能不佳,文本到图像生成质量不稳定。

Janus-Pro:

Janus 的增强版本,它在三个维度上进行了改进:

优化训练策略

  • 延长第一阶段的训练时间:增加了第一阶段的训练step,以便在 ImageNet 数据集上进行充分的训练。研究结果表明,即使固定了 LLM 参数,该模型也可以有效地模拟像素依赖性并根据类别名称生成合理的图像。
  • 第二阶段的重点训练:在第二阶段放弃 ImageNet 数据,直接利用普通的文本转图像数据来训练模型,使其基于密集描述生成图像。这种方法使第二阶段能够更有效地利用文本转图像数据,从而提高训练效率和整体性能。
  • 调整第三阶段 SFT 不同类型数据集的比例:将多模态数据、纯文本数据和文本转图像数据的比例从 7:3:10 更改为 5:1:4。通过略微降低文本转图像数据的比例,来保持强大的视觉生成能力,同时实现更好的多模态理解性能。

扩展的训练数据

  • 多模态理解:对于第二阶段的预训练数据,参考 DeepSeek-VL2 添加了大约 90M 个样本。这些包括图像标题数据集(例如 YFCC )以及用于表格、图表和文档理解的数据(例如 Docmatix)。对于第三阶段的监督微调 SFT 数据,结合了来自 DeepSeek-VL2 的其他数据集,例如 MEME 理解、中文对话数据和旨在增强对话体验的数据集。这些新增功能扩展了模型的功能,丰富了其处理各种任务的能力,同时改善了整体对话体验。
  • 视觉生成:先前的 Janus 版本中使用的真实世界数据质量不佳且包含大量噪音,会导致文本到图像生成不稳定,从而导致输出的美观度较差。在 Janus-Pro 中,整合了大约 72M 个合成美学数据样本,在统一的预训练阶段将真实数据与合成数据的比例提高到 1:1。实验表明,在合成数据上训练时,模型收敛速度更快,并且产生的文本到图像输出不仅更稳定,而且美学质量也显著提高。

扩展到更大的模型尺寸

Janus-Pro 系列包括两种模型大小:1B 和 7B,展示了视觉编码解码方法的可扩展性。

当使用更大规模的 LLM 时,与较小的模型相比,多模态理解和视觉生成的损失的收敛速度都有显著提高。在多个基准上对 Janus-Pro 进行了评估,展现出了卓越的多模态理解能力和显著提高的 Text2Img 指令跟踪性能。

局限性

在多模态理解方面,输入分辨率限制为 384 × 384,会影响在 OCR 等细粒度任务中的表现。对于文本到图像的生成,低分辨率加上视觉标记器引入的重建损失,导致图像虽然语义内容丰富,但仍然缺乏精细的细节。例如,占据有限图像空间的小面部区域可能看起来细节不足。增加图像分辨率可以缓解这些问题。

case展示

文章目录
  1. 1. DeepSeek-V3
    1. 1.1. 基础架构
      1. 1.1.1. 1. MoE结构:
      2. 1.1.2. 2. MLA (Multi-head Latent Attention) 多层潜注意力架构:
      3. 1.1.3. 3. 无辅助损失的负载均衡 auxiliary-loss-free strategy:
      4. 1.1.4. 4. MTP (Multi-Token prediction)多token预测:
    2. 1.2. 高效训练
      1. 1.2.1. 5. DualPipe跨节点通信:
      2. 1.2.2. 6. FP8 混合精度训练框架
    3. 1.3. 其他细节
    4. 1.4. 成本统计
    5. 1.5. 竞品的效果对比
  2. 2. DeepSeek-R1
    1. 2.0.1. 模型定位
    2. 2.0.2. openAI-o1模型
    3. 2.0.3. 纯RL训练步骤:
    4. 2.0.4. Deepseek-R1蒸馏
  • 3. Janus-Pro
    1. 3.0.1. 理解&生成统一联合建模:
    2. 3.0.2. Janus:
    3. 3.0.3. Janus-Pro:
    4. 3.0.4. 扩展到更大的模型尺寸
    5. 3.0.5. 局限性
    6. 3.0.6. case展示