<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GPU架構 on Intellectual Guides</title><link>https://ckw19810413.github.io/tags/gpu%E6%9E%B6%E6%A7%8B/</link><description>Recent content in GPU架構 on Intellectual Guides</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Sun, 11 Oct 2026 08:00:00 +0800</lastBuildDate><atom:link href="https://ckw19810413.github.io/tags/gpu%E6%9E%B6%E6%A7%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>研究生知識寓言：方寸案几上的百萬星象師與不著一紙的奇蹟</title><link>https://ckw19810413.github.io/blog/2026-10-11-flashattention-fable/</link><pubDate>Sun, 11 Oct 2026 08:00:00 +0800</pubDate><guid>https://ckw19810413.github.io/blog/2026-10-11-flashattention-fable/</guid><description>&lt;p&gt;在帝國皇家星象院的頂層，有一間令天下學者敬畏的「天機推演閣」。&lt;/p&gt;
&lt;p&gt;閣中坐著帝國首席星象大師「戴奧（Master Dao）」。大師的心算造詣早已出神入化，雙手翻飛如電，任何繁複的星宿引力與共振方程，在他指尖都能在微秒間推演完成。然而，大師的工作閣有一個奇怪且嚴苛的限制：&lt;strong&gt;他的推演案几極小，只有一尺見方&lt;/strong&gt;。這張極致打磨的黑曜石案几速度極快、觸手可及，但桌面只能容納幾塊巴掌大的小石板，根本放不下一大張完整的星象羊皮紙。&lt;/p&gt;
&lt;p&gt;而在星象閣地下百尺之處，坐落著帝國浩瀚無垠的「皇家藏書地庫」。地庫大得望不到盡頭，能夠堆放數以千萬計的卷軸與記錄冊。然而，地庫與頂層案几之間相隔著數百級曲折幽暗的石階長廊。所有的資料往返，都必須仰賴一群駝背年邁的搬運工，推著沉重的木輪車在長廊上緩慢穿梭。推車來回一趟，往往要花費大半個時辰。&lt;/p&gt;
&lt;p&gt;過去數百年，星象院只觀測天空中最明亮的幾十顆星辰，計算星辰之間的「互感引力」。但不久前，星象院架設了一座劃時代的巨型觀星透鏡。一夕之間，天空中清晰可見的星辰暴增到了「十萬顆」！&lt;/p&gt;
&lt;p&gt;皇帝下達了死命令：必須推算出這十萬顆星辰彼此凝視、兩兩互感交織的完整引力矩陣，以預測未來的帝國國運。&lt;/p&gt;
&lt;p&gt;這意味著，十萬顆星兩兩之間的交互引力關係，高達驚人的&lt;strong&gt;一百億組（$10^5 \times 10^5$）&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;星象院隨即陷入了一場前所未有的噩夢：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;第一輪搬運&lt;/strong&gt;：弟子們將十萬顆星的初始光譜從地庫用推車搬上頂閣。戴奧大師在案几上如閃電般計算兩兩之間的原始共振強度。但因為案几只有一尺見方，每算出一批數字，大師就必須寫在巨大的羊皮紙上，堆成小山，由搬運工氣喘吁吁地搬上木輪車，沿著長廊推回地庫貯存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第二輪搬運&lt;/strong&gt;：為了衡量星宿的真實命運，必須對這一百億組數值進行「星相歸一化平衡（將數值取指數並除以全局總和，以得出各星引力的精準百分比）」。然而，求分母需要知道「全部十萬顆星」的總和與極限值！於是，搬運工又得把剛送進地庫的幾千車羊皮紙，重新吭哧吭哧地推回頂閣。大師一張張翻閱以找出全局最大值並加總分母，算完之後，再將這一百億個平衡係數寫成新的幾千張羊皮紙，又一次由搬運工推回地庫貯存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第三輪搬運&lt;/strong&gt;：最後，要將平衡係數乘上各星辰的能量流向，推導出最終星軌。搬運工不得不第三次把那浩瀚的羊皮紙推回案几……&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;整整三個月過去了，推演進度幾近於零。&lt;/p&gt;
&lt;p&gt;閣樓裡出現了一幕荒謬的景象：擁有神級心算速度的戴奧大師，整天有 95% 的時間雙手托腮、坐在案几前百無聊賴地打哈欠。他只能乾等著長廊深處傳來木輪車吱呀吱呀的慢速搬運聲。&lt;/p&gt;
&lt;p&gt;更可怕的是，隨著十萬星辰的資料量擴大，地庫堆滿了寫到一半的羊皮紙，搬運工紛紛累倒在石階上，整個星象院面臨癱瘓。星象院長焦頭爛額，上書皇帝請求撥款：「陛下，星辰過於浩瀚，我們需要擴建十倍的地庫，並徵調五千名精壯搬運工！」&lt;/p&gt;
&lt;p&gt;就在全院絕望之際，一位名叫「特里（Tri）」的年輕學者站了出來。&lt;/p&gt;
&lt;p&gt;「院長、大師，根本不需要建更大的地庫，更不需要徵調搬運工。」特里平靜地說，「大師的心算速度足以洞穿天地，真正拖垮我們的，是那張**『一百億格的巨幅中間總表』**！我們被自己的習慣詛咒了——誰規定這張大表必須被完整寫下來、送進地庫？」&lt;/p&gt;
&lt;p&gt;眾人聽了紛紛斥責：「無稽之談！歸一化平衡必須除以所有星辰的總和。大師的桌面只有一尺大，若不把一百億格全部寫在羊皮紙上存進地庫，你連全局的分母是多少都不知道，如何能算得出分毫無差的全局星軌？」&lt;/p&gt;
&lt;p&gt;特里微微一笑，拿出了兩樣看似簡單的法寶：&lt;strong&gt;數個巴掌大的小布袋（瓦片）&lt;/strong&gt;，以及一道&lt;strong&gt;動態校正口訣（滾動縮放術）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;「誰說必須看完全局才能計算？只要善用數學的動態校正，我們可以在大師巴掌大的案几上，隨算、隨融、隨擦，不著一紙！」&lt;/p&gt;
&lt;p&gt;特里的推演之法令人嘆為觀止：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;瓦片分裝（分塊法）&lt;/strong&gt;：他把十萬顆星辰切分成每組僅僅數十顆的小布袋。每次只從地庫中取出兩袋放上一尺見方的案几。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;案几閉環&lt;/strong&gt;：大師在案几上瞬間算出這兩個小布袋之間的局部共鳴。此時，案几上&lt;strong&gt;絕不留存&lt;/strong&gt;任何龐大的表格，只在案几角落的兩塊小木牌上記錄三個精簡的數字：&lt;strong&gt;當前遇到的局部最大引力值&lt;/strong&gt;、&lt;strong&gt;局部的累積指數和&lt;/strong&gt;，以及&lt;strong&gt;當前累積的局部星軌向量&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;奇蹟的滾動校正&lt;/strong&gt;：當下一個小布袋被送上案几時，如果發現了更強大的新引力值，大師不需要推翻重來！特里教大師念動口訣，只需拿起刻刀，將剛才木牌上舊有的星軌向量，乘上一個神奇的衰減折算率——&lt;strong&gt;自然底數在『舊最大值減新最大值』上的指數&lt;/strong&gt;！&lt;/li&gt;
&lt;li&gt;剎那間，過去所有計算出來的數值，就在巴掌大的桌面上被優雅地『動態重縮放』到了新的尺度，隨後與新布袋的貢獻無縫疊加！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一個布袋算完，石板上的草稿隨手抹去，案几上始終乾乾淨淨，只留下三組不斷進化的精純數字。&lt;/p&gt;
&lt;p&gt;那張曾讓所有人聞風喪膽、堆滿幾千輛推車的一百億格中間大表，&lt;strong&gt;在天地間從未在一張紙上完整存在過哪怕一毫秒&lt;/strong&gt;！它像風一樣在大師的案几上誕生，在幾塊小木牌間被動態融合，隨後化為無形。&lt;/p&gt;
&lt;p&gt;沉重的木輪車徹底閒置，搬運工不再奔波。短短半盞茶的功夫，戴奧大師長舒一口氣，在十萬星辰的最終星相圖上落下了最後一筆——其精準度與昔日耗費數月計算的結果在小數點後千百位上完全吻合，沒有哪怕一絲一毫的偏差！&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="概念揭曉flashattention快取感知注意力演算法"&gt;概念揭曉：FlashAttention（快取感知注意力演算法）
&lt;/h3&gt;&lt;p&gt;這個寓言所揭示的，正是當代人工智慧與大型語言模型（LLM）底層架構中最具革命性的突破之一：&lt;strong&gt;FlashAttention&lt;/strong&gt;（由史丹佛大學博士生 Tri Dao 等人於 2022 年發表在 NeurIPS 的論文《FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness》）。&lt;/p&gt;
&lt;p&gt;在 Transformer 模型中，核心運算正是著名的縮放點積注意力（Scaled Dot-Product Attention）：
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$&lt;/p&gt;
&lt;h4 id="為什麼過去的-attention-會慢"&gt;為什麼過去的 Attention 會慢？
&lt;/h4&gt;&lt;p&gt;當我們處理長文本（如 8k、32k 甚至 128k 個 Token）時，$Q$（Query）與 $K$（Key）的點積會產生一個大小為 $N \times N$ 的中間矩陣 $S$。如果 $N = 64,000$，$N \times N$ 就包含超過 40 億個浮點數！&lt;/p&gt;
&lt;p&gt;在現代 GPU（如 NVIDIA A100、H100）中，硬體被嚴格劃分為兩層儲存：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SRAM（片上靜態快取）&lt;/strong&gt;：極小但快如閃電（A100 每個串流多處理器 SM 僅約 192 KB，但頻寬高達驚人的 19 TB/s）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HBM（高頻寬顯存 / 顯卡記憶體）&lt;/strong&gt;：很大但相對極慢（如 80 GB 顯存，頻寬僅約 1.5~2.0 TB/s，慢了將近一個數量級）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;傳統的深度學習框架（如標準 PyTorch）在計算 Attention 時，是「算一步、存一次」：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 GPU 核心算完 $S = QK^T$，把巨大的 $N \times N$ 矩陣完整寫入 HBM（顯存）。&lt;/li&gt;
&lt;li&gt;為了算 Softmax，又把這張大表從 HBM 讀回 SRAM，算完 Softmax 矩陣 $P$ 後，再次寫回 HBM。&lt;/li&gt;
&lt;li&gt;為了乘上 $V$，第三次把 $P$ 從 HBM 讀回……&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這導致 GPU 強大的 Tensor Cores（算力）有超過 80% 的時間在「無聊地等待顯存傳輸數據」——這在系統架構中稱為 &lt;strong&gt;記憶體頻寬受限（Memory-Bound / IO-Bound）&lt;/strong&gt;。&lt;/p&gt;
&lt;h4 id="flashattention-的兩大核心魔法"&gt;FlashAttention 的兩大核心魔法
&lt;/h4&gt;&lt;p&gt;FlashAttention 敏銳地意識到：限制大模型上下文長度的根本不是計算量，而是 &lt;strong&gt;GPU 顯存讀寫次數（IO 複雜度）&lt;/strong&gt;！它透過兩大關鍵技術消除了顯存瓶頸：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;分塊計算（Tiling）&lt;/strong&gt;：
將 $Q, K, V$ 矩陣切分成恰好能塞進 GPU 片上 SRAM 的小型區塊（Block）。所有矩陣乘法都在 SRAM 內部直接完成，絕不將中間的 $N \times N$ 矩陣溢出到 HBM。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;線上 Softmax（Online Softmax）&lt;/strong&gt;：
Softmax 公式 $\frac{e^{x_i}}{\sum e^{x_j}}$ 為了防止數值溢出，必須先減去全局最大值 $m = \max(x)$，且分母需要全局求和。直覺上，如果不看完整個序列，就無法計算 Softmax。
FlashAttention 巧妙引入了 Online Softmax 技巧：當處理新的區塊時，若出現了新的局部最大值 $m_{new}$，它利用恆等式：
$$e^{x - m_{new}} = e^{x - m_{old}} \times e^{m_{old} - m_{new}}$$
直接將先前已經累加的未歸一化輸出乘以補償因子 $e^{m_{old} - m_{new}}$ 進行&lt;strong&gt;動態重縮放（Rescaling）&lt;/strong&gt;！這使得模型可以一邊遍歷區塊，一邊精確更新 Attention 輸出，而&lt;strong&gt;完全不需要在記憶體中具現化（Materialize）那張龐大的 $N \times N$ 矩陣&lt;/strong&gt;！&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外，在反向傳播時，FlashAttention 寧可在 SRAM 裡重新計算注意力，也不把中間矩陣保存在顯存中（以運算換頻寬）。最終，顯存佔用從 $O(N^2)$ 劇降為 $O(N)$，端到端訓練速度提升 2 至 4 倍，且&lt;strong&gt;在數學精度上 100% 精確等價（Exact Attention）&lt;/strong&gt;，沒有任何近似誤差。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="故事中的隱喻對應"&gt;故事中的隱喻對應
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;故事中的元素&lt;/th&gt;
&lt;th&gt;深度學習 / GPU 架構概念&lt;/th&gt;
&lt;th&gt;深度解析&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;首席星象大師「戴奧（Dao）」&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;GPU 運算核心（Tensor Cores / CUDA Cores）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;算力極度強大、每秒可執行數百兆次浮點運算，但必須有就近的快取供應資料。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一尺見方的方寸黑曜石案几&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;片上快取（On-chip SRAM）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;容量極小（數百 KB 至數 MB），但頻寬極高（19+ TB/s），資料進出幾乎零延遲。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;地下浩瀚的皇家藏書地庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;高頻寬顯存（HBM / VRAM）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;容量巨大（數十至數百 GB），但頻寬相對於運算核心極為狹窄，是主要的延遲瓶頸。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;駝背搬運工在長廊來回推車&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;顯存記憶體傳輸瓶頸（Memory IO Latency）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;數據在 SRAM 與 HBM 之間反覆搬運所產生的等待時間（IO-bound）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;十萬顆星辰兩兩互感矩陣（一百億格）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$N \times N$ 注意力矩陣（Attention Matrix $QK^T$）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;長序列注意力機制中隨著序列長度呈平方級暴增的中間注意力權重。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;星相歸一化平衡&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Softmax 歸一化操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;將注意力得分轉化為機率分佈的非線性操作，傳統上需要全局統計量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;巴掌大的小布袋&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;區塊切分（Tiling / Block Partitioning）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;將龐大的矩陣分解為能塞進 SRAM 快取的小區塊進行局部平行運算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;案几角落的三塊小木牌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;統計量暫存（Running Statistics: $m, l, O$）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在 SRAM 中維護的局部最大值、局部配分函數（分母和）與累積輸出向量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;刻刀動態折算的口訣&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;線上 Softmax 重縮放因子（$e^{m_{old} - m_{new}}$）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;當發現新的最大值時，對先前累積的中間量進行動態縮放校正，保持數學精確性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中間大表在天地間從未在紙上存在過&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;算子融合與免實體化（Fused Kernel &amp;amp; No Intermediate HBM Writes）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;整個 Attention 計算被融合在單一 GPU 核心程式內，中間矩陣從未寫入顯存。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;結果分毫不差、無一絲偏差&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;精確注意力（Exact Attention）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;與近似注意力（如稀疏注意力）不同，FlashAttention 在數學上與標準注意力結果完全相同。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;正是這個擺脫了「記憶體牆」束縛的精妙設計，鋪平了當代大語言模型邁向 100K 乃至 1M 超長上下文窗口的康莊大道。&lt;/p&gt;</description></item></channel></rss>