跳至主要内容

深入 LLM 運算:矩陣、GPU 與 VRAM

追蹤 Token 如何從 Embedding 進入記憶體階層、Tensor Core、Attention、KV Cache,最後產生輸出。包含互動式矩陣運算與記憶體計算器。 · 互動原版 ↗

01 · 基礎:什麼是矩陣?​

Scalar(純量)是一個數字;Vector(向量)是一維陣列;Matrix(矩陣)是二維陣列;Tensor(張量)則是任意維度的泛稱。LLM 以 Tensor 表示 Token Embedding 和中間特徵。

Scalar → Vector → Matrix → Tensor​

5
[3, 7, 2]
[[1, 2, 3], [4, 5, 6]]
Tensor shape: [batch, tokens, hidden]

單一 Token 的 Embedding 是一個向量。多個 Token 向量組成矩陣;多筆 Sequence 的 Batch 則形成更高維的 Tensor。

矩陣乘法的維度規則​

A: (m × n)
B: (n × p)
C = A × B: (m × p)

兩個矩陣的內側維度必須相同。每個輸出元素都來自 A 的一列與 B 的一行進行內積。

備註

核心觀念:文字轉成 Token ID,Token ID 映射成數值向量,再透過學到的 Weight Matrix 反覆轉換。

02 · 互動式矩陣乘法​

點選 C 的一個結果格。A 中反白的 Row 與 B 中反白的 Column,會逐項相乘再加總。接著觀察 GPU 如何搬運和計算這些資料。

A (2×4)
×
B (4×3)
=
C (2×3)

點 A 的列(r1、r2)和 B 的欄(c1–c3),或直接點 C 的格子,看那一格的內積;在 A、B 的數字上改值,C 會重新計算。

1 × 1 + 2 × 4 + 3 × 7 + 4 × 10 = 70
GPU 運算

乘法加累加(Multiply-Accumulate)產生結果。Tensor Cores 可以平行執行大量矩陣乘加運算。

1 × 1 + 2 × 4 + 3 × 7 + 4 × 10 = 70

為什麼 Tiling 與資料重用很重要?​

單純的實作可能反覆從 VRAM 讀取相同元素。Tiled GEMM 會把 A、B 的區塊搬到高速 On-chip Storage,供大量乘加運算重複使用;同時還能重疊載入、運算與寫回。

警告

重要修正:GPU Compute 和 VRAM 存取不是嚴格輪流的兩個步驟。現代 GPU Kernel 會盡可能重疊資料搬運與計算。

03 · GPU 硬體與記憶體階層​

VRAM 儲存大量資料,GPU 運算單元執行算術。中間有 Cache、Shared Memory 和 Registers。NVIDIA GPU 會把運算單元組織成 Streaming Multiprocessors(SM)。

GPU DeviceVRAM / HBMModel weights · Activations · KV cache · WorkspaceL2 CacheShared on-chip cacheSM 1RegistersShared Memory / L1Tensor CoresCUDA CoresSM 2 … NRegistersShared Memory / L1Tensor CoresCUDA Cores
元件主要工作LLM 用途
VRAM / HBM大量資料儲存權重、KV Cache、Activations
L2 Cache晶片共用快取重用熱門資料、減少 HBM 流量
Shared Memory / L1高速 On-chip 暫存Tiled GEMM 運算元重用
Registers每個 Thread 的高速儲存累加器與中間值
Tensor Cores高吞吐矩陣運算GEMM、Attention Projection、FFN
CUDA Cores一般算術與控制Elementwise、部分 Reduction
這是簡化的 NVIDIA 架構圖。實際晶片包含大量 SM、排程器、Load/Store Units 與不同的快取設計。某些運算經過 Kernel Fusion,中間結果不需要寫回 VRAM。

04 · Transformer 不只有矩陣乘法​

