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.pswp.cn/bicheng/75967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75967.shtml
英文地址,請注明出處:http://en.pswp.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…