DeepSeek-MLA

MLA 结构

在这里插入图片描述

  • 需要缓存
    • KV 向量共用的压缩隐特征
    • K 向量多头共享的带位置编码的向量
  • 为什么带有位置信息的 Q 向量来自于隐特征向量,而带有位置的 K 向量来自于 H 向量且共享呢?

最好的方法肯定是从H向量直接计算并且不共享,但是会大大增加显存使用和降低计算效率。原理上,基于隐向量计算ROPE肯定是有损的,共享也肯定牺牲了表达能力,所以做了一些权衡:

1、Q向量都基于潜向量生成RoPE向量而不共享,主要是为了增加计算效率。因为隐向量小所以计算更快,而且每次都要计算。不共享是为了保证表达能力。

2、K向量是从缓存中取的,不用每次计算,所以直接在H中计算就好。但是如果不共享将会让每个头都有一个RoPE向量,大大增加显存占用,所以共享。


多头注意力机制 MHA + KV cache

在这里插入图片描述

在生成第三个 token 的时候,第一个 token 进行的计算已经在生成第二个 token 的时候计算过了,重复计算。–》缓存第一个 token 计算的中间变量,并且只保留生成新 token 所需要的中间变量(KV cache)

有了 KV cache 后生成第三个 token 的过程

生成第四个 token


GQA/MQA

这里展示的是 MQA,生成 3 个 head 的 Q 向量,只生成 1 个 head 维度的 K 和 V 向量

多头间通过复制共享 query 向量一起来计算注意力,从而减少 kv cache,但会大大影响性能


为了折中,提出了 GQA,每组 query 共享一个 k 和 v 向量


MLA-Multi-Head Latent Attention

多头潜在注意力机制
  • 目的:减少 kv cache + 尽量不影响性能或者提高性能
  • 原理:对 token 的特征向量进行压缩转换,缓存压缩后的向量,在计算 attention 之后再解压回原来的尺寸

  • 可以提效果,很不错

压缩 KV 向量

kv cache 本意是为了减少推理时对之前 token 的 k 和 v 向量的计算

MLA 因为缓存了压缩的 kv cache,而减小了 kv cache 的显存占用,但是在取出缓存后,k 和 v 不能直接使用,需要经过解压计算才可以,引入了额外的计算,与 kv cache 初衷相悖

  • 对 k 进行解压操作的矩阵可以和 Wuq 矩阵进行融合,这个融合可以在推理之前算好,这样在推理时就不用进行对 k 的额外解压计算了【利用矩阵相乘的结合律,对矩阵提前进行融合,从而规避 MLA 引入的因解压隐特征带来的额外计算】

Wuv 同理,可以和 Wo 融合


压缩 Q 向量

除了对 KV 向量进行压缩外,对 Q 向量也进行了压缩,好处是降低了参数量,而且可以提高模型性能


考虑 RoPE

RoPE 需要对每一层的 Q 向量和 K 向量进行旋转,而且根据 token 位置的不同,旋转矩阵的参数也是不同的。加入了 RoPE 的矩阵无法融合,因为中间两个矩阵与 token 位置相关。

  • 解决方案:为 Q 和 K 向量额外增加一些维度来表示位置信息

对于 Q 向量,通过 WQR 为每一个头生成一些原始特征,然后通过 RoPE 增加位置信息,再把生成带有位置信息的特征拼接到每个注意力头的 Q 向量

↓拼接

对于 K 向量,通过 WKR 矩阵生成一个头共享的特征,然后通过 RoPE 增加位置信息,然后复制到多个头共享位置信息。**这里多头共享带位置编码的 K 向量,也需要被缓存,**以便在生成带有位置信息的 K 向量时用到


在推理时

  • 不带 RoPE 的 Q 向量和 K 向量进行点积运算(结果为数值),可以用融合的矩阵来消除解压操作
  • 带 RoPE 的部分进行点积运算

将两部分得到的两个值进行逐元素相加:⊕ ,就相当于对拼接了位置信息的完整的 Q 和 K 向量进行点积操作的值。


参考

  1. https://www.bilibili.com/video/BV1BYXRYWEMj
  2. https://arxiv.org/pdf/2412.19437

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

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

相关文章

检索增强技术RAG和向量数据库技术的优势和劣势,应用范围和价值

RAG 和向量数据库在技术栈中处于不同层级,前者侧重生成任务的准确性与动态性,后者专注检索效率与扩展性。在实际应用中,二者常协同工作,但也可独立服务于不同场景。企业需根据需求选择:若需生成内容,RAG 是…

Python爬虫教程013:使用CrawlSpider爬取读书网数据并保存到mysql数据库

文章目录 3.8 CrawlSpider介绍3.9 CrawlSpider爬取读书网案例3.9.1 创建项目3.9.2 定义要爬取的数据结构3.9.3 获取数据3.9.4 保存数据到本地3.9.5 保存数据到mysql数据库3.9.6 完整项目下载3.8 CrawlSpider介绍 CrawlSpider 是 Scrapy 框架中 最常用的高级爬虫类之一,用于构…

Three.js 系列专题 5:加载外部模型

