Ryotta's Basic

LLM
๐Ÿค– LLM ๊ฒ€์ฆ์™„๋ฃŒ

Prefix Caching Analysis

Prefix Caching / Prompt Caching ์‹ฌ์ธต ๋ถ„์„

๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค KV ์žฌ์‚ฌ์šฉ ยท ๋ธ”๋กยทํ•ด์‹œ ๋งค์นญ ยท RadixAttention vs APC ยท ํ”„๋กœ๋ฐ”์ด๋” Prompt Caching ยท ๋ฉ€ํ‹ฐํ„ดยทRAG

ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹ฑ(prefix caching, prompt caching)์€ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๊ณต์œ ํ•˜๋Š” ์•ž๋ถ€๋ถ„(ํ”„๋ฆฌํ”ฝ์Šค)์˜ KV ์บ์‹œ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ๊ฐ™์€ prefill ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. KV ์บ์‹œ๊ฐ€ ํ”„๋ฆฌํ”ฝ์Šค์—๋งŒ ์˜์กดํ•œ๋‹ค๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•ด ๊ณตํ†ต๋ถ€์˜ prefill์„ ํ†ต์งธ๋กœ ๊ฑด๋„ˆ๋›ฐ๋ฏ€๋กœ, ์ถœ๋ ฅ์„ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด์„œ(๋ฌด์†์‹ค) TTFT์™€ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ž…๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™”ยทRAGยทfew-shotยท์—์ด์ „ํŠธ์ฒ˜๋Ÿผ ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ํฐ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋– ๋ฐ›์น˜๋Š” ์‹ค๋ฌด ํ‘œ์ค€์ด๋ฉฐ, ๊ฑฐ์˜ ๋ชจ๋“  ์ถ”๋ก  ์—”์ง„(vLLMยทSGLang)๊ณผ ํ”„๋กœ๋ฐ”์ด๋”(OpenAIยทAnthropic ๋“ฑ)๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด ๊ด€์ ์—์„œ ์ค‘์š”ํ•œ ์ ์€ ์ด ๊ธฐ๋ฒ•์ด "์ข‹์€ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ๋ฒ•"๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ, ํˆด ์ •์˜, few-shot ์˜ˆ์‹œ, ์žฅ๋ฌธ ๋ฌธ์„œ๋ฅผ ํ”„๋กฌํ”„ํŠธ ์•ž์ชฝ์— ๊ณ ์ •ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋ณ„ ๊ฐ€๋ณ€ ์ž…๋ ฅ์€ ๋’ค๋กœ ๋ฐ€์ˆ˜๋ก ํžˆํŠธ์œจ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ค‘๊ฐ„์— ๋Œ€ํ™” ์ด๋ ฅ์„ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜, ํˆด ์Šคํ‚ค๋งˆ๋‚˜ ์ด๋ฏธ์ง€ ์ž…๋ ฅ์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜, ํ”„๋ฆฌํ”ฝ์Šค ์•ž๋ถ€๋ถ„์ด ์กฐ๊ธˆ์ด๋ผ๋„ ๋‹ฌ๋ผ์ง€๋ฉด ์บ์‹œ๊ฐ€ ๊นจ์ง€๋ฏ€๋กœ ๋ผ์šฐํŒ… ์ •์ฑ…๊ณผ ํ”„๋กฌํ”„ํŠธ ๋ ˆ์ด์•„์›ƒ๊นŒ์ง€ ํ•จ๊ป˜ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ๋Š” ํ•ต์‹ฌ ์•„์ด๋””์–ด โ†’ ๋งค์นญ ๋ฉ”์ปค๋‹ˆ์ฆ˜(๋ธ”๋กยทํ•ด์‹œ) โ†’ ๋‘ ๊ตฌํ˜„(RadixAttentionยทAPC) โ†’ ์‚ฌ์šฉ ์‚ฌ๋ก€ยทํ”„๋กœ๋ฐ”์ด๋” API โ†’ ์ถ•์ถœยท๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธตยทํ•œ๊ณ„์˜ ์ˆœ์„œ๋กœ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

1. ํ•ต์‹ฌ ์•„์ด๋””์–ด โ€” ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค์˜ KV๋ฅผ ์žฌ์‚ฌ์šฉ

