๐Ÿค– LLM

Disaggregated LLM Serving Analysis

Disaggregated LLM Serving ์‹ฌ์ธต ๋ถ„์„

Prefill-Decode Disaggregation ยท KV Transfer ยท Network Fabric ยท Remote Cache ยท Elastic Pooling

Disaggregated LLM serving์€ prefill๊ณผ decode๋ฅผ ๊ฐ™์€ GPU ์œ„์—์„œ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ์ž์› ํŠน์„ฑ์— ๋งž๋Š” ํ’€๋กœ ๋ถ„๋ฆฌํ•ด ์šด์˜ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋‹จ์ˆœํ•œ ์—ญํ•  ๋ถ„๋‹ด์ด ์•„๋‹ˆ๋ผ prefill์ด ๋งŒ๋“  KV๋ฅผ decode ์ชฝ์œผ๋กœ ์–ด๋–ค ์ง€์—ฐ๊ณผ ๋น„์šฉ์œผ๋กœ ์ „๋‹ฌํ•˜๋А๋ƒ๋ฅผ ์‹œ์Šคํ…œ์˜ 1๊ธ‰ ๋ฌธ์ œ๋กœ ๋‹ค๋ฃจ๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ์—ฐ๊ตฌ๋“ค์€ ์ด ๋ถ„๋ฆฌ๊ฐ€ TTFT์™€ TPOT๋ฅผ ๋™์‹œ์— ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜๋ ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. DistServe๋Š” phase๋ฅผ ๋‹ค๋ฅธ GPU์— ๋ฐฐ์น˜ํ•ด ๊ฐ„์„ญ์„ ์ œ๊ฑฐํ•˜๊ณ , Sarathi-Serve๋Š” chunked prefill๊ณผ stall-free scheduling์œผ๋กœ decode๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค๋ฉฐ, Mooncake๋Š” KVCache ์ค‘์‹ฌ์˜ ๋ถ„๋ฆฌํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ ์žฅ๋ฌธ๋งฅ๊ณผ ๊ณผ๋ถ€ํ•˜ ์ƒํ™ฉ์„ ํ•จ๊ป˜ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. ์™œ Prefill๊ณผ Decode๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค ํ•˜๋Š”๊ฐ€

๊ธด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ธ์ฝ”๋”ฉํ•˜๋Š” prefill์€ ํฐ GEMM ๋น„์ค‘์ด ๋†’์•„ ์—ฐ์‚ฐ ์ง‘์•ฝ์ ์ด๋ฉฐ, ์ฒซ ํ† ํฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„(TTFT)์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด decode๋Š” ๋น„๊ต์  ์ž‘์€ step์„ ์˜ค๋ž˜ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ KV๋ฅผ ์ง€์†์ ์œผ๋กœ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ๊ณผ locality๊ฐ€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ ๋‘ ๋‹จ๊ณ„๋Š” ๊ฐ™์€ ์ถ”๋ก ์ด์ง€๋งŒ ์ข‹์•„ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์กฐ๊ฑด์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ ํ’€์€ prefill ํšจ์œจ์—, ๋‹ค๋ฅธ ํ’€์€ decode ์•ˆ์ •์„ฑ์— ๋งž๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ ํ™œ์šฉ์ด ๋” ์ข‹์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DistServe๊ฐ€ TTFT์™€ TPOT๋ฅผ ๋ถ„๋ฆฌํ•ด ์ตœ์ ํ™”ํ•œ ์ด์œ ๋„ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Disaggregated LLM Serving Analysis

๊ทธ๋ฆผ 1. prefill๊ณผ decode๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์› ํŠน์„ฑ์˜ ์ฐจ์ด

2. ํ•ต์‹ฌ ๊ฐœ๋…