内容概述 Three.js 支持加载多种 3D 文件格式(如 GLTF、OBJ、FBX),这让开发者可以直接使用专业建模软件(如 Blender、Maya)创建的复杂模型。本专题将重点介绍 GLTF 格式的加载,并调整模型的位置和材质。 学习目标 理解常见 3D 文件格式及其特点。掌握使用 GLTFLoader 加…

P1006 [NOIP 2008 提高组] 传纸条 题解

题目传送门 前言 每次准备摸鱼时都在这道题的界面。 今天有空做做,顺便写一波题解,毕竟估值蹭蹭往下跳。 双倍经验:P1004 [NOIP 2000 提高组] 方格取数,P1006 [NOIP 2008 提高组] 传纸条。 题意简述 现有一个 m m m 行 n …

LLM架构解析:长短期记忆网络(LSTM)(第三部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络(RNN)到Transformer等自然语言处理(NLP)模型的架构,以及基于这些模型构建的应用程序。 本系列文章内容: NLP自然语言处理基础词嵌入(Word Embeddings&#xff09…

ffmpeg提取字幕

使用ffmpeg -i test.mkv 获取视频文件的字幕流信息如下 Stream #0:4(chi): Subtitle: subrip (srt) (default) Metadata: title : chs Stream #0:5(chi): Subtitle: subrip (srt) Metadata: title : cht Stream #0:6(jpn)…

Python设计模式:构建模式

1. 什么是构建模式 构建模式(Builder Pattern)是一种创建型设计模式,它允许使用多个简单的对象一步步构建一个复杂的对象。构建模式通过将构建过程与表示分离,使得同样的构建过程可以创建不同的表示。换句话说,构建模…

使用 VIM 编辑器对文件进行编辑

一、VIM 的两种状态 VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。vim 分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理;而编辑状态则是用来编辑文本资料&…

GaussDB回调机制深度实践:从事件驱动到系统集成

GaussDB回调机制深度实践:从事件驱动到系统集成 一、回调机制核心概念 回调类型矩阵 二、核心实现技术栈 触发器回调开发 sql -- 创建审计触发器回调 CREATE OR REPLACE FUNCTION audit_trigger() RETURNS TRIGGER AS $$ BEGININSERT INTO audit_log (operati…

AI小白:AI算法中常用的数学函数

文章目录 一、激活函数1. Sigmoid2. ReLU(Rectified Linear Unit)3. Tanh(双曲正切)4. Softmax示例代码:激活函数的实现 二、损失函数1. 均方误差(MSE)2. 交叉熵损失(Cross-Entropy&…

idea 打不开terminal

IDEA更新到2024.3后Terminal终端打不开的问题_idea terminal打不开-CSDN博客

Python代码list列表的使用和常用方法及增删改查

Python代码list列表的使用和常用方法及增删改查 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ python语法-p…

Open CASCADE学习|读取点集拟合样条曲线(续)

问题 上一篇文章已经实现了样条曲线拟合,但是仍存在问题,Tolerance过大拟合成直线了,Tolerance过大头尾波浪形。 正确改进方案 1️⃣ 核心参数优化 通过调整以下参数控制曲线平滑度: Standard_Integer DegMin 3; // 最低阶…

Python基础知识点(列表与字典)

列表list[] # list [12,34,56,78] # print(list) """ 1.list可以保存同一类型的数据 或 不同类型的数据 2.list是有序的,所以可以通过[下标]访问元素 3.list保存重复的值 4.list是可变的,可以添加 删除元素 """ …

在 Elasticsearch 中使用 Amazon Nova 模型

作者:来自 Elastic Andre Luiz 了解如何在 Elasticsearch 中使用 Amazon Nova 系列模型。 在本文中,我们将讨论 Amazon 的 AI 模型家族——Amazon Nova,并学习如何将其与 Elasticsearch 结合使用。 关于 Amazon Nova Amazon Nova 是 Amazon …

MySQL8.0.40编译安装(Mysql8.0.40 Compilation and Installation)

MySQL8.0.40编译安装 近期MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号&#xff0…

python中pyside6多个py文件生成exe

网上见到的教程大多数都是pyinstaller安装单个py文件,针对多个py文件的打包,鲜有人提及;有也是部分全而多的解释,让人目不暇接,本次记录自己设置一个声波捕捉界面的打包过程。 1.pycharm中调用pyinstaller打包 参考链接:https://blog.csdn.net/weixin_45793544/articl…

Java中使用Function Call实现AI大模型与业务系统的集成​

这个理念实际上很早就出现了,只不过早期的模型推理理解能力比较差,用户理解深度预测不够,现在每天的迭代有了改进,逐步引入到我们本身的业务系统,让AI大模型集成进来管理自身业务功能。当然现在也不是一个什么难事了。…

id 属性自动创建 js 全局变量

给一个元素设置 id 属性&#xff0c;它会在 js 中创建全局变量&#xff0c;如 <div class"test" click"test" id"idTest">test</div>test() {console.log(idTest:, window.idTest) }.test {height: 50px;width: 200px;background-c…

Android SELinux权限使用

Android SELinux权限使用 一、SELinux开关 adb在线修改seLinux(也可以改配置文件彻底关闭) $ getenforce; //获取当前seLinux状态,Enforcing(表示已打开),Permissive(表示已关闭) $ setenforce 1; //打开seLinux $ setenforce 0; //关闭seLinux二、命令查看sel…