DeepSeek V2报告阅读

news2025/2/8 9:07:58

概况

MoE架构,236B参数,每个token激活参数21B,支持128K上下文。采用了包括多头潜在注意力(MLA)DeepSeekMoE在内的创新架构。MLA通过将KV缓存显著压缩成潜在向量来保证高效的推理,而DeepSeekMoE通过稀疏计算使得以经济成本训练强大的模型成为可能。

与DeepSeek 67B相比,DeepSeek-V2实现了显著更强的性能,同时节省了42.5%的训练成本,减少了93.3%的KV缓存,并将最大生成吞吐量提高到5.76倍。我们在由8.1T token组成的语料库上预训练DeepSeek-V2,并进一步进行SFT和RL以充分释放其潜力。

这个版本最大的贡献,就是MLA和DeepSeekMoE。MLA是一种低秩的、将K和V联合压缩的注意力机制,减少KV缓存的同时降低GQA/MQA带来的性能损耗;DeepSeekMoE和普通MoE相比,专家的划分粒度更细、并将一部分专家隔离为共享专家,这些专家始终被激活。

还有一个小参数量版本的DeepSeek-V2-Lite,参数量15.7B,每个token激活参数2.4B

架构

MLA

在标准MHA中,隐向量分别的三个权重矩阵相乘,得到qkv,然后把每次推理的kv存储到显存中。

MLA的核心是键和值的低秩联合压缩,以减少KV缓存。

此外,为了在训练过程中减少激活内存,我们还对查询进行了低秩压缩,即使它不能减少KV缓存:

旋转位置编码RoPE与低秩KV压缩不兼容,RoPE是一种相对位置编码方式,当前q与之前的k/v相乘时乘上一个旋转矩阵,来标记两个token的相对位置。

关于rope不兼容没法做吸收计算的解释,这篇文章4.2节讲的非常详细:http://zhuanlan.zhihu.com/p/16730036197。大致就是在使用rope之前,由于满足矩阵乘法结合律可以提前把它俩乘积算出来,也就是权重矩阵吸收,而使用rope之后会导致这两个矩阵中间多了个表示相对位置的旋转矩阵,没法提前计算了。

为了解决这种不兼容,就通过concat的方式,在向量的尾部加一个小的位置编码向量。这样相乘的时候,前面的维度通过矩阵吸收处理,所有head缓存一个,后面一段通过正常MQA方式计算。

文中说MLA缓存的Latent KV比较短(相当于2.25个MQA的缓存量),但MLA恢复了kv的能力,使得表征能力强于GQA和MQA,甚至强于MHA(这一点存疑,不好解释为什么比MHA还强)

DeepSeekMoE

DeepSeekMoE有两个关键思想:将专家细分为更细的粒度以实现更高的专家专业化和更准确的知识获取,以及隔离一些共享专家以减轻路由专家之间的知识冗余。

表达公式为:

表示共享专家的数量,表示路由专家的数量,表示第i个专家的门控值,表示token与第i个专家的亲合度,表示第i个专家的质心。

上面这三个公式从上往下看:

  • 专家的质心也就是说专家更擅长哪些知识,那么最下面公式计算得到的结果就是当前token与这个专家擅长内容的近似程度。
  • 计算当前token和所有专家的近似程度,就可以排序得到当前token最适合哪些专家来处理,利用第二个公式,选出其中近似度最高的个专家。
  • 最后用最上面的公式,用选定的专家+共享专家来对输入进行处理,得到之后再和原始输入相加,相当于残差连接,就得到了MLP的输出。

限制设备的路由:

研究人员还设计了一种设备限制的路由机制,以限制与MoE(Mixture of Experts)相关的通信成本:由于专家的细粒度分割,激活的专家数量可能很大,因此应用专家并行,MoE相关的通信将更加昂贵。

