当前位置: 首页 > news >正文

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

相关文章:

DeepSeek-MLA

MLA 结构 需要缓存 KV 向量共用的压缩隐特征K 向量多头共享的带位置编码的向量 为什么带有位置信息的 Q 向量来自于隐特征向量,而带有位置的 K 向量来自于 H 向量且共享呢? 最好的方法肯定是从H向量直接计算并且不共享,但是会大大增加显存使…...

SQL:数据类型(Data Types)

目录 数字数据类型(Numeric data types) 非数据类型(Non-numeric data types) 日期和时间类型(Date and Time Types) NULL(缺失或未知值) 当你在数据库中创建表格时,你必须指明表中每一列可以保存的数据…...

AF3 OpenFoldBatchCollator类解读

AlphaFold3 data_modules 模块的 OpenFoldBatchCollator 类将一个蛋白质样本列表中的多个字典按键合并,并对每个键值进行 torch.stack 操作,打包成一个批次(batch)。通过定义 OpenFoldBatchCollator类的 __call__ 方法,可以将类的实例当作函数来调用,相当于自定义的批次打…...

手搓多模态-06 数据预处理

前情回顾 我们目前实现了视觉模型的编码器部分,然而,我们所做的是把一张图片编码嵌入成了许多个上下文相关的嵌入向量,然而我们期望的是一张图片用一个向量来表示,从而与文字的向量做点积形成相似度(参考手搓多模态-01…...

[蓝桥杯] 求和

题目链接 P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷 题目理解 这道题就是公式题,我们模拟出公式后,输出最终结果即可。 本题不难,相信很多同学第一次见到这道题都是直接暴力解题。 两个for循环,测试样例,直接拿下。 #in…...

INFINI Labs 产品更新 | Coco AI 0.3 发布 – 新增支持 Widget 外部站点集成

INFINI Labs 产品更新发布!此次更新涵盖 Coco AI 、Easysearch 等产品多项重要升级,重点提升 AI 搜索能力、易用性及企业级优化。 Coco AI v0.3 作为 开源、跨平台的 AI 搜索工具,新增快捷键设置,支持多个聊天会话等功能。Coco A…...

vue3+element-plus多个多选下拉框并搜索

一、下拉框组件&#xff1a; <template> <div class"top-select"> <div class"first-select"> <div v-for"(group, index) in selectGroups" :key"index" class"item-select" > <div class&quo…...

吴恩达深度学习复盘(9)多类分类与SoftMax回归

多类分类 概念 对于分类问题&#xff0c;并非只有0或1两个标签&#xff0c;而是可以有两个以上的开放标签。以手写数字分类问题为例&#xff0c;之前只是区分0和1&#xff0c; 但在实际生活中&#xff0c;如读取信封上的数字或邮政编码&#xff0c;会涉及十个可能的数字识别&…...

【力扣hot100题】(068)有效的括号

犹记得第一次做这题的时候是怎样一番惨状&#xff0c;现在已经得心应手了。 class Solution { public:bool isValid(string s) {stack<char> zhan;for(int i0;i<s.size();i){if(s[i]{||s[i](||s[i][) zhan.push(s[i]);else{if(zhan.empty()) return 0;if(zhan.top(){…...

深度学习篇---Prophet时间序列预测工具

文章目录 前言一、什么是Prophet&#xff1f;易用性自动化灵活性鲁棒性快速拟合 二、Prophet的核心原理1. 趋势模型a. 分段线性模型&#xff08;默认&#xff09;b. 逻辑增长模型 2. 季节性模型3. 节假日效应 三、Prophet使用方法安装ProphetPython基本使用示例1. 准备数据2. 创…...

TDengine JAVA 语言连接器

简介 本节简介 TDengine 最重要且使用最多的连接器, 本节内容是以教科书式方式列出对外提供的接口及功能及使用过程中要注意的技术细节&#xff0c;大家可以收藏起来做为今后开发 TDengine 的参考资料。 taos-jdbcdriver 是 TDengine 的官方 Java 语言连接器&#xff0c;Java…...

vue3工程中使用vditor完成markdown渲染并防止xss攻击

vue3工程中使用vditor完成markdown渲染并防止xss攻击 背景环境解决方案引入依赖 组件封装实现效果 背景 做oj系统时&#xff0c;题目使用的时markdown语法字符串,前端查看时需要将markdown转html再渲染到页面上。 环境 vitevue3pnpm 解决方案 引入依赖 pnpm install vdit…...

Java面向对象编程详解

面向对象编程是Java的核心特性之一&#xff0c;它通过类和对象的概念来解决实际问题&#xff0c;使程序设计更加符合人类对事物的认知方式。本文将深入探讨Java中的面向对象编程概念和特性。 1. 面向对象的基本概念 1.1 什么是面向对象&#xff1f; 面向对象程序设计(Object …...

重温java 系列一 Java基础

文件拷贝的5种方式 传统字节拷贝 public static void main(String[] args) throws IOExecption{try(InputStream is new FileInputStream("source.txt");OutputStream os new FileOutputStream("target.txt")){byte[] buffer new byte[1024];int leng…...

Java基础 4.7

1.成员方法传参机制 引用数据类型的传参机制 引用类型传递的是地址&#xff08;其实也是值&#xff0c;只不过值是地址&#xff09;&#xff0c;可以通过形参影响实参&#xff01; public class MethodParameter01 {public static void main(String[] args) {int[] arr {1,…...

基础IO(一)之回顾C语言文件接口

文章目录 共识原理回顾C文件接口打开文件的方式以w的方式打开文件以a的方式打开文件 stdin & stdout & stderr 共识原理 1.文件内容属性 就算内容是空的&#xff0c;也会有属性&#xff0c;内容和属性(两者都是数据)都要在磁盘当中保存 2.文件分为 打开的文件 和 没…...

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具&#xff0c;支持问答式&#xff08;ChatGPT&#xff09;的数据分析和报告生成功能。PandaAI 提供了一个开源的框架&#xff0c;主要核心组件包含用于数据处理的数据准备层&#xff08;Pandas&#xff09;以及实现 …...

Rollup详解

Rollup 是一个 JavaScript 模块打包工具&#xff0c;专注于 ES 模块的打包&#xff0c;常用于打包 JavaScript 库。下面从它的工作原理、特点、使用场景、配置和与其他打包工具对比等方面进行详细讲解。 一、 工作原理 Rollup 的核心工作是分析代码中的 import 和 export 语句…...

【NLP 56、实践 ⑬ LoRA完成NER任务】

目录 一、数据文件 二、模型配置文件 config.py 三、数据加载文件 loader.py 1.导入文件和类的定义 2.初始化 3.数据加载方法 代码运行流程 4.文本编码 / 解码方法    ① encode_sentence()&#xff1a; ② decode()&#xff1a; 代码运行流程 ③ padding()&#xff1a; 代码…...

Unity ViewportConstraint

一、组件功能概述 ViewportConstraint是一个基于世界坐标的UI边界约束组件&#xff0c;主要功能包括&#xff1a; 将UI元素限制在父容器范围内支持自定义内边距&#xff08;padding&#xff09;可独立控制水平和垂直方向的约束 二、实现原理 1. 边界计算&#xff08;世界坐…...

项目实战--路由权限

封装 单独抽象成组件&#xff0c;写一个新的关于路由的NewsRouter.jsx&#xff1a; import SideMenu from "../../components/sandbox/SideMenu"; import TopHeader from "../../components/sandbox/TopHeader"; import { Routes, Route } from "re…...

Async 注解原理分析

Async 注解由 Spring 框架提供&#xff0c;被该注解标注的类或方法会在 异步线程 中执行。这意味着当方法被调用时&#xff0c;调用者将不会等待该方法执行完成&#xff0c;而是可以继续执行后续的代码。 Async 注解的使用非常简单&#xff0c;需要两个步骤&#xff1a; 在启…...

pyTorch-迁移学习-图片数据增强-四种天气图片的多分类问题

目录 1.导包 2.加载数据、拼接训练与测试数据的文件夹路径 3数据预处理 3.1数据增强 3.2用分类存储的图片数据创建dataloader 4.加载预训练好的模型 (迁移学习) 4.1固定、修改预训练好的模型 5.将模型拷到GPU上 6.定义优化器与损失函数 7.学习率衰减 8.定义训…...

Linux脚本基础详解

一、基础知识 Linux 脚本主要是指在 Linux 系统中编写的用于自动化执行任务的脚本程序&#xff0c;其中最常用的便是 Bash 脚本。下面我们将从语法、使用方法和示例三个方面详细讲解 Linux 脚本。 1. 脚本简介 定义&#xff1a;Linux 脚本是一系列命令的集合&#xff0c;可以…...

MQTT-Dashboard-数据集成-WebHook、日志管理

常用的 Docker Volume 命令及其用法。 1、创建数据卷 使用 docker volume create 命令可以创建一个新的数据卷。例如&#xff0c;创建一个名为 my_volume 的数据卷&#xff1a; docker volume create my_volume 2、列出数据卷 使用 docker volume ls 命令可以列出所有的数据卷…...

Elixir语言的移动应用安全

Elixir语言的移动应用安全解析 引言 在当今的数字化时代&#xff0c;移动应用已经成为我们日常生活中不可或缺的一部分。从购物、社交到在线银行&#xff0c;几乎每一个生活领域都与移动应用紧密相连。然而&#xff0c;随着应用的普及&#xff0c;安全问题也随之而来。如何确…...

【科学技术部政务服务平台-用户注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

HTTP 教程 : 从 0 到 1 全面指南 教程【全文三万字保姆级详细讲解】

目录 HTTP 的请求-响应 HTTP 方法 HTTP 状态码 HTTP 版本 安全性 HTTP/HTTPS 简介 HTTP HTTPS HTTP 工作原理 HTTPS 作用 HTTP 与 HTTPS 区别 HTTP 消息结构 客户端请求消息 服务器响应消息 实例 HTTP 请求方法 各个版本定义的请求方法 HTTP/1.0 HTTP/1.1 …...

【LeetCode 热题100】139:单词拆分(动态规划全解析+细节陷阱)(Go语言版)

&#x1f680; LeetCode 热题 139&#xff1a;单词拆分&#xff08;Word Break&#xff09;| 动态规划全解析细节陷阱 &#x1f4cc; 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请判断 s 是否可以由字典中出现的单词拼接成。 说明&#xff1a;不要求字典…...

2025年招投标行业的深度变革:洞察趋势,把握未来

2025年&#xff0c;随着政府工作报告对招投标行业的一系列改革措施的提出&#xff0c;整个行业正面临一场前所未有的深度变革。这些政策旨在推动全国统一大市场的建设、加速数字化转型、促进绿色低碳发展&#xff0c;并强化风险防控。在这场变革中&#xff0c;企业不仅要适应新…...

树莓派学习专题<3>:使能VNC远程桌面与VNC文件传输

树莓派学习专题&#xff1c;3&#xff1e;&#xff1a;使能VNC远程桌面与VNC文件传输 1. 配置VNC2. 使用VNC viewer连接到树莓派3. 使用VNC viewer传输文件 1. 配置VNC 在终端或SSH中&#xff0c;使用如下命令打开树莓派系统配置项&#xff1a; sudo su raspi-config以上两项…...

AI烘焙大赛中的算法:理解PPO、GRPO与DPO最简单的方式

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

qt自定义信号槽需要注意的事项

在 Qt 中&#xff0c;自定义信号和槽是与事件和对象交互的核心机制之一。创建自定义信号和槽时&#xff0c;有几个重要事项需要注意&#xff0c;以确保它们能够正确工作。以下是一些需要注意的关键点&#xff1a; 1. 信号和槽的声明 信号声明&#xff1a;信号应该在 signals …...

OpenCV--图像轮廓检测

在图像处理与计算机视觉领域&#xff0c;轮廓检测是一项极为关键的技术。轮廓作为物体边界的重要表征&#xff0c;承载了图像中物体的形状、尺寸和位置等关键信息。通过轮廓检测&#xff0c;我们能够提取出图像中物体的轮廓&#xff0c;为后续的物体识别、图像分割、形状分析等…...

从搜索丝滑过渡到动态规划的学习指南

搜索&动态规划 前言砝码称重满分代码及思路solution 1&#xff08;动态规划&#xff09;solution 2&#xff08;BFS&#xff09; 跳跃满分代码及思路solution 1(动态规划)solution 2 (BFS) 积木画满分代码及思路动态规划思路讲解solution 前言 本文主要是通过一些竞赛真题…...

通用文字识别技术的出现,深刻改变信息的处理方式

在数字化浪潮席卷全球的今天&#xff0c;文字作为人类文明最基础的载体&#xff0c;正经历着一场前所未有的技术革命。通用文字识别&#xff08;OCR&#xff0c;Optical Character Recognition&#xff09;技术已经从简单的"图片转文字"工具&#xff0c;进化为能够理…...

linux 下du 和 ls-alh 的区别

我一直以为du -m 可以显示文件大小。发现不对。正确的做法你是用ls -alh 来使用...

【k8s学习之CSI】理解 LVM 存储概念和相关操作

鸟哥的 Linux 私房菜 – Quota, Software RAID, LVM, iSCSI 0 | 理解 vg 相关概念 在 Linux LVM&#xff08;逻辑卷管理&#xff09; 中&#xff0c;以下是 partition&#xff08;分区&#xff09;、PV&#xff08;物理卷&#xff09;、VG&#xff08;卷组&#xff09;、LV&am…...

【分享开发笔记,赚取电动螺丝刀】使用STM32F103的hal库,采用PWM+DMA发送方式驱动WS2812的RGB彩灯

简单和大家介绍一下本文章的主要内容&#xff1a;使用STM32F103C8最小系统板&#xff0c;使用STM32 cubeMX 6.14版本生成底层的驱动库、结合定时器的PWM 输出功能、使用DMA发送数据的 方式&#xff0c;驱动WS2812 的RGB三色灯。 本次小的DIY所需的物料&#xff1a;stm32f103c8…...

CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)

下面是使用CubeMX配置STM32F407VET6&#xff0c;实现以太网通讯&#xff08;PHY芯片为LAN8720&#xff09;的具体步骤总结&#xff1a; 一、硬件连接方式&#xff1a; 硬件原理图&#xff1a; 使用外部晶振为PHY芯片提供时钟。 STM32F407VET6 与 LAN8720 采用 RMII 模式连接。…...

一种反激式开关电源设计流程

引&#xff1a;随着生产和技术的发展&#xff0c;对环保和能源的要求也越来越高&#xff0c;开关电源的应用也越来越广泛&#xff0c;开关电源电路结构种类繁多&#xff0c;包括单端转换器和双端转换器。本文介绍一种利用反激式变换电路实现5V开关电源的设计方法&#xff0c;以…...

数据结构实验3.2:链栈的基本操作与括号匹配问题

文章目录 一&#xff0c;问题描述二&#xff0c;基本要求三&#xff0c;算法分析&#xff08;一&#xff09;链栈的存储结构设计&#xff08;二&#xff09;链栈基本操作的时间复杂度分析&#xff08;三&#xff09;括号匹配算法分析 四&#xff0c;示例代码五&#xff0c;实验…...

一周学会Pandas2 Python数据处理与分析-NumPy算术运算和统计计算

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 算术运算 数组的灵魂就在于可以进行批量的运算而不是要在循环里面进行元素的运算&#xff1a; 示例&#xff1a; …...

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

科普:GBDT与XGBoost比较

本文不去讲GBDT与XGBoost算法的原理及算法本身&#xff0c;而是从应用者的角度&#xff0c;对二者比较&#xff0c;以便选择。 XGBoost是GBDT的“工程化增强版”&#xff0c;在保持Boosting核心思想的同时&#xff0c;通过数学优化&#xff08;二阶导数、正则化&#xff09;和工…...

大数据技术之 Scala(5)

以下是今天学习的知识点与代码测试&#xff1a; 一、不可变数组与可变数组的转换 说明 arr1.toBuffer //不可变数组转可变数组arr2.toArray //可变数组转不可变数组 arr2.toArray 返回结果才是一个不可变数组&#xff0c;arr2 本身没有变化arr1.toBuffer 返回结果才是一个可变…...

int 与 Integer 的区别详解

1. 本质区别 特性intInteger类型基本数据类型&#xff08;Primitive&#xff09;包装类&#xff08;Wrapper Class&#xff09;存储位置栈&#xff08;或作为对象成员在堆中&#xff09;堆&#xff08;对象实例&#xff09;默认值0null&#xff08;可能导致 NullPointerExcept…...

初阶数据结构(3)顺序表

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是&#xff0c;…...

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要&#xff1a;针对高防IP在部分地区无法访问的问题&#xff0c;本文设计基于智能DNS的流量调度方案&#xff0c;提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高&#xff0c;智能DNS可…...

瑞芯微RK3568嵌入式AI项目实战:项目方向(三)

基于RK3568的成熟开源项目和实战资源丰富&#xff0c;以下是针对小白的精选推荐及学习路径规划&#xff0c;结合多个开源项目和详细教程&#xff0c;帮助快速入门嵌入式开发&#xff1a; 一、OpenHarmony智能设备开发 1. 凌蒙派-RK3568开发板项目 项目特点&#xff1a;支持Op…...