KV Cahce
๐ ๊ด๋ จ ๋ ผ๋ฌธ: [arXiv 2019] Fast Transformer Decoding: One Write-Head is All You Need
๐ ๊ด๋ จ ๋ ผ๋ฌธ: [EMNLP 2023] GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
์บ์(Cache)๋ ์์ฃผ ์ฌ์ฉ๋๊ฑฐ๋ ๋ค์ ๊ณ์ฐํ๋ ๋ฐ ๋น์ฉ์ด ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด ๋์๋ค๊ฐ, ํ์ํ ๋ ๋น ๋ฅด๊ฒ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ์์ ์ ์ฅ์๋ฅผ ์๋ฏธํ๋ค.
KV Cache์์์ Cache ์ญ์ ๋์ผํ ๊ฐ๋
์ด๋ค.
ํธ๋์คํฌ๋จธ๊ฐ ํ ํฐ์ ์์ฑํ๋ ๊ณผ์ ์์ ํ ๋ฒ ๊ณ์ฐํ Key์ Value ๋ฒกํฐ๋ฅผ ์ ์ฅํด ๋๊ณ , ์ดํ step์์ ๋ค์ ๊ณ์ฐํ์ง ์๊ณ ์ฌ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค.
๊ธฐ์กด ํธ๋์คํฌ๋จธ์์์ ๋ฌธ์ ์
LLM์ ํ
์คํธ๋ฅผ ์์ฑํ ๋ Autoregressive ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฆ, ์ง๊ธ๊น์ง์ ์
๋ ฅ ํ ํฐ๊ณผ ์ด๋ฏธ ์์ฑ๋ ํ ํฐ๋ค์ ๋ฐํ์ผ๋ก ๋ค์ ํ ํฐ์ ํ๋์ฉ ์์ธกํ๋ฉฐ ๋ฌธ์ฅ์ ์์ฑํด ๋๊ฐ๋ค.
์๋ฅผ ๋ค์ด GPT์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ ํ๊ณ ๋ต๋ณ์ ์ป์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
1
2
3
User: Can you explain LLMs?
GPT : Sure. Large Language Models (LLMs) are AI systems trained to understand and generate human language.
์ด ๋ต๋ณ์ ์ค์ ๋ก ํ ๋ฒ์ ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ, ์๋์ ๊ฐ์ด ํ ํฐ ๋จ์๋ก ์์ฐจ์ ์ผ๋ก ์์ฑ๋๋ค.
- Step1: $\vx=\text{Can you explain LLMs?}\quad\to\quad y=\text{Sure}$
- Step2: $\vx=\text{Can you explain LLMs? Sure}\quad\to\quad y=\text{.}$
- Step3: $\vx=\text{Can you explain LLMs? Sure.}\quad\to\quad y=\text{Large}$
- Step4: $\vx=\text{Can you explain LLMs? Sure. Large}\quad\to\quad y=\text{Language}$
- $\dots$
๊ทธ๋ ๋ค๋ฉด, ์ค์ GPT์ ๊ฐ์ Decoder-only ํธ๋์คํฌ๋จธ์์ ๋ค์ ํ ํฐ์ด ์์ฑ๋๋ ๊ณผ์ ์ ๋ณด์.
ํธ๋์คํฌ๋จธ์ ๋ง์ง๋ง layer๋ฅผ ํต๊ณผํ ๊ฐ ํ ํฐ์ hidden state๋, Linear projection๊ณผ Softmax๋ฅผ ๊ฑฐ์ณ ๋ค์์ ์ฌ ํ ํฐ์ ํ๋ฅ ๋ถํฌ๋ฅผ ๋ํ๋ด๊ฒ ๋๋ค.
์ฆ, $i$๋ฒ์งธ ํ ํฐ์ ๋ํ ์ถ๋ ฅ์ $i$๋ฒ์งธ ํ ํฐ ๋ค์์ ์ฌ ํ ํฐ์ ํ๋ฅ ๋ถํฌ๋ฅผ ์๋ฏธํ๋ค.
์ถ๋ก ๋๋ ๋ค์ ํ ํฐ ํ๋๋ง ์์ฑํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ๋ง์ง๋ง ํ ํฐ์ ํ๋ฅ ๋ถํฌ๋ง ์ฌ์ฉํ๊ณ ์์ ํ ํฐ๋ค์ ๋ชจ๋ ๋ฒ๋ฆฐ๋ค.
๋ฌธ์ ๋ ์ฐ๋ฆฌ๋ ๋ง์ง๋ง ํ ํฐ์ ์ถ๋ ฅ๋ง ํ์ํ์ง๋ง, ๋งค ๋จ๊ณ์์ ์๋ก์ด ํ ํฐ์ด ์์ฑ๋ ๋๋ง๋ค Self-Attention์์๋ ๊ณผ๊ฑฐ ํ ํฐ๋ค์ ๋ํ Query, Key, Value๋ฅผ ๋งค๋ฒ ๋ค์ ๊ณ์ฐํ๋ค๋ ๊ฒ์ด๋ค.
\[Q=\vx_{1:N}\cdot W_Q\quad,\quad K=\vx_{1:N}\cdot W_K\quad,\quad V=\vx_{1:N}\cdot W_V\]ํ ํฐ์ ์ฐจ์์ $D$, ํ์ฌ ์ํ์ค์ ๊ธธ์ด๋ฅผ $N$์ด๋ผ๊ณ ํ์.
๋งค ๋จ๊ณ๋ง๋ค ๋ชจ๋ ํ ํฐ์ $Q,K,V$๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ์ฐ์ฐ๋์ ๊ฐ๊ฐ $O(ND^2)$์ด๋ค.
๋ํ Self-Attention์์ ํ๋ ฌ ๊ณฑ์
$QK^\top$๋ฅผ ์ํํ๋ ๋ฐ ํ์ํ ์ฐ์ฐ๋์ $O(N^2D)$์ด๋ค.
์ด ๋๋ฌธ์ LLM์ด ๋ต๋ณ์ ์ด์ด๊ฐ๋ฉฐ ์ ๋ ฅ ์ํ์ค ๊ธธ์ด $N$์ด ๊ธธ์ด์ง์๋ก, ๋งค ์คํ ๋น ํ์ํ ์ฐ์ฐ๋์ด $N^2$์ ๋น๋กํ์ฌ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ค.
์ด๋ฌํ ์ถ๋ก ๋จ๊ณ์ ๋นํจ์จ์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ธฐ๋ฒ์ด KV Cache์ด๋ค.
KV Cache
์ถ๋ก ์์ ๋ง์ง๋ง ์์น์ ์ถ๋ ฅ๋ง ํ์ํ๋ค๋ฉด, Query ์ญ์ ๋ง์ง๋ง ์์น์ ํ ํฐ $\vx_N$ ํ๋๋ง ๊ณ์ฐํ๋ฉด ์ถฉ๋ถํ๋ค.
ํ์ง๋ง ์๋ก์ด ํ ํฐ์ $Q_N$ ํ๋๋ก Attention์ ์ํํ๋ ค ํด๋, ์ฐ์ฐ ๊ณต์์ $K, V$๋ ์ฌ์ ํ ๊ณผ๊ฑฐ ๋ชจ๋ ํ ํฐ์ ํฌํจํ ์ ์ฒด ์ํ์ค ์ ๋ณด๊ฐ ํ์ํ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
Autoregressive ๋ชจ๋ธ์์๋ ํ์ต๊ณผ ์ถ๋ก ๋ชจ๋์์ ๋ฏธ๋ ํ ํฐ์ ์ฐธ์กฐํ์ง ๋ชปํ๋๋ก Causal mask๋ฅผ ์ฌ์ฉํ๋ค.
์ฆ, $i$๋ฒ์งธ ์์น์ $Q$๋ ์๊ธฐ ์์ ์ ํฌํจํ ์ด์ ์์น์ $K$์๋ง Attentionํ ์ ์๋ค.
์ด Causal mask ๋๋ถ์, ์๋ก์ด ํ ํฐ์ด ์ถ๊ฐ๋์ด $K_{N+1}, V_{N+1}$์ด ์๊ธฐ๋๋ผ๋ ๋ค์ 2๊ฐ์ง๊ฐ ๋ณด์ฅ๋๋ค.
- ์ ๋ ฅ๊ณผ ๊ฐ์ค์น๊ฐ ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก, ๊ณผ๊ฑฐ ํ ํฐ๋ค์ $K, V$ ๊ฐ ์์ฒด๋ ์ ๋ ๋ณํ์ง ์๋๋ค.
- Causal mask๊ฐ ์๋ก ์ถ๊ฐ๋ $K_{N+1}$ ์๋ฆฌ๋ฅผ $-\infty$๋ก ๊ฐ๋ ค์ฃผ๊ธฐ ๋๋ฌธ์, ๊ณผ๊ฑฐ ํ ํฐ๋ค์ด ์๋ก ์ฃผ๊ณ ๋ฐ์ Attention ์ถ๋ ฅ๊ฐ (์๋ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ์ ๋ฐ์ค)๋ ๋ณํ์ง ์๋๋ค.
๋ฐ๋ผ์ ํ ๋ฒ ๊ณ์ฐํด ๋ ๊ณผ๊ฑฐ ํ ํฐ๋ค์ $K$์ $V$๋ฅผ ๋ค์ ๋จ๊ณ์์ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํด๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋๋ค๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
์ด ์๋ฆฌ๋ฅผ ์ด์ฉํด ๋งค ๋จ๊ณ๋ง๋ค $K$์ $V$๋ฅผ ์ฒ์๋ถํฐ ์ฌ๊ณ์ฐํ ํ์ ์์ด, GPU VRAM์ ์ ์ฅํด ๋์๋ค๊ฐ ๊บผ๋ด ์ฐ๋ ๊ฒ์ด KV Cache์ ํต์ฌ์ด๋ค.
- KV Cache ์ ์ฉ ์ ๋จ์ผ ์คํ ๋์ ๊ณผ์ 1. ๋ง์ง๋ง์ ์๋ก ๋ค์ด์จ $N$๋ฒ์งธ ํ ํฐ 1๊ฐ์ ๋ํด์๋ง $Q_N,K_N,V_N$ ์์ฑํ๋ค. โ ์ฐ์ฐ๋: $O(D^2)$ 2. ์๋ก ๊ณ์ฐ๋ $K_N,V_N$์ KV Cache์ ์ถ๊ฐํ๋ค. 3. KV Cache์์ ์ด์ ํ ํฐ๋ค์ Key, Value ์ ๋ณด๋ฅผ ๊ฐ์ ธ์, ์ ์ฒด ์ํ์ค์ $K_{1:N},V_{1:N}$์ ๊ตฌ์ฑํ๋ค. 4. $Q_N$๊ณผ $K_{1:N}^\top$์ ๋ด์ ์ ํตํด Attention score๋ฅผ ๊ณ์ฐํ๋ค. โ ์ฐ์ฐ๋: $O(ND)$
๊ฒฐ๋ก ์ ์ผ๋ก, ๋งค ์คํ ๋ง๋ค ๋ง์ง๋ง ํ ํฐ์ ๋ํด์๋ง $Q,K,V$๋ฅผ ์์ฑํ๊ณ ์ด์ ํ ํฐ๋ค์ $K$์ $V$๋ Cache์์ ๊บผ๋ด์ด ์ฐ๊ธฐ ๋๋ฌธ์, ์ฐ์ฐ๋์ด ๋งค์ฐ ์ค์ด๋ค์ด ๋น ๋ฅธ ์ถ๋ก ์ด ๊ฐ๋ฅํด์ง๋ค.
- QKV projection: $O(ND^2)\to O(D^2)$
- Attention: $O(N^2D)\to O(ND)$
Memory-Bound Problem
KV Cache ๋๋ถ์ ์ถ๋ก ๋์ ์ฐ์ฐ๋ ๋ฌธ์ ๋ ํด๊ฒฐ๋์์ง๋ง, GPU VRAM์ ๊ทน์ฌํ๊ฒ ์๋ชจํ๋ Memory-Bound ํ์์ ์ ๋ฐํ๋ค.
KV Cache๋ ๋ฌธ์ฅ์ด ๊ธธ์ด์ง์๋ก ($N$์ด ์ฆ๊ฐํ ์๋ก), ๋์ ์์ฒญ์ด ๋ง์์ง์๋ก ($B$๊ฐ ์ฆ๊ฐํ ์๋ก)์ด ๋ง์์ง์๋ก, KV Cache๊ฐ ์ฐจ์งํ๋ VRAM ์ฉ๋์ด ๋งค์ฐ ์ปค์ง๊ฒ ๋๋ค.
๊ฒฐ๊ตญ GPU Core์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ๋๊ณ ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ ์ผ์ ๋ชป ํ๋ ๋ณ๋ชฉ ์ํ์ ๋น ์ง๊ฒ ๋๋ค.
MQA & GQA
MQA์ GQA๋ ๊ธฐ์กด ํธ๋์คํฌ๋จธ์ Multi-Head Attention (MHA) ๊ตฌ์กฐ๋ฅผ ๋ณํํ์ฌ, ์ ์ด์ ์ ์ฅํด์ผ ํ $K$์ $V$์ ํ ์ ํฌ๊ธฐ ์์ฒด๋ฅผ ์ค์ด๋ ๊ธฐ์ ์ด๋ค.
๊ธฐ์กด MHA๋ $Q, K, V$๊ฐ ๊ฐ๊ฐ ๋์ผํ ๊ฐ์์ Head๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, $K, V$๋ฅผ ๋ชจ๋ cachingํ๋ ค๋ฉด ์ฉ๋์ด ๋ง์ด ํ์ํ๋ค.
MQA (Multi-Query Attention)
$Q$ Head๋ ๊ธฐ์กด์ฒ๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ ์งํ๋, $K$์ $V$ Head๋ ๋ฑ 1๊ฐ์ฉ๋ง ๋ง๋ค์ด์ ๋ชจ๋ $Q$ Head๊ฐ ์ด 1๊ฐ์ $K, V$๋ฅผ ๊ณต์ ํ๋๋ก ๋ง๋ ๋ค.
Head์ ๊ฐ์๋ฅผ $h$๋ผ๊ณ ํ ๋, KV Cache ์ฉ๋์ด ๊ธฐ์กด ๋๋น $\frac{1}{h}$๋งํผ ๊ฐ์ํด์ ์๋์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์์ง๋ค.
ํ์ง๋ง ๋ชจ๋ธ์ ์์ฑ ํ์ง์ด ๋ฏธ์ธํ๊ฒ ๋จ์ด์ง ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
GQA (Grouped-Query Attention)
MHA์ MQA์ ์ ์ถฉ์์ผ๋ก, $Q$ Head๋ค์ ๋ช ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๊ณ ๊ฐ ๊ทธ๋ฃน๋น 1๊ฐ์ $K, V$ Head๋ฅผ ๊ณต์ ํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
MQA๋งํผ์ ์๋์ง๋ง KV Cache ์ฉ๋์ ํฌ๊ฒ ์ค์ด๋ฉด์๋, ๊ธฐ์กด MHA์ ๊ฑฐ์ ๋น์ทํ ์์ค์ ๋ชจ๋ธ ์ฑ๋ฅ์ ์ ์งํ๋ค.