์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๊ฐ™์€ ์•ž๋ถ€๋ถ„์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํ”ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ, few-shot ์˜ˆ์‹œ, RAG๋กœ ๋ถ™์ธ ๋ฌธ์„œ, ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™”์˜ ์ด๋ ฅ์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ˆœ์ง„ํ•˜๊ฒŒ๋Š” ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ด ๊ณตํ†ต๋ถ€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ prefillํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๊ฐ™์€ ๊ณ„์‚ฐ์˜ ๋ฐ˜๋ณต์ž…๋‹ˆ๋‹ค.

llm_0045_prefix_caching_analysis

๊ทธ๋ฆผ 1. ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด ์บ์‹œํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ

์™œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์™œ '๊ฑฐ์˜ ๊ณต์งœ'์ธ๊ฐ€

  • KV ์บ์‹œ๋Š” ๊ทธ ํ† ํฐ๊นŒ์ง€์˜ ์•ž๋ถ€๋ถ„(ํ”„๋ฆฌํ”ฝ์Šค)์—๋งŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ํ”„๋ฆฌํ”ฝ์Šค๋ฉด KV๊ฐ€ ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ณ , ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•ด ์ €์žฅํ•˜๋ฉด ๊ฐ™์€ ํ”„๋ฆฌํ”ฝ์Šค๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹ค๋ฅธ ์š”์ฒญ์ด ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • prefill์„ ๊ณต๋žต โ€” ๊ณตํ†ต๋ถ€์˜ prefill(๊ณ„์‚ฐ์ง‘์•ฝ ๋‹จ๊ณ„)์„ ํ†ต์งธ๋กœ ๊ฑด๋„ˆ๋›ฐ๋ฏ€๋กœ TTFT๊ฐ€ ํฌ๊ฒŒ ์ค„๊ณ  GPU ์—ฐ์‚ฐ์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฌด์†์‹ค โ€” ์บ์‹œ๋œ KV๋Š” ์žฌ๊ณ„์‚ฐํ•œ ๊ฒƒ๊ณผ ์ˆ˜ํ•™์ ์œผ๋กœ ๋™์ผํ•˜๋ฏ€๋กœ ์ถœ๋ ฅ์ด ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ '๊ฑฐ์˜ ๊ณต์งœ ์ ์‹ฌ(almost free lunch)'์œผ๋กœ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

  • ํŠนํžˆ ๋ฉ€ํ‹ฐํ„ด โ€” ๋งค ํ„ด๋งˆ๋‹ค ์ „์ฒด ๋Œ€ํ™”๋ฅผ ๋‹ค์‹œ prefillํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ํ„ด๋“ค์˜ KV๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•˜๋ฉฐ, ํ•œ ํ† ํฐ๋งŒ ๋‹ฌ๋ผ๋„ ๊ทธ ์ง€์ ๋ถ€ํ„ฐ ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋ฒ•์€ KV ์ ˆ๊ฐ ๊ธฐ๋ฒ•(์–‘์žํ™”ยทMLAยทGQA)๊ณผ๋Š” ๋‹ค๋ฅธ ์ถ•์ž…๋‹ˆ๋‹ค. ์–‘์žํ™”ยทMLA๊ฐ€ 'KV๋ฅผ ์ž‘๊ฒŒ' ๋งŒ๋“ ๋‹ค๋ฉด, ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹ฑ์€ 'KV๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š๊ฒŒ' ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‘˜์€ ์ง๊ต์ ์œผ๋กœ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋งค์นญ ๋ฉ”์ปค๋‹ˆ์ฆ˜ โ€” ๋ธ”๋ก ๋‹จ์œ„ + ํ•ด์‹œ

ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹ฑ์€ PagedAttention์˜ ๋ธ”๋ก ์ถ”์ƒํ™” ์œ„์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. KV๋ฅผ ๊ณ ์ • ํ† ํฐ ์ˆ˜์˜ ๋ธ”๋ก์œผ๋กœ ์ชผ๊ฐœ๊ณ , ๊ฐ ๋ธ”๋ก์„ '๊ทธ ๋ธ”๋ก๊นŒ์ง€์˜ ํ”„๋ฆฌํ”ฝ์Šค'๋ฅผ ๋ฐ˜์˜ํ•œ ํ•ด์‹œ๋กœ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

Prefix Caching Analysis