๊ฐœ๋… ์˜๋ฏธ ์„œ๋น™ ๊ด€์ 
Prefill ํ”„๋กฌํ”„ํŠธ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋‹จ๊ณ„ TTFT๋ฅผ ์ขŒ์šฐํ•˜๋Š” ์—ฐ์‚ฐ ์ง‘์•ฝ ๊ตฌ๊ฐ„
Decode ๋‹ค์Œ ํ† ํฐ์„ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„ TPOT์™€ tail latency๋ฅผ ์ขŒ์šฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ง‘์•ฝ ๊ตฌ๊ฐ„
KV Handoff prefill์—์„œ ๋งŒ๋“  KV๋ฅผ decode ํ’€๋กœ ๋„˜๊ธฐ๋Š” ๊ณผ์ • ์ „์†ก ์ง€์—ฐ๊ณผ ์„ค์น˜ ๋น„์šฉ์ด ํ•ต์‹ฌ ๋ณ‘๋ชฉ
Affinity ๊ฐ™์€ prefix๋‚˜ KV๋ฅผ ๊ฐ€์ง„ ์š”์ฒญ์„ ๊ฐ€๊นŒ์šด decode ํ’€๋กœ ๋ชจ์œผ๋Š” ์ •์ฑ… ์บ์‹œ ์ ์ค‘๋ฅ ๊ณผ locality๋ฅผ ๋†’์ž„
Remote KV KV๋ฅผ local HBM ๋ฐ–์˜ DRAM, CXL, ๋„คํŠธ์›Œํฌ ํ’€์— ๋‘๋Š” ๋ฐฉ์‹ ์šฉ๋Ÿ‰์€ ๋Š˜์ง€๋งŒ ์ง€์—ฐ ์˜ˆ์‚ฐ์„ ๋” ์จ์•ผ ํ•จ

3. ๋น„๊ต/๋ถ„์„

์ ‘๊ทผ ๋ฐฐ์น˜/๋ฐฐํฌ ๋ฐฉ์‹ ๊ฐ•์  ํ•œ๊ณ„
Colocated serving ํ•˜๋‚˜์˜ GPU/ํ’€์—์„œ prefill๊ณผ decode๋ฅผ ํ•จ๊ป˜ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ์ „์†ก ๋น„์šฉ์ด ์—†๋‹ค prefill์ด decode๋ฅผ ํ”๋“ค๊ธฐ ์‰ฝ๋‹ค
Chunked prefill / stall-free batching ๊ฐ™์€ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ prefill์„ ์ž˜๊ฒŒ ๋‚˜๋ˆ  decode ์‚ฌ์ด์— ์„ž๋Š”๋‹ค throughput๊ณผ latency์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์‰ฝ๋‹ค ์ž์› ๋ถ„๋ฆฌ๋Š” ์•„๋‹ˆ์–ด์„œ ๊ฐ„์„ญ์ด ๋‚จ๋Š”๋‹ค
Disaggregated serving prefill๊ณผ decode๋ฅผ ๋‹ค๋ฅธ GPU ๋˜๋Š” ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‘”๋‹ค phase๋ณ„ ์ž์› ์ตœ์ ํ™”๊ฐ€ ์‰ฝ๊ณ  ๊ฐ„์„ญ์ด ์ค„์–ด๋“ ๋‹ค KV handoff, affinity, routing์ด ๋ณต์žกํ•ด์ง„๋‹ค

DistServe๋Š” ๋ถ„๋ฆฌํ˜• ๋ฐฐ์น˜์—์„œ 7.4x ๋” ๋งŽ์€ ์š”์ฒญ ๋˜๋Š” 12.6x ๋” ํƒ€์ดํŠธํ•œ SLO๋ฅผ ๋ณด๊ณ ํ–ˆ๊ณ , Sarathi-Serve๋Š” Mistral-7B์—์„œ 2.6x, Falcon-180B์—์„œ ์ตœ๋Œ€ 5.6x์˜ serving capacity ํ–ฅ์ƒ์„ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. Mooncake๋Š” KVCache-centric disaggregation์œผ๋กœ ์žฅ๋ฌธ๋งฅ ์›Œํฌ๋กœ๋“œ์™€ ๊ณผ๋ถ€ํ•˜ ์ƒํ™ฉ์„ ํ•จ๊ป˜ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

4. ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” KV๋ฅผ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๋„ˆ๋จธ๋กœ ๋„˜๊ธฐ๋Š” ๊ตฌ์กฐ๋‹ค

