注意力機制會計算不同 token 之間的關聯程度。
Transformer 為什麼可以「看懂上下文」?Flash Attention 又是怎麼讓它跑得更有效率?
注意力機制會計算不同 token 之間的關聯程度。
序列越長,需要處理的關聯就越多。
重點是降低中間結果的儲存/記憶體存取成本。
最重要:Flash Attention 的核心不是「少算一些注意力」,而是透過更有效率的計算與資料處理方式,減少不必要的中間結果儲存與 GPU 記憶體存取。
AttentionGPUMemory EfficiencyIO-aware例如:
模型看到「他」時,需要判斷「他」和哪些詞比較有關。
Attention 會讓模型建立 token 之間的關聯權重。
重要關聯得到較高的注意力權重。
模型就能利用上下文資訊形成更好的表示。
「我現在想找什麼?」
像你在圖書館問:「我要找跟這個問題有關的資訊。」
「我有什麼特徵可以被找到?」
像書架上的分類標籤,讓 Query 判斷哪些資訊相關。
「真正要拿來用的內容。」
找到相關資訊後,實際取出的內容就是 Value。
這就是注意力機制的核心概念。
短句還好。
但 LLM 的上下文越來越長,token 數量一增加……
Attention 需要處理 token 之間大量的關聯。
序列越長 → 計算與記憶體壓力越大
除了算力,還有一個大問題:
GPU 記憶體與資料搬運(memory I/O)。
計算中間結果後,頻繁在不同記憶體層級之間讀寫。
重新安排 Attention 的計算流程,採用更具記憶體效率的方式處理資料。
降低中間結果的儲存需求與記憶體存取成本。
→ 更快、更省 GPU 記憶體。
| 比較 | 👀 一般 Attention | ⚡ Flash Attention |
|---|---|---|
| 目的 | 計算 token 之間的注意力關聯 | 更有效率地執行 Attention |
| 核心問題 | 計算量+記憶體/資料搬運成本 | 降低不必要的中間結果儲存與 Memory I/O |
| 是否改變 Attention 的目的? | — | ❌ 不是重新定義「注意誰」 |
| 是否單純忽略小權重? | 不是這個核心概念 | ❌ 不是靠刪掉小權重來加速 |
| 漫畫 | 👀「我要算誰重要!」 | ⚡「同樣算,但我更會搬資料!」 |
「把不重要的 Attention 權重刪掉」
這比較接近稀疏注意力等其他降低計算量的思路,不是 Flash Attention 的核心。
「重新設計 Attention 的計算與資料搬運方式。」
重點放在 GPU 記憶體階層、分塊計算,以及減少不必要的中間結果讀寫。
看到「忽略小權重」→ ❌ 不要先選 Flash Attention
看到「中間結果儲存/Memory I/O/資料處理效率」→ ⚡ Flash Attention
看到「Q、K、V」→ 👀 Attention
看到「分塊/Tiling/IO-aware」→ ⚡ Flash Attention
⭐ 最終口訣:Flash Attention 不是少算「注意力」,而是少搬「資料」!
A. 透過忽略影響較小的注意力權重,減少模型需要計算的關聯數量,以降低運算成本
B. 透過調整注意力計算與資料處理方式,減少中間結果的儲存需求,進而改善速度與資源使用效率
C. 透過增加注意力計算的並行程度,使模型可同時處理更多注意力頭部
D. 透過將注意力結果暫存於高速快取記憶體,以避免重複計算造成延遲
| 關鍵字 | 立刻想到 |
|---|---|
| Q、K、V | 👀 Attention |
| 誰應該被關注 | 🎯 Attention |
| 中間結果儲存 | 💾 Flash Attention |
| GPU Memory I/O | ⚡ Flash Attention |
| 分塊/Tiling/Blocking | ⚡ Flash Attention |
| IO-aware | ⚡ Flash Attention |
| 忽略小權重 | ❌ 不是 Flash Attention 核心 |
⭐ Attention:我在看誰。
Flash Attention:我讓「看誰」這件事算得更有效率。
Attention(注意力機制)是計算 token 之間關聯程度、決定模型該「注意誰」的核心概念;Flash Attention 則是同樣在算 Attention,但透過分塊計算(Tiling)與 IO-aware 的記憶體存取方式,減少中間結果的儲存與 GPU 記憶體搬運成本,讓速度更快、更省資源。
不是,這是最常見的考試陷阱。Flash Attention 的核心不是忽略影響較小的注意力權重(那比較接近稀疏注意力的思路),而是重新安排計算與記憶體搬運方式,減少不必要的中間結果讀寫。
Query(Q)是「我現在想找什麼」,Key(K)是「我有什麼特徵可以被找到」,Value(V)是「真正要拿來用的內容」。模型透過 Q 和 K 計算關聯程度,再依權重加總 V,得到 Attention 輸出。
因為 token 數量增加會讓 token 之間需要處理的關聯數量暴增,加上計算過程中大量中間結果需要在不同記憶體層級之間讀寫(memory I/O),造成計算與記憶體存取的雙重壓力。
應該直接聯想到 Flash Attention。這類關鍵字對應的是它「調整計算與資料處理方式,降低記憶體存取成本」的核心特色,而不是「忽略小的注意力權重」。