๊ทธ๋ฆผ 2. ๋ธ”๋ก๋ณ„ ํ•ด์‹œ ์ฒด์ธ๊ณผ ์ ‘๋‘ ์ผ์น˜(prefix match) ๊ธฐ๋ฐ˜ ์žฌ์‚ฌ์šฉ

๋ธ”๋ก ํ•ด์‹œ์™€ ๋งค์นญ (vLLM APC ๊ฐœ๋…)

๋งค์นญ์˜ ํ•ต์‹ฌ

  • ํ•ด์‹œ๊ฐ€ ๋‚ด์šฉ๊ณผ ์œ„์น˜(์•ž ๋ธ”๋ก๋“ค)๋ฅผ ๋ชจ๋‘ ๋ฐ˜์˜ํ•˜๋ฏ€๋กœ, ๊ฐ™์€ ํ•ด์‹œ๋ฉด ๊ฐ™์€ KV ๋ธ”๋ก์ž„์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ ๋ธ”๋ก์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ฑฐ์ณ ๋ฌผ๋ฆฌ ๋ธ”๋ก์— ๋งคํ•‘ํ•˜๊ณ , ๊ฐ™์€ ํ•ด์‹œ๋Š” ๊ฐ™์€ ๋ฌผ๋ฆฌ ๋ธ”๋ก์„ ๊ฐ€๋ฆฌ์ผœ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ ‘๋‘ ์ผ์น˜(prefix match) โ€” ์•ž์—์„œ๋ถ€ํ„ฐ ํ•ด์‹œ๊ฐ€ ๊ฐ™์€ ๋ธ”๋ก๊นŒ์ง€๋งŒ ์žฌ์‚ฌ์šฉํ•˜๊ณ , ์ฒ˜์Œ ๋‹ฌ๋ผ์ง€๋Š” ๋ธ”๋ก๋ถ€ํ„ฐ ์žฌ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ฆฌํ”ฝ์Šค ์ „์ฒด๊ฐ€ ๊ฐ™์ง€ ์•Š์•„๋„ ์ผ์น˜ํ•˜๋Š” ์•ž๋ถ€๋ถ„๊นŒ์ง€๋Š” ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ถ€๋ถ„ ๋งค์นญ).

  • ์ •ํ™• ์ผ์น˜ ํ•„์ˆ˜ โ€” ํ† ํฐ ์‹œํ€€์Šค๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๊ณ  ์œ„์น˜๋„ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(์–ดํ…์…˜ยทRoPE๊ฐ€ ์œ„์น˜์— ์˜์กด). ๋ธ”๋ก ํฌ๊ธฐ(์˜ˆ: 16ํ† ํฐ) ๋‹จ์œ„๋กœ ๋งค์นญ๋˜๋ฏ€๋กœ, ๋ธ”๋ก ์ค‘๊ฐ„์—์„œ ๊ฐˆ๋ฆฌ๋ฉด ๊ทธ ๋ธ”๋ก์€ ์žฌ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

3. ๋‘ ๊ฐ€์ง€ ๊ตฌํ˜„ ๋ฐฉ์‹

ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€ํ‘œ์  ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. SGLang์˜ RadixAttention์€ ํ† ํฐ ๋‹จ์œ„ radix tree๋ฅผ, vLLM์˜ Automatic Prefix Caching(APC)์€ ๋ธ”๋ก ๋‹จ์œ„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์”๋‹ˆ๋‹ค.

Prefix Caching Analysis

๊ทธ๋ฆผ 3. RadixAttention(ํ† ํฐ ๋‹จ์œ„ ํŠธ๋ฆฌ)๊ณผ hash ๋ธ”๋ก ์บ์‹ฑ(vLLM APC)

