KV Cache ์์ถ
KV Cache Compression ยท Quantization ยท Token Eviction ยท Rank Compression ยท Mixed Precision ยท Adaptive Strategies
๊ฐ์
KV Cache๋ LLM ์ถ๋ก ์์ ๊ณผ๊ฑฐ ํ ํฐ์ Key/Value๋ฅผ ์ ์ฅํด ์ดํ ์ ์ฌ๊ณ์ฐ์ ๋ฐฉ์งํ์ง๋ง, ์ํ์คยท๋ฐฐ์นยท๋ ์ด์ด ์์ ๋น๋กํด ๊ธ๊ฒฉํ ์ปค์ ธ GPU ๋ฉ๋ชจ๋ฆฌ์ ํต์ฌ ๋ณ๋ชฉ์ด ๋ฉ๋๋ค. ๊ธด ๋ฌธ๋งฅ(long context)๊ณผ ๋์ ์ฒ๋ฆฌ๋(high throughput)์ด ์๊ตฌ๋๋ ์๋น์ค ํ๊ฒฝ์์ KV Cache๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ๋์ด์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ธฐ๋ ํฉ๋๋ค. KV Cache ์์ถ์ ์ด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ํค์ ๊ฐ์ ์ ๋ฐ๋๋ฅผ ๋ฎ์ถ๊ฑฐ๋(์์ํ), ์ค์ํ์ง ์์ ํ ํฐ์ ์ ๊ฑฐํ๊ฑฐ๋(eviction), ์ ์ฐจ์ ํํ์ผ๋ก ์ถ์ํ๋(rank compression) ๊ธฐ๋ฒ๋ค์ ์ด์นญ์ ๋๋ค.
์์ํ๋ง์ผ๋ก๋ ํ๊ณ๊ฐ ์์ด, ํ ํฐ ์ ๊ฑฐยท๋ญํฌ ์์ถยทํผํฉ ์ ๋ฐ๋ยท๋ ์ด์ด๋ณ ์ฐจ๋ฑ ํ ๋น ๋ฑ ์ฌ๋ฌ ์ ๋ต์ ์กฐํฉํ๋ ๊ฒ์ด ์ค์ ์์ ์ค์ํฉ๋๋ค. ๋ณธ ๋ฌธ์๋ KV Cache ์์ถ์ ์ ์ฒด ์คํํธ๋ผ์ ๋ถ๋ฅํ๊ณ , ๊ฐ ๊ธฐ๋ฒ์ ๋์ ์๋ฆฌยทํธ๋ ์ด๋์คํยท์์คํ ํตํฉ ๋ฐฉ์์ ์ ๋ฆฌํฉ๋๋ค.
1. KV Cache ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์
KV Cache์ ํฌ๊ธฐ๋ ๋ค์ ๊ณต์์ผ๋ก ์ถ์ ํ ์ ์์ต๋๋ค.
KV_bytes โ 2 ร L ร n_kv_heads ร head_dim ร seq_len ร batch ร bytes_per_element
2: Key + Value 2๊ฐL: ๋ ์ด์ด ์n_kv_heads: KV ํค๋ ์ (GQA/MQA์์๋ ์ฟผ๋ฆฌ ํค๋๋ณด๋ค ์ ์)head_dim: ํค๋๋น ์ฐจ์ (๋ณดํต 128)seq_len: ์ํ์ค ๊ธธ์ดbatch: ๋ฐฐ์น ํฌ๊ธฐbytes_per_element: FP16=2, FP8=1, INT4=0.5, INT2=0.25
์๋ฅผ ๋ค์ด LLaMA-2-70B (80๋ ์ด์ด, 8 KV ํค๋, head_dim=128)์์ seq_len=4096, batch=1, FP16 ๊ธฐ์ค:
2 ร 80 ร 8 ร 128 ร 4096 ร 1 ร 2 = 1.34 GB
seq_len์ด 128K๋ก ๋์ด๋๋ฉด ์ฝ 42.9 GB๋ก, 80GB GPU์ ์ ๋ฐ ์ด์์ ์ฐจ์งํฉ๋๋ค. ๋ฐฐ์น๋ฅผ ํค์ฐ๋ฉด ๊ณง๋ฐ๋ก GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋๋ค.
์ ์์ถ์ด ํ์ํ๊ฐ
| ๋ณ๋ชฉ | ์ค๋ช | ์์ถ์ด ์ํํ๋ ๊ฒ |
|---|---|---|
| ๋ฉ๋ชจ๋ฆฌ ์ฉ๋ | ๊ธด ๋ฌธ๋งฅยทํฐ ๋ฐฐ์น์์ HBM ์์ง | ๊ฐ์ GPU์ ๋ ๋ง์ ์์ฒญยทํ ํฐ ์์ฉ |
| ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ | ๋งค ๋์ฝ๋ฉ ์คํ ๋ง๋ค ์ ์ฒด KV๋ฅผ ์ฝ์ | ์ฝ๊ธฐ๋ ๊ฐ์ โ ๋์ฝ๋ฉ ์๋ ํฅ์ |
| ์ ์ก ๋์ญํญ | KV offloading ์ PCIe/CXL ๋ณ๋ชฉ | ์ ์ก ๋ฐ์ดํฐ๋ ๊ฐ์ |
| ๋ฐฐ์น ์ ํ | ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ๋ฐฐ์น ํฌ๊ธฐ ์ถ์ | ๋ฐฐ์น ํ๋ โ ์ฒ๋ฆฌ๋ ํฅ์ |
2. ์์ถ ๊ธฐ๋ฒ ๋ถ๋ฅ
KV Cache ์์ถ ๊ธฐ๋ฒ์ ํฌ๊ฒ ๋ค ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค.
๊ทธ๋ฆผ 1. KV Cache ์์ถ ๊ธฐ๋ฒ ๋ถ๋ฅ ์ฒด๊ณ
2.1 ์์ํ (Quantization)
Key/Value์ ์ ๋ฐ๋๋ฅผ ๋ฎ์ถฐ ๊ฐ ์์๊ฐ ์ฐจ์งํ๋ ๋นํธ ์๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ์ฅ ์ง์ ์ ์ด๋ฉฐ, ๊ธฐ์กด ์ถ๋ก ํ์ดํ๋ผ์ธ์ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ๋ฉ๋๋ค.
์ฃผ์ ํน์ง:
- FP16(16๋นํธ)์ FP8(8๋นํธ), INT8, INT4, INT2 ๋ฑ์ผ๋ก ์ถ์
- ๋ฉ๋ชจ๋ฆฌ ์ฉ๋๊ณผ ๋์ญํญ์ ๋์์ ์ ๊ฐ
- Key์ Value์ ๋ถํฌ ์ฐจ์ด์ ๋ฐ๋ฅธ ๋น๋์นญ ์ฒ๋ฆฌ๊ฐ ํต์ฌ
- ์ญ์์ํ(dequantization) ์ค๋ฒํค๋์ ์ปค๋ ์ตํฉ์ด ์ค์ ์ฑ๋ฅ์ ์ข์ฐ
๋น๋์นญ ๋ฌธ์ : Key๋ ์์์ ์ฑ๋ ์ด์์น(outlier)๊ฐ ์กด์ฌํ๊ณ , Value๋ ํ ํฐ๋ณ ๋ถํฌ๊ฐ ๋ค๋ฆ ๋๋ค. ๋ฐ๋ผ์ Key๋ per-channel, Value๋ per-token ์์ํ๊ฐ ํจ๊ณผ์ ์ ๋๋ค(KIVI ๋ฐ๊ฒฌ).
RoPE ๋ฌธ์ : ํ์ ์์น ์ธ์ฝ๋ฉ(RoPE)์ด Key์ ์ฑ๋ ์์ ์์ด ์ด์์น ๊ตฌ์กฐ๋ฅผ ํํธ๋ฌ๋จ๋ฆฝ๋๋ค. KVQuant๋ RoPE ์ ์ฉ ์ ์ Key๋ฅผ ์์ํํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
2.2 ํ ํฐ ์ ๊ฑฐ (Token Eviction)
์ดํ ์ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ํ์ง ์์ ๊ณผ๊ฑฐ ํ ํฐ์ KV๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ชจ๋ ํ ํฐ์ ์ ์งํ์ง ์๊ณ , ์ค์ง์ ์ผ๋ก ์ฌ์ฉ๋๋ ํ ํฐ๋ง ๋จ๊น๋๋ค.
์ฃผ์ ํน์ง:
- ์ดํ
์
ํ์คํ ๋ฆฌ ๋ถ์์ผ๋ก ์ค์ ํ ํฐ ์ ๋ณ
- ์ถ๊ฐ ํ์ต ์์ด(profiling ๊ธฐ๋ฐ) ์ ์ฉ ๊ฐ๋ฅ
- ์ต๊ทผ ํ ํฐยทspecial tokenยทHeavy Hitter ๋ฑ ๋ณด์กด ์ ๋ต์ด ๋ค์
- ํ ํฐ ์ ์์ฒด๋ฅผ ์ค์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋์ญํญ ๋์ ์ ๊ฐ
๋ณด์กด ์ ๋ต ์ ํ:
- ์ต์ ํ ํฐ ๋ณด์กด (Sliding Window)
- Attention Sink ๋ณด์กด (StreamingLLM)
- ์ดํ
์
์ ์ ๊ธฐ๋ฐ ์ ๋ณ (H2O)
- ํจํด ๊ธฐ๋ฐ ์ ์ํ ์ ๊ฑฐ (FastGen, Scissorhands)
2.3 ๋ญํฌ ์์ถ (Rank Compression)
Key/Value ํ๋ ฌ์ ์ ์ฐจ์์ผ๋ก ํฌ์ํด ์ ๋ณด๋ฅผ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ํ๋์ํ์ ์ฑ์ง์ ํ์ฉํด ํ๋ ฌ์ ๋ณธ์ง์ ์ธ ์ฐจ์์ ์ถ์ํฉ๋๋ค.
์ฃผ์ ํน์ง:
- SVD, Random Projection ๋ฑ์ ์ ํ ๋ณํ ์ฌ์ฉ
- ์ดํ
์
์ฐ์ฐ ์์ฒด๋ฅผ ์ ์ฐจ์์์ ์ํ ๊ฐ๋ฅ
- ์ ๋ณด ์์ค์ด ์์ง๋ง, ๊ตฌ์กฐ์ ์ผ๋ก ๋ณด์กด ๊ฐ๋ฅํ ์ ์ฐจ์ ํน์ฑ ํ์ฉ
- ์์ํ์ ๊ฒฐํฉํ๋ฉด ์๋์ง ํจ๊ณผ
2.4 ํผํฉ ์ ๋ต (Hybrid/Adaptive)
์ฌ๋ฌ ์์ถ ๊ธฐ๋ฒ์ ๊ฒฐํฉํ๊ฑฐ๋, ๋ ์ด์ดยทํ ํฐยท์ํ์ค๋ณ๋ก ์ฐจ๋ฑ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ต์ ์ฐ๊ตฌ์์ ๊ฐ์ฅ ํ๋ฐํ ์์ญ์ ๋๋ค.
์ ๋ต ์ ํ:
- ๋ ์ด์ด๋ณ ๋นํธํญ ํ ๋น (KVmix)
- ์ค์/๋น ์ค์ ํ ํฐ ๊ฐ ์ ๋ฐ๋ ์ฐจ๋ฑ (MiKV)
- ํ ํฐ ์ ๊ฑฐ + ์ ๋นํธ ์์ํ ๊ฒฐํฉ
- ๋์ ๋ฌธ๋งฅ ๊ธธ์ด ์ ์
3. ์ฃผ์ ๊ธฐ๋ฒ ์์ธ
3.1 ์์ํ ๊ธฐ๋ฒ
FP8 / INT8 โ 8๋นํธ (๊ธฐ๋ณธ ์ง์)
FP16 ๋๋น 2๋ฐฐ ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ์ผ๋ก, ๊ฑฐ์ ๋ฌด์์ค ์์ค์ ์ ํ๋๋ฅผ ์ ์งํฉ๋๋ค.
- FP8 E4M3: 4์ง์ 3๊ฐ์, ยฑ240 ๋ฒ์. vLLM์์
kv_cache_dtype="fp8"๋ก ์ง์. ์ ํ๋ ์ ํ๊ฐ ๋์ฒด๋ก ๋ฏธ๋ฏธ - FP8 E5M2: 5์ง์ 2๊ฐ์, ๋์ ๋ฒ์๊ฐ ๋์ง๋ง ์ ๋ฐ๋ ๋ฎ์
- INT8: TensorRT-LLM์์ ์ง์. scale ์ ์ฅ์ด ์ถ๊ฐ๋ก ํ์ํด FP8๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ด๋์ด ์ฝ๊ฐ ์์
- ํ๋์จ์ด ๊ฐ์: NVIDIA Hopper/Ada, AMD MI300์์ ํ๋์จ์ด FP8 ๋ณํ ์ง์
KIVI โ ๋น๋์นญ 2๋นํธ (ICML 2024)
Key๋ per-channel, Value๋ per-token์ผ๋ก ์์ํํ๋ ๋น๋์นญ 2๋นํธ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ: Key์ ์ฑ๋ ์ด์์น๋ฅผ ์ฑ๋ ๋จ์๋ก, Value์ ํ ํฐ๋ณ ๋ถํฌ๋ฅผ ํ ํฐ ๋จ์๋ก ์ฒ๋ฆฌ
- ์ต๊ทผ ํ ํฐ ๋ณด์กด: ๊ฐ์ฅ ์ต๊ทผ ํ ํฐ ์ผ๋ถ๋ฅผ full precision ์์ฐจ(sliding window)๋ก ์ ์ง
- ํ๋ ๋ถํ์: plug-and-play๋ก ์ฆ์ ์ ์ฉ ๊ฐ๋ฅ
- ์ฑ๊ณผ: LLaMA-2ยทFalconยทMistral์์ ๋ฉ๋ชจ๋ฆฌ 2.6๋ฐฐ ์ ๊ฐ, ๋ฐฐ์น 4๋ฐฐ ํ๋, ์ฒ๋ฆฌ๋ 2.35~3.47๋ฐฐ ํฅ์
KVQuant โ 3๋นํธ (NeurIPS 2024)
๋ค ๊ฐ์ง ๊ธฐ๋ฒ์ ๊ฒฐํฉํด sub-4-bit ์ ๋ฐ๋๋ฅผ ๋ฌ์ฑํฉ๋๋ค.
- Per-Channel Key ์์ํ: Key๋ฅผ ์ฑ๋ ๋จ์๋ก ์์ํ
- Pre-RoPE Key ์์ํ: RoPE ์ ์ฉ ์ ์ Key๋ฅผ ์์ํํด ์ด์์น ๊ตฌ์กฐ ๋ณด์กด
- ๋น๊ท ๋ฑ ์์ํ (NUQ): ๋ ์ด์ด๋ณ ๋ฏผ๊ฐ๋ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ ๋น๊ท ๋ฑ ๋ฐ์ดํฐ ํ์
- Per-Vector Dense-and-Sparse: ๊ฐ ๋ฒกํฐ์์ ์ด์์น๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํด ์ฒ๋ฆฌ
์ฑ๊ณผ: LLaMA/Llama-2/3ยทMistral์์ 3๋นํธ perplexity ์ ํ 0.1 ๋ฏธ๋ง. LLaMA-7B ๊ธฐ์ค A100-80GB์์ 100๋ง ํ ํฐ, 8-GPU์์ 1000๋ง ํ ํฐ ๋ฌธ๋งฅ ์๋น ๊ฐ๋ฅ.
QuaRot โ 4๋นํธ ๋กํ ์ด์ ์์ํ
ํ์ ๋ณํ(Rotation)์ ํตํด LLM์ ์๋ ์ํ์์ ์ด์์น๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ: ํน์ ์ง๊ต ํ๋ ฌ(orthogonal matrix)๋ก ์๋ ์ํ๋ฅผ ํ์ ํด ์ด์์น ๋ถํฌ๋ฅผ ํํํ
- ์ ์ฉ ๋ฒ์: ๊ฐ์ค์นยทํ์ฑ๊ฐยทKV Cache๋ฅผ ๋ชจ๋ 4๋นํธ๋ก ์์ํ
- ์ฑ๊ณผ: LLaMA2-70B 4๋นํธ์์ perplexity ์ ํ 0.47 ์ดํ, zero-shot ์ฑ๋ฅ 99% ์ ์ง
3.2 ํ ํฐ ์ ๊ฑฐ ๊ธฐ๋ฒ
FastGen โ ์ ์ํ KV Cache ์์ถ (ICLR 2024)
์ดํ ์ ๋ชจ๋์ ๋ด์ฌ์ ๊ตฌ์กฐ๋ฅผ ํ๋กํ์ผ๋งํด ํค๋๋ณ๋ก ๋ค๋ฅธ ์์ถ ์ ๋ต์ ์ ์ฉํฉ๋๋ค.
- ํค๋ ์ ํ๋ณ ์ ๋ต:
- ๋ก์ปฌ ์ปจํ ์คํธ ํค๋ โ ์ฅ๊ฑฐ๋ฆฌ ์ปจํ ์คํธ ์ ๊ฑฐ
- special token ์ค์ฌ ํค๋ โ non-special ํ ํฐ ์ ๊ฑฐ
- ๊ด๋ฒ์ ์ดํ ์ ํค๋ โ ํ์ค KV Cache ์ ์ง
- ์ฅ์ : fine-tuning ์์ด(profiling ๊ธฐ๋ฐ) ์ ์ฉ, GPU ๋ฉ๋ชจ๋ฆฌ ์๋น ๋ํญ ์ ๊ฐ
H2O โ Heavy-Hitter Oracle
์ดํ ์ ์ ์๊ฐ ๋์ "Heavy Hitter" ํ ํฐ์ ๋ณด์กดํ๊ณ ๋๋จธ์ง๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ: ๊ณผ๊ฑฐ ์ดํ ์ ํ์คํ ๋ฆฌ์์ ๋์ ์ดํ ์ ์ ์๊ฐ ๋์ ํ ํฐ ์ ๋ณ
- ๋ณด์กด ๋์: ์ต๊ทผ ํ ํฐ + Heavy Hitter ํ ํฐ
- ํจ๊ณผ: ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ํต์ฌ ์ ๋ณด๋ฅผ ๋ณด์กด
Scissorhands
Attention Sink ํจํด์ ํ์ฉํด ์ค์ ํ ํฐ์ ์๋ณํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ํต์ฌ ๊ด์ฐฐ: ํน์ ํ ํฐ(์ฒซ ๋ฒ์งธ ํ ํฐ, ํน์ ํ ํฐ ๋ฑ)์ด ์ง์์ ์ผ๋ก ๋์ ์ดํ ์ ์ ๋ฐ์
- ์ ๋ต: ์ด๋ฐ ํจํด์ ๋ฏธ๋ฆฌ ํ์ตํด ์ค์ ํ ํฐ์ ์๋ ๋ณด์กด
3.3 ๋ญํฌ ์์ถ ๊ธฐ๋ฒ
CaM โ Cache Merge
Key/Value ํ๋ ฌ์ ์ ์ฐจ์์ผ๋ก ํฌ์ํด ์์ถํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ: SVD ๋ฑ์ ํ์ฉํด KV ํ๋ ฌ์ ๋ณธ์ง์ ์ฐจ์์ ์ถ์ถ
- ์ฅ์ : ์ดํ ์ ์ฐ์ฐ ์์ฒด๋ฅผ ์ ์ฐจ์์์ ์ํ ๊ฐ๋ฅ
- ํ๊ณ: ์ถ๊ฐ ์ฐ์ฐ ์ค๋ฒํค๋, ๋น์ ํ ๋ณํ์ด ์ด๋ ค์
3.4 ํผํฉ ์ ๋ฐ๋ ๊ธฐ๋ฒ
MiKV โ Importance-Aware Mixed Precision (2024)
์ค์๋์ ๋ฐ๋ผ ํ ํฐ๋ณ๋ก ๋ค๋ฅธ ์ ๋ฐ๋๋ฅผ ์ ์ฉํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ:
- ์ค์ ํ ํฐ โ ๊ณ ์ ๋ฐ(FP16) ์ ์ง
- ๋ ์ค์ํ ํ ํฐ โ ์ ๋นํธ ์์ํ
- ์ ๊ฑฐ๋ ํ ํฐ๋ ์ ๋นํธ๋ก ๋ณด์กด (info loss ์ต์ํ)
- ํต์ฌ ๋ฐ๊ฒฌ: ํ ํฐ์ ์์ ํ ์ ๊ฑฐํ๋ฉด ์์ ๋ฌธ์ ยทํ ๋ฃจ์๋ค์ด์ ยท์ปจํ ์คํธ ์ ์ค์ด ๋ฐ์ํ์ง๋ง, ์ ๋นํธ๋ก๋ผ๋ ๋ณด์กดํ๋ฉด ์๋น ๋ถ๋ถ ํ๋ณต๋จ
KVmix โ Gradient-Based Layer Importance (AAAI 2026)
๋ ์ด์ด ์ค์๋๋ฅผ ๊ทธ๋๋์ธํธ ๊ธฐ๋ฐ์ผ๋ก ๋ถ์ํด ๋ ์ด์ด๋ณ ๋นํธํญ์ ์ฐจ๋ฑ ํ ๋นํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ๋์ ์๋ฆฌ:
- ๊ทธ๋๋์ธํธ ๊ธฐ๋ฐ ์ค์๋ ๋ถ์์ผ๋ก ๊ฐ ๋ ์ด์ด์ ์์ค ์ํฅ๋ ํ๊ฐ
- ์ค์ํ ๋ ์ด์ด โ ๋์ ์ ๋ฐ๋, ๋ ์ค์ํ ๋ ์ด์ด โ ๊ณต๊ฒฉ์ ์์ํ
- ๋์ ๊ธด ๋ฌธ๋งฅ ์ต์ ํ: ์ต๊ทผ ์ค์ ํ ํฐ์ full precision, ์ค๋๋ ํ ํฐ์ ์์ถ
- ์ฑ๊ณผ: Key 2.19๋นํธ, Value 2.38๋นํธ์์ ๊ฑฐ์ ๋ฌด์์ค ์ถ๋ก , 4.9๋ฐฐ ๋ฉ๋ชจ๋ฆฌ ์์ถ, 5.3๋ฐฐ ์ฒ๋ฆฌ๋ ํฅ์
4. ๋น๊ต ๋ถ์
๊ธฐ๋ฒ๋ณ ๋น๊ตํ
| ๊ธฐ๋ฒ | ์ ํ | ๋นํธํญ | ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ | ์ ํ๋ | ํ๋ ํ์ | ์ฃผ์ ๋ ผ๋ฌธ |
|---|---|---|---|---|---|---|
| FP8 E4M3 | ์์ํ | 8๋นํธ | ~2๋ฐฐ | ๊ฑฐ์ ๋ฌด์์ค | ๋ถํ์ | OCP ํ์ค |
| INT8 | ์์ํ | 8๋นํธ | ~2๋ฐฐ | ๊ฑฐ์ ๋ฌด์์ค | ๋ถํ์ | TensorRT-LLM |
| KIVI | ๋น๋์นญ ์์ํ | 2๋นํธ | ~2.6๋ฐฐ | ์ํธ | ๋ถํ์ | ICML 2024 |
| KVQuant | ์์ํ | 3๋นํธ | ~5.3๋ฐฐ | <0.1 ppl ์ ํ | ๋ณด์ ํ์ | NeurIPS 2024 |
| QuaRot | ๋กํ ์ด์ ์์ํ | 4๋นํธ | ~4๋ฐฐ | <0.47 ppl ์ ํ | ๋ถํ์ | arXiv 2024 |
| FastGen | ํ ํฐ ์ ๊ฑฐ | ๊ฐ๋ณ | ๊ฐ๋ณ | ์ํธ | ํ๋กํ์ผ๋ง | ICLR 2024 |
| H2O | ํ ํฐ ์ ๊ฑฐ | ๊ฐ๋ณ | ๊ฐ๋ณ | ์ํธ | ๋ถํ์ | arXiv 2023 |
| MiKV | ํผํฉ ์ ๋ฐ๋ | ๊ฐ๋ณ | ๊ฐ๋ณ | ์ฐ์ | ์ค์๋ ๋ถ์ | arXiv 2024 |
| KVmix | ๋ ์ด์ด๋ณ ํผํฉ | ๊ทน์ ๋นํธ | ~4.9๋ฐฐ | ๊ฑฐ์ ๋ฌด์์ค | ๊ทธ๋๋์ธํธ ๋ถ์ | AAAI 2026 |
๋นํธํญ๋ณ ์ ํ๋-์์ถ ํธ๋ ์ด๋์คํ
| ๋นํธํญ | ์ ํ๋ ๊ฒฝํฅ | ํ์ ๊ธฐ๋ฒ | ์ค์ฉ์ฑ |
|---|---|---|---|
| 8๋นํธ (FP8/INT8) | ๊ฑฐ์ ๋ฌด์์ค | per-tensor scale๋ก ์ถฉ๋ถ | ํ๋ ์์ํฌ ๊ธฐ๋ณธ ์ง์ |
| 4๋นํธ | ๋์ฒด๋ก ์ํธ | ๊ทธ๋ฃน ์์ํ, ๋กํ ์ด์ ๋ณํ | ์ค์ฉ์ |
| 3๋นํธ | ์ ๊ตํ๋ฉด ๊ฑฐ์ ๋ฌด์์ค | KVQuant (pre-RoPEยทNUQยทdense-sparse) | ํน์ ๋ชจ๋ธ์์ ์ค์ฉ |
| 2๋นํธ | ์ฃผ์ ํ์ | ๋น๋์นญ + full-precision ์์ฐจ (KIVI) | ์ ํ์ ์ค์ฉ |
| 2๋นํธ ๋ฏธ๋ง | ์ด๋ ค์ | ํผํฉ ์ ๋ฐ๋ + ์ค์ ํ ํฐ ๊ณ ์ ๋ฐ | ์ฐ๊ตฌ ๋จ๊ณ |
5. ๋์ ์๋ฆฌ
5.1 ์์ํ ํ์ดํ๋ผ์ธ
๊ทธ๋ฆผ 2. KV Cache ์์ํ ํ์ดํ๋ผ์ธ: ์ธ์ฝ๋ฉ โ ์์ํ โ ์ ์ฅ โ ์ญ์์ํ โ ์ดํ ์
์ฒ๋ฆฌ ํ๋ฆ:
1. ์ ํ ํฐ์ Key/Value ๊ณ์ฐ (FP16/BF16)
2. ์์ํ: per-channel/per-token/per-tensor ์ค์ผ์ผ๋ง์ผ๋ก ์ ๋นํธ๋ก ๋ณํ
3. ์์ถ๋ KV๋ฅผ GPU ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
4. ์ดํ
์
๊ณ์ฐ ์ง์ ์ญ์์ํ (fused dequant kernel ๊ถ์ฅ)
5. ์ ๋นํธ ๋๋ ๊ณ ์ ๋ฐ ์ดํ
์
์ฐ์ฐ ์ํ
์ปค๋ ์ตํฉ์ ์ค์์ฑ: ์ญ์์ํ๋ฅผ ๋ณ๋ ์ปค๋๋ก ์ํํ๋ฉด ๋์ญํญ ์ ๊ฐ์ผ๋ก ์ป์ ์ด๋์ด ์์๋ฉ๋๋ค. fused kernel(์์ํ๋ KV๋ฅผ ์ง์ ์ฝ์ด ์ดํ ์ ๊ณ์ฐ)์ด ํ์์ ์ ๋๋ค.
5.2 ํ ํฐ ์ ๊ฑฐ ์ ๋ต
๊ทธ๋ฆผ 3. ํ ํฐ ์ ๊ฑฐ ์ ๋ต ๋น๊ต: Sliding Window, Attention Sink, Heavy Hitter, ์ ์ํ
๋ณด์กด ์ฐ์ ์์:
1. ์ต๊ทผ ํ ํฐ: ๋์ฝ๋ฉ์ ์ง์ ํ์ฉ๋๋ฏ๋ก ๊ฐ์ฅ ๋์ ์ฐ์ ์์
2. Attention Sink: ์ฒซ ๋ฒ์งธ ํ ํฐ, special token ๋ฑ ์ง์์ ์ผ๋ก ๋์ ์ดํ
์
์ ๋ฐ๋ ํ ํฐ
3. Heavy Hitter: ๋์ ์ดํ
์
์ ์๊ฐ ๋์ ํต์ฌ ์ปจํ
์คํธ ํ ํฐ
4. ํจํด ๊ธฐ๋ฐ: ํค๋๋ณ ์ดํ
์
ํจํด ๋ถ์์ผ๋ก ์ ์ํ ์ ๊ฑฐ
์์ ์ ๊ฑฐ vs ์ ๋นํธ ๋ณด์กด: MiKV ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด ํ ํฐ์ ์์ ํ ์ ๊ฑฐํ๋ฉด ์์ ๋ฌธ์ ยทํ ๋ฃจ์๋ค์ด์ ์ด ๋ฐ์ํ์ง๋ง, ์ ๋นํธ๋ก๋ผ๋ ๋ณด์กดํ๋ฉด ์๋น ๋ถ๋ถ ํ๋ณต๋ฉ๋๋ค. ์ด๋ "์ ๊ฑฐํ์ง ๋ง๊ณ ์์ถํ๋ผ"๋ ์ค๊ณ ์์น์ ์์ฌํฉ๋๋ค.
5.3 ๋ ์ด์ด๋ณ ์ฐจ๋ฑ ํ ๋น
๊ทธ๋ฆผ 4. ๋ ์ด์ด ์ค์๋์ ๋ฐ๋ฅธ ๋นํธํญ ์ฐจ๋ฑ ํ ๋น (KVmix ์ ๊ทผ)
๋ ์ด์ด ์ค์๋ ๋ถ์:
- ๊ทธ๋๋์ธํธ ๊ธฐ๋ฐ: ๊ฐ ๋ ์ด์ด์ KV๊ฐ ์์ค ํจ์์ ๋ฏธ์น๋ ์ํฅ๋ ๊ณ์ฐ
- ์ดํ
์
๊ธฐ๋ฐ: ๋ ์ด์ด๋ณ ์ดํ
์
์ํธ๋กํผ ๋ถ์ (๋์ ์ํธ๋กํผ = ๋ ๋ง์ ์ ๋ณด ์ ์ฅ)
- ํ๋กํ์ผ๋ง ๊ธฐ๋ฐ: ๋ํ ์
๋ ฅ์ผ๋ก ์ค์๋ ์ธก์
ํ ๋น ์ ๋ต:
- ์ค์ ๋ ์ด์ด (ํ์ ๋ ์ด์ด, ์ดํ
์
์ง์ค ๋ ์ด์ด): FP16/FP8 ์ ์ง
- ์ค๊ฐ ๋ ์ด์ด: INT4/INT8
- ๋ ์ค์ํ ๋ ์ด์ด (์์ ๋ ์ด์ด): INT2/INT4 ๊ณต๊ฒฉ์ ์์ํ
6. ์์คํ ํตํฉ
6.1 ํ๋ ์์ํฌ ์ง์ ํํฉ
| ํ๋ ์์ํฌ | ์ง์ ์์ถ | ์ค์ ๋ฐฉ๋ฒ |
|---|---|---|
| vLLM | FP8 KV Cache | kv_cache_dtype="fp8" |
| TensorRT-LLM | FP8, INT8 KV Cache | ๋น๋ ํ์ ์ค์ |
| LLM Compressor | ๋ค์ํ ๋นํธํญ | ๋ณด์ (calibration) ๋ฐ์ดํฐ ํ์ |
| SqueezeLLM | ๋น๊ท ๋ฑ ์์ํ | ์ปค์คํ ์ปค๋ |
6.2 ๋ค๋ฅธ ๊ธฐ๋ฒ๊ณผ์ ๊ฒฐํฉ
PagedAttention๊ณผ ๊ฒฐํฉ: ๋ธ๋ก ์์ K,V๋ฅผ ์ ๋นํธ๋ก ๋ด์ผ๋ฉด ๋ธ๋ก๋น ๋ ๋ง์ ํ ํฐ์ด ๋ค์ด๊ฐ๋๋ค. ๋ ๊ธฐ๋ฒ์ ์ง๊ต์ ์ด๋ฉฐ ํจ๊ป ์ฐ๋ฉด ํจ๊ณผ๊ฐ ๋ฐฐ๊ฐ๋ฉ๋๋ค.
KV Offloading๊ณผ ๊ฒฐํฉ: ์์ํ๋ก KV๋ฅผ ์ค์ด๋ฉด CXL/PCIe๋ก ์ฎ๊ธธ ๋ฐ์ดํฐ์ ๋์ญํญ ๋ถ๋ด์ด ํจ๊ป ๊ฐ์ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง๊ณผ ๊ฒฐํฉ: hot KV๋ GPU์์ ๊ณ ์ ๋ฐ, warm KV๋ CPU DRAM์์ ์ ๋นํธ, cold KV๋ CXL/NVMe์์ ๋ ๊ณต๊ฒฉ์ ์์ํ๋ก precision tiering ๊ฐ๋ฅ.
6.3 ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
- ์์ํ ์์น: ์ ํ ํฐ์ K,V ๊ณ์ฐ ์งํ ์์ํํด ์ ์ฅ
- ์ญ์์ํ ๋น์ฉ: fused kernel ์์ผ๋ฉด ๋์ญํญ ์ ๊ฐ ํจ๊ณผ ์์
- ๋ณด์ ๋ฐ์ดํฐ: KVQuant ๋ฑ์ ๋ณด์ ๋ฐ์ดํฐ๊ฐ ํ์ง์ ์ํฅ
- GQA/MQA ํธํ: KV ํค๋ ์๊ฐ ์ ์ผ๋ฉด per-channel ์์ํ์ ์ด๋์ด ์์์ง ์ ์์
- FlashAttention ํธํ: ์ ๋นํธ ์ดํ ์ ์ปค๋์ ๊ตฌํ ์์ค์ ๋ฐ๋ผ ์ฑ๋ฅ ์ํฅ
7. ์ฅ๋จ์
์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ ํจ๊ณผ๊ฐ ์ง์ ์ : 8๋นํธ๋ก ์ฝ 2๋ฐฐ, 3~4๋นํธ๋ก 4~5๋ฐฐ, 2๋นํธ๋ก ๊ทธ ์ด์์ ์ ๊ฐ์ด ๊ฐ๋ฅํด ๊ธด ๋ฌธ๋งฅยทํฐ ๋ฐฐ์น๋ฅผ ๊ฐ์ GPU์ ๋ด์ ์ ์์ต๋๋ค.
- ๋์ญํญ ๋ณ๋ชฉ ์ํ: ๋งค ๋์ฝ๋ฉ ์คํ ๋ง๋ค KV๋ฅผ ์ฝ๋ ์์ด ์ค์ด๋ค์ด HBM ์ฝ๊ธฐ๋๊ณผ offloading ์ ์ก๋์ด ํจ๊ป ๊ฐ์ํฉ๋๋ค.
- ๊ธฐ์กด ๊ธฐ๋ฒ๊ณผ ์ง๊ต์ : PagedAttention, KV offloading, ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง๊ณผ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐํฉ ๊ฐ๋ฅํด ํจ๊ณผ๋ฅผ ๋์ ํ ์ ์์ต๋๋ค.
- ์ฒ๋ฆฌ๋ ํฅ์: ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ์ ๊ณง ๋ฐฐ์น ํ๋๋ก ์ด์ด์ง๋ฉฐ, ์ฒ๋ฆฌ๋(throughput)์ด ๋น๋ก์ ์ผ๋ก ํฅ์๋ฉ๋๋ค.
- ๊ธด ๋ฌธ๋งฅ ์ง์: 100๋ง ํ ํฐ ์ด์์ ๋ฌธ๋งฅ์ ๋จ์ผ GPU์์ ์๋นํ ์ ์๊ฒ ๋ฉ๋๋ค(KVQuant).
๋จ์
- ์ ํ๋ ์ ํ ์ํ: ํนํ 2๋นํธ ์ดํ์์๋ Key/Value ๋น๋์นญ, RoPE, ์ต๊ทผ ํ ํฐ ๋ณด์กด์ ๋ฌด์ํ๋ฉด ํ์ง์ด ๊ธ๊ฒฉํ ๋ฌด๋์ง ์ ์์ต๋๋ค.
- ๊ตฌํ ๋ณต์ก๋: per-channel/per-token scale ๊ด๋ฆฌ, ์ด์์น ๋ถ๋ฆฌ, fused dequant kernel, backend๋ณ dtype ์ ์ฝ์ ํจ๊ป ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ํ๋ ์์ํฌ ์์กด: ์ฉ๋ ์ ๊ฐ์ ๋น๊ต์ ์์ ์ ์ด์ง๋ง, ์ง์ฐ ์๊ฐยท์ฒ๋ฆฌ๋ ๊ฐ์ ์ kernel fusion, attention backend, batch ํฌ๊ธฐ์ ํฌ๊ฒ ์ข์ฐ๋ฉ๋๋ค.
- ๋ณด์ ๋น์ฉ: KVQuant ๋ฑ ๊ณ ๊ธ ๊ธฐ๋ฒ์ ๋ณด์ (calibration) ๋ฐ์ดํฐ์ ํ๋กํ์ผ๋ง์ ์ถ๊ฐ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
- ์์ ์ฑ ๋ฌธ์ : ํ ํฐ ์ ๊ฑฐ ์ ์์ ์ ๊ฑฐ๋ ์์ ๋ฌธ์ ยทํ ๋ฃจ์๋ค์ด์ ์ ์ ๋ฐํ ์ ์์ด ์ ๋นํธ ๋ณด์กด์ด ํ์์ ์ ๋๋ค.
8. ํต์ฌ ์ ๋ฆฌ
KV Cache ์์ถ์ ์์ํ, ํ ํฐ ์ ๊ฑฐ, ๋ญํฌ ์์ถ, ํผํฉ ์ ๋ต์ ๋ค ๋ฒ์ฃผ๋ก ๋๋๋ฉฐ, ์ค์ ์์๋ ์ด๋ค์ ์กฐํฉํด ์ฌ์ฉํฉ๋๋ค. ์์ํ๋ ๊ฐ์ฅ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, FP8/INT8์ ๊ฑฐ์ ๋ฌด์์ค์ด๋ฉฐ 3~4๋นํธ๋ KVQuantยทQuaRot๋ก ์ค์ฉํ ๊ฐ๋ฅํฉ๋๋ค. 2๋นํธ ์ดํ๋ KIVI์ ๋น๋์นญ+์์ฐจ ๋ณด์กด์ด ํต์ฌ์ ๋๋ค. ํ ํฐ ์ ๊ฑฐ๋ FastGenยทH2O ๋ฑ์ผ๋ก ํค๋๋ณยทํจํด๋ณ ์ ์ํ ์ ๋ต์ด ๋ฐ์ ํ๊ณ ์์ผ๋ฉฐ, ์์ ์ ๊ฑฐ๋ณด๋ค ์ ๋นํธ ๋ณด์กด์ด ์์ ์ฑ ์ธก๋ฉด์์ ์ฐ์ํฉ๋๋ค. ๋ ์ด์ด๋ณ ์ฐจ๋ฑ ํ ๋น(KVmix)์ ๊ทน์ ๋นํธ์์๋ ๊ฑฐ์ ๋ฌด์์ค์ ๋ฌ์ฑํ๋ ์ต์ ๊ฒฝํฅ์ ๋๋ค. ์์ํ๋ PagedAttentionยทKV Offloadingยท๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง๊ณผ ์ง๊ต์ ์ด๋ผ ๊ฒฐํฉ ์ ํจ๊ณผ๊ฐ ๋ฐฐ๊ฐ๋๋ฉฐ, precision tiering์ผ๋ก hot/warm/cold KV์ ์ ๋ฐ๋๋ฅผ ์ฐจ๋ฑํ๋ ๊ฒ์ด ์ค์ ์ต์ ํด๋ฒ์ ๋๋ค.
9. ๊ด๋ จ ๊ธฐ์
| ๋ฌธ์/์ฐ๊ตฌ | ์ฐ๊ฒฐ์ |
|---|---|
| KV Cache Quantization Analysis | ์์ํ ๊ธฐ๋ฒ ์ฌ์ธต ๋ถ์ (KIVI, KVQuant, FP8) |
| KV Cache Offloading Analysis | KV๋ฅผ GPU ๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ ์คํ๋ก๋ฉ๊ณผ์ ๊ฒฐํฉ |
| PagedAttention Analysis | KV ๋ธ๋ก ๋จ์ ๊ด๋ฆฌ์ ๊ฒฐํฉ |
| StreamingLLM Analysis | Attention Sink์ ์ต๊ทผ ํ ํฐ ๋ณด์กด ์์ด๋์ด |
| Prefix Caching Analysis | ํ๋ฆฌํฝ์ค ์บ์ฑ๊ณผ์ ์๋์ง |
| Continuous Batching Analysis | ์ง์์ ๋ฐฐ์นญ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ |
| LLM Inference Scheduler Analysis | ์ถ๋ก ์ค์ผ์ค๋ฌ์์ ํตํฉ |
| KIVI (arXiv 2402.02750) | 2-bit asymmetric KV quantization |
| KVQuant (arXiv 2401.18079) | pre-RoPE, NUQ, dense-and-sparse, 3-bit quantization |
| FastGen (arXiv 2310.01801) | Adaptive KV cache compression via attention profiling |
| MiKV (arXiv 2402.18096) | Importance-aware mixed precision quantization |
| KVmix (arXiv 2506.08018) | Gradient-based layer importance mixed precision |
| QuaRot (arXiv 2404.00456) | Outlier-free 4-bit inference via rotation |
| H2O (arXiv 2306.14048) | Heavy-Hitter Oracle for KV cache eviction |
| Scissorhands (arXiv 2305.17118) | Sink token-based KV cache compression |