DeepSeek中的MLA技术

news/2025/2/28 6:07:07/
  1. 大模型推理的两个阶段:prefill和decode
    • prefill阶段处理整个输入序列,并生成第一个输出token,并初始化KV cache
    • decode阶段则逐个生成后续的tokens
  2. KV cache
    • 无KV cache的推理过程:每次生成新token时,需要将整个历史序列(prompt+已生成tokens)重新输入模型,并重新计算所有tokens的Key和Value向量
    • 有KV cache的推理过程:在prefill阶段计算prompt的Key/Value并缓存,后续decode阶段仅需计算新token的Key/Value,然后将其与缓存的历史Key/Value合并
    • 优点:
      • 计算量降低:将复杂度从 O ( n 2 ) O(n^2) O(n2)将至 O ( n ) O(n) O(n),每个decode步骤仅需计算新token的Key/Value
      • 显存优化:没有的话会存储完整历史序列的中间结果,而用了KV cache仅需存储缓存的Key/Value,通过复用缓存避免了冗余存储
  3. MQA、GQA:通过多头注意力机制的降本增效,来降低KV cache的大小
    请添加图片描述
    • MHA:多头注意力,就是有多个头,每个头有各自的 W Q W^Q WQ W V W^V WV W K W^K WK来生成自己的Q、K、V,最终会结合在一起。
    • MQA:通过在attention机制里共享keys和values来减少KV cache的内容,
    • GQA:不是所有的query共享一组KV,而是一个group的query共享一组KV,这样既降低了KV cache,又能满足精度,属于MHA和MQA之间的折中方案
  4. MLA
    上面的MQA和GQA是在缓存多少数量的KV思路上进行优化:直觉上如果缓存的KV个数少,显存占用就少,大模型能力的降低可以通过进一步的训练或者增加FFN/GLU的规模来弥补。

    另外一个优化方向就是MLA,它的想法是让缓存的K、V本身变小。原理就是一个MN的矩阵可以近似成两个小矩阵Mk和kN的乘积,也就是把K/V矩阵都拆成两个小矩阵来存储(底层逻辑就是认为低秩空间足够表达高维有用信息)。具体的,K和V共用一个降维矩阵,然后再各自有自己的升维矩阵。即下图中共用 W D K V W^{DKV} WDKV得到相同的 C t K V C_t^{KV} CtKV,以及各自有升维矩阵 W U K W^{UK} WUK W U V W^{UV} WUV
    请添加图片描述

    把大矩阵拆成两个小矩阵的乘积,缓存是变小了,但是计算量会变多从而失去了缓存的意义。解决方法是把其中的一个小矩阵在计算时,提前放到前面一块沉掉了,然后在每次推理的时候就用这个已经沉掉的值去做推理。这样的话在推理的时候计算量是不会变的。(这里需要一个线性代数的数学推导,总之就是通过一些运算技巧,让计算变少了)

    另外还遇到一个问题是RoPE位置编码不兼容MLA算法,解决办法是增加几维向量专门用来做这个RoPE,而不是把所有的向量都用来做RoPE

http://www.ppmy.cn/news/1575430.html

相关文章

专题一和为s的两个数字

1.题目 题目分析: 在给定的数组中,找到俩个数字,且这两个数字的和与给定的target相等就行,可能会有很多组,但只要返回一组就可以。 2.算法原理 方法一: 暴力枚举法,通过俩层循环,…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1)qtDesigner中 2)实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类,用于定义线性渐变效果(通过样式表设置)。它可以用来填充形状、背景或其他图形元素&#xff0…

零基础学习OpenGL(一)创建一个窗口

基于 ubuntu 系统,设置基础环境。 #!/usr/bin/env bashsudo apt-get update# 安装基础编译软件 sudo apt-get -y install gcc g cmake git# 安装编译 glfw 依赖的软件 sudo apt-get -y install libwayland-dev libx11-dev libxcursor-dev libxi-dev libxinerama-de…

矩阵碰一碰发视频之 API 接口接入技术开发全解析,支持OEM

矩阵碰一碰发视频作为一种创新的视频分享方式,为用户带来了便捷且独特的体验。而在这一功能的实现过程中,API 接口接入扮演着至关重要的角色。通过接入合适的 API,能够高效地实现视频数据的传输、设备间的通信以及用户交互等功能。本文将深入…

第二十二天 学习HarmonyOS的分布式软总线技术,了解跨设备通信的原理

前言 在万物互联时代,跨设备协同成为智能生态系统的核心需求。HarmonyOS通过创新的分布式软总线技术,实现了设备间的高效通信与资源共享。本文将从零开始,带领开发者深入理解这项核心技术,通过代码实战演示如何构建跨设备应用。我…

网络渗透作业

第一题&#xff1a;使用Xpath对Order by 语句进行布尔盲注 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml&quo…

AI DEV 人工智能能做的工作,在开发运维安全方面以及企业成本降低方面所起的作用和相应的提示词。

这个查询是用中文提出的&#xff0c;询问人工智能在开发、运维、安全方面以及企业成本降低方面的作用和相应的提示词。我应该用中文回答&#xff0c;并涵盖以下几个方面&#xff1a; AI在软件开发中的应用AI在IT运维中的应用AI在网络安全中的应用AI如何帮助企业降低成本针对这…

程序员失业日记2:失业后迷茫

在上一篇 程序员失业日记1:工作五年&#xff0c;交接半天 收到很多回复&#xff0c;其中最多的就是**公司能赔 n1 已经很良心了。**不知道自己的该庆幸&#xff0c;还是该失落&#xff0c;作为一个普通打工人&#xff0c;遇到什么样的公司大部分还是看运气&#xff0c;少部分靠…