ํ•ญ๋ชฉ RadixAttention (SGLang) APC (vLLM)
๊ธฐ๋ณธ ๋‹จ์œ„ ํ† ํฐ ์‹œํ€€์Šค ๊ฒฝ๋กœ ๊ณ ์ • ํฌ๊ธฐ KV ๋ธ”๋ก
ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ radix tree ํ•ด์‹œ ํ…Œ์ด๋ธ” + ๋ฌผ๋ฆฌ ๋ธ”๋ก ๋งคํ•‘
์žฅ์  ์„ธ๋ฐ€ํ•œ prefix ๊ฒ€์ƒ‰, ๋ถ„๊ธฐ ์›Œํฌ๋กœ๋“œ์— ์œ ๋ฆฌ ๋‹จ์ˆœํ•˜๊ณ  PagedAttention๊ณผ ๊ฒฐํ•ฉ์ด ์‰ฌ์›€
์ฃผ์˜์  ํŠธ๋ฆฌ ์œ ์ง€ยท์ถ•์ถœ ์ •์ฑ…์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ ๋ธ”๋ก ๊ฒฝ๊ณ„์—์„œ ๊ฐˆ๋ฆฌ๋ฉด ํ•ด๋‹น ๋ธ”๋ก ์ „์ฒด๋ฅผ ์žฌ๊ณ„์‚ฐ
์ž˜ ๋งž๋Š” ์ƒํ™ฉ ๋ฉ€ํ‹ฐํ„ด, ์—์ด์ „ํŠธ, ๊ตฌ์กฐํ™”๋œ ๋ถ„๊ธฐ ์ถ”๋ก  ์ผ๋ฐ˜ ์„œ๋น™, ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜, ๋ธ”๋ก ๊ด€๋ฆฌ ์ž๋™ํ™”

RadixAttention (SGLang)

  • KV ์บ์‹œ๋ฅผ ํ† ํฐ ์‹œํ€€์Šค์˜ radix tree์— ๋ณด๊ด€ํ•ด, ๋น ๋ฅธ ํ”„๋ฆฌํ”ฝ์Šค ๊ฒ€์ƒ‰ยท์‚ฝ์ž…ยท์ถ•์ถœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ์ด ๋๋‚˜๋„ KV๋ฅผ ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ํŠธ๋ฆฌ์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต์œ  ํ”„๋ฆฌํ”ฝ์Šค๋Š” ํŠธ๋ฆฌ์˜ ๊ณต์œ  ๊ฒฝ๋กœ๊ฐ€ ๋˜๊ณ , ๊ฐˆ๋ผ์ง€๋Š” ์ง€์ ์—์„œ ์ƒˆ ๊ฐ€์ง€๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. fork ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋กœ ๋ถ„๊ธฐ๋˜๋Š” ๋™์  ํŠธ๋ฆฌ(์—์ด์ „ํŠธยท๋‹ค๋‹จ๊ณ„ ์ถ”๋ก )์— ํŠนํžˆ ์ ํ•ฉํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐํ„ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ vLLM ๋Œ€๋น„ 10~20% ํ–ฅ์ƒ์ด ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค.

Hash ๋ธ”๋ก ์บ์‹ฑ (vLLM APC)

  • ๊ฐ ๋ธ”๋ก์„ ํ•ด์‹œ๋กœ ์‹๋ณ„ํ•ด ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ณต์œ ํ•˜๋ฉฐ, OS ํŽ˜์ด์ง€ ์บ์‹œ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 0์ธ ๋ธ”๋ก๋งŒ LRU๋กœ ์ถ•์ถœํ•˜๋ฉด RadixAttention๊ณผ ์‚ฌ์‹ค์ƒ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

  • ๋‘˜์˜ ์ฐจ์ด๋Š” ์ž…์ž๋„์ž…๋‹ˆ๋‹ค โ€” radix tree๋Š” ํ† ํฐ ๋‹จ์œ„(์œ ์—ฐ), hash๋Š” ๋ธ”๋ก ๋‹จ์œ„(๋‹จ์ˆœยท๊ตฌํ˜„ ์šฉ์ด)์ž…๋‹ˆ๋‹ค.

๊ณตํ†ต์  โ€” ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ LRU ์ถ•์ถœ๊ณผ cache-aware ์Šค์ผ€์ค„๋ง(๊ฐ™์€ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๊ฐ€์ง„ ์š”์ฒญ์„ ํ•จ๊ป˜ ๋ฐฐ์น˜)์œผ๋กœ hit์œจ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ ๋†’์ธ๋‹ค. ๋˜ PagedAttentionยท์—ฐ์† ๋ฐฐ์นญยทํ…์„œ ๋ณ‘๋ ฌ๊ณผ ํ˜ธํ™˜๋˜๋ฉฐ, ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋‚˜๋„ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฑฐ์˜ ์—†์–ด ํ•ญ์ƒ ์ผœ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

4. ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ํ”„๋กœ๋ฐ”์ด๋” Prompt Caching

Prefix Caching Analysis

๊ทธ๋ฆผ 4. ์‚ฌ์šฉ ์‚ฌ๋ก€, ํ”„๋กฌํ”„ํŠธ ๊ตฌ์กฐ, ํ”„๋กœ๋ฐ”์ด๋”๋ณ„ ํšจ๊ณผ

์–ด๋””์„œ ์“ฐ์ด๋‚˜

๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ํฐ ์›Œํฌ๋กœ๋“œ์—์„œ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™”(์ด์ „ ํ„ด KV ์žฌ์‚ฌ์šฉ), RAG(๊ฒ€์ƒ‰ ๋ฌธ์„œ ํ”„๋ฆฌํ”ฝ์Šค), few-shotยท์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ(๊ณตํ†ต ์ง€์‹œยท์˜ˆ์‹œ), ์—์ด์ „ํŠธ(๊ณตํ†ต ํˆด ์ •์˜ยท์ปจํ…์ŠคํŠธ)๊ฐ€ ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋” Prompt Caching API

OpenAIยทAnthropic ๋“ฑ์€ ์ด ๊ธฐ๋ฒ•์„ API๋กœ ์ œํ’ˆํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ํŒจํ„ด์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ •์  ์ฝ˜ํ…์ธ (์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธยทํˆด ์ •์˜ยท๋ฌธ์„œ)๋ฅผ ํ”„๋กฌํ”„ํŠธ ๋งจ ์•ž์— ๋‘๊ณ  ๊ฐ€๋ณ€ ๋ถ€๋ถ„(์‚ฌ์šฉ์ž ์งˆ๋ฌธ)์„ ๋’ค์— ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•ž์ชฝ ์ •์  ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ๋งค๋ฒˆ ์บ์‹œ ํžˆํŠธํ•ฉ๋‹ˆ๋‹ค. Anthropic์€ cache_control๋กœ ์ž๋™/๋ช…์‹œ์  ์บ์‹ฑ์„ ์ œ์–ดํ•˜๊ณ  ๊ธฐ๋ณธ 5๋ถ„ TTL๊ณผ 1์‹œ๊ฐ„ TTL ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋ฉฐ, OpenAI๋Š” 1024ํ† ํฐ ์ด์ƒ์—์„œ ์ž๋™ ์บ์‹ฑ๋˜๊ณ  prompt_cache_key์™€ retention ์ •์ฑ…์œผ๋กœ ๋ผ์šฐํŒ…๊ณผ ๋ณด์กด ์‹œ๊ฐ„์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋ฐ”์ด๋” ๋™์ž‘ ๋ฐฉ์‹ ์ตœ์†Œ ์กฐ๊ฑด/๋ณด์กด ์‹ค๋ฌด ํฌ์ธํŠธ
OpenAI exact prefix match ๊ธฐ๋ฐ˜ ์ž๋™ ์บ์‹ฑ 1024ํ† ํฐ ์ด์ƒ, ๊ธฐ๋ณธ in-memory 5~10๋ถ„, ์ผ๋ถ€ ๋ชจ๋ธ์€ ์ตœ๋Œ€ 24์‹œ๊ฐ„ retention ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์•ž์— ๋‘๊ณ  prompt_cache_key๋กœ ๋™์ผ prefix ์š”์ฒญ์„ ๊ฐ™์€ ์บ์‹œ ๊ตฐ์ง‘์œผ๋กœ ์œ ๋„
Anthropic cache_control ๊ธฐ๋ฐ˜ ์ž๋™ ๋˜๋Š” ๋ช…์‹œ์  breakpoint ์บ์‹ฑ ๋ชจ๋ธ๋ณ„ ์ตœ์†Œ ํ† ํฐ ์ˆ˜, ๊ธฐ๋ณธ 5๋ถ„ TTL, ์„ ํƒ์  1์‹œ๊ฐ„ TTL ๊ณ ์ • prefix ๋ ์ง€์ ์— breakpoint๋ฅผ ๋‘๊ณ , ๋Œ€ํ™”๊ฐ€ ๊ธธ์–ด์งˆ ๋•Œ๋Š” lookback window์™€ block ์ˆ˜๋ฅผ ๊ณ ๋ ค