Decoder-only Transformer 會反覆執行 Normalization、Q/K/V Projection、位置運算、Causal Attention、Residual Add 與 FFN。最後把 Logits 轉成下一個 Token。

Text → Token IDs → EmbeddingRMSNorm / LayerNormQ = XWq · K = XWk · V = XWvRoPE + AttentionQKᵀ → Mask → Softmax → × VKV Cache (VRAM)讀取歷史 K/V · 追加新 K/VOutput Projection + Residual + NormFFN / MLPMatMul → Activation / Gating → MatMulResidual → Repeat Transformer Blocks × NFinal Norm → Vocabulary Projection → LogitsSampling → Next Token

Attention:Q、K、V​

Q = X Wq ; K = X Wk ; V = X Wv
Attention(Q,K,V) = softmax(QKᵀ / √dₖ + mask) V

Q 代表查詢特徵;K 提供匹配線索;V 提供要聚合的內容。QKᵀ 計算分數,Causal Mask 阻止看見未來位置,Softmax 正規化分數,再乘上 V 聚合資訊。FlashAttention 等高效 Kernel 可避免在 HBM 中完整存放大型 Attention Matrix。

Feed-Forward Network(前饋網路)​

FFN 使用學到的矩陣投影與非線性 Activation。許多現代 LLM 採用 SwiGLU 等 Gated 變體。以下是採用 Column Vector 慣例的簡化公式。

FFN(X) ≈ W₂ · activation(W₁X + b₁) + b₂
Example: 4096 → 11008 → 4096

LLM 內的其他 GPU 運算​

Operation主要工作常見壓力
GEMM / MatMul矩陣乘法Compute 或 Memory
RMSNorm / LayerNorm正規化特徵Memory / Reduction
RoPE加入位置資訊Elementwise / Memory
Softmax正規化注意力分數Reduction / Memory
SiLU / GELU非線性轉換Compute / Memory
Attention聚合上下文資訊Compute / KV I/O
Residual Add合併訊息路徑Memory Bandwidth
Sampling選擇下一個 TokenReduction / Sampling
Quantize / Dequantize壓縮與還原數值格式Memory / Compute

05 · VRAM 裡面到底存放什麼?​

Inference 不只需要 Model Weights,還包含 KV Cache、Activations、Runtime Buffers 和記憶體配置額外開銷。

VRAM 組成示意​

WeightsKV CacheActivationsWorkspace
上方比例純屬概念示意,不是任何特定模型的實際測量。

模型權重與數值精度​

假設模型有 70 億參數(7B),原始權重容量約等於參數數量乘以每個參數的 Bytes。

精度每參數 Bytes7B 模型權重
FP32428 GB
FP16 / BF16214 GB
INT817 GB
INT40.53.5 GB
量化模型還可能需要 Scales、Metadata,且部分 Layer 使用較高精度。表格 GB 採十進位;GPU 記憶體容量也常以 GiB 顯示。

KV Cache:為什麼 Context 與並發會消耗 VRAM?​

每個 Decoder Layer 都會快取已計算的 Key、Value。Decode 時讀取歷史 K/V,並追加新的 K/V。以下公式假設所有 Sequence 都採密集且等長的 Cache。

KV bytes = 2 × layers × cached_tokens × KV_heads × head_dim × bytes_per_element × sequences
1.00 GiB
KV Cache 原始容量估算(GiB)
未包含配置碎片、Page Table、Runtime Buffer、Prefix Sharing、Sliding Window、Offloading 或特殊模型架構。

06 · Prefill 與 Decode 的差別​

LLM 生成通常有兩種效能模式。Prefill 一次處理多個 Prompt Tokens;Decode 則每個 Sequence 每次產生一個 Token,並持續使用增長中的 KV Cache。

1 PrefillMany prompt tokensBuild KV cache2 DecodeNew tokenRead + append KV

① Prefill​

