女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-11-24 16:21 ? 次閱讀

摘要

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

簡介

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

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

本文主要貢獻和創(chuàng)新點為:

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

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

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

動機

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

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

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

背景知識

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

FlashAttention圖解(如何加速Attention)

GPU

GPU performance characteristics.GPU主要計算單元(如浮點運算單元)和內(nèi)存層次結(jié)構(gòu)。大多數(shù)現(xiàn)代GPU包含專用的低精度矩陣乘法單元(如Nvidia GPU的Tensor Core用于FP16/BF16矩陣乘法)。內(nèi)存層次結(jié)構(gòu)分為高帶寬內(nèi)存(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的軟件和硬件架構(gòu)

從Hardware角度來看:

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

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

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

從Software(編程)角度來看:

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

CUDA軟件示例

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

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

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

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

thread:一個CUDA并行程序由多個thread來執(zhí)行

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

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

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

Hardware和Software的聯(lián)系:

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

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

一個CUDA core可以執(zhí)行一個thread,一個SM中的CUDA core會被分成幾個warp,由warp scheduler負責(zé)調(diào)度。GPU規(guī)定warp中所有thread在同一周期執(zhí)行相同的指令,盡管這些thread執(zhí)行同一程序地址,但可能產(chǎn)生不同的行為,比如分支結(jié)構(gòu)。一個SM同時并發(fā)的warp是有限的,由于資源限制,SM要為每個block分配共享內(nèi)存,也要為每個warp中的thread分配獨立的寄存器,所以SM的配置會影響其所支持的block和warp并發(fā)數(shù)量。

GPU執(zhí)行模型小結(jié):

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

FlashAttention

FlashAttention應(yīng)用了tiling技術(shù)來減少內(nèi)存訪問,具體來說:

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

2. 計算這部分數(shù)據(jù)的Attention結(jié)果

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

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

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

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

FlashAttention-2

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

Algorithm

FlashAttention在FlashAttention算法基礎(chǔ)上進行了調(diào)整,減少了非矩陣乘法運算(non-matmul)的FLOPs。這是因為現(xiàn)代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

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

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

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

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

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

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

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

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

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

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

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

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

有了上面分析和之前對FlashAttention的講解,再看下面?zhèn)未a就沒什么問題了。

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

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

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

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

Parallelism

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

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

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

Work Partitioning Between Warps