์ฃผ์˜ํ•  ์ ์€ ์ •ํ™• ์ผ์น˜์ž…๋‹ˆ๋‹ค โ€” ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ํ•œ ํ† ํฐ์ด๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๊ทธ ์ง€์ ๋ถ€ํ„ฐ ๋ฏธ์Šค์ด๋ฉฐ, ์ด๋ฏธ์ง€ยทํˆด ์Šคํ‚ค๋งˆ๋„ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ ๊ฐ™์€ ํ”„๋ฆฌํ”ฝ์Šค ์š”์ฒญ์„ ์บ์‹œ ๋ณด์œ  ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” sticky ๋ผ์šฐํŒ…์ด ๋งž์•„์•ผ ์บ์‹œ๊ฐ€ ์“ธ๋ชจ ์žˆ๊ณ , ๋ฉ€ํ‹ฐํ„ด์—์„œ ๋Œ€ํ™” ์ด๋ ฅ์„ ์ž๋ฅด๊ฑฐ๋‚˜(truncation) ์ค‘๊ฐ„์„ ์ˆ˜์ •ํ•˜๋ฉด ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ๊นจ์ ธ hit์œจ์ด ๊ธ‰๋ฝํ•ฉ๋‹ˆ๋‹ค.

5. ์žฅ๋‹จ์ 

์žฅ์  ๋‹จ์ 
๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค์˜ prefill์„ ์ค„์—ฌ TTFT์™€ ๋น„์šฉ์„ ๋‚ฎ์ถ˜๋‹ค ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ์ •ํ™•ํžˆ ๊ฐ™์•„์•ผ ํ•ด์„œ ์ž‘์€ ์ฐจ์ด์—๋„ ํžˆํŠธ๊ฐ€ ๊นจ์ง„๋‹ค
๋ฉ€ํ‹ฐํ„ดยทRAGยทfew-shotยท์—์ด์ „ํŠธ์—์„œ ํšจ๊ณผ๊ฐ€ ํฌ๋‹ค ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ์งง์œผ๋ฉด ์ฒด๊ฐ ์ด๋“์ด ์ž‘๋‹ค
์–‘์žํ™”ยทMLAยท์˜คํ”„๋กœ๋”ฉ๊ณผ ์ง๊ต์ ์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค ์บ์‹œ ์œ ์ง€, ์ถ•์ถœ, sticky ๋ผ์šฐํŒ… ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค

6. ์ถ•์ถœยท๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต๊ณผ ํ•œ๊ณ„

Prefix Caching Analysis

๊ทธ๋ฆผ 5. ์บ์‹œ ์ถ•์ถœ, ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ํ™•์žฅ, ๋‹ค์ธต ์บ์‹œ, ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ณ„

์ถ•์ถœ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต

  • ์ถ•์ถœ โ€” GPU ์บ์‹œ๋Š” ์ž‘์œผ๋ฏ€๋กœ LRU์™€ ์ฐธ์กฐ ์นด์šดํŠธ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์“ฐ์ง€ ์•Š๋Š” ๋ธ”๋ก(ref=0)์€ ๋ณด์กดํ•  ์ด์œ ๊ฐ€ ์—†๊ณ , ์˜ค๋ž˜๋œ ๋ธ”๋ก๋ถ€ํ„ฐ ์ถ•์ถœํ•ฉ๋‹ˆ๋‹ค. hot ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์˜ค๋ž˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด hit์œจ์˜ ๊ด€๊ฑด์ž…๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ํ™•์žฅ โ€” GPU์— ๋‹ค ๋‹ด์ง€ ๋ชปํ•˜๋Š” ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹œ๋Š” CPU DRAMยทCXLยทNVMe๋กœ ๋‚ด๋ ค ๋” ๋งŽ์ด ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์•ž์„œ ๋ณธ KV ์บ์‹œ ์˜คํ”„๋กœ๋”ฉ๊ณผ ๊ฒฐํ•ฉ๋˜๋Š” ์ง€์ ์ž…๋‹ˆ๋‹ค(HotPrefixยทLMCache ๋“ฑ์ด GPU/CPU ๊ฐ„ ํ”„๋ฆฌํ”ฝ์Šค ์Šน๊ฒฉยท๊ฐ•๋“ฑ์„ ๊ด€๋ฆฌ).

  • ๋‹ค์ธต ์บ์‹œ โ€” ์‹ค๋ฌด์—์„œ๋Š” ์‹œ๋งจํ‹ฑ ์บ์‹œ(์‘๋‹ต ์ž์ฒด ์žฌ์‚ฌ์šฉ) โ†’ ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹œ(KV ์žฌ์‚ฌ์šฉ) โ†’ ์ „์ฒด ์ถ”๋ก ์˜ ๊ณ„์ธต์„ ๋‘ก๋‹ˆ๋‹ค. ์œ„ ๋‹จ๊ณ„์—์„œ ๋ง‰์„์ˆ˜๋ก ์ ˆ๊ฐ์ด ํฝ๋‹ˆ๋‹ค(์‘๋‹ต ์บ์‹œ๋Š” 100%, ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹œ๋Š” ๋ถ€๋ถ„, ๋ฏธ์Šค๋ฉด 0%).