一次平行處理多個 Prompt Tokens,通常形成較大的矩陣乘法,能有效利用運算資源,同時建立 KV Cache。TTFT(首 Token 延遲)包含 Prefill 和其他 Serving 開銷。

② Decode​

每個活躍 Sequence 處理最新 Token,讀取過去的 KV 並追加新 KV。Batch 小時常接近 Matrix-Vector 運算,可能受到 Memory Bandwidth 限制。

比較項目PrefillDecode
輸入形狀多個 Prompt Tokens每 Sequence 一個新 Token
常見 GEMM較大矩陣小 Batch 下較像 Matrix-Vector
KV Cache建立讀取與追加
常見瓶頸Compute + Attention小 Batch 下頻寬 / KV I/O
效能指標TTFTTPOT / Tokens per second
警告

Decode 不一定永遠 Memory Bound。Batch 變大、長上下文 Attention 或模型架構改變,都可能讓瓶頸轉為 Compute。

07 · Compute Bound 與 Memory Bound​

效能同時受算術吞吐量(FLOP/s)與資料搬運速度(Bytes/s)限制。Arithmetic Intensity 表示每搬運一個 Byte 可執行多少 FLOPs。下方可調整簡化 Roofline Model。

Attainable FLOP/s ≤ min(Peak FLOP/s, Bandwidth × Arithmetic Intensity)
理論可達運算吞吐量
10.0 TFLOP/s
Memory Bound(記憶體受限)
TFLOP/s
Arithmetic Intensity (FLOP/byte)
此為教學版 Roofline,採十進位 TB / TFLOP,假設理想利用率與單一頻寬上限。實際 Kernel 還會受到延遲、Occupancy、Launch Overhead、Cache 等因素影響。

僅考慮頻寬的理論下限​

14 GB ÷ 1,000 GB/s = 0.014 s = 14 ms

如果每次必須從 HBM 讀取 14 GB 權重,且理想頻寬是 1 TB/s,光搬運至少需要 14 ms。這不是實際 Token Latency:Cache 重用、KV 流量、計算與排程也會影響。

08 · Training 與 Inference 的差別​

Inference 主要使用固定 Weights 執行 Forward Pass;Training 還需要 Backward Pass 計算 Gradients,並由 Optimizer 更新 Weights。

Forward passActivations + LossBackward passGradientsOptimizer stepUpdate weights
比較項目InferenceTraining
Forward Pass需要需要
Backward / Gradients不需要需要
更新 Weights不需要需要
Optimizer States通常不需要通常需要
Activation 儲存Forward 工作資料為 Backward 儲存或重算

Training 額外需要儲存 Gradients、Optimizer States(例如 Adam Moments),以及 Backward 所需的 Activations。精度、Sharding、Checkpointing 與 Optimizer 都會顯著影響 VRAM 用量。

09 · 核心重點整理​

問題正確理解
大型 Weight Matrix 在哪?主要放在 VRAM/HBM。
誰負責矩陣乘法?大量 GEMM 通常由 GPU Tensor Cores 加速。
每個中間結果都要寫回 VRAM?不一定;Registers、Cache 與 Kernel Fusion 可減少寫回。
為何長 Context 更耗 VRAM?KV Cache 通常隨快取 Token 與活躍 Sequence 增長。
為何高 FLOPS GPU 仍可能慢?Memory Bandwidth、利用率、Kernel Overhead 與 KV 流量。
為何 Training 更耗記憶體?Gradients、Optimizer States 與 Backward Activations。
備註

請同時用兩種視角理解 LLM:(1)Transformer 的數學運算圖;(2)Tensor 在 GPU 記憶體階層與運算單元之間的實際資料流。兩者共同決定 Latency 與 Throughput。

建議的下一步​

依序理解 VRAM/HBM → L2 → Shared Memory → Registers → Tensor Core MMA → Accumulator → Output;再深入 FlashAttention、PagedAttention、Continuous Batching、Quantization 和 GPU Profiling。