对于DeepSeek-V2,除了对路由专家进行简单的top-K选择之外,还确保每个token的目标专家将分布在最多M个设备上。也就是首先选择M个设备,然后在这些M个设备上的专家中进行top-K选择。在实践中,我们发现当M>=3时可以实现和无限制接近的效果

负载平衡:

不平衡的负载会增加路由崩溃的风险,并且会降低计算效率。在DeepSeek-V2的训练过程中,设计了三种辅助损失函数,分别用于控制专家级别的负载均衡(LExpBal)、设备级别的负载均衡(LDevBal)和通信平衡(LCommBal)。

专家级别的负载均衡,通过统计当前专家被选择的频率、整个序列上被分配的权重,来计算损失,被选择的频率越低、权重越小,损失就越小。设备级别的负载均衡损失也是类似。

设备限制的路由机制基于确保每个设备最多向其他设备传输 𝑀𝑇 个隐藏状态的原则运作。同时,使用通信平衡损失来鼓励每个设备从其他设备接收大约 𝑀𝑇 个隐藏状态。通信平衡损失保证了设备间信息的平衡交换,促进了高效的通信。

token丢弃策略:

虽然平衡损失旨在鼓励平衡负载,但它们不能保证严格的负载平衡。为了进一步减轻不平衡负载,在训练期间引入了设备级别的token丢弃策略。

这种方法首先计算每个设备的平均计算预算,这意味着每个设备的容量因子相当于1.0。然后,在每个设备上丢弃最低亲和力分数的token,直到达到计算预算。

此外,确保大约10%训练序列的token永远不会被丢弃。通过这种方式,我们可以根据效率要求灵活决定在推理时是否丢弃令牌,并始终确保训练和推理之间的一致性。

pre-train

Infra:

DeepSeek-V2是基于HAI-LLM框架进行训练的,这是他们自研的训练框架。

它采用了16路无气泡流水线并行、8路专家并行以及ZeRO-1数据并行。鉴于DeepSeek-V2激活的参数相对较少,且部分操作符被重新计算以节省激活内存,因此无需张量并行即可进行训练,从而减少了通信开销。此外,为了进一步提高训练效率,将共享专家的计算与专家并行的全对全通信进行了重叠处理。

16路PP意思就是整个模型的forward/backward被划分成16个stage,分布在16组机器上;8路专家并行是指每组机器整套专家分布在8张卡上。

**上下文长度扩展:**使用YaRN,将上下文窗口从4K扩展到128K

训练成本:

由于DeepSeek-V2对每个标记激活的参数较少,并且所需的浮点运算次数(FLOPs)比DeepSeek 67B少,因此理论上训练DeepSeek-V2将比训练DeepSeek 67B更经济。

尽管训练MoE模型将引入额外的通信开销,但通过算子和通信优化,DeepSeek-V2的训练可以达到相对较高的模型浮点运算利用率(MFU)。在方佳瑞的知乎文章中介绍了他对V3的MFU估算:https://zhuanlan.zhihu.com/p/16445683081

在H800集群上进行的实际训练中,对于每万亿标记的训练,DeepSeek 67B需要300.6K GPU小时,而DeepSeek-V2仅需要172.8K GPU小时,即稀疏的DeepSeek-V2与密集的DeepSeek 67B相比,可以节省42.5%的训练成本。

推理效率:

为了高效部署DeepSeek-V2服务,首先将它的参数转换为FP8的精度。

此外,对DeepSeek-V2的KV缓存进行了量化,将KV缓存中的每个元素平均压缩到6位。得益于MLA和这些优化,实际部署的DeepSeek-V2比DeepSeek 67B需要的KV缓存显著减少,因此可以服务更大的批次大小。

在配备8个H800 GPU的单个节点上,DeepSeek-V2实现了超过每秒50K个令牌的生成吞吐量,这是DeepSeek 67B的最大生成吞吐量的5.76倍。此外,DeepSeek-V2的提示输入吞吐量超过每秒100K个令牌。

Alignment