ํ•œ๊ณ„

  • ์ •ํ™• ์ผ์น˜ ์˜์กด โ€” ํ•œ ํ† ํฐ ์ฐจ์ดยท์œ„์น˜ ๋ณ€ํ™”์— ์ทจ์•ฝํ•ด ์ผ์น˜ํ•˜๋Š” ์•ž๋ถ€๋ถ„๊นŒ์ง€๋งŒ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค ์ „์ œ โ€” ๊ณ ์œ ํ•œ ํ”„๋กฌํ”„ํŠธ๋งŒ ์žˆ์œผ๋ฉด ์žฌ์‚ฌ์šฉํ•  ๊ฒŒ ์—†์–ด ํšจ๊ณผ๊ฐ€ ์ž‘์Šต๋‹ˆ๋‹ค.
  • hit์œจ ๋ณ€๋™ โ€” truncationยท์ค‘๊ฐ„ ์ˆ˜์ •์ด hit์œจ์„ ํฌ๊ฒŒ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฉ๋Ÿ‰ยท๋ผ์šฐํŒ… โ€” GPU ์บ์‹œ ์šฉ๋Ÿ‰ ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์ถ•์ถœยทํ‹ฐ์–ด๋งยทcache-aware ๋ผ์šฐํŒ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

7. ๊ด€๋ จ ๊ธฐ์ˆ 

์ž๋ฃŒ ํ•ต์‹ฌ
SGLang: Efficient Execution of Structured Language Model Programs RadixAttention๊ณผ structured generation ๋Ÿฐํƒ€์ž„
Anthropic Prompt Caching cache_control, automatic caching, 5๋ถ„ ๊ธฐ๋ณธ TTL๊ณผ 1์‹œ๊ฐ„ TTL
OpenAI Prompt Caching 1024ํ† ํฐ ์ด์ƒ ์ž๋™ ์บ์‹ฑ, exact prefix match, prompt_cache_key
PagedAttention Analysis ๋ธ”๋ก ๋‹จ์œ„ KV ๊ด€๋ฆฌ์˜ ๊ธฐ๋ฐ˜
KV Cache Quantization Analysis KV๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด ๋” ๋งŽ์ด ๋‹ด๋Š” ์ง๊ต ๊ธฐ๋ฒ•
KV Cache Offloading Analysis GPU ๋ฐ– ํ‹ฐ์–ด๋กœ KV๋ฅผ ๋‚ด๋ฆฌ๋Š” ์˜คํ”„๋กœ๋”ฉ
Continuous Batching Analysis cache-aware scheduling๊ณผ ํ•จ๊ป˜ ์“ฐ๋Š” ๋ฐฐ์น˜ ์ถ•