上一節(jié)討論了如何分配thread block,然而在每個thread block內(nèi)部,我們也需要決定如何在不同的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,但是結(jié)合下圖黃色框部分推斷,我認為是HBM。

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7631

    瀏覽量

    166336
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4907

    瀏覽量

    130616
  • 矩陣
    +關(guān)注

    關(guān)注

    0

    文章

    429

    瀏覽量

    35008

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

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    快手上線鴻蒙應(yīng)用高性能解決方案:數(shù)據(jù)反序列化性能提升90%

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

    直線電機與旋轉(zhuǎn)電機性能比

    直線電機與旋轉(zhuǎn)電機作為現(xiàn)代工業(yè)驅(qū)動系統(tǒng)的兩大核心組件,各自擁有獨特的性能特點和適用場景。本文將從速度、加速度、精度、動態(tài)響應(yīng)、結(jié)構(gòu)及應(yīng)用領(lǐng)域等多個維度,對直線電機與旋轉(zhuǎn)電機進行全面而深入的性能比
    的頭像 發(fā)表于 03-16 16:55 ?422次閱讀

    燒結(jié)銀的導(dǎo)電性能比其他導(dǎo)電膠優(yōu)勢有哪些???

    燒結(jié)銀的導(dǎo)電性能比其他導(dǎo)電膠優(yōu)勢有哪些???
    的頭像 發(fā)表于 02-27 21:41 ?169次閱讀

    ADS1212、ADS1231和ADS1230這3種AD芯片性能比

    AD芯片性能比較大家好: 小弟正在做一個靜態(tài)應(yīng)變處理電路,使用120Ω的應(yīng)變片,采樣頻率為1Hz,分辨率為1微應(yīng)變!之前試過用分立元件搭建,可溫漂效果總是不理想,最后想用集成PGA+低通濾波
    發(fā)表于 01-21 06:47

    臺積電2納米制程技術(shù)細節(jié)公布:性能功耗雙提升

    在近日于舊金山舉行的IEEE國際電子器件會議(IEDM)上,全球領(lǐng)先的晶圓代工企業(yè)臺積電揭曉了其備受期待的2納米(N2)制程技術(shù)的詳細規(guī)格。 據(jù)臺積電介紹,相較于前代制程技術(shù),N2制程在性能
    的頭像 發(fā)表于 12-19 10:28 ?653次閱讀

    臺積電2nm制成細節(jié)公布:性能提升15%,功耗降低35%

    的顯著進步。 臺積電在會上重點介紹了其2納米“納米片(nanosheets)”技術(shù)。據(jù)介紹,相較于前代制程,N2制程在性能提升了15%,功耗降低了高達30%,能效顯著
    的頭像 發(fā)表于 12-18 16:15 ?523次閱讀

    如何提升漆包線的導(dǎo)電性能

    提升漆包線導(dǎo)電性能的方法 1. 選擇合適的導(dǎo)體材料 導(dǎo)體材料的選擇對漆包線的導(dǎo)電性能有著直接的影響。銅和鋁是最常見的導(dǎo)體材料,它們各有優(yōu)缺點: 銅 :銅的導(dǎo)電性能優(yōu)于鋁,但價格較高。銅
    的頭像 發(fā)表于 12-09 09:25 ?800次閱讀

    汽車制動系統(tǒng)如何提升剎車性能

    汽車制動系統(tǒng)的剎車性能是確保行車安全的關(guān)鍵因素之一。為了提升剎車性能,可以從以下幾個方面進行改進和優(yōu)化: 一、選用高性能制動部件 剎車片 : 原廠剎車片通常采用少金屬配方,摩擦系數(shù)較低
    的頭像 發(fā)表于 11-28 09:47 ?1193次閱讀

    不同材質(zhì)的阻尼器性能比

    能量耗散能力和耐久性。 不同材質(zhì)阻尼器的性能比較 1. 粘彈性阻尼器 粘彈性材料,如橡膠和聚合物,因其高阻尼和良好的粘彈性特性而被廣泛用于阻尼器的制造。這些材料能夠在較寬的溫度范圍內(nèi)保持性能穩(wěn)定,且具有較好的耐老
    的頭像 發(fā)表于 11-14 10:46 ?2091次閱讀

    聯(lián)發(fā)科天璣9400發(fā)布:能效與端側(cè)AI引領(lǐng)移動芯片行業(yè)革新

    在AI大模型的推動下,智能手機市場的高端化進程進一步加速,旗艦機型的競爭已不再單純依賴于“大力飛磚”式的極限性能比拼,而是更加注重綜合素質(zhì)的提升。特別是在手機芯片領(lǐng)域,高性能與低功耗、高能效
    的頭像 發(fā)表于 10-12 15:56 ?1022次閱讀

    電流斜坡和電壓斜坡熱插拔控制器IC的性能比

    電子發(fā)燒友網(wǎng)站提供《電流斜坡和電壓斜坡熱插拔控制器IC的性能比較.pdf》資料免費下載
    發(fā)表于 10-12 10:02 ?0次下載
    電流斜坡和電壓斜坡熱插拔控制器IC的<b class='flag-5'>性能比</b>較

    集成FET與外部FET:電機驅(qū)動器的性能比

    電子發(fā)燒友網(wǎng)站提供《集成FET與外部FET:電機驅(qū)動器的性能比較.pdf》資料免費下載
    發(fā)表于 09-10 10:54 ?1次下載
    集成FET與外部FET:電機驅(qū)動器的<b class='flag-5'>性能比</b>較

    水冷的體積小、重量輕、能量密度大傳熱性能比較好、噪音也比較低

    性能
    深圳崧皓電子
    發(fā)布于 :2024年09月02日 06:56:00

    韓國服務(wù)器的性能如何提升

    韓國服務(wù)器的性能可以通過硬件升級、網(wǎng)絡(luò)優(yōu)化、緩存優(yōu)化和軟件優(yōu)化來提升。具體方法如下,rak小編為您整理發(fā)布韓國服務(wù)器的性能如何提升
    的頭像 發(fā)表于 08-15 11:33 ?412次閱讀

    ARM發(fā)布旗艦手機芯片:性能提升、AI性能增強、節(jié)能減耗

    ARM為Cortex-X系列CPU重新命名,以強調(diào)其性能的顯著提升。據(jù)稱,X925的單核性能較X4提升了36%(依據(jù)Geekbench測試結(jié)果)。此外,由于配備了高達3MB的私有L
    的頭像 發(fā)表于 05-30 11:26 ?1159次閱讀