How a GPU Actually Works

Image

原始來源與檔名:2026-08-14T094618+0800-How a GPU Actually Works.md


SOURCE | 資訊源評估

NAPKIN | 餐巾紙

餐巾紙公式

效能瓶頸 = Arithmetic_Intensity (Operations / Bytes_fetched) ↔ Break-even_Ratio

如果每次從主記憶體抓資料所做的運算量(Work per byte),低於硬體的損益平衡點(如 H100 約為 300),則系統被「記憶體頻寬」卡死,算力再高也沒用。

一句話

GPU 算力很廉價,真正昂貴的是資料移動;在 LLM 領域,Token 生成慢不是因為 GPU 算不動,而是被記憶體頻寬(搬運參數)給塞爆了。

餐巾紙草圖

┌──────────────────────────────────────────
│         GPU Memory Hierarchy

│ [Thread] Register (Free, Instant)
│    ↓
│ [SM] Shared Memory / L1 (Very Cheap)
│    ↓
│ [Chip] L2 Cache (Noticeably Slower)
│    ↓
│ [Off-chip] HBM / VRAM (Slowest, Bottleneck) ◄── 140GB Weights Live Here
└──────────────────────────────────────────

ROUND 1: SKELETON | 骨架掃描

“這本書在說什麼”

章節骨架

  1. 根本不對稱 (Asymmetry): 運算便宜,抓取資料昂貴。
  2. GPU 的架構選擇: 放棄 CPU 的複雜控制與快取預測邏輯,塞滿簡單的算術單元(ALU),靠著「瞬間切換 Warp」來隱藏資料等待時間。
  3. 記憶體階層 (Memory Ladder): 暫存器 -> 共享記憶體(SM內) -> L2 快取 -> 主記憶體(HBM/VRAM)。
  4. 損益平衡點 (Break-even ratio): 用硬體峰值算力除以峰值頻寬(以 H100 為例,大約是 300 Ops/Byte)。
  5. LLM 推理的極端狀況: 解析為何 Prefill 是 Compute-bound,而 Token 生成是 Memory-bound。
  6. 優化手段的本質: 所有優化(Batching, Fusion, Quantization)都是為了增加分子(算力)或減少分母(搬運量)。

ROUND 2: DISSECTION | 血肉解剖

“憑什麼這麼說”

論證鏈

┌────────────────────────────────────────────────────────────
│  【硬體現實】GPU 算力成長速度遠大於記憶體頻寬成長速度
│    ↓
│  【架構妥協】GPU 刪除複雜預測器,改以大量 Thread 切換來隱藏延遲
│    ↓
│  【效能黃金公式】Arithmetic Intensity = Ops / Bytes。H100 門檻約為 300
│    ↓
│  【LLM 應用】生成 1 個 Token 需要讀取所有權重(如 70B模型=140GB),但每個權重只做 2 個 Ops(乘加)
│    ↓
│  【推導】Ops/Byte = 1。遠低於 300 的門檻。
│    ↓
│  【結論】Token 生成永遠卡在記憶體頻寬。加大 Batch Size 是唯一能重複利用權重、提高 Ops/Byte 的方法
└────────────────────────────────────────────────────────────

關鍵證據

  1. H100 規格試算:989 TFLOPS (BF16) / 3.35 TB/s 頻寬 ≈ 295 Ops/Byte。任何低於此比例的任務都無法跑滿 GPU 算力。
  2. 生成速率的天花板:70B 模型在 16-bit 下約佔 140GB。以 3.3 TB/s 頻寬計算,讀取一次全身權重至少需要 42 毫秒 (140/3300),因此 Batch Size = 1 時,物理極限就是每秒 ~24 個 Token,不管軟體怎麼改都無法突破。

隱形假設與邊界

ROUND 3: SOUL | 靈魂提取

“還能怎麼用”

留白提問 (Guided Reflection)

跨域映射

DEEP READ | 精讀指引 (Must-Read Segments)

[!IMPORTANT] 學習的本質需要「認知阻力」。請親自回到原文閱讀以下核心段落,感受原始論述的阻力,不要只依賴 AI 的總結。

  1. The break-even ratio
    • 「Take the chip’s peak arithmetic rate and divide it by its peak memory bandwidth. That gives you the work-per-byte ratio… Below 300, you are limited by memory. Above 300, you are limited by arithmetic.」
    • 推薦理由: 這是整篇文章最精華的數學核心(Roofline Model)。理解這個比例,你就能具備診斷任何 GPU 效能瓶頸的架構師直覺。
  2. Why generating a token is the worst case imaginable
    • 「140 billion operations funded by 140 GB of traffic, which is 1 operation per byte… roughly three hundred times below break-even.」
    • 推薦理由: 完美解釋了 LLM Inference 在 Decode 階段為何如此低效。它殘酷地指出了生成單一 Token 時的極度不平衡,打破了工程師對「買更好 GPU 就能加速生成」的迷思。

How a GPU Actually Works (Architectural Deep Dive)

前言/背景

本文旨在打破軟體工程師對 GPU 效能的迷思。當我們在頂規資料中心 GPU 上運行 70B 大型語言模型時,常會發現算力利用率極低、Token 生成速度不如預期。作者透過深入淺出的硬體原理解析,揭示了 GPU 架構中「算力廉價、記憶體頻寬昂貴」的核心矛盾,並解釋了為何 quantization、batching 與 speculative decoding 等技術是突破物理限制的必然手段,而非單純的軟體技巧。

章節詳細總結

1. 核心矛盾與 GPU 架構設計

2. 記憶體階層 (Memory Hierarchy) 與物理限制

資料距離 ALU 越遠,容量越大,但讀取成本呈指數上升:

  1. 暫存器 (Per-thread storage / Register File):最快、無延遲。
  2. 共享記憶體 (On-chip scratchpad / Shared Memory):與 L1 快取同級。在同一個 SM (Streaming Multiprocessor) 內的執行緒可共享,成本極低。
  3. L2 快取 (Shared cache):全晶片共享,速度顯著變慢。
  4. HBM / VRAM (Main memory):LLM 權重存放的地方,讀取速度最慢,這也是廠商常標榜的「記憶體頻寬」數字來源。

3. 效能診斷指標:Arithmetic Intensity (Work per byte)

這是判斷 GPU 效能瓶頸的唯一真理:每次從主記憶體搬運 1 Byte,你能做多少次算術運算?

4. LLM 推理的極端現實

5. 所有優化技術的本質歸宿

知道了瓶頸,我們就能理解各大 LLM 優化技術在解決什麼問題:

  1. Batching (增加分子):多個 Request 一起算,權重搬一次就能算 N 次。這是不增加記憶體負擔下,提升 throughput 最有效的方法。
  2. Kernel Fusion (減少分母):將多個小運算合併,中間變數留在 SM 的暫存器,不寫回 HBM。
  3. FlashAttention (減少分母):透過分塊(Tiling)將 Attention 的運算與中間矩陣限制在快取的 SRAM 中,徹底避免大量讀寫 HBM。
  4. Quantization (減少分母):將 16-bit 降至 8-bit,搬運的位元組直接減半,Ops/Byte 翻倍,生成速度(在 Memory-bound 狀態下)直接翻倍。

總結與結論