disaggregation์—์„œ๋Š” ingress๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , prefill cluster๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด layer๋ณ„ KV๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ด KV๋ฅผ chunk ๋˜๋Š” page ๋‹จ์œ„๋กœ ์ง๋ ฌํ™”ํ•ด decode cluster๋กœ ๋ณด๋‚ด๊ณ , decode ์ชฝ์€ ์ด๋ฅผ block pool์— ์ ์žฌํ•œ ๋’ค active sequence์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ๋ณ‘๋ชฉ์€ '์–ด๋””์„œ ๊ณ„์‚ฐํ•˜๋А๋ƒ'๋งŒ์ด ์•„๋‹ˆ๋ผ 'KV๋ฅผ ์–ธ์ œ ์„ค์น˜ํ•˜๊ณ  ์–ด๋А decode ๋…ธ๋“œ์— ๋ถ™์ด๋А๋ƒ'๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต, install metadata, affinity ์ •์ฑ…์ด ๋ชจ๋ธ ์ž์ฒด๋งŒํผ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

  1. ingress๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  prefix์™€ queue ์ƒํƒœ๋ฅผ ๋ณธ๋‹ค.
  2. prefill cluster๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  layer๋ณ„ KV๋ฅผ ๋งŒ๋“ ๋‹ค.
  3. KV๋ฅผ chunk๋‚˜ page ๋‹จ์œ„๋กœ ์ง๋ ฌํ™”ํ•ด fabric์œผ๋กœ ๋ณด๋‚ธ๋‹ค.
  4. decode cluster๊ฐ€ local block pool์— KV๋ฅผ ์„ค์น˜ํ•˜๊ณ  sequence์— ์—ฐ๊ฒฐํ•œ๋‹ค.
  5. scheduler๋Š” local fast path์™€ remote path๋ฅผ ํ•จ๊ป˜ ๋ณด๋ฉฐ ๋‹ค์Œ ํ† ํฐ ์ƒ์„ฑ์„ ์ด์–ด๊ฐ„๋‹ค.
Disaggregated LLM Serving Analysis

๊ทธ๋ฆผ 2. ingress, prefill cluster, KV transfer, decode cluster๋กœ ์ด์–ด์ง€๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ

Remote KV๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ์ด์ž ๋„คํŠธ์›Œํฌ ์˜์กด์„ฑ์ด๋‹ค

remote KV ๋˜๋Š” disaggregated cache๋Š” decode ๋…ธ๋“œ์˜ HBM ์••๋ฐ•์„ ์ค„์—ฌ ์ฃผ์ง€๋งŒ, ๋ฐ˜๋Œ€๋กœ latency budget ์ผ๋ถ€๋ฅผ ๋„คํŠธ์›Œํฌ์— ๋งก๊น๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ remote path์™€ local fast path๋ฅผ ํ•จ๊ป˜ ๋‘๊ณ , ์ž์ฃผ ์“ฐ๋Š” prefix๋Š” ๊ฐ€๊นŒ์šด ๊ณณ์— ๊ณ ์ •ํ•˜๋Š” ์‹์˜ ๊ณ„์ธตํ˜• ์šด์˜์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

prefill์ด ๋งŒ๋“  KV๋Š” ํ”„๋กฌํ”„ํŠธ ๊ธธ์ด์™€ layer ์ˆ˜์— ๋น„๋ก€ํ•ด ์ปค์ง€๋ฏ€๋กœ, ์ „์†ก ๋น„์šฉ์ด ์ž‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์€ ์š”์ฒญ์€ serialization๊ณผ ์„ค์น˜ ๊ณ ์ •๋น„๊ฐ€ ๋ฌธ์ œ์ด๊ณ , ํฐ ์š”์ฒญ์€ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ๊ณผ ์ˆ˜์‹  ์ธก install ์ง€์—ฐ์ด ๋ณ‘๋ชฉ์ด ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ decode๊ฐ€ KV ๋„์ฐฉ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ์€ GPU๊ฐ€ ๊ณ„์‚ฐํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด๋„ ์‹ค์ œ ํ† ํฐ ์ƒ์„ฑ์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ page ์ •๋ ฌ, chunk streaming, partial install, KV compression๊ณผ ๊ฐ™์€ ๋ณด์™„ ๊ธฐ๋ฒ•์ด ํ•จ๊ป˜ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.

Disaggregated LLM Serving Analysis

๊ทธ๋ฆผ 3. build, pack, ship, install, attach๋กœ ์ด์–ด์ง€๋Š” KV handoff ํŒŒ์ดํ”„๋ผ์ธ

5. ์žฅ๋‹จ์ 

