【AI學習】Transformer深入學習(二):從MHA、MQA、GQA到MLA

前面文章:
《Transformer深入學習(一):Sinusoidal位置編碼的精妙》

一、MHA、MQA、GQA

為了降低KV cache,MQA、GQA作為MHA的變體,很容易理解。
多頭注意力(MHA):
多頭注意力是一種在Transformer架構中廣泛使用的注意力機制,通過將查詢、鍵和值分別投影到多個不同的空間上,然后并行計算這些空間上的注意力得分,從而獲得更加豐富和細致的特征表示。

多查詢注意力(MQA)
多查詢注意力是MHA的一種變種,它通過共享單個key和value頭來提升性能,但可能會導致質量下降和訓練不穩定。MQA在保持速度的同時提高了模型的推理效率,但在某些情況下可能無法達到與MHA相同的效果。

分組查詢注意力(GQA)
分組查詢注意力是MQA和MHA之間的過渡方法,旨在同時保持MQA的速度和MHA的質量。GQA通過使用中間數量的鍵值頭(大于一個,小于查詢頭的數量),實現了性能和速度的平衡。具體來說,GQA通過分組的方式減少了需要處理的頭數,從而降低了內存需求和計算復雜度。

分組查詢注意力(Grouped-Query Attention,簡稱GQA)是一種用于提高大模型推理可擴展性的機制。其具體實現機制如下:

1、基本概念:GQA是多頭注意力(Multi-Head Attention,MHA)的變種,通過將查詢頭(query heads)分成多個組來減少內存帶寬的需求。每個組共享一個鍵頭(key head)和一個值頭(value head),從而降低了每個處理步驟中加載解碼器權重和注意力鍵/值的內存消耗。

2、實現方式:在實際應用中,GQA將查詢頭分成G個組,每組共享一個鍵頭和一個值頭。例如,GQA-G表示有G個組,而GQA-1則表示只有一個組,這相當于傳統的MQA(Multi-Group Query Attention)。當GQA的組數等于查詢頭的數量時,它等同于標準的MHA。

3、性能與效率平衡:GQA通過這種方式有效地平衡了性能和內存需求。它允許模型在不顯著降低性能的情況下,處理更多的請求并提高推理效率。此外,使用GQA可以避免由于加載大量解碼器權重和注意力鍵/值而導致的內存瓶頸問題

二、MLA

2.1 基礎原理

在這里插入圖片描述
這張圖,對從MHA、MQA、GQA到MLA,看的很清楚。
GQA就是用了多組KV Cahe,MQA只用了一組KV Cache。
那MLA呢?MLA看起來和MHA是一樣的,只不過存的壓縮后的隱KV,在計算的時候再通過投影倒多個KV參與注意力計算。
為什么會節省KV Cache?蘇神的文章解釋的很清楚。
看下面的公式,MLA公式如下:
在這里插入圖片描述

其中的c就是壓縮后的隱KV。
但是這樣好像無法節省KV Cache,因為計算和MHA一樣了,關鍵在于下面的轉換公式:
在這里插入圖片描述
這個公式把注意力的計算做了轉換,k的投影矩陣這樣就可以合并倒q的投影矩陣中。
另外,因為注意力之后的o還有一個投影矩陣,在這里插入圖片描述也可以合并到后面的投影矩陣中。
c作為壓縮后的隱KV,是所有頭共享的,這樣就實現了內存的節省

2.2 增加RoPE

但是,如上面,矩陣合并之后,就和RoPE不兼容了,具體看蘇神的分析文章。
MLA采取了一種混合的方法——每個 Attention Head的 Q、K 新增 dr個維度用來添加 RoPE,其中 K 新增的維度每個 Head 共享:
在這里插入圖片描述
因為dr遠小于dk,所以增加的內存空間不大。

2.3 最后的版本

