Post

KV Cahce

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$๋ฒˆ์งธ ํ† ํฐ ๋‹ค์Œ์— ์˜ฌ ํ† ํฐ์˜ ํ™•๋ฅ  ๋ถ„ํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

fig1

์ถ”๋ก  ๋•Œ๋Š” ๋‹ค์Œ ํ† ํฐ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งˆ์ง€๋ง‰ ํ† ํฐ์˜ ํ™•๋ฅ  ๋ถ„ํฌ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์•ž์˜ ํ† ํฐ๋“ค์€ ๋ชจ๋‘ ๋ฒ„๋ฆฐ๋‹ค.

๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰ ํ† ํฐ์˜ ์ถœ๋ ฅ๋งŒ ํ•„์š”ํ•˜์ง€๋งŒ, ๋งค ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ์šด ํ† ํฐ์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค 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ํ•  ์ˆ˜ ์žˆ๋‹ค.

\[\text{Masked Attention}(Q,K,V)=\text{softmax}(\frac{QK^\top}{\sqrt{d_k}}+M)V\]

fig2

์ด Causal mask ๋•๋ถ„์—, ์ƒˆ๋กœ์šด ํ† ํฐ์ด ์ถ”๊ฐ€๋˜์–ด $K_{N+1}, V_{N+1}$์ด ์ƒ๊ธฐ๋”๋ผ๋„ ๋‹ค์Œ 2๊ฐ€์ง€๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.

  • ์ž…๋ ฅ๊ณผ ๊ฐ€์ค‘์น˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ณผ๊ฑฐ ํ† ํฐ๋“ค์˜ $K, V$ ๊ฐ’ ์ž์ฒด๋Š” ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Causal mask๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ $K_{N+1}$ ์ž๋ฆฌ๋ฅผ $-\infty$๋กœ ๊ฐ€๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณผ๊ฑฐ ํ† ํฐ๋“ค์ด ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›์€ Attention ์ถœ๋ ฅ๊ฐ’ (์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

fig3

๋”ฐ๋ผ์„œ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•ด ๋‘” ๊ณผ๊ฑฐ ํ† ํฐ๋“ค์˜ $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)$

fig4

Memory-Bound Problem

KV Cache ๋•๋ถ„์— ์ถ”๋ก  ๋•Œ์˜ ์—ฐ์‚ฐ๋Ÿ‰ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, GPU VRAM์„ ๊ทน์‹ฌํ•˜๊ฒŒ ์†Œ๋ชจํ•˜๋Š” Memory-Bound ํ˜„์ƒ์„ ์œ ๋ฐœํ•œ๋‹ค.

KV Cache๋Š” ๋ฌธ์žฅ์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ($N$์ด ์ฆ๊ฐ€ํ• ์ˆ˜๋ก), ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ($B$๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก)์ด ๋งŽ์•„์งˆ์ˆ˜๋ก, KV Cache๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” VRAM ์šฉ๋Ÿ‰์ด ๋งค์šฐ ์ปค์ง€๊ฒŒ ๋œ๋‹ค.

๊ฒฐ๊ตญ GPU Core์˜ ์—ฐ์‚ฐ ๋Šฅ๋ ฅ์€ ๋†€๊ณ  ์žˆ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์ผ์„ ๋ชป ํ•˜๋Š” ๋ณ‘๋ชฉ ์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค.

MQA & GQA

fig5

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์™€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ๋ชจ๋ธ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•œ๋‹ค.