์ƒํ™ฉ ์œ ๋ฆฌํ•œ ์ด์œ  ๋ถˆ๋ฆฌํ•œ ์ด์œ 
๊ธด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋งŽ๊ณ  ์ƒ์„ฑ์€ ์งง๋‹ค prefill๊ณผ decode์˜ ์ž์› ์„ฑ๊ฒฉ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ ๋ถ„๋ฆฌ ์ด๋“์ด ํฌ๋‹ค KV handoff๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์ด๋“์ด ์ค„์–ด๋“ ๋‹ค
๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ decode pool์„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค decode ์ชฝ์„ ๋”ฐ๋กœ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค ์šด์˜ ์ •์ฑ…๊ณผ ์žฅ์•  ๋ฉด์ด ์ปค์ง„๋‹ค
prefix reuse๊ฐ€ ๋†’๋‹ค affinity์™€ cache hit๊ฐ€ ์ข‹์•„์ง„๋‹ค ์š”์ฒญ์ด ์ž์ฃผ ๋ฐ”๋€Œ๋ฉด remote fetch๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค
๋„คํŠธ์›Œํฌ๊ฐ€ ๋นก๋นกํ•˜๋‹ค local pool์˜ HBM ์••๋ฐ•์€ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค ์ „์†ก ์ง€์—ฐ์ด TPOT๋ฅผ ๊ฐ‰์•„๋จน๋Š”๋‹ค

๊ธด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋งŽ๊ณ  ์ƒ์„ฑ ๊ธธ์ด๋Š” ์งง๊ฑฐ๋‚˜, prefill burst์™€ decode steady-state๋ฅผ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ์›Œํฌ๋กœ๋“œ์—์„œ๋Š” disaggregation์˜ ์ด๋“์ด ํฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ํ™˜๊ฒฝ์—์„œ decode pool์„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ์žฅ์ ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ KV ์ „์†ก ์ง€์—ฐ์ด ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š๊ฑฐ๋‚˜, affinity๋ฅผ ์žƒ์–ด remote fetch๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด ๋ถ„๋ฆฌ ์ด๋“์ด ๋น ๋ฅด๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์šด์˜ ๋ณต์žก๋„์™€ ์žฅ์• ๋ฉด์ด ์ปค์ง„๋‹ค๋Š” ์ ๋„ ์‹ค์ œ ๋„์ž… ์žฅ๋ฒฝ์ž…๋‹ˆ๋‹ค.

Disaggregated LLM Serving Analysis

๊ทธ๋ฆผ 4. disaggregation์ด ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ, ๋น„์šฉ์ด ์ปค์ง€๋Š” ๊ฒฝ์šฐ, ์‹ค์ „ ๋ณด์™„์ฑ…

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

prefill cluster์™€ decode cluster๊ฐ€ ๋ถ„๋ฆฌ๋˜๋ฉด, ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋‹จ์ผ GPU ์œ„์˜ batch๋งŒ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‘ ํ’€์˜ ํ ๊ธธ์ด, KV ์ „์†ก ๋Œ€๊ธฐ, decode affinity, remote cache ์ƒํƒœ๊นŒ์ง€ ํ•จ๊ป˜ ํŒ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผ prefix๋ฅผ ๊ณต์œ ํ•˜๋Š” ์š”์ฒญ์€ ๊ฐ™์€ decode ์ชฝ์œผ๋กœ ๋ชจ์œผ๋Š” ํŽธ์ด ์œ ๋ฆฌํ•˜๊ณ , prefill burst๋Š” decode ITL์„ ํ”๋“ค์ง€ ์•Š๋„๋ก ๋ณ„๋„ ์™„์ถฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ disaggregated serving์€ ๋ฐฐํฌ ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ์ด๋ฉด์„œ ๋™์‹œ์— ์Šค์ผ€์ค„๋ง ๋ฌธ์ œ์˜ ์ฐจ์› ํ™•์žฅ์ž…๋‹ˆ๋‹ค. prefix caching, paged KV, admission control, elastic pooling์ด ํ•จ๊ป˜ ๋ฌถ์—ฌ์•ผ ์˜๋ฏธ ์žˆ๋Š” ์„ฑ๋Šฅ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

Disaggregated LLM Serving Analysis

๊ทธ๋ฆผ 5. router, prefill service, KV fabric, decode service๋กœ ์ด์–ด์ง€๋Š” disaggregated serving ์Šคํƒ