MLA 的最終版本,還將 Q 的輸入也改為了低秩投影形式,可以減少訓練期間參數量和相應的梯度的顯存。
在這里插入圖片描述
MLA這種方法,在訓練階段還是照常進行,此時優化空間不大;在推理階段,應該可以大幅減少顯存。
見蘇神的分析:“ MLA 在推理階段做的這個轉換,雖然能有效減少 KV Cache,但其推理的計算量是增加的。
那為什么還能提高推理效率呢?這又回到“瓶頸”一節所討論的問題了,我們可以將 LLM 的推理分兩部分:第一個 Token 的生成(Prefill)和后續每個 Token 的生成(Generation)。
Prefill 階段涉及到對輸入所有 Token 的并行計算,然后把對應的 KV Cache 存下來,這部分對于計算、帶寬和顯存都是瓶頸,MLA 雖然增大了計算量,但 KV Cache 的減少也降低了顯存和帶寬的壓力,大家半斤八兩;但是 Generation 階段由于每步只計算一個 Token,實際上它更多的是帶寬瓶頸和顯存瓶頸,因此 MLA 的引入理論上能明顯提高 Generation 的速度。”

三、參考文章

蘇神:《緩存與效果的極限拉扯:從MHA、MQA、GQA到MLA》
https://mp.weixin.qq.com/s/yCczYU0po0PvPTa-eh2pfg

《大模型KV Cache節省神器MLA學習筆記》
https://mp.weixin.qq.com/s/cBMrRUdM1IM0T1ji_ODxng

《注意力機制的變體之MLA》
https://mp.weixin.qq.com/s/dWZk8TBY89re207ZL3GjfA

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65082.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

trendFinder - 利用 AI 掌握社交媒體上的熱門話題

1600 Stars 177 Forks 7 Issues 2 貢獻者 MIT License Javascript 語言 代碼: https://github.com/ericciarla/trendFinder 更多AI開源軟件:AI開源 - 小眾AI Trend Finder 收集并分析來自關鍵影響者的帖子,然后在檢測到新趨勢或產品發布時發送 Slack 通知…

以圖像識別為例,關于卷積神經網絡(CNN)的直觀解釋

大家讀完覺得有意義記得關注和點贊!!! 作者以圖像識別為例,用圖文而非數學公式的方式解釋了卷積神經網絡的工作原理, 適合初學者和外行掃盲。 目錄 1 卷積神經網絡(CNN) 1.1 應用場景 1.2 起…

Python 數據結構揭秘:棧與隊列