8. ํ•ต์‹ฌ ์ •๋ฆฌ

ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹ฑ์€ ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค์˜ KV๋ฅผ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•ด ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ค‘๋ณต prefill์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฌด์†์‹ค ๊ธฐ๋ฒ•์ด๋‹ค. KV๊ฐ€ ํ”„๋ฆฌํ”ฝ์Šค์—๋งŒ ์˜์กดํ•˜๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•˜๋ฉฐ, PagedAttention ๋ธ”๋ก ์œ„์—์„œ ๋ธ”๋ก ํ•ด์‹œ๋กœ ๋งค์นญํ•œ๋‹ค. ๊ตฌํ˜„์€ RadixAttention(ํ† ํฐ ๋‹จ์œ„ radix tree)๊ณผ vLLM APC(๋ธ”๋ก ๋‹จ์œ„ ํ•ด์‹œ)๋กœ ๋‚˜๋‰˜๊ณ  ๋‘˜ ๋‹ค LRU+cache-aware ์Šค์ผ€์ค„๋ง์„ ์“ด๋‹ค. ํ”„๋กœ๋ฐ”์ด๋” API(OpenAI ์ž๋™ยทAnthropic cache_control)๋Š” ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์•ž์— ๋‘๋ฉด ์บ์‹œ ํžˆํŠธ๋กœ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ธ๋‹ค. KV ์ ˆ๊ฐ(์–‘์žํ™”ยทMLA)๊ณผ๋Š” ์ง๊ต์ ์ด๊ณ , GPU์— ๋ชป ๋‹ด๋Š” ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹œ๋Š” CPUยทCXLยทNVMe๋กœ ๋‚ด๋ ค ๋” ๋งŽ์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ๊ณ„๋Š” ์ •ํ™• ์ผ์น˜ ์˜์กด๊ณผ ๊ณตํ†ต ํ”„๋ฆฌํ”ฝ์Šค ์ „์ œ์ด๋ฉฐ, hit์œจ ์œ ์ง€์™€ cache-aware ๋ผ์šฐํŒ…์ด ํ•ต์‹ฌ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ ๊ด€์ (์—ฐ๊ตฌ ํ™•์žฅ) โ€” ํ”„๋ฆฌํ”ฝ์Šค ์บ์‹œ๋Š” '์–ด๋–ค ํ”„๋ฆฌํ”ฝ์Šค KV๋ฅผ ์–ด๋А ํ‹ฐ์–ด(GPU/CPU/CXL/NVMe)์— ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๋‘˜์ง€'๋ผ๋Š” ์บ์‹œยทํ‹ฐ์–ด๋ง ๋ฌธ์ œ๋กœ, KV ์˜คํ”„๋กœ๋”ฉยท์‹ ๋ขฐ์„ฑ ์„ค๊ณ„์™€ ๋™์ผํ•œ ์ถ•์— ์žˆ๋‹ค. hot ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ƒ์œ„ ํ‹ฐ์–ด์— ๋‘๊ณ  ์ฝœ๋“œ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ CXL๋กœ ๋‚ด๋ฆฌ๋Š” ์ •์ฑ…, ๊ทธ๋ฆฌ๊ณ  ํ‹ฐ์–ด๋ณ„ ๋น„ํŠธ ์˜ค๋ฅ˜ ํŠน์„ฑ์— ๋งž์ถ˜ ์ •๋ฐ€๋„ยทECC ๊ฒฐ์ •์ด ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™•์žฅ์ด๋‹ค.

์ฃผ์˜ โ€” ๋ณธ๋ฌธ์€ ์—”์ง„ยทํ”„๋กœ๋ฐ”์ด๋” ๋ฌธ์„œ์™€ ์—ฐ๊ตฌ ์ž๋ฃŒ(RadixAttention/SGLang arXiv 2312.07104, Anthropic prompt caching ๋ฌธ์„œ, OpenAI prompt caching ๋ฌธ์„œ, HotPrefixยทLMCache ๋“ฑ)์— ๊ธฐ๋ฐ˜ํ•œ๋‹ค. ๋น„์šฉยท์ง€์—ฐยท์ตœ์†Œ ํ† ํฐยทTTL ๊ฐ™์€ ์ˆ˜์น˜๋Š” ํŠน์ • ํ”„๋กœ๋ฐ”์ด๋”ยท๋ชจ๋ธยท์กฐ๊ฑด์˜ ๋ณด๊ณ ๊ฐ’์œผ๋กœ, ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑยทhit์œจยท๋ผ์šฐํŒ…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ํ”„๋กœ๋ฐ”์ด๋”๋ณ„ ์ •์ฑ…(์ตœ์†Œ ํ† ํฐยทTTLยท๊ฐ€๊ฒฉ)์€ ์ˆ˜์‹œ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋‹ˆ ์‹ค์ œ ์ ์šฉ ์‹œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.