์ž๋ฃŒ ํฌ์ธํŠธ
Continuous Batching Analysis token-level slot refill๊ณผ chunked prefill๋กœ prefill/decode ๊ฐ„์„ญ์„ ์ค„์ธ๋‹ค
Prefix Caching Analysis shared prefix์˜ KV๋ฅผ ์žฌ์‚ฌ์šฉํ•ด prefill ์ค‘๋ณต์„ ์ค„์ธ๋‹ค
KV Cache Offloading Analysis KV budget์„ HBM ๋ฐ–์œผ๋กœ ๋„“ํ˜€ disaggregated cache์™€ ์ด์–ด์ง„๋‹ค
LLM Inference Scheduler Analysis admission, backpressure, queue ๊ธธ์ด๋ฅผ ํ•จ๊ป˜ ๋ณธ๋‹ค
DistServe: arXiv:2401.09670 prefill/decode๋ฅผ ๋‹ค๋ฅธ GPU์— ๋ถ„๋ฆฌํ•˜๊ณ  TTFT/TPOT ์š”๊ตฌ๋ฅผ ํ•จ๊ป˜ ๋งž์ถ˜๋‹ค
Sarathi-Serve: arXiv:2403.02310 chunked-prefills์™€ stall-free schedules๋กœ batching ๊ฐ„์„ญ์„ ์ค„์ธ๋‹ค
Mooncake: arXiv:2407.00079 KVCache-centric disaggregation, early rejection, ์žฅ๋ฌธ๋งฅ ์ค‘์‹ฌ ์šด์˜

DistServe์™€ Sarathi-Serve๋Š” ๊ฐ™์€ prefill/decode ๋ฌธ์ œ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์šด์˜ ์ฒ ํ•™์œผ๋กœ ํ’€๊ณ , Mooncake๋Š” ์ด๋ฅผ ๋ถ„๋ฆฌํ˜• cache์™€ scheduler๊นŒ์ง€ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์˜ ํ•ต์‹ฌ์€ ๋ถ„๋ฆฌ ์ž์ฒด๋ณด๋‹ค KV handoff, affinity, ๊ทธ๋ฆฌ๊ณ  ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•จ๊ป˜ ์›€์ง์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

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

disaggregated LLM serving์˜ ๋ณธ์งˆ์€ prefill๊ณผ decode์˜ ๋น„๋Œ€์นญ์„ฑ์„ ์ธ์ •ํ•˜๊ณ , ๋‘ ๋‹จ๊ณ„๋ฅผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ตœ์ ํ™” ๋Œ€์ƒ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์˜ ์ง„์งœ ์Šน๋ถ€์ฒ˜๋Š” ๋ถ„๋ฆฌ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ ์‚ฌ์ด์˜ KV handoff์™€ affinity ์œ ์ง€์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํžˆ GPU๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆ„๋Š” ์•„์ด๋””์–ด๊ฐ€ ์•„๋‹ˆ๋ผ, ๋„คํŠธ์›Œํฌ, ๋ฉ”๋ชจ๋ฆฌ, ์บ์‹œ, ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•จ๊ป˜ ์žฌ์„ค๊ณ„๋˜๋Š” ๋ถ„์‚ฐ serving ์•„ํ‚คํ…์ฒ˜๋กœ ์ดํ•ดํ•˜๋Š” ํŽธ์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. TTFT์™€ TPOT๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋ณด๋ฉด์„œ๋„, ์‹ค์ œ ์šด์˜์—์„œ๋Š” SLO์™€ ํ ๊ธธ์ด๋ฅผ ํ•จ๊ป˜ ๋ฌถ์–ด ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. prefill๊ณผ decode๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด compute-bound ๋‹จ๊ณ„์™€ memory-bound ๋‹จ๊ณ„๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ํ’€์— ๋งž์ถฐ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ•˜์ง€๋งŒ ์‹ค์ œ ์„ฑ๋Šฅ์„ ๊ฐ€๋ฅด๋Š” ์š”์†Œ๋Š” KV handoff์˜ ์ง๋ ฌํ™”, ์ „์†ก, ์„ค์น˜ ๋น„์šฉ๊ณผ decode affinity ์œ ์ง€์ž…๋‹ˆ๋‹ค.
  3. ๋”ฐ๋ผ์„œ disaggregated serving์€ ๋‹จ์ˆœํ•œ ๋ฐฐ์น˜ ๋ถ„๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ router, KV fabric, scheduler, remote cache๋ฅผ ํ•จ๊ป˜ ์„ค๊ณ„ํ•˜๋Š” ๋ถ„์‚ฐ ์ถ”๋ก  ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  4. ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด ํฐ ํ™˜๊ฒฝ์—์„œ๋Š” local fast path, page ๋‹จ์œ„ ์ŠคํŠธ๋ฆฌ๋ฐ, sticky routing ๊ฐ™์€ ๋ณด์™„์ฑ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.