在SFT方面,数据量和DeepSeek 67B一样,质量更高。

在RL方面,使用了在DeepSeek Math技术报告中的组相对策略优化GRPO。

强化学习的训练策略:

初步实验发现,在推理数据(如代码和数学提示)上的RL训练表现出与在一般数据上训练时不同的独特特征。例如,在代码和数学推理任务上的能力可以在更长的训练步骤期间持续提高。

因此采用了一个两阶段的RL训练策略,首先进行推理对齐,然后进行人类偏好对齐。

在第一个推理对齐阶段,训练了一个奖励模型𝑅𝑀𝑟𝑒𝑎𝑠𝑜𝑛𝑖𝑛𝑔,用于代码和数学推理任务,并使用𝑅𝑀𝑟𝑒𝑎𝑠𝑜𝑛𝑖𝑛𝑔的反馈来优化策略模型。在第二个人类偏好对齐阶段,采用了一个多奖励框架,该框架从一个有帮助的奖励模型、一个安全奖励模型、以及一个基于规则的奖励模型RMrule中获取奖励。

Discussion

SFT数据的数量:

  • 先前研究认为,少于10K的SFT数据实例足以产生令人满意的结果。然而,在实验中如果使用少于10K的实例,在IFEval基准测试上的性能显著下降。
  • 一个可能的解释是,语言模型需要一定量的数据来发展特定技能。尽管随着模型大小的增加所需的数据量可能会减少,但它不能完全消除。我们的观察强调了为LLM配备所需充足数据的关键性。
  • 此外,SFT数据的质量也至关重要,特别是对于涉及写作或开放式问题的任务。

RL的对齐税:

  • 对齐税(Alignment Tax) 指的是在通过RLHF过程中,模型在对齐人类偏好以提高安全性和有用性的同时,可能导致其在其他任务上的性能下降。
  • 报告中说在数据处理和改进训练策略方面做出来很多努力来减轻对齐税,但是没说怎么做的
  • 在报告之外,减轻对齐税的方法比如: RLHF 过程混合一小部分原始预训练数据,继续进行对数似然最大化训练

在线强化学习:

  • 在线 RL:通过与环境的实时交互收集数据。
  • 离线 RL:使用预先收集的历史数据集进行训练。
  • 在偏好对齐实验中,发现在线方法显著优于离线方法。因此在实现在线强化学习框架上投入了巨大的努力。关于在线或离线偏好对齐的结论可能因不同上下文而异,将对它们进行更全面的分析留待未来的工作。

这是V2-Lite的layer0的参数,重点通过红框内的参数信息来熟悉MLA:

  • 由于V2-Lite并没有压缩q,因此q_proj矩阵维度是2048*3072,3072是由16个自注意力头组成,每个头的维度是128+64=192
  • kv先是被压缩成了576大小的低秩向量,这个向量前512个维度是kv原始信息压缩后的表示,后64个维度表示位置信息;然后通过一个512*4096的矩阵把前512维度给升维成4096,即k和v各2048
  • q和k相乘的时候,k的每个头拼接上576向量的后面那64个维度,于是大小也是128*192=3072,能够和q相乘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2294710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础Vue入门6——Vue router

