StreamingLLM Analysis
StreamingLLM / Attention Sinks ์ฌ์ธต ๋ถ์
๋ฌดํ ์คํธ๋ฆฌ๋ฐ ยท Attention Sink ยท Sink + Window ยท Rolling Cache ยท KV ์ถ์ถ(H2O) ยท '๋ฌธ๋งฅ ํ์ฅ์ด ์๋'
StreamingLLM์ ์ ํํ ์ดํ ์ ์๋์ฐ๋ก ํ์ต๋ LLM์ด fine-tuning ์์ด ๋ฌดํ ๊ธธ์ด ์ ๋ ฅ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ํต์ฌ์ 'attention sink' ํ์์ ๋ฐ๊ฒฌ์ ๋๋ค โ ์ด๊ธฐ ํ ํฐ๋ค์ด ์๋ฏธ์ ๋ฌด๊ดํ๊ฒ ๋ง๋ํ ์ดํ ์ ์ ๋ฐ๋๋ฐ, ์ด๋ softmax๊ฐ ํฉ์ 1๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์์ฌ ์ดํ ์ ์ ํญ์ ๋ณด์ด๋ ์ด๊ธฐ ํ ํฐ์ ๋คํํ๋ ๋ฐ์ ๋น๋กฏ๋ฉ๋๋ค. StreamingLLM์ ์ด๊ธฐ ํ ํฐ ๋ช ๊ฐ(sink)์ ์ต๊ทผ sliding window๋ฅผ ํจ๊ป ์ ์งํจ์ผ๋ก์จ ์ดํ ์ ์ ์์ ํํ๊ณ , KV ์บ์๋ฅผ ์ํ์ค ๊ธธ์ด์ ๋ฌด๊ดํ๊ฒ ์ผ์ ํฌ๊ธฐ๋ก ๋ฌถ์ต๋๋ค. ๋ค๋ง ์ด๋ ๋ฌธ๋งฅ ๊ธธ์ด 'ํ์ฅ'์ด ์๋๋ผ ๋ฌดํ '์คํธ๋ฆฌ๋ฐ'์ ๊ฐ๋ฅ์ผ ํ๋ ๊ฒ์ด๋ผ๋ ์ ์ด ์ค์ํฉ๋๋ค. ๋ณธ ๋ฌธ์๋ ๋ฌธ์ โ attention sink ๋ฐ๊ฒฌ โ ํด๋ฒ โ ๊ฒฐ๊ณผยทKV ์ถ์ถ ๋น๊ต โ ์ค์ํ ์คํด์ KV ์ ๊ฐ์์์ ์์น์ ์์๋ก ๋ถ์ํฉ๋๋ค.
์๋ ผ๋ฌธ์ Llama-2, MPT, Falcon, Pythia์์ ์ต๋ 4M ํ ํฐ ์ด์์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , sliding window ์ฌ๊ณ์ฐ ๋๋น ์ต๋ 22.2๋ฐฐ ์๋๋ฅผ ๋ณด๊ณ ํ์ต๋๋ค. ๋ํ pre-training ๋จ๊ณ์์ placeholder token์ ์ ์ฉ sink๋ก ๋๋ ๋ณํ๋ ์ ์ํด, ์คํธ๋ฆฌ๋ฐ ๋ฐฐํฌ ์์ ์ ๋ ์๋น๊ธธ ์ ์์์ ๋ณด์ฌ์ค๋๋ค.
ํต์ฌ ๊ฐ๋
StreamingLLM์ ํต์ฌ์ '๋ฒ๋ฆด ํ ํฐ'์ ๋ฌด์์ ๋๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ์ด๊ธฐ ๋ช ๊ฐ์ ํ ํฐ์ sink๋ก ๋จ๊ฒจ ์ดํ ์ ๋ถํฌ์ ์์ถฉ์ฌ๋ก ์ฐ๋ ๋ฐ ์์ต๋๋ค. ์ต๊ทผ ํ ํฐ๋ง ์ ์งํ๋ sliding window์ ๋ฌ๋ฆฌ, ์ด ๋ฐฉ์์ ์ด๊ธฐ ํ ํฐ์ ๊ณ ์ ์ผ๋ก ๋ณด์กดํด softmax๊ฐ ๋ง๋ค์ด๋ด๋ ์์ฌ ์ดํ ์ ์ ํ๋ฌ๊ฐ ์๋ฆฌ๋ฅผ ํ๋ณดํฉ๋๋ค.
์ด ๊ตฌ์กฐ๋ ๊ธฐ์กด full-attention ๋ชจ๋ธ์ ๋ค์ ํ์ตํ์ง ์๊ณ ๋ ์ ์ฉํ ์ ์์ผ๋ฉฐ, ๊ธด ์คํธ๋ฆฌ๋ฐ ์ ๋ ฅ์์ KV cache ํฌ๊ธฐ๋ฅผ ์ผ์ ํ๊ฒ ์ ์งํ๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค. ๋ค๋ง window ๋ฐ์ ๊ณผ๊ฑฐ๋ฅผ ์ง์ ๊ธฐ์ตํ๋ ๋ฅ๋ ฅ์ ๋๋ ค ์ฃผ๋ ๊ฒ์ ์๋๋ฏ๋ก, ์ฅ๊ฑฐ๋ฆฌ ์ถ๋ก ์ด ํ์ํ ๊ฒฝ์ฐ์๋ context extension์ด๋ retrieval ๊ธฐ๋ฒ๊ณผ ํจ๊ป ๋ด์ผ ํฉ๋๋ค.
๋น๊ต/๋ถ์
| ๊ธฐ๋ฒ | ์ ์งํ๋ KV | ์๋ ๋ฐฉ์ | ์ฅ์ | ํ๊ณ |
|---|---|---|---|---|
| StreamingLLM | ์ด๊ธฐ sink + ์ต๊ทผ window | ์ถ๋ก ์ KV ์ถ์ถ ์ ์ฑ | ๋ฌดํ์ต, bounded memory | ๋จผ ๊ณผ๊ฑฐ recall ๋ถ๊ฐ |
| H2O | heavy hitter + ์ต๊ทผ ํ ํฐ | attention score ๋์ ๊ธฐ๋ฐ ์ถ์ถ | ์ค์ ํ ํฐ์ ๋์ ์ผ๋ก ๋ณด์กด | ์ ์ ๊ณ์ฐ ๋น์ฉ ํ์ |
| Sliding window ์ฌ๊ณ์ฐ | ์ต๊ทผ window๋ง, ๋งค๋ฒ ์ฌ๊ณ์ฐ | ์ ํํ window attention | ํ์ง ์์ ์ฑ ๋์ | O(T^2) ๋น์ฉ ํผ |
๋์ ์๋ฆฌ
- ์ด๊ธฐ ํ ํฐ ๋ช ๊ฐ๋ฅผ sink๋ก ๊ณ ์ ํฉ๋๋ค.
- ์ ํ ํฐ์ด ์ค๋ฉด ์ต๊ทผ window๋ฅผ ๊ฐฑ์ ํ๊ณ ๊ฐ์ฅ ์ค๋๋ ํ ํฐ์ ์ ๊ฑฐํฉ๋๋ค.
- ์บ์ ์์ ์์น๋ฅผ ์๋ ์์น๋ก ๋ค์ ๋งค๊ฒจ ํ์ต ๊ธธ์ด ๋ฐ์ผ๋ก ๋ฒ์ด๋์ง ์๊ฒ ํฉ๋๋ค.
- sink๊ฐ ์ดํ ์ ์ ๋ฐฐ์๊ตฌ ์ญํ ์ ํด ๋ถํฌ ๋ถ๊ดด๋ฅผ ๋ง์ต๋๋ค.
์ฅ๋จ์
- ์ฅ์ : ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ผ์ ํ๊ณ , fine-tuning ์์ด ์ ์ฉํ ์ ์์ผ๋ฉฐ, ๊ธด ์คํธ๋ฆฌ๋ฐ์์ ์ง์ฐ๊ณผ OOM ์ํ์ ์ค์ ๋๋ค.
- ํ๊ณ: window ๋ฐ ์ ๋ณด๋ ์ฌ๋ผ์ง๋ฏ๋ก ๊ธด ๋ฌธ์ ์ง์์๋ต์ฒ๋ผ ๋จผ ๊ณผ๊ฑฐ recall์ด ์ค์ํ ์์ ์๋ ๋ถ๋ฆฌํฉ๋๋ค.
๊ด๋ จ ๊ธฐ์
StreamingLLM: Learning to Extend LLM Context with Attention Sinks(ICLR 2024, arXiv 2309.17453)H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models(arXiv 2306.14048)Mistral 7B์ sliding window attention (arXiv 2310.06825)Sliding Window Attention Analysis(llm_0060_sliding_window_attention_analysis.html)KV Cache Offloading Analysis(llm_0040_kv_cache_offloading_analysis.html)Memory Centric LLM Serving Survey(llm_0003_memory_centric_llm_serving_survey.html)
ํต์ฌ ์ ๋ฆฌ
StreamingLLM์ attention sink์ ์ต๊ทผ window๋ฅผ ๊ฒฐํฉํด ๊ธฐ์กด ๋ชจ๋ธ์ KV cache๋ฅผ ์ผ์ ํฌ๊ธฐ๋ก ์ ์งํ๋ ์คํธ๋ฆฌ๋ฐ ๊ธฐ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ์์ ์ด๊ธฐ ํ ํฐ์ด ์ดํ ์ ์ ์์ถฉ์ฌ์ฒ๋ผ ์๋ํ๋ค๋ ๊ด์ฐฐ์ ๊ธฐ๋ฐํ๋ฉฐ, window attention์ด ์ด๊ธฐ ํ ํฐ์ ์์ ๋ ๋ถ๊ดดํ๋ ๋ฌธ์ ๋ฅผ ์ํํฉ๋๋ค. ๋์ ๋จผ ๊ณผ๊ฑฐ๋ฅผ ์ง์ ๊ธฐ์ตํ๋ ๋ฌธ๋งฅ ํ์ฅ๊ณผ๋ ๋ค๋ฅด๋ฏ๋ก, ์ฅ๊ฑฐ๋ฆฌ ์ดํด๊ฐ ํ์ํ๋ฉด ๋ค๋ฅธ context extension์ด๋ retrieval ๊ธฐ๋ฒ๊ณผ ํจ๊ป ์จ์ผ ํฉ๋๋ค.
1. ๋ฌธ์ โ ๋ฌดํ ์คํธ๋ฆฌ๋ฐ์์ ๋ ์์งํ ๋ฐฉ๋ฒ์ด ์คํจ
๋ฉํฐํด ๋ํ์ฒ๋ผ ์ ๋ ฅ์ด ๋์์ด ์ด์ด์ง๋ ์คํธ๋ฆฌ๋ฐ ์์ฉ์์๋ ๋ ๊ฐ์ง ๋ถ๋ด์ด ์๊น๋๋ค. ๊ณผ๊ฑฐ ํ ํฐ์ KV ์บ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน๊ณ , ํ์ต ์ํ์ค ๊ธธ์ด๋ฅผ ๋๋ ์ ๋ ฅ์ ๋ชจ๋ธ์ด ์ผ๋ฐํํ์ง ๋ชปํฉ๋๋ค. ๊ฐ์ฅ ๋จ์ํ ๋ ์ ๊ทผ์ด ๋ชจ๋ ์คํจํฉ๋๋ค.
๊ทธ๋ฆผ 1. dense attention๊ณผ window attention์ด ๊ฐ๊ฐ ์คํจํ๋ ์ด์ , ๊ทธ๋ฆฌ๊ณ ๊ฒฐ์ ์ ์ฆ๊ฑฐ
๋ ์ ๊ทผ์ ์คํจ
-
Dense attention โ ๋ชจ๋ ๊ณผ๊ฑฐ ํ ํฐ์ KV๋ฅผ ์ ์งํฉ๋๋ค. O(Tยฒ) ์ฐ์ฐยท๋ฉ๋ชจ๋ฆฌ๋ก ๋น์ธ๊ณ , ํ์ต ๊ธธ์ด๋ฅผ ๋์ผ๋ฉด perplexity๊ฐ ํญ๋ฐํฉ๋๋ค.
-
Window attention โ ์ต๊ทผ KV๋ง ์บ์ํฉ๋๋ค(ํจ์จ์ ). ๊ทธ๋ฌ๋ ์ด๊ธฐ ํ ํฐ์ด ์บ์์์ ๋ฐ๋ ค๋๋ ์๊ฐ perplexity๊ฐ ํญ๋ฐํฉ๋๋ค.
-
๊ฒฐ์ ์ ์ฆ๊ฑฐ โ Llama-2-13B๋ฅผ PG19์์ ์ธก์ ํ๋ฉด, ์๋์ฐ(0+1024)๋ PPL 5158๋ก ๋ถ๊ดดํ์ง๋ง ์ด๊ธฐ 4ํ ํฐ์ ๋์ด๋ฆฌ๋ฉด(4+1020) PPL 5.40์ผ๋ก ๋ณต์๋ฉ๋๋ค. ์ฆ ๋ถ๊ดด์ ์์ธ์ '์ต๊ทผ ํ ํฐ'์ด ์๋๋ผ '์ด๊ธฐ ํ ํฐ'์ ์์ ๊ฒ์ ๋๋ค.
์ ํํ ๋์์ธ sliding window + ์ฌ๊ณ์ฐ์ ๋งค๋ฒ ๋ค์ ๊ณ์ฐํด ์ ํํ์ง๋ง O(Tยฒ)๋ก ๋งค์ฐ ๋๋ฆฝ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ด๊ธฐ ํ ํฐ์ด ๊ทธ๋ ๊ฒ ์ค์ํ ๊น์? ๊ทธ ๋ต์ด attention sink์ ๋๋ค.
2. ํต์ฌ ๋ฐ๊ฒฌ โ Attention Sink ํ์
StreamingLLM์ ์ถ๋ฐ์ ์ ํ๋์ ๊ด์ฐฐ์ ๋๋ค. ์ด๊ธฐ ํ ํฐ๋ค์ด ์๋ฏธ์ ์ค์์ฑ๊ณผ ๋ฌด๊ดํ๊ฒ ๋น๋์นญ์ ์ผ๋ก ํฐ ์ดํ ์ ์ ์๋ฅผ ๋ฐ๋๋ค๋ ๊ฒ โ ์ด๋ฅผ attention sink๋ผ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฆผ 2. ์ด๊ธฐ ํ ํฐ์ ์ ๋ฆฌ๋ ์ดํ ์ ๋ถํฌ์ ๊ทธ ์์ธ(softmax ํฉ = 1)
์ ์ด๊ธฐ ํ ํฐ์ด sink๊ฐ ๋๋๊ฐ
-
softmax ์ ์ฝ โ ์ดํ ์ ์ softmax๋ก ๊ณ์ฐ๋์ด ๋ชจ๋ ์ ์์ ํฉ์ด 1์ ๋๋ค. ๋ฐ๋ผ์ ์์ฌ ์ดํ ์ ์ ์ด๋๊ฐ์ ๋ฐ๋์ ๋ฐฐ๋ถํด์ผ ํฉ๋๋ค.
-
๋ฐฐ์๊ตฌ ์ญํ โ ํ์ฌ ํ ํฐ์ ๊ฐํ๊ฒ ๋งค์นญ๋๋ ๊ณผ๊ฑฐ๊ฐ ์์ ๋, ๋จ๋ ์ดํ ์ ์ ๋ฒ๋ฆด ๊ณณ์ด ํ์ํฉ๋๋ค. autoregressive ๊ตฌ์กฐ์ ๊ฑฐ์ ๋ชจ๋ ํ์ ํ ํฐ์ด ์ด๊ธฐ ํ ํฐ์ ๋ณด๋ฏ๋ก(ํญ์ ๋ณด์ด๋ ์์ ์ ์์น), ์ด๊ธฐ ํ ํฐ์ด ์์ฌ ์ดํ ์ ์ ๋ฐฐ์๊ตฌ๊ฐ ๋ฉ๋๋ค.
-
๋ถ๊ดด์ ๋ฉ์ปค๋์ฆ โ ๊ทธ๋์ window attention์ด ์ด๊ธฐ ํ ํฐ์ ๋ฒ๋ฆฌ๋ฉด softmax ๋ถ๋ชจ(์ดํ ์ ๋ถํฌ)๊ฐ ๊ธ๋ณํด ๋ชจ๋ธ์ด ๋ฌด๋์ง๋๋ค. ์ ์ฌํ ๊ด์ฐฐ์ด ์์ํ outlier์ SoftMax-Off-by-One(softmax1)์์๋ ๋ณด๊ณ ๋์๋๋ฐ, ๋ชจ๋ '์์ฌ๋ฅผ ๋ฒ๋ฆด ๊ณณ์ ์ฃผ์'๋ ๊ฐ์ ํต์ฐฐ์ ๋๋ค.
๊ฒฐ์ ์ ์คํ โ ์ด๊ธฐ 4ํ ํฐ์ ์๋ฏธ ์๋ ์ค๋ฐ๊ฟ ํ ํฐ('\n')์ผ๋ก ๋ฐ๊ฟ๋ perplexity๊ฐ ๋ณต์๋๋ค(5.60). ์ฆ ์ด๊ธฐ ํ ํฐ์ '๋ด์ฉ'์ด ์๋๋ผ '์์น(๊ฑฐ๊ธฐ ํ ํฐ์ด ์๋ค๋ ์ฌ์ค)'๊ฐ ์ค์ํ๋ค โ sink๋ ์๋ฏธ ์ด๋ฐ์ฒด๊ฐ ์๋๋ผ ๊ตฌ์กฐ์ ์ต์ปค๋ค.
3. ํด๋ฒ โ StreamingLLM (sink + ์ต๊ทผ ์๋์ฐ)
๋ฐ๊ฒฌ์ ํด๋ฒ์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋จ์ํฉ๋๋ค. ์ด๊ธฐ ํ ํฐ ๋ช ๊ฐ(sink)๋ฅผ ํญ์ ์ ์งํ๊ณ , ๊ฑฐ๊ธฐ์ ์ต๊ทผ sliding window๋ฅผ ๋ํฉ๋๋ค.
๊ทธ๋ฆผ 3. sink + ์ต๊ทผ ์๋์ฐ ๊ตฌ์กฐ, rolling cache, ๊ทธ๋ฆฌ๊ณ ์บ์ ๋ด ์๋ ์์น ์ธ์ฝ๋ฉ
ํต์ฌ
-
sink + window โ ์ด๊ธฐ sink๊ฐ ์์ฌ ์ดํ ์ ์ ๋ฐฐ์๊ตฌ ์ญํ ์ ๊ณ์ ํด์ค ์ดํ ์ ๋ถํฌ๊ฐ ์์ ๋๊ณ ๋ถ๊ดด๊ฐ ์ฌ๋ผ์ง๋๋ค. fine-tuning์ด ํ์ ์์ด ์ด๋ฏธ ํ์ต๋ ๋ชจ๋ธ์ ์บ์ ๊ด๋ฆฌ๋ง ๋ฐ๊ฟ ์ฆ์ ์ ์ฉํฉ๋๋ค.
-
rolling cache โ ์ ํ ํฐ์ด ์ค๋ฉด ์๋์ฐ ์ผ์ชฝ ๋์ ์ถ์ถํ๊ณ sink๋ ํญ์ ๋ณด์กดํ๋ฏ๋ก, KV ํฌ๊ธฐ๊ฐ ์ํ์ค ๊ธธ์ด์ ๋ฌด๊ดํ๊ฒ ์ผ์ (bounded)ํฉ๋๋ค.
-
์์น ์ธ์ฝ๋ฉ โ ์๋ฌธ์ ์ ๋ ์์น๊ฐ ์๋๋ผ ํ์ฌ ์บ์ ๋ด ์๋ ์์น๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๊ทธ๋์ผ ํ ํฐ ์ธ๋ฑ์ค๊ฐ ํ์ต ๊ธธ์ด๋ฅผ ๋์ง ์์ ๋ชจ๋ธ์ด ์์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
4. ๊ฒฐ๊ณผ์ KV ์ถ์ถ ๋น๊ต
๊ทธ๋ฆผ 4. ๊ฒฐ๊ณผ, dedicated sink token, ๊ทธ๋ฆฌ๊ณ KV ์ถ์ถ(eviction) ๊ณ์ด ๋น๊ต
๊ฒฐ๊ณผ
-
Llama-2ยทMPTยทFalconยทPythia๋ฅผ fine-tuning ์์ด ์ต๋ 4M ํ ํฐ ์ด์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, oracle(sliding window ์ฌ๊ณ์ฐ) ์์ค์ ์์ ์ perplexity๋ฅผ ์ ์งํฉ๋๋ค.
-
๋งค๋ฒ ๋ค์ ๊ณ์ฐํ๋ sliding window ์ฌ๊ณ์ฐ ๋๋น ์ต๋ 22.2๋ฐฐ ๋น ๋ฆ ๋๋ค(์บ์ ํฌ๊ธฐ๊ฐ ์ผ์ ํ๊ธฐ ๋๋ฌธ).
-
Dedicated sink token โ ์ฌ์ ํ์ต ๋ ํ์ต ๊ฐ๋ฅํ placeholder ํ ํฐ 1๊ฐ๋ฅผ ์ถ๊ฐํ๋ฉด sink 1๊ฐ๋ง์ผ๋ก ์ถฉ๋ถํฉ๋๋ค(Zero Sink / Sink Token ablation). ์ด ํต์ฐฐ์ ์ดํ ์ผ๋ถ ๋ชจ๋ธ์ด ํ์ต ๊ฐ๋ฅํ sink๋ฅผ ๋๋ ์ค๊ณ์ ์ํฅ์ ์ฃผ์์ต๋๋ค.
KV ์ถ์ถ(eviction) ๊ณ์ด ๋น๊ต
StreamingLLM์ ์์น ๊ธฐ๋ฐ(์ด๊ธฐ sink + ์ต๊ทผ)์ด๋ผ ์ ๋น์ฉยท๋ฌดํ์ต์ด ๊ฐ์ ์ ๋๋ค. H2O๋ ๋์ ์ดํ ์ ์ ์๋ก '์ค์ ํ ํฐ(heavy hitter)'์ ๋์ ์ผ๋ก ๊ณจ๋ผ ๋จ๊ธฐ์ง๋ง ์ ์ ๊ณ์ฐ์ด ํ์ํฉ๋๋ค. ๋ค๋ง ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์๋์ฐ/์ ํ ๋ฐ์ ํ ํฐ์ ์๊ตฌ ์ถ์ถํ๋ฏ๋ก, ์ค๊ฐ ์ ๋ณด๊ฐ ์ฌ๋ผ์ง๋ 'lost-in-the-middle' ํ๊ณ๋ฅผ ๊ณต์ ํฉ๋๋ค.
5. ์ค์ํ ์คํด์ KV ์ ๊ฐ์์์ ์์น
๊ทธ๋ฆผ 5. '๋ฌธ๋งฅ ํ์ฅ์ด ์๋๋ค'๋ผ๋ caveat์ KV ์ ๊ฐ์ ๋ค ์ถ์์์ ์์น
ํํ ์คํด โ '๋ฌธ๋งฅ ๊ธธ์ด ํ์ฅ'์ด ์๋๋ค
StreamingLLM์ด ๊ฐ๋ฅ์ผ ํ๋ ๊ฒ์ ๋ฌดํ '์คํธ๋ฆฌ๋ฐ'(์ ์ฐฝ์ฑ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ฉฐ ๋์์ด ์์ฑ)์ด์ง, ๋ฌธ๋งฅ ์ฐฝ์ 'ํ์ฅ'์ด ์๋๋๋ค. ์๋์ฐ ๋ฐ์ผ๋ก ๋ฐ๋ ค๋ ํ ํฐ์ ์ํ๋ฏ๋ก, ๋ชจ๋ธ์ด ๋จผ ๊ณผ๊ฑฐ๋ฅผ recallํ์ง๋ ๋ชปํฉ๋๋ค. StreamEval์์ 120K ํ ํฐ๊น์ง ์ ํ๋๋ฅผ ์ ์งํ์ง๋ง, ์ด๋ ๋ต์ด 20์ค ์ ์ฏค์ ์๋ '์ต๊ทผ ์ ๋ณด' ์ง๋ฌธ์ด๋ผ๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋จผ ๊ณผ๊ฑฐ๋ฅผ ๊ธฐ์ตํด์ผ ํ๋ ์ฅ๋ฌธ ์ดํด ๊ณผ์ ์๋ ๋ถ์ ํฉํ๋ฉฐ, ๊ทธ๊ฒ์ context extension ๊ธฐ๋ฒ(LongChatยทLlama-2-32K ๋ฑ)์ ๋ชซ์ ๋๋ค. ์คํ๋ ค ๋์ ์๋ณด์ ์ ๋๋ค โ context extension์ streaming LLM์ max cache size๋ฅผ ๋ํ๋ ๊ฒ์ผ๋ก ๊ฒฐํฉ๋ฉ๋๋ค.
KV ์ ๊ฐ์ ๋ค ์ถ์์์ ์์น
ํต์ฌ ์ ๋ฆฌ โ StreamingLLM์ ์ด๊ธฐ sink + ์ต๊ทผ ์๋์ฐ๋ก ๋ฌดํ ์คํธ๋ฆฌ๋ฐ์ ์ผ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์์ ์ฒ๋ฆฌํ๋(๋ฌดํ์ต) ๊ธฐ๋ฒ์ด๋ค. ํต์ฌ ๋ฐ๊ฒฌ์ธ attention sink๋ softmax ํฉ=1 ์ ์ฝ ๋๋ฌธ์ ์ด๊ธฐ ํ ํฐ์ด ์์ฌ ์ดํ ์ ์ ๋ฐฐ์๊ตฌ๊ฐ ๋๋ ํ์์ผ๋ก, window attention์ด ์ด๊ธฐ ํ ํฐ์ ๋ฒ๋ฆฌ๋ฉด ๋ถ๊ดดํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค. ํด๋ฒ์ sink๋ฅผ ๋ณด์กดํ๊ณ ์ต๊ทผ ์๋์ฐ๋ฅผ rollingํ๋ฉฐ ์บ์ ๋ด ์๋ ์์น๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ด๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก 4M ํ ํฐ+๋ฅผ sliding window ์ฌ๊ณ์ฐ ๋๋น ์ต๋ 22.2๋ฐฐ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ค. ๊ฐ์ฅ ์ค์ํ caveat์ ์ด๊ฒ์ด ๋ฌธ๋งฅ 'ํ์ฅ'์ด ์๋๋ผ '์คํธ๋ฆฌ๋ฐ'์ ๊ฐ๋ฅ์ผ ํ๋ค๋ ์ ์ด๋ค โ ์๋์ฐ ๋ฐ์ ์์ผ๋ฏ๋ก context extension๊ณผ๋ ์๋ณด์ ์ด๋ค. KV ์ ๊ฐ์์ StreamingLLM์ 'ํ ํฐ' ์ถ์ผ๋ก, ์์ํ(๋นํธ)ยทGQA/MLA(ํค๋/์์ถ)ยทPagedAttention(๋ญ๋น)๊ณผ ์ง๊ตํ๋ค.
๋ฉ๋ชจ๋ฆฌ ์์คํ ๊ด์ (์ฐ๊ตฌ ํ์ฅ) โ StreamingLLM์ ๊ฐ์ฅ ํฐ ์์คํ ์ ํจ์๋ KV ์บ์ ํฌ๊ธฐ๊ฐ ์ํ์ค ๊ธธ์ด์ ๋ฌด๊ดํ๊ฒ ์ผ์ (bounded)ํ๋ค๋ ์ ์ด๋ค โ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์์ธก ๊ฐ๋ฅํด์ง๊ณ OOM์ ํํผํ๋ค. ๋ค๋ง ์ค๊ฐ ํ ํฐ์ ์๊ตฌ ์ถ์ถํ๋ฏ๋ก(lost-in-the-middle), ๋จผ ๊ณผ๊ฑฐ recall์ด ํ์ํ๋ฉด KV ์คํ๋ก๋ฉ(์ถ์ถ ๋์ ํ์ ํฐ์ด๋ก ๋ด๋ฆผ)์ด๋ ๊ฒ์(RAG)๊ณผ ๋ณํํด์ผ ํ๋ค. ์ฆ '๋ฒ๋ฆด ๊ฒ์ ๋ฒ๋ฆฌ๋ ํ์ํ๋ฉด ์ด๋ ๋๋'๋ผ๋ ์ถ์ถโ์คํ๋ก๋ฉ์ ํธ๋ ์ด๋์คํ๊ฐ ์์ฐ์ค๋ฌ์ด ์ค๊ณ ์ถ์ด ๋๋ค.
์ฃผ์ โ ๋ณธ๋ฌธ ์์น๋ ์๋ ผ๋ฌธ(StreamingLLM, Xiao et al., ICLR 2024, arXiv 2309.17453)๊ณผ ๊ด๋ จ ์ฐ๊ตฌ(H2O arXiv 2306.14048 ๋ฑ)์ ๋ณด๊ณ ๊ฐ์ด๋ค. 'PPL 5158 vs 5.40', '4M ํ ํฐ', '22.2๋ฐฐ speedup', 'sink 4๊ฐ', 'StreamEval 120K'๋ ํน์ ๋ชจ๋ธยท๋ฐ์ดํฐ์ ยท์กฐ๊ฑด์ ๋ณด๊ณ ๊ฐ์ผ๋ก ์ผ๋ฐํ์ ์ฃผ์๊ฐ ํ์ํ๋ค. attention sink๋ ํ์ ์ฐ๊ตฌยทํ๋ ์์ํฌ์์ ํ๋ฐํ ํ์ฉยทํ์ฅ๋๊ณ ์์ผ๋ฉฐ, sink ํ ํฐ ์ยท์๋์ฐ ํฌ๊ธฐ์ ์ต์ ๊ฐ์ ๋ชจ๋ธยท์ํฌ๋ก๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
# ์บ์ = ์ด๊ธฐ sink ํ ํฐ + ์ต๊ทผ sliding window (ํฌ๊ธฐ ์ผ์ )
cache = sink_tokens[0:4] + recent_window[-W:] # ์: 4 + 1020
# ์ ํ ํฐ์ด ๋ค์ด์ค๋ฉด: ์๋์ฐ ์ผ์ชฝ ๋์ ์ถ์ถ, sink๋ ํญ์ ๋ณด์กด(rolling)
def on_new_token(tok):
recent_window.append(tok)
if len(recent_window) > W:
recent_window.pop_left() # ์ค๊ฐ ํ ํฐ ์๊ตฌ ์ถ์ถ
# sink_tokens๋ ์ ๋ ์ถ์ถํ์ง ์์ -> KV ํฌ๊ธฐ bounded
# ์์น ์ธ์ฝ๋ฉ: ์๋ฌธ ์ ๋ ์์น๊ฐ ์๋๋ผ ์บ์ ๋ด ์๋ ์์น๋ฅผ ๋ถ์ฌ
positions = range(len(cache)) # ํ์ต ๊ธธ์ด๋ฅผ ๋์ง ์์ ์์ ์
| ๊ธฐ๋ฒ | ๋ฌด์์ ๋จ๊ธฐ๋ | ํน์ง |
|---|---|---|
| StreamingLLM | ์ด๊ธฐ sink + ์ต๊ทผ ์๋์ฐ | ์์น ๊ธฐ๋ฐ, ์ ๋น์ฉ, ๋ฌดํ์ต |
| H2O (Heavy-Hitter) | heavy hitter + ์ต๊ทผ | ์ดํ ์ ์ ์ ๋์ ๊ธฐ๋ฐ(๋์ ์ ํ) |
| Sliding window | ์ต๊ทผ ํ ํฐ๋ง | ๋จ์ํ๋ ์ด๊ธฐ ํ ํฐ ์์ผ๋ฉด ๋ถ๊ดด |
| ์ถ | ๋ํ ๊ธฐ๋ฒ | ๋ฌด์์ ์ค์ด๋ |
|---|---|---|
| ํ ํฐ ์ถ์ถ | StreamingLLMยทH2O | ์ ์งํ ํ ํฐ ์(์บ์ ํฌ๊ธฐ๋ฅผ ์ผ์ ํ๊ฒ) |
| ๋นํธ(์์ํ) | KIVIยทKVQuant | ํ ํฐ๋น ์ ๋ฐ๋(FP16โINT2/4) |
| ํค๋/์์ถ | GQAยทMQAยทMLA | KV ํค๋ ์ ๋๋ ์ ์ฐจ์ ์์ถ |
| ๋ญ๋น ์ ๊ฑฐ | PagedAttention | ๋จํธํยท๊ณผ๋ค ์์ฝ์ผ๋ก ์ธํ ๋ญ๋น |