棧(Stack) 定義 棧是一種后進先出(Last In First Out, LIFO)的數據結構。它類似于一個容器,只能在一端進行插入和刪除操作。棧有兩個主要的操作:push(入棧)和 pop(出棧…

vim 的基礎使用

目錄 一:vim 介紹二:vim 特點三:vim 配置四:vim 使用1、vim 語法格式2、vim 普通模式(1)保存退出(2)光標跳轉(3)文本刪除(4)文本查找&…

HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級

注:本文為 “HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級” 相關文章合輯。 引文圖片 csdn 轉儲異常,重傳。 篇 1:Smart-Baby 回復中給出故障現象判斷參考 篇 2、篇3 :HP 官方 BIOS 恢復、升級教程 開機黑屏&#xff0c…

JAVA:利用 Redis 實現每周熱評的技術指南

1、簡述 在現代應用中,尤其是社交媒體和內容平臺,展示熱門評論是常見的功能。我們可以通過 Redis 的高性能和豐富的數據結構,輕松實現每周熱評功能。本文將詳細介紹如何利用 Redis 實現每周熱評,并列出完整的實現代碼。 2、需求分…

VSCode下配置Blazor環境 斷點調試Blazor項目

VSCode下使用Blazor的環境配置和插件推薦 Blazor是一種用于構建交互式Web UI的.NET框架,它可以讓你使用C#、Razor和HTML進行Web開發,而不需要JavaScript。在這篇文章中,我們將介紹如何在VSCode中配置Blazor環境,并推薦一些有用的…

《Rust權威指南》學習筆記(一)

基本介紹 1.Rust使用場景 :需要運行速度、需要內存安全、更好的利用多處理器。程序員無法在安全的Rust代碼中執行任何非法的內存操作。相對于C#等帶有垃圾回收機制的語言來講,Rust遵循了零開銷抽象(Zero-Cost Abstraction)規則&a…

STM32-筆記26-WWDG窗口看門狗

一、簡介 窗口看門狗用于監測單片機程序運行時效是否精準,主要檢測軟件異常,一般用于需要精準檢測程序運行時間的場合。 窗口看門狗的本質是一個能產生系統復位信號和提前喚醒中斷的6位計數器(有的地方說7位。其實都無所謂&#xff0…

ARM CCA機密計算安全模型之固件更新

安全之安全(security)博客目錄導讀 目錄 1、遠程更新 2、本地更新 3、魯棒性 1、遠程更新 Arm歡迎關于CCA固件更新需求的反饋。一般而言,CCA固件更新過程可以描述如下: CCA固件更新客戶端使用固件更新協議與遠程更新服務通信。CCA固件更新客戶端將…

Assimp的ReadFileFromMemory函數踩坑

使用ReadFileFromMemory函數加載模型的問題 使用ReadFileFromMemory函數無法加載obj和md3等模型數據分散在多個文件中的模型。obj模型通常有一部分數據(如紋理數據)在mtl文件中保存,如果只把obj文件加載到內存中,并通過ReadFileF…

機組的概述

計算機系統組成 硬件系統和軟件系統 計算機硬件 1.馮諾依曼機基本思想 特點 1.采用“存儲程序”工作方式 2.硬件系統由運算器,存儲器,控制器,輸入輸出設備組成 3.指令和數據存在存儲器中,形式無區別 4.指令和數據用二進制代…

后端開發入門超完整速成路線(算法篇)

引言 后端開發是軟件開發中不可或缺的一部分,它涉及到服務器、數據庫、API等核心組件的構建和維護。對于初學者來說,掌握算法和數據結構是進入后端開發領域的基礎。本文將為你提供一個超完整的算法學習路線,幫助你快速入門,并在文…

主鍵有多種設計

1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主鍵ID 優點: 簡單直觀自動生成遞增有序,對索引友好 缺點: 可能暴露業務信息分布式系統下需要特殊處理合并數據時可能沖突 2. UUID/GUID id char(36) NOT NULL COMMENT 主鍵ID …

【面試】后端開發面試中常見數據結構及應用場景、原理總結

在后端開發面試中,常見的數據結構包括數組、鏈表、棧、隊列、二叉樹、平衡樹、堆、圖和哈希表等。以下是這些數據結構的總結,包括它們的應用場景、優缺點。 常見數據結構及其應用場景 數據結構應用場景數組存儲固定大小的數據集合,如學生成…

TypyScript從入門到精通

TypyScript從入門到精通 TypyScript 是什么?增加了什么環境搭建二、為何需要 TypeScript三、編譯 TypeScript四、類型聲明五、類型推斷基本類型六、類型總覽JavaScript 中的數據類型TypeScript 中的數據類型1. 上述所有 JavaScript 類型2. 六個新類型:3.…

Tableau數據可視化與儀表盤搭建-安裝教程

下載 tableau.com/zh-cn/support/releases 滾動到最下方的下載 在下載的同時 我們點擊登錄,去注冊一個tableau的賬號 下面點擊我們下載好的tableau安裝程序 不要自定義安裝,會有路徑問題 點擊試用14天 點擊激活 激活學生 tableau.com/zh-cn/academic…

049_小馳私房菜_MTK Camera debug,通過adb 命令讀寫Camera sensor寄存器地址的值

一、讀取/寫入 某個寄存器地址的值 設備先adb root 1)讀取寄存器地址的值 /proc/driver # echo "0x0a34" > camsensor && dmesg |grep -i a34 2)往寄存器地址寫值 /proc/driver # echo "0x3304 0x66” > camsensor && dmesg |grep -…

Scala_【4】流程控制

第四章 分支控制if-else單分支雙分支多分支返回值嵌套分支 For循環控制包含邊界不包含邊界循環守衛循環步長嵌套循環循環返回值 While循環Break友情鏈接 分支控制if-else 單分支 雙分支 多分支 返回值 嵌套分支 For循環控制 Scala也為for循環這一常見的控制結構提供了非常多的…

Flink源碼解析之:Flink On Yarn模式任務提交部署過程解析

Flink源碼解析之:Flink On Yarn模式任務提交部署過程解析 一、Flink on Yarn部署模式概述 Apache Hadoop YARN 在許多數據處理框架中都很流行。 Flink 服務提交給 YARN 的 ResourceManager,后者會在 YARN NodeManagers 管理的機器上生成容器。 Flink 將…