本节重点: 路由定义路由跳转 前面几节学习的都是单页面的功能(都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html),涉及到项目研发都是有很多页面的,这里就需要用到路由(vue route…

关于JS继承的七种方式和理解

1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来,属于正常现象,多进几次就行 开始使用前,记得先…

每日Attention学习18——Grouped Attention Gate

模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…

124,【8】buuctf web [极客大挑战 2019] Http

进入靶场 查看源码 点击 与url有关,抓包 over

源路由 | 源路由网桥 / 生成树网桥

注:本文为 “源路由” 相关文章合辑。 未整理去重。 什么是源路由(source routing)? yzx99 于 2021-02-23 09:45:51 发布 考虑到一个网络节点 A 从路由器 R1 出发,可以经过两台路由器 R2、R3,到达相同的…

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…

Qwen2-VL-2B-Instruct 模型 RK3576 板端部署过程

需要先在电脑上运行 RKLLM-Toolkit 工具,将训练好的模型转换为 RKLLM 格式的模型,然后使用 RKLLM C API 在开发板上进行推理。 在安装前先查看板端的内存容量,和自己模型占用大小比较一下,别安装编译好了不能用。 这里我就是先尝试…

如何设计光耦电路

光耦长这样,相信小伙伴们都见过,下图是最为常用的型号PC817 怎么用?我们先看图,如下图1: Vin为输入信号,一般接MCU的GPIO口,由于这里的VCC1为3.3V,故MCU这边的供电电源不能超过3.3V…

ADC模数转换器概念函数及应用

ADC模数转换器概念函数及应用 文章目录 ADC模数转换器概念函数及应用1.ADC简介2.逐次逼近型ADC2.1逐次逼近型ADC2.2stm32逐次逼近型2.3ADC基本结构2.4十六个通道 3.规则组的4种转换模式3.1单次转换,非扫描模式3.2连续转换,非扫描模式3.3单次转换&#xf…

DFX(Design for eXcellence)架构设计全解析:理论、实战、案例与面试指南*

一、什么是 DFX ?为什么重要? DFX(Design for eXcellence,卓越设计)是一种面向产品全生命周期的设计理念,旨在确保产品在设计阶段就具备**良好的制造性(DFM)、可测试性(…

【LeetCode】152、乘积最大子数组

【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…

《云夹:让书签管理变得轻松又高效》

在当今数字化的生活与工作场景中,我们畅游于网络的浩瀚海洋,每天都会邂逅各式各样有价值的网页内容。而如何妥善管理这些如繁星般的书签,使其能在我们需要时迅速被找到,已然成为众多网络使用者关注的焦点。云夹,作为一…

Microsoft Fabric - 尝试一下在pipeline中发送请求给web api(获取数据和更新数据)

1.简单介绍 Microsoft Fabric中的Pipeline支持很多种activity,分成数据转换和控制流两种类型的activitly。 这边将尝试一下发送web请求的activity,要做成的pipeline大概如下图所示, 上图中有4个Activity,作用如下 Web - 从一个…

数据完整性与约束的分类

一、引言 为什么需要约束?为了保证数据的完整性。 (1)数据完整性 数据完整性指的是数据的精确性和可靠性。 为了保证数据的完整性,SQL对表数据进行额外的条件限制,从以下四方面考虑: ①实体完整性&…

docker安装nacos2.x

本文为单机模式,非集群教程,埋坑 nacos2.x官方强制条件 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。 64 bit JDK 1.8 Maven 3.2.x 环境介绍 centos 7 maven 3.9.9 jdk 17 nacos 2.3.1 1. 拉取docker镜像 d…

GB/T28181 开源日记[8]:国标开发速知速会

服务端源代码 github.com/gowvp/gb28181 前端源代码 github.com/gowvp/gb28181_web 介绍 go wvp 是 Go 语言实现的开源 GB28181 解决方案,基于GB28181-2022标准实现的网络视频平台,支持 rtmp/rtsp,客户端支持网页版本和安卓 App。支持rts…

6 maven工具的使用、maven项目中使用日志

文章目录 前言一、maven:一款管理和构建java项目的工具1 基本概念2 maven的安装与配置(1)maven的安装(2)IDEA集成Maven配置当前项目工程设置 maven全局设置 (3)创建一个maven项目 3 pom.xml文件…

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览: 国家标准|GB/T 43698-2024 相关标准: &a…

CF 278A.Circle Line

题目分析 输入n个数据作为路径,求从a到b的最短距离,需要将其相成一个圆圈,既可以从小往大走又可以从大往小走 思路分析 依然将数据存为数组,通过下标进行操作,既然说了有两种方式那就计算两种方式哪个更快就输出谁 代…