国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FlashAttention2詳解(性能比FlashAttention提升200%)

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-11-24 16:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

摘要

在過去幾年中,如何擴展Transformer使之能夠處理更長的序列一直是一個重要問題,因為這能提高Transformer語言建模性能和高分辨率圖像理解能力,以及解鎖代碼、音頻和視頻生成等新應用。然而增加序列長度,注意力層是主要瓶頸,因為它的運行時間和內存會隨序列長度的增加呈二次(平方)增加。FlashAttention利用GPU非勻稱的存儲器層次結構,實現了顯著的內存節省(從平方增加轉為線性增加)和計算加速(提速2-4倍),而且計算結果保持一致。但是,FlashAttention仍然不如優化的矩陣乘法(GEMM)操作快,只達到理論最大FLOPs/s的25-40%。作者觀察到,這種低效是由于GPU對不同thread blocks和warps工作分配不是最優的,造成了利用率低和不必要的共享內存讀寫。因此,本文提出了FlashAttention-2以解決這些問題。

簡介

如何擴展Transformer使之能夠處理更長的序列一直是一個挑戰,**因為其核心注意力層的運行時間和內存占用量隨輸入序列長度成二次增加。**我們希望能夠打破2k序列長度限制,從而能夠訓練書籍、高分辨率圖像和長視頻。此外,寫作等應用也需要模型能夠處理長序列。過去一年中,業界推出了一些遠超之前長度的語言模型:GPT-4為32k,MosaicML的MPT為65k,以及Anthropic的Claude為100k。

雖然相比標準Attention,FlashAttention快了2~4倍,節約了10~20倍內存,但是離設備理論最大throughput和flops還差了很多。本文提出了FlashAttention-2,它具有更好的并行性和工作分區。實驗結果顯示,FlashAttention-2在正向傳遞中實現了約2倍的速度提升,達到了理論最大吞吐量的73%,在反向傳遞中達到了理論最大吞吐量的63%。在每個A100 GPU上的訓練速度可達到225 TFLOPs/s。

本文主要貢獻和創新點為:

1. 減少了non-matmul FLOPs的數量(消除了原先頻繁rescale)。雖然non-matmul FLOPs僅占總FLOPs的一小部分,但它們的執行時間較長,這是因為GPU有專用的矩陣乘法計算單元,其吞吐量高達非矩陣乘法吞吐量的16倍。因此,減少non-matmul FLOPs并盡可能多地執行matmul FLOPs非常重要。

2. 提出了在序列長度維度上并行化。該方法在輸入序列很長(此時batch size通常很小)的情況下增加了GPU利用率。即使對于單個head,也在不同的thread block之間進行并行計算。

3. 在一個attention計算塊內,將工作分配在一個thread block的不同warp上,以減少通信和共享內存讀/寫。

動機

為了解決這個問題,研究者們也提出了很多近似的attention算法,然而目前使用最多的還是標準attention。FlashAttention利用tiling、recomputation等技術顯著提升了計算速度(提升了2~4倍),并且將內存占用從平方代價將為線性代價(節約了10~20倍內存)。雖然FlashAttention效果很好,但是仍然不如其他基本操作(如矩陣乘法)高效。例如,其前向推理僅達到GPU(A100)理論最大FLOPs/s的30-50%(下圖);反向傳播更具挑戰性,在A100上僅達到最大吞吐量的25-35%。相比之下,優化后的GEMM(矩陣乘法)可以達到最大吞吐量的80-90%。通過觀察分析,這種低效是由于GPU對不同thread blocks和warps工作分配不是最優的,造成了利用率低和不必要的共享內存讀寫。

959fa84a-76f8-11ee-939d-92fbcf53809c.jpg

Attention forward speed on A100 GPU. (Source: Figure 5 of the paper.)

背景知識

下面介紹一些關于GPU的性能和計算特點,有關Attention和FlashAttention的詳細內容請參考第一篇文章

FlashAttention圖解(如何加速Attention)

GPU

GPU performance characteristics.GPU主要計算單元(如浮點運算單元)和內存層次結構。大多數現代GPU包含專用的低精度矩陣乘法單元(如Nvidia GPU的Tensor Core用于FP16/BF16矩陣乘法)。內存層次結構分為高帶寬內存(High Bandwidth Memory, HBM)和片上SRAM(也稱為shared memory)。以A100 GPU為例,它具有40-80GB的HBM,帶寬為1.5-2.0TB/s,每個108個streaming multiprocessors共享的SRAM為192KB,帶寬約為19TB/s。

這里忽略了L2緩存,因為不能直接被由程序員控制。

95acec58-76f8-11ee-939d-92fbcf53809c.jpg

CUDA的軟件和硬件架構

從Hardware角度來看:

Streaming Processor(SP):是最基本的處理單元,從fermi架構開始被叫做CUDA core。

Streaming MultiProcessor(SM):一個SM由多個CUDA core(SP)組成,每個SM在不同GPU架構上有不同數量的CUDA core,例如Pascal架構中一個SM有128個CUDA core。

SM還包括特殊運算單元(SFU),共享內存(shared memory),寄存器文件(Register File)和調度器(Warp Scheduler)等。register和shared memory是稀缺資源,這些有限的資源就使每個SM中active warps有非常嚴格的限制,也就限制了并行能力。

從Software(編程)角度來看:

95b87a46-76f8-11ee-939d-92fbcf53809c.jpg

CUDA軟件示例

thread是最基本的執行單元(the basic unit of execution)。

warp是SM中最小的調度單位(the smallest scheduling unit on an SM),一個SM可以同時處理多個warp

thread block是GPU執行的最小單位(the smallest unit of execution on the GPU)。

一個warp中的threads必然在同一個block中,如果block所含thread數量不是warp大小的整數倍,那么多出的那個warp中會剩余一些inactive的thread。也就是說,即使warp的thread數量不足,硬件也會為warp湊足thread,只不過這些thread是inactive狀態,但也會消耗SM資源。

thread:一個CUDA并行程序由多個thread來執行

warp:一個warp通常包含32個thread。每個warp中的thread可以同時執行相同的指令,從而實現SIMT(單指令多線程)并行。

thread block:一個thread block可以包含多個warp,同一個block中的thread可以同步,也可以通過shared memory進行通信。

grid:在GPU編程中,grid是一個由多個thread block組成的二維或三維數組。grid的大小取決于計算任務的規模和thread block的大小,通常根據計算任務的特點和GPU性能來進行調整。

Hardware和Software的聯系:

SM采用的是Single-Instruction Multiple-Thread(SIMT,單指令多線程)架構,warp是最基本的執行單元,一個warp包含32個并行thread,這些thread以不同數據資源執行相同的指令。

當一個kernel被執行時,grid中的thread block被分配到SM上,大量的thread可能被分到不同的SM上,但是一個線程塊的thread只能在一個SM上調度,SM一般可以調度多個block。每個thread擁有自己的程序計數器和狀態寄存器,并且可以使用不同的數據來執行指令,從而實現并行計算,這就是所謂的Single Instruction Multiple Thread。

一個CUDA core可以執行一個thread,一個SM中的CUDA core會被分成幾個warp,由warp scheduler負責調度。GPU規定warp中所有thread在同一周期執行相同的指令,盡管這些thread執行同一程序地址,但可能產生不同的行為,比如分支結構。一個SM同時并發的warp是有限的,由于資源限制,SM要為每個block分配共享內存,也要為每個warp中的thread分配獨立的寄存器,所以SM的配置會影響其所支持的block和warp并發數量。

GPU執行模型小結:

GPU有大量的threads用于執行操作(an operation,也稱為a kernel)。這些thread組成了thread block,接著這些blocks被調度在SMs上運行。在每個thread block中,threads被組成了warps(32個threads為一組)。一個warp內的threads可以通過快速shuffle指令進行通信或者合作執行矩陣乘法。在每個thread block內部,warps可以通過讀取/寫入共享內存進行通信。每個kernel從HBM加載數據到寄存器和SRAM中,進行計算,最后將結果寫回HBM中。

FlashAttention

FlashAttention應用了tiling技術來減少內存訪問,具體來說:

1. 從HBM中加載輸入數據(K,Q,V)的一部分到SRAM中

2. 計算這部分數據的Attention結果

3. 更新輸出到HBM,但是無需存儲中間數據S和P

下圖展示了一個示例:首先將K和V分成兩部分(K1和K2,V1和V2,具體如何劃分根據數據大小和GPU特性調整),根據K1和Q可以計算得到S1和A1,然后結合V1得到O1。接著計算第二部分,根據K2和Q可以計算得到S2和A2,然后結合V2得到O2。最后O2和O1一起得到Attention結果。

95d09586-76f8-11ee-939d-92fbcf53809c.jpg

值得注意的是,輸入數據K、Q、V是存儲在HBM上的,中間結果S、A都不需要存儲到HBM上。通過這種方式,FlashAttention可以將內存開銷降低到線性級別,并實現了2-4倍的加速,同時避免了對中間結果的頻繁讀寫,從而提高了計算效率。

FlashAttention-2

經過鋪墊,正式進入正文。我們先講述FlashAttention-2對FlashAttention的改進,從而減少了非矩陣乘法運算(non-matmul)的FLOPs。然后說明如何將任務分配給不同的thread block進行并行計算,充分利用GPU資源。最后描述了如何在一個thread block內部分配任務給不同的warps,以減少訪問共享內存次數。這些優化方案使得FlashAttention-2的性能提升了2-3倍。

Algorithm

FlashAttention在FlashAttention算法基礎上進行了調整,減少了非矩陣乘法運算(non-matmul)的FLOPs。這是因為現代GPU有針對matmul(GEMM)專用的計算單元(如Nvidia GPU上的Tensor Cores),效率很高。以A100 GPU為例,其FP16/BF16矩陣乘法的最大理論吞吐量為312 TFLOPs/s,但FP32非矩陣乘法僅有19.5 TFLOPs/s,即每個no-matmul FLOP比mat-mul FLOP昂貴16倍。為了確保高吞吐量(例如超過最大理論TFLOPs/s的50%),我們希望盡可能將時間花在matmul FLOPs上。

Forward pass

通常實現Softmax算子為了數值穩定性(因為指數增長太快,數值會過大甚至溢出),會減去最大值:

95d47dae-76f8-11ee-939d-92fbcf53809c.png

這樣帶來的代價就是要對95df671e-76f8-11ee-939d-92fbcf53809c.png遍歷3次。

為了減少non-matmul FLOPs,本文在FlashAttention基礎上做了兩點改進:

95ed1a30-76f8-11ee-939d-92fbcf53809c.png

95f7f234-76f8-11ee-939d-92fbcf53809c.png

960c8b2c-76f8-11ee-939d-92fbcf53809c.png

簡單示例的FlashAttention完整計算步驟(紅色部分表示V1和V2區別):

9615dea2-76f8-11ee-939d-92fbcf53809c.jpg

FlashAttention-2的完整計算步驟(紅色部分表示V1和V2區別):

962181e4-76f8-11ee-939d-92fbcf53809c.png

962a8410-76f8-11ee-939d-92fbcf53809c.jpg

有了上面分析和之前對FlashAttention的講解,再看下面偽代碼就沒什么問題了。

962e598c-76f8-11ee-939d-92fbcf53809c.jpg

Causal masking是attention的一個常見操作,特別是在自回歸語言建模中,需要對注意力矩陣S應用因果掩碼(即任何S ,其中 > 的條目都設置為?∞)。

1. 由于FlashAttention和FlashAttention-2已經通過塊操作來實現,對于所有列索引都大于行索引的塊(大約占總塊數的一半),我們可以跳過該塊的計算。這比沒有應用因果掩碼的注意力計算速度提高了1.7-1.8倍。

2. 不需要對那些行索引嚴格小于列索引的塊應用因果掩碼。這意味著對于每一行,我們只需要對1個塊應用因果掩碼。

Parallelism

FlashAttention在batch和heads兩個維度上進行了并行化:使用一個thread block來處理一個attention head,總共需要thread block的數量等于batch size × number of heads。每個block被調到到一個SM上運行,例如A100 GPU上有108個SMs。當block數量很大時(例如≥80),這種調度方式是高效的,因為幾乎可以有效利用GPU上所有計算資源。

但是在處理長序列輸入時,由于內存限制,通常會減小batch size和head數量,這樣并行化成都就降低了。因此,FlashAttention-2還在序列長度這一維度上進行并行化,顯著提升了計算速度。此外,當batch size和head數量較小時,在序列長度上增加并行性有助于提高GPU占用率。

96415c80-76f8-11ee-939d-92fbcf53809c.png

Work Partitioning Between Warps

上一節討論了如何分配thread block,然而在每個thread block內部,我們也需要決定如何在不同的warp之間分配工作。我們通常在每個thread block中使用4或8個warp,如下圖所示。

964a3526-76f8-11ee-939d-92fbcf53809c.jpg

Work partitioning between different warps in the forward pass

964e7a6e-76f8-11ee-939d-92fbcf53809c.png

論文中原話是”However, this is inefficient since all warps need to write their intermediate results out toshared memory, synchronize, then add up the intermediate results.”,說的是shared memory而非HBM,但是結合下圖黃色框部分推斷,我認為是HBM。

966cc258-76f8-11ee-939d-92fbcf53809c.jpg

96714378-76f8-11ee-939d-92fbcf53809c.png

967ddbe2-76f8-11ee-939d-92fbcf53809c.jpg

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    39

    文章

    7739

    瀏覽量

    171719
  • gpu
    gpu
    +關注

    關注

    28

    文章

    5198

    瀏覽量

    135521
  • 矩陣
    +關注

    關注

    1

    文章

    448

    瀏覽量

    36111

原文標題:FlashAttention2詳解(性能比FlashAttention提升200%)

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    斯特綜合性能測試機提升電池組性能驗證效率精度

    深圳斯特自動化設備有限公司推出的綜合性能測試機,憑通過技術創新重新定義了電池性能測試的標準,在保證測試精度的同時,提升了驗證效率。
    的頭像 發表于 02-06 16:37 ?948次閱讀
    <b class='flag-5'>比</b>斯特綜合<b class='flag-5'>性能</b>測試機<b class='flag-5'>提升</b>電池組<b class='flag-5'>性能</b>驗證效率精度

    CQB200 - 24S28替代V24B28LT200B2破交貨周期困局

    CQB200 - 24S28替代V24B28T200BL2破交貨周期困局在工業電源模塊選型過程中,VICOR品牌的V24B28T200BL2雖憑借卓越性能在業內廣受贊譽,然而其長達26
    發表于 02-05 08:58

    單端口VDSL2線路驅動器AD8398A:性能與應用詳解

    單端口VDSL2線路驅動器AD8398A:性能與應用詳解 在電子工程師的日常工作中,線路驅動器的選擇至關重要,它直接影響著整個系統的性能和穩定性。今天,我們就來詳細探討一下Analog
    的頭像 發表于 01-23 10:20 ?188次閱讀

    解析LT1716:高性能比較器的卓越之選

    解析LT1716:高性能比較器的卓越之選 在電子設計領域,比較器是一款常用且重要的器件,其性能的優劣直接影響到整個系統的穩定性和準確性。今天,我們就來深入探討一款高性能比較器——LT1716,看看它
    的頭像 發表于 01-07 15:35 ?251次閱讀

    探索 LT6703 系列:低功耗、高性能比較器的理想之選

    探索 LT6703 系列:低功耗、高性能比較器的理想之選 在電子設計領域,比較器是不可或缺的基礎元件,廣泛應用于各種電路中實現信號的比較和處理。今天,我們就來深入了解一下 Linear
    的頭像 發表于 01-07 14:40 ?228次閱讀

    提前實測AT4V H00電流傳感器,抗諧波干擾性能比同類型產品提升30%!

    電子2025升級款AT4VH00霍爾開環電流傳感器,專門針對工業場景核心痛點“抗諧波干擾”做了專項實測,結果直接超出預期:其抗諧波干擾性能比同價位主流產品提升30%
    的頭像 發表于 12-22 16:06 ?504次閱讀
    提前實測AT4V H00電流傳感器,抗諧波干擾<b class='flag-5'>性能比</b>同類型產品<b class='flag-5'>提升</b>30%!

    SiLM2024CA-DG 200V半橋驅動器在工業應用中的性能解析

    支持CMOS/LSTTL標準 3.保護功能 欠壓鎖定保護 瞬態負壓耐受 dV/dt噪聲免疫 交叉導通防止邏輯 技術優勢詳解:1. 可靠性設計 該驅動器采用專利HVIC技術,確保在200V高壓環境下
    發表于 11-22 10:50

    谷歌云發布最強自研TPU,性能比前代提升4倍

    電子發燒友網報道(文/李彎彎)近日,谷歌云在官方博客上正式宣布,公司成功推出第七代TPU(張量處理器)“Ironwood”,該芯片預計在未來幾周內正式上市。 ? “Ironwood”由谷歌自主精心設計,能夠輕松處理從大型模型訓練到實時聊天機器人運行以及AI智能體操作等各類復雜任務。 ? 谷歌在新聞稿中著重強調,“Ironwood”是專為應對最嚴苛的工作負載而打造的。無論是大規模模型訓練、復雜的強化學習(RL),還是高容量、低延遲的AI推理和模型服務,
    的頭像 發表于 11-13 07:49 ?8634次閱讀
    谷歌云發布最強自研TPU,<b class='flag-5'>性能比</b>前代<b class='flag-5'>提升</b>4倍

    小白學大模型:大模型加速的秘密 FlashAttention 1/2/3

    在Transformer架構中,注意力機制的計算復雜度與序列長度(即文本長度)呈平方關系()。這意味著,當模型需要處理更長的文本時(比如從幾千個詞到幾萬個詞),計算時間和所需的內存會急劇增加。最開始的標準注意力機制存在兩個主要問題:內存占用高:模型需要生成一個巨大的注意力矩陣(N×N)。這個矩陣需要被保存在高帶寬內存(HBM)中。對于長序列,這很快就會超出G
    的頭像 發表于 09-10 09:28 ?4839次閱讀
    小白學大模型:大模型加速的秘密 <b class='flag-5'>FlashAttention</b> 1/<b class='flag-5'>2</b>/3

    EV12AS200A的采樣延遲微調如何提升相位精度?

    提前或延后,步進就是 24 fs。3. 相位精度提升的數學關系? 對于 1.5 GSPS、3.3 GHz 滿功率帶寬,24 fs 對應相位誤差 ≈ 2π × 3.3 GHz × 24 fs ≈ 0.5
    發表于 08-04 08:46

    什么是共模抑制?

    共模抑制詳解在探頭的數據手冊上,共模抑制性能參數是核心指標之一。共模抑制又名CMRR,通常用分貝(dB)來表示,其計算公式為:其中其中
    的頭像 發表于 06-23 09:45 ?1377次閱讀
    什么是共模抑制<b class='flag-5'>比</b>?

    進迭時空第三代高性能核X200研發進展

    繼X60和X100之后,進迭時空正在基于開源香山昆明湖架構研發第三代高性能處理器核X200。與進迭時空的第二代高性能核X100相,X200
    的頭像 發表于 06-06 16:56 ?1426次閱讀
    進迭時空第三代高<b class='flag-5'>性能</b>核X<b class='flag-5'>200</b>研發進展

    快手上線鴻蒙應用高性能解決方案:數據反序列化性能提升90%

    近日,快手在Gitee平臺上線了鴻蒙應用性能優化解決方案“QuickTransformer”,該方案針對鴻蒙應用開發中廣泛使用的三方庫“class-transformer”進行了深度優化,有效提升
    發表于 05-15 10:01

    能效和算力提升的衡量方法

    /h·W表示。 影響因素及優化方向? 技術升級?:采用變頻技術、高效電機等可提升能效,例如變頻空調通過動態調節功率減少能耗。 環境因素?:溫度、濕度等外部條件會影響實際能效表現,需結合具體場景評估。 系統優化?:通過維護保養(如清潔濾網)和合理選
    的頭像 發表于 04-28 07:47 ?3278次閱讀
    能效<b class='flag-5'>比</b>和算力<b class='flag-5'>提升</b>的衡量方法

    直線電機與旋轉電機性能比

    直線電機與旋轉電機作為現代工業驅動系統的兩大核心組件,各自擁有獨特的性能特點和適用場景。本文將從速度、加速度、精度、動態響應、結構及應用領域等多個維度,對直線電機與旋轉電機進行全面而深入的性能比
    的頭像 發表于 03-16 16:55 ?2161次閱讀