PagedAttention Analysis
PagedAttention ์ฌ์ธต ๋ถ์ โ LLM KV ์บ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
vLLM ยท KV Cache Paging ยท Block Table ยท Copy-on-Write ยท Continuous Batching ยท KV Offloading
๊ฐ์
PagedAttention(Kwon et al., SOSP 2023)์ ์ด์์ฒด์ ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌยทํ์ด์ง์ LLM์ KV ์บ์ ๊ด๋ฆฌ์ ์ ์ฉํ ๊ธฐ๋ฒ์ ๋๋ค. ๊ธฐ์กด ์๋น ์์คํ ์ด ๋จํธํ์ ๊ณผ๋ค ์์ฝ์ผ๋ก KV ์บ์ ๋ฉ๋ชจ๋ฆฌ์ 60~80%๋ฅผ ๋ญ๋นํ๋ ๋ฌธ์ ๋ฅผ, KV ์บ์๋ฅผ ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก์ผ๋ก ์ชผ๊ฐ๊ณ ๋ธ๋ก ํ ์ด๋ธ๋ก ๋น์ฐ์ ๊ด๋ฆฌํจ์ผ๋ก์จ 4% ๋ฏธ๋ง์ผ๋ก ์ค์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋์ผ ํ๋์จ์ด์์ ์ฒ๋ฆฌ๋์ 2~4๋ฐฐ ๋์ด์ฌ๋ ธ๊ณ , ์ด๋ฅผ ๊ตฌํํ vLLM์ ์ฌ์ค์์ ํ์ค ์๋น ์์ง์ด ๋์์ต๋๋ค. ๋ณธ ๋ฌธ์๋ ๋จํธํ ๋ฌธ์ โ OS ํ์ด์ง ์ ์ถ โ ๋ธ๋ก ํ ์ด๋ธยท์ปค๋ โ copy-on-writeยทํ๋ฆฌํฝ์ค ๊ณต์ โ ์ฑ๋ฅ โ ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง/์คํ๋ก๋ฉ ์ฐ๊ฒฐ์ ์์๋ก ๋ถ์ํฉ๋๋ค.
PagedAttention์ ๋จ์ผ ์์ฒญ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ด๋ ๋ฐ์ ๋๋์ง ์์ต๋๋ค. ์ฌ๋ฌ ์์ฒญ์ด ๊ฐ์ ํ๋ฆฌํฝ์ค๋ฅผ ๊ณต์ ํ ๋ copy-on-write๋ก ๋ธ๋ก์ ์ฌ์ฌ์ฉํ๊ณ , ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํด ์ค์ยท์คํ๋ก๋ฉ ๋จ์๋ฅผ ๋ช ํํ๊ฒ ๋ง๋ญ๋๋ค. ์ด ๋๋ฌธ์ ์๋น ์ฒ๋ฆฌ๋, ๋ฐฐ์น ์ ์ฐ์ฑ, ๊ณ์ธตํ ๋ฉ๋ชจ๋ฆฌ ์ฐ๊ณ๊ฐ ํจ๊ป ์ข์์ง๋๋ค.
ํต์ฌ ๊ฐ๋
- KV ๋ธ๋ก: KV ์บ์๋ฅผ ๊ณ ์ ํฌ๊ธฐ ํ ํฐ ๋ฌถ์์ผ๋ก ๋๋ ๋จ์์ ๋๋ค.
- ๋ธ๋ก ํ ์ด๋ธ: ๋ ผ๋ฆฌ ๋ธ๋ก ๋ฒํธ๋ฅผ ๋น์ฐ์ ๋ฌผ๋ฆฌ ๋ธ๋ก์ ๋งคํํ๋ ํ์ ๋๋ค.
- on-demand ํ ๋น: ํ์ํ ์์ ์๋ง ๋ฌผ๋ฆฌ ๋ธ๋ก์ ๋ถ์ฌ ๋ด๋ถ ๋จํธํ๋ฅผ ๋ง์ง๋ง ๋ธ๋ก ํ๋๋ก ์ ํํฉ๋๋ค.
- copy-on-write: ๊ณต์ ์ค์ธ ๋ธ๋ก์ ์ฐ๊ธฐ๊ฐ ํ์ํ ์๊ฐ์๋ง ๋ณต์ฌํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํฉ๋๋ค.
1. ๋ฌธ์ โ KV ์บ์์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น
LLM ์๋น์์ ๋์ฝ๋ฉ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ด๋์ด๋ฏ๋ก, ์ฒ๋ฆฌ๋์ ๋์ด๋ ค๋ฉด ๋ ๋ง์ ์์ฒญ์ ํ ๋ฒ์ ๋ฐฐ์นํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ ์์ฒญ์ KV ์บ์๊ฐ ํฌ๊ณ ๋์ ์ด๋ผ, ์ด๋ฅผ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ด๋๋๊ฐ ๊ณง ์ฒ๋ฆฌ๋์ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ์กด ์์คํ ์ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ '์ฐ์ ํ ์' ์ ์ฝ ๋๋ฌธ์ ์์ฒญ๋ง๋ค ์ต๋ ์ํ์ค ๊ธธ์ด๋งํผ์ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฝํ๊ณ , ์ด๊ฒ์ด ํฐ ๋ญ๋น๋ฅผ ๋ณ์์ต๋๋ค.
๊ทธ๋ฆผ 1. ์ฐ์ ํ ๋น ๋ฐฉ์์ ์ธ ๊ฐ์ง KV ์บ์ ๋ญ๋น(์์ฝยท๋ด๋ถ ๋จํธํยท์ธ๋ถ ๋จํธํ)
์ธ ๊ฐ์ง ๋ญ๋น์ ๊ทธ ๊ท๋ชจ
-
์์ฝ(reserved) โ ๋ฏธ๋ ํ ํฐ์ฉ์ผ๋ก ์ก์๋ ์ฌ๋กฏ. ์ง๊ธ ๋ค๋ฅธ ์์ฒญ์ด ์ฐ์ง ๋ชปํจ.
-
๋ด๋ถ ๋จํธํ(internal fragmentation) โ ์ค์ ์ํ์ค ๊ธธ์ด๊ฐ ์์ฝํ ์ต๋ ๊ธธ์ด๋ณด๋ค ์งง์ ์์ ์ ์ฐ์ด๋ ๊ณต๊ฐ.
-
์ธ๋ถ ๋จํธํ(external fragmentation) โ ์ฐ์ ์ฒญํฌ๋ค ์ฌ์ด์ ์๊ธฐ๋, ํฌ๊ธฐ๊ฐ ๋ง์ง ์์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ํ.
vLLM ์๋ฃ์ ๋ฐ๋ฅด๋ฉด ๊ธฐ์กด ์์คํ ์ KV ์บ์ ๋ฉ๋ชจ๋ฆฌ์ 60~80%๋ฅผ ๋ญ๋นํ๊ณ , ์ค์ ํ ํฐ์ด ์ฐจ์งํ๋ ๋น์จ์ Orca ๊ณ์ด์์ 13.3~38.2%์ ๋ถ๊ณผํ์ต๋๋ค. 13B OPT ๋ชจ๋ธ ๊ธฐ์ค ํ ํฐ 1๊ฐ์ KV ์บ์๋ ์ฝ 800KB, ์ํ์ค 1๊ฐ๋ ์ต๋ 1.6~1.7GB(OPT/LLaMA-13B)์ ๋ฌํ๋ฏ๋ก, ์ด ๋ญ๋น๋ ๊ณง ๋ฐฐ์น ํฌ๊ธฐ์ ์ฒ๋ฆฌ๋์ ์ง์ ์ ์์ค์ ๋๋ค.
2. ํต์ฌ ์์ด๋์ด โ OS ํ์ด์ง์ KV ์บ์์
PagedAttention์ ํต์ฐฐ์ ์ด ๋ฌธ์ ๊ฐ ์ด์์ฒด์ ๊ฐ ์ด๋ฏธ ํผ ๋ฌธ์ ์ ๊ฐ๋ค๋ ๊ฒ์ ๋๋ค. OS๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ํฌ๊ธฐ ํ์ด์ง๋ก ๋๋๊ณ , ํ์ด์ง ํ ์ด๋ธ๋ก ๊ฐ์ ์ฃผ์๋ฅผ ๋น์ฐ์ ๋ฌผ๋ฆฌ ํ๋ ์์ ๋งคํํด ์ธ๋ถ ๋จํธํ๋ฅผ ์์ฑ๋๋ค. ๊ฐ์ ๋ฐ์์ KV ์บ์์ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฆผ 2. OS ๊ฐ์๋ฉ๋ชจ๋ฆฌ์์ ๋์, ๊ทธ๋ฆฌ๊ณ ๋ธ๋ก ํ ์ด๋ธ์ ๋ ผ๋ฆฌโ๋ฌผ๋ฆฌ ๋งคํ
๋์ ๊ด๊ณ
KV ์บ์๋ฅผ ๊ณ ์ ํฌ๊ธฐ KV ๋ธ๋ก(๋ธ๋ก๋น B๊ฐ ํ ํฐ์ KยทV)์ผ๋ก ๋๋๊ณ ๋น์ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์นํฉ๋๋ค. ๋ธ๋ก ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฏ๋ก ์ธ๋ถ ๋จํธํ๊ฐ ์์ฒ ์ ๊ฑฐ๋๊ณ , ๋ธ๋ก์ ํ์ํ ๋(on-demand) ํ ๋นํ๋ฏ๋ก ๋ด๋ถ ๋จํธํ๋ ์ํ์ค๋น ๋ง์ง๋ง ๋ธ๋ก ํ๋(์ต๋ Bโ1=15ํ ํฐ)๋ก ์ ํ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ญ๋น 4% ๋ฏธ๋ง์ ๊ทผ๊ฑฐ์ ๋๋ค. ์ดํ ์ ์ ๊ณผ๊ฑฐ K/V๋ฅผ ์ํ๋ง ํ๋ฉด ๋๋ฏ๋ก ๋น์ฐ์ ์ ์ฅ์ด ์ ํ๋์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
3. PagedAttention ์ปค๋ โ ๋ธ๋ก ๋จ์ ์ดํ ์
KV ์บ์๊ฐ ๋น์ฐ์ ๋ธ๋ก์ ํฉ์ด์ ธ ์์ผ๋ฏ๋ก, ์ดํ ์ ์ปค๋๋ ์ด๋ฅผ ๋ธ๋ก ๋จ์๋ก ์ํํ๋๋ก ์ฌ์ ์ํํฉ๋๋ค. ์ํ์ ์ผ๋ก๋ ๊ธฐ์กด ์ดํ ์ ๊ณผ ์์ ํ ๋์ผํ๋ฉฐ, ๋จ์ง K/V๋ฅผ ๋ธ๋ก ๋ฌถ์์ผ๋ก ๋๋์ด ๋ถ๋ถํฉ์ ๋์ ํ ๋ฟ์ ๋๋ค.
๊ทธ๋ฆผ 3. query๊ฐ ๋น์ฐ์ KV ๋ธ๋ก์ ๋ธ๋ก ๋จ์๋ก fetchํ์ฌ ์ดํ ์ ์ ๊ณ์ฐ
๋ธ๋ก ๋จ์ ์ดํ ์ (๊ฐ๋ ์ ์์ฌ์ฝ๋)
-
vLLM ์ปค๋์์ ํ ๋ธ๋ก์ ํ ํค๋์ 16ํ ํฐ ร head_dim(์: 128) = 2048๊ฐ ์์๋ฅผ ๋ด์ผ๋ฉฐ, ์ํ(32 ์ค๋ ๋)๊ฐ ํ ๋ฒ์ ํ ๋ธ๋ก์ ์ฒ๋ฆฌํฉ๋๋ค.
-
๋น์ฉ: ๋ธ๋ก ํ ์ด๋ธ ์กฐํ์ ์ถ๊ฐ ๋ถ๊ธฐ ๋๋ฌธ์ ๋นํ์ด์ง๋ ์ปค๋ ๋๋น ์ฝ 20~26% ๋๋ฆฝ๋๋ค(๋ ผ๋ฌธ ์ธก์ ). ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ผ๋ก ๋ฐฐ์น๋ฅผ ํฌ๊ฒ ํค์ธ ์ ์์ด ์ ์ฒด ์ฒ๋ฆฌ๋์ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
-
vLLM์ ์ด indirection ์ค๋ฒํค๋๋ฅผ ์ดํ ์ ๋ฑ ๋ค๋ฅธ ์ฐ์ฐ๊ณผ GPU ์ปค๋์ ์ตํฉ(fuse)ํด ์ํํฉ๋๋ค.
4. ๋ฉ๋ชจ๋ฆฌ ๊ณต์ โ Copy-on-Write์ ํ๋ฆฌํฝ์ค ๊ณต์
๋ธ๋ก ํ ์ด๋ธ์ด๋ผ๋ ๊ฐ์ ๊ณ์ธต์ ๋จํธํ ์ ๊ฑฐ๋ฅผ ๋์ด ๋ ํ๋์ ๊ฐ๋ ฅํ ๋ฅ๋ ฅ์ ์ค๋๋ค. ์ฌ๋ฌ ์ํ์ค๊ฐ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ธ๋ก์ ๊ณต์ ํ๊ณ , ์ฐ๊ธฐ๊ฐ ํ์ํ ์๊ฐ์๋ง ๋ณต์ฌํ๋ copy-on-write์ ๋๋ค. ์ด๋ OS๊ฐ fork๋ ํ๋ก์ธ์ค๋ผ๋ฆฌ ํ์ด์ง๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆผ 4. ๋ณ๋ ฌ ์ํ๋ง์ COW์ ๊ณต์ ํ๋ฆฌํฝ์ค(์์คํ ํ๋กฌํํธ) ๊ณต์
๊ณต์ ์๋๋ฆฌ์ค
-
๋ณ๋ ฌ ์ํ๋ง โ ํ ํ๋กฌํํธ๋ก ์ฌ๋ฌ ๋ต์ ์์ฑํ ๋, ํ๋กฌํํธ์ KV ๋ธ๋ก์ ์ฐธ์กฐ ์นด์ดํธ์ ํจ๊ป ๊ณต์ ํ๊ณ , ๊ฐ ์ํ์ด ๋ถ๊ธฐํด ์๋ก ๋ค๋ฅธ ํ ํฐ์ ์ฐ๋ ์๊ฐ(ref>1 ๊ฐ์ง)์๋ง ๋ธ๋ก์ ๋ณต์ฌํฉ๋๋ค.
-
๋น์์น โ ํ๋ณด(beam)๋ค์ด ํ๋กฌํํธ๋ฟ ์๋๋ผ ์ค๊ฐ ๋ธ๋ก๊น์ง ๊ณต์ ํ๋ฉฐ, ๊ณต์ ํจํด์ด ๋์ ์ผ๋ก ์งํํฉ๋๋ค. ๊ธฐ์กด ์์คํ ์ ์ฆ์ KV ๋ณต์ฌ๋ฅผ ๋ธ๋ก ๊ณต์ ๋ก ๋์ฒดํฉ๋๋ค.
-
๊ณต์ ํ๋ฆฌํฝ์ค โ ์์คํ ํ๋กฌํํธ๋ few-shot ์์์ฒ๋ผ ๋ชจ๋ ์์ฒญ์ด ๊ณต์ ํ๋ ์๋ถ๋ถ์ KV๋ฅผ ๋ฏธ๋ฆฌ ์บ์ํด๋๋ฉด, ํ๋ฆฌํฝ์ค ๊ณ์ฐ์ 1ํ๋ก ๋๋๊ณ ๋ฉ๋ชจ๋ฆฌ๋ 1๋ฒ๋ง ์ฐจ์งํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ(๋ ผ๋ฌธ ์ค์ธก) โ ๋ณ๋ ฌ ์ํ๋ง๊ณผ ๋น์์น์์ ์ต๋ 55% ์ ๊ฐ(๋น์์น 37.6~55.2%, ๋ณ๋ ฌ ์ํ๋ง 6.1~9.8%, ShareGPT ์ํฌ๋ก๋์์ 16.2~30.5%). ๋ ผ๋ฆฌโ๋ฌผ๋ฆฌ ๋งคํ ๊ณ์ธต์ด ๊ณต์ ์ ๋ณต์ก์ฑ์ ์จ๊ธฐ๋ฏ๋ก, ์๋ก ๋ค๋ฅธ ์ํ๋ง ์๊ตฌ๋ฅผ ๊ฐ์ง ์์ฒญ๋ค๋ ํ ๋ฐฐ์น์ ์์ ์ ์์ต๋๋ค.
์๋ ํ๋ฆฌํฝ์ค ์บ์ฑ(APC)
vLLM์ ๊ฐ KV ๋ธ๋ก์ 'ํ๋ฆฌํฝ์ค ํ ํฐ๋ค์ ํด์'๋ก ์๋ณํด ์ ์ญ ํด์ ํ ์ด๋ธ์ ๋ฑ๋กํจ์ผ๋ก์จ, ํธ๋ฆฌ ๊ตฌ์กฐ ์์ด๋ ๊ณตํต ํ๋ฆฌํฝ์ค๋ฅผ ์๋์ผ๋ก ๊ณต์ ํฉ๋๋ค(enable_prefix_caching). SGLang์ RadixAttention์ ๊ฐ์ ๋ชฉํ๋ฅผ radix tree(ํธ๋ผ์ด)๋ก ๋ฌ์ฑํ๋ ๋์์ ๋๋ค.
5. ์ฑ๋ฅ๊ณผ vLLM ์์คํ
PagedAttention์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๊ทธ๋๋ก ์ฒ๋ฆฌ๋์ผ๋ก ์ด์ด์ง๋๋ค. ๋ญ๋น๋ฅผ ์์ค ๋งํผ ๋ ๋ง์ ์์ฒญ์ KV๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ๊ณ , ๋ ํฐ ๋ฐฐ์น๊ฐ ๋์ฝ๋ฉ์ ๋ฉ๋ชจ๋ฆฌ ๋์ญํญ์ ๋ ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฆผ 5. KV ๋ฉ๋ชจ๋ฆฌ ํ์ฉ๋ฅ (96.3% vs 13~38%)๊ณผ ์ฒ๋ฆฌ๋ ํฅ์, continuous batching๊ณผ์ ์๋ณด์ฑ
Continuous Batching๊ณผ์ ์๋ณด์ฑ
vLLM์ PagedAttention์ continuous batching(iteration-level scheduling, Orca์์ ์ ๋)๊ณผ ๊ฒฐํฉํฉ๋๋ค. Continuous batching์ด ๋งค ๋์ฝ๋ฉ ์คํ ๋ง๋ค ์๋ฃ๋ ์์ฒญ์ ๋นผ๊ณ ์ ์์ฒญ์ ๋ฃ์ด GPU๋ฅผ ๊ฝ ์ฑ์ฐ๋ ์ค์ผ์ค๋ง ์ธก๋ฉด์ด๋ผ๋ฉด, PagedAttention์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์์ ๋ ๋ง์ ์์ฒญ์ working set์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ๊ฒ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ธก๋ฉด์ ๋๋ค. ๋ ๊ธฐ๋ฒ์ ์๋ณด์ ์ด๋ฉฐ, ํจ๊ป ์๋ํด ์ฒ๋ฆฌ๋์ ๊ทน๋ํํฉ๋๋ค. vLLM์ UC Berkeley์์ ์์ํด 2000๋ช ์ด์์ด ๊ธฐ์ฌํ๋ ๋ํ์ ์คํ์์ค ์๋น ์์ง์ผ๋ก ์ฑ์ฅํ์ต๋๋ค.
6. ์ ์ ยท์ค์ยท์ฌ๊ณ์ฐ๊ณผ ํธ๋ ์ด๋์คํ
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ โ ์ค์ vs ์ฌ๊ณ์ฐ
์์ฒญ์ด ๋ชฐ๋ ค GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด vLLM์ FCFS๋ก ์ต์ ์์ฒญ์ ์ ์ (preempt)ํ๊ณ , ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ณต๊ตฌํฉ๋๋ค.
-
์ค์(swapping) โ ํด์ถ๋ ๋ธ๋ก์ CPU RAM์ผ๋ก ๋ณต์ฌํฉ๋๋ค. vLLM์ GPU ๋ธ๋ก ํ ๋น๊ธฐ ์ธ์ CPU ๋ธ๋ก ํ ๋น๊ธฐ๋ฅผ ๋๋ฉฐ, CPU๋ก ์ค์๋๋ ๋ธ๋ก ์๋ GPU ๋ฌผ๋ฆฌ ๋ธ๋ก ์ด์๋ฅผ ๋์ง ์์ผ๋ฏ๋ก ์ค์ ๊ณต๊ฐ์ ์ํ์ด ์ ํด์ง๋๋ค.
-
์ฌ๊ณ์ฐ(recomputation) โ ํด์ถ ํ ๋ค์ admitํ ๋ prefill์ ์ฌ์คํํฉ๋๋ค. PCIe ๋์ญํญ์ ์ฐ์ง ์์ ๋ธ๋ก ํฌ๊ธฐ์ ๋ฌด๊ดํ๊ฒ ์ผ์ ํ ์ค๋ฒํค๋๋ฅผ ๊ฐ์ง๋ฉฐ, ์ GB์ KV๋ฅผ PCIe๋ก ์๋ณต์ํค๋๋ ์ฌ๊ณ์ฐ์ด ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. vLLM V1์์๋ ๊ธฐ๋ณธ ์ ์ ๋ชจ๋๊ฐ SWAP์ด ์๋๋ผ RECOMPUTE์ ๋๋ค.
-
all-or-nothing ํด์ถ โ ํ ์ํ์ค์ ๋ชจ๋ ๋ธ๋ก์ ํจ๊ป ์ค์/์ฌ๊ณ์ฐํฉ๋๋ค(์์ฒญ ์ฒ๋ฆฌ์ ๋ชจ๋ ํ ํฐ ์ํ๊ฐ GPU์ ์์ด์ผ ํ๋ค๋ ์ ์ ํ์ฉ). OS ํ์ด์ง์๋ ์๋ LLM ํนํ ์ต์ ํ์ ๋๋ค.
๋ธ๋ก ํฌ๊ธฐ์ ํธ๋ ์ด๋์คํ
๋ธ๋ก์ด ๋๋ฌด ์์ผ๋ฉด ๋ธ๋ก ํ ์ด๋ธ ์กฐํ ํ์์ ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋๊ณ , ๋๋ฌด ํฌ๋ฉด ์งง์ ์๋ต์์ ๋ด๋ถ ๋จํธํ๊ฐ ์ปค์ง๋๋ค. ๋ ผ๋ฌธ ์คํ์์ ShareGPT(๊ธด ์ํ์ค)๋ 16~128, Alpaca(์งง์ ์ํ์ค)๋ 16~32๊ฐ ์ข์๊ณ , ๊ฒฐ๋ก ์ ์ผ๋ก 16์ด GPU ํ์ฉ์๋ ์ถฉ๋ถํ ํฌ๊ณ ๋จํธํ ๋ฐฉ์ง์๋ ์ถฉ๋ถํ ์์ ๊ธฐ๋ณธ๊ฐ์ด ๋์์ต๋๋ค.
๋์ โ vAttention
vAttention(ASPLOS 2025)์ PagedAttention์ ๋น์ฐ์ ๋ ์ด์์์ด ์ ์ปค๋ ์ด์์ ์ด๋ ต๊ฒ ํ๊ณ ์ปค๋ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค๊ณ ๋นํํ๋ฉฐ, user-space ํ์ด์ง ๋์ CUDA ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ API(๊ฐ์ ์ฃผ์๋ ์ฐ์ ์์ฝ, ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ on-demand ๋งคํ)๋ก ๊ฐ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํฉ๋๋ค. ๋ฏธ์์ ์ดํ ์ ์ปค๋์ ๊ทธ๋๋ก ์ฐ๋ฉด์ ์ต๋ 1.23๋ฐฐ ์ฒ๋ฆฌ๋ ํฅ์์ ๋ณด๊ณ ํ์ต๋๋ค("up to" ๊ฐ).
7. ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋งยทKV ์บ์ ์คํ๋ก๋ฉ ์ฐ๊ฒฐ
PagedAttention์ ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก์ ๋จํธํ ํด๊ฒฐ์ ๋์ด, KV ์บ์๋ฅผ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ผ๋ก ์ฎ๊ธฐ๋ '์ด๋ ๋จ์'๋ก๋ ์์ฐ์ค๋ฝ๊ฒ ์ฐ์ ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง์ ํ์ด์ง์ ๋ํ์ด๋ฉฐ, KV ์บ์ ์คํ๋ก๋ฉ ์ฐ๊ตฌ์ ์ง์ ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
๊ทธ๋ฆผ 6. ๋ธ๋ก์ ์ด๋ ๋จ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต๊ณผ KV ์คํ๋ก๋ฉ ์ฐ๊ตฌ์ ๊ณ๋ณด
์คํ๋ก๋ฉ ๊ด๋ จ ์ฐ๊ตฌ์ ํ๋ฆ์ ์๋ ํ์ ๊ฐ์ด ์ด์ด์ง๋๋ค.
์ PagedAttention์ด ๊ธฐ๋ฐ์ธ๊ฐ
-
๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก์ ๊ทธ ์์ฒด๋ก ๊ด๋ฆฌยท์ด๋์ ๋จ์ โ ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง์ ํ์ด์ง์ ๋ํ. 'KV ๋ธ๋ก์ ์ด๋ ํฐ์ด์ ๋ ๊ฒ์ธ๊ฐ'๊ฐ ๊ณง promotion/demotion ์ ์ฑ ๋ฌธ์ ๋ก ํ์๋ฉ๋๋ค.
-
vLLM์ ์ด๋ฏธ CPU ๋ธ๋ก ํ ๋น๊ธฐ๋ก ๋ธ๋ก์ CPU๋ก ์ค์ํฉ๋๋ค. ๊ณ์ธต์ GPU HBM(~3.35TB/s) โ CPU DRAM(~63GB/s PCIe5) โ NVMe(~7GB/s) โ ์๊ฒฉ/CXL๋ก ์ด์ด์ง๋๋ค.
-
CXL์ ์์๋ PCIe ์คํ๋ก๋ฉ(8~12GB/s)์ ๋์ญํญยท์ง์ฐ ํ๊ณ๋ฅผ ์ํํ๊ณ , CXLโGPU ์ง์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ค๋ ์ ์ ๋๋ค. Tang et al.์ CXL-GPU ์ ์ก์ด CPU-GPU ์ ์ก๊ณผ ๋๋ฑํจ์ ์คํ์ผ๋ก ๋ณด์์ต๋๋ค.
๋น๊ต/๋ถ์
PagedAttention์ OS ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ถ์ํ๋ฅผ ์ฌ์ฉํด KV ์บ์๋ฅผ ๋ค๋ฃน๋๋ค.
| OS ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ | PagedAttention |
|---|---|
| ํ๋ก์ธ์ค | ์์ฒญ(์ํ์ค) |
| ํ์ด์ง(๊ณ ์ ํฌ๊ธฐ) | KV ๋ธ๋ก(๊ณ ์ ํ ํฐ ์, ๊ธฐ๋ณธ 16) |
| ๋ฐ์ดํธ | ํ ํฐ |
| ํ์ด์ง ํ ์ด๋ธ | ๋ธ๋ก ํ ์ด๋ธ(๋ ผ๋ฆฌโ๋ฌผ๋ฆฌ + ์ฑ์์ง ํ ํฐ ์) |
๋ธ๋ก ํ ์ด๋ธ ์กฐํ ์์ฌ์ฝ๋
# ๋ธ๋ก ํ
์ด๋ธ: ๋
ผ๋ฆฌ ๋ธ๋ก ๋ฒํธ โ ๋ฌผ๋ฆฌ ๋ธ๋ก ๋ฒํธ
# query q_i ์ ๋ํด ํฉ์ด์ง KV ๋ธ๋ก๋ค์ ์ํํ๋ฉฐ ๋ถ๋ถ softmax ๋์
out_i = 0
denom = 0
running_max = -inf
for j in range(num_blocks): # ๋
ผ๋ฆฌ ๋ธ๋ก 0..n
phys = block_table[seq][j] # ๋ฌผ๋ฆฌ ๋ธ๋ก ์์น ์กฐํ
K_j = K_cache[phys] # ๋ธ๋ก ๋ด B(=16)๊ฐ ํ ํฐ์ Key
V_j = V_cache[phys] # ๋ธ๋ก ๋ด B๊ฐ ํ ํฐ์ Value
s = (q_i @ K_j.T) / sqrt(d) # ๋ธ๋ก์ ๋ํ ์ ์
# ์จ๋ผ์ธ softmax (FlashAttention ์คํ์ผ)๋ก max/๋ถ๋ชจ/๋์ ์ ๊ฐฑ์
out_i, denom, running_max = online_softmax_update(
out_i, denom, running_max, s, V_j
)
o_i = out_i / denom # ์ต์ข
์ดํ
์
์ถ๋ ฅ
์ฒ๋ฆฌ๋ ๋น๊ต
| ๋น๊ต ๋์ | ์ฒ๋ฆฌ๋ ํฅ์ | ์กฐ๊ฑด |
|---|---|---|
| Orca / FasterTransformer | 2~4๋ฐฐ | ๋์ผ ์ง์ฐ, ์ํ์ค ๊ธธ์๋กยท๋ณต์กํ ์๋ก โ |
| HuggingFace Transformers | 14~24๋ฐฐ | ๋จ์ผ ์ถ๋ ฅ (LLaMA-7B/13B) |
| HuggingFace TGI | 2.2~2.5๋ฐฐ | ๋จ์ผ ์ถ๋ ฅ |
| vs HF (๋ณ๋ ฌ ์ถ๋ ฅ 3๊ฐ) | 8.5~15๋ฐฐ | ๋ณต์กํ ๋์ฝ๋ฉ์์ ํจ๊ณผ ๊ทน๋ํ |
์ฅ๋จ์
์ฅ์
- KV ์บ์๋ฅผ ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก์ผ๋ก ๊ด๋ฆฌํด ์ธ๋ถ ๋จํธํ๋ฅผ ์ฌ์ค์ ์ ๊ฑฐํ๊ณ , ๋ด๋ถ ๋จํธํ๋ ๋ง์ง๋ง ๋ธ๋ก ํ๋๋ก ์ ํํฉ๋๋ค.
- copy-on-write์ ํ๋ฆฌํฝ์ค ๊ณต์ ๋ฅผ ํตํด ๋ณ๋ ฌ ์ํ๋ง, ๋น์์น, ์์คํ ํ๋กฌํํธ ์ฌ์ฌ์ฉ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋ฐ๋ก ์ป์ ์ ์์ต๋๋ค.
- continuous batching, CPU ์ค์, ๊ณ์ธตํ KV ์คํ๋ก๋ฉ๊ณผ ๊ฒฐํฉํ๊ธฐ ์ฌ์ ์๋น ์์ง ์ ์ฒด์ ํ์ฅ์ฑ๊ณผ ์ด์ ์ ์ฐ์ฑ์ ๋์ ๋๋ค.
๋จ์
- ๋ธ๋ก ํ ์ด๋ธ ์กฐํ์ ๋น์ฐ์ ์ ๊ทผ ๋๋ฌธ์ ์ ์ฉ ์ดํ ์ ์ปค๋์ด ํ์ํ๊ณ , ์ปค๋ ์์ฒด ์ฑ๋ฅ์ ์ฐ์ ๋ ์ด์์ ๋๋น ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ธ๋ก ํฌ๊ธฐ ์ ํ์ด ์ด๋ ต์ต๋๋ค. ๋๋ฌด ์์ผ๋ฉด ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ์ปค์ง๊ณ , ๋๋ฌด ํฌ๋ฉด ์งง์ ์๋ต์์ ๋ด๋ถ ๋จํธํ๊ฐ ๋ค์ ๋์ด๋ฉ๋๋ค.
- GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋๋ ์ค์ ๋๋ ์ฌ๊ณ์ฐ ์ ์ฑ ์ ์ถ๊ฐ๋ก ์ค๊ณํด์ผ ํ๋ฏ๋ก, ๋จ์ ์ฐ์ ํ ๋น๋ณด๋ค ๋ฐํ์ ์ ์ฑ ์ด ๋ณต์กํด์ง๋๋ค.
๊ด๋ จ ๊ธฐ์ ๋ฐ ์ฐธ๊ณ ๋ฌธํ
| ์ฐ๊ตฌ | ํต์ฌ | ๋น๊ณ |
|---|---|---|
| vLLM CPU ๋ธ๋ก | ์ค์์ผ๋ก ๋ธ๋ก์ CPU RAM์ ํด์ถ | ์คํ๋ก๋ฉ์ ์ถ๋ฐ์ |
| LMCache | GPUยทCPUยท๋์คํฌยท์๊ฒฉ ๋ค๊ณ์ธต KV, ํฐ chunk(256ํ ํฐ) | ๋ฉํฐํดยทRAG์์ TTFT 3~10๋ฐฐโ |
| Mooncake | KVCache-centric ๋ถ๋ฆฌ ์ํคํ ์ฒ, ์์ ํ๋ง | Transfer Engine(CXL/NVMe-oF) |
| CXL-KV (Tang et al.) | save/load API, prefix ํด์, CXLโGPU ์ง์ ๊ฒฝ๋ก | ๋ฐฐ์น 44โ57(+30%) ์ค์ธก |
| CXL-PNM | CXL ๋ฉ๋ชจ๋ฆฌ ๋ด ์ฐ์ฐ์ผ๋ก ํ ํฐ ์ ํ ์คํ๋ก๋ | ์ต๋ 21.9๋ฐฐ(์ ์ ๋ณด๊ณ ) |
- Kwon et al., "Efficient Memory Management for Large Language Model Serving with PagedAttention", SOSP 2023 / arXiv:2309.06180.
- vLLM Project Documentation, "Paged Attention" ๋ฐ prefix caching, preemption, continuous batching ๊ด๋ จ ๋ฌธ์.
- Tang et al., CXL ๊ธฐ๋ฐ KV cache offloading ์ฐ๊ตฌ(CXL-KV) ๋ฐํ ์๋ฃ ๋ฐ ํ๋ฆฌํ๋ฆฐํธ.
- LMCache, Mooncake, vAttention ๋ ผ๋ฌธ/ํ๋ก์ ํธ ๋ฌธ์.
ํต์ฌ ์ ๋ฆฌ
PagedAttention์ OS ํ์ด์ง์ KV ์บ์์ ์ ์ฉํด, ์บ์๋ฅผ ๊ณ ์ ํฌ๊ธฐ ๋ธ๋ก์ผ๋ก ์ชผ๊ฐ๊ณ ๋ธ๋ก ํ ์ด๋ธ๋ก ๋น์ฐ์ ๊ด๋ฆฌํจ์ผ๋ก์จ ๊ธฐ์กด์ 60~80% ๋ญ๋น๋ฅผ 4% ๋ฏธ๋ง์ผ๋ก ์ค์๋ค. ๋ธ๋ก ๋จ์ ์ดํ ์ ์ปค๋์ ์ํ์ ์ผ๋ก ๋์ผํ๋ฉฐ, ์ฐธ์กฐ ์นด์ดํ ๊ณผ copy-on-write๋ก ๋ณ๋ ฌ ์ํ๋งยท๋น์์นยท๊ณต์ ํ๋ฆฌํฝ์ค์์ KV๋ฅผ ๊ณต์ ํ๋ค. continuous batching๊ณผ ๊ฒฐํฉํ vLLM์ ์ฒ๋ฆฌ๋์ 2~4๋ฐฐ, HuggingFace ๋๋น 14~24๋ฐฐ๊น์ง ๋์ด์ฌ๋ ค ์ฌ์ค์์ ํ์ค์ด ๋์๋ค. ๊ณ ์ ๋ธ๋ก ์ถ์ํ๋ ์ค์ยท์ฌ๊ณ์ฐ์ ๊ฑฐ์ณ CXLยท๊ณ์ธตํ ๋ฉ๋ชจ๋ฆฌ๋ก์ KV ์คํ๋ก๋ฉ์ผ๋ก ์ด์ด์ง๋ฉฐ, ์ด๋ 'KV ๋ธ๋ก์ ์ด๋ ํฐ์ด์ ๋ ๊ฒ์ธ๊ฐ'๋ผ๋ ๋ฉ๋ชจ๋ฆฌ ํฐ์ด๋ง ๋ฌธ์ ์ ์ง์ ๋ง๋ฟ๋๋ค.
์ฃผ์ โ ๋ณธ๋ฌธ ์์น๋ 1์ฐจ ๋ ผ๋ฌธ(arXiv 2309.06180)ยทvLLM ๊ณต์ ์๋ฃ์ ์ค์ธก์ด๋ ๋ชจ๋ธ(OPT/LLaMA)ยท๋ฐ์ดํฐ์ (ShareGPT/Alpaca)ยทํ๋์จ์ด(A100/A10G) ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๊ฐ์ด๋ค(14~24๋ฐฐ๋ HF ๋น๋ฐฐ์น ๋๋น, 2~4๋ฐฐ๋ Orca/FasterTransformer ๋๋น). CXL-KV์ 'GPU 87% ์ ๊ฐ'๋ฅ ์์น๋ ์ธก์ ์ด ์๋๋ผ ROI ๋ชจ๋ธ ์ถ์ ์น(ํ์ GPU ์ ๊ธฐ์ค)์ด๋ฉฐ, CXL-PNM ๋ฑ 2025๋ง~2026์ด ํ๋ฆฌํ๋ฆฐํธ์ 'up to' ๊ฐ์ ๋๋ฃ์ฌ์ฌ ์ฌ๋ถ์ ์ ์ํด์ผ ํ๋ค. vLLM V0/V1์ ์ ์ ๊ธฐ๋ณธ ๋ชจ๋๊ฐ ๋ค๋ฅด๋ค.