๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

Routing LLM Inference in Production: From Engine Signals to Policy โ€” Qianru Lao & Lu Zhang, OpenAI

AI Engineer ยท 2026-09-20 00:30 ยท 18:12

ํ•œ ์ค„ ํ•ต์‹ฌ

OpenAI์˜ ์ถ”๋ก  ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…์€ ์—”์ง„ ์‹ ํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๋Š” ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์—์„œ ๋ฒ—์–ด๋‚˜, ์ „์—ญ ์ตœ์ ํ™”๋œ ์ •์ฑ…์„ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์œผ๋กœ ๋ถ„๋ฆฌํ•ด ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ™”ํ–ˆ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ์—”์ง„ ์‹ ํ˜ธ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์—์„œ ๋ช…์‹œ์  ์ •์ฑ…์œผ๋กœ ์ถ”๋ก  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ CPU ํด๋Ÿฌ์Šคํ„ฐ์™€ GPU ์—”์ง„ ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์ด์—์„œ ์š”์ฒญ์„ ์ค‘๊ณ„ํ•˜๋ฉฐ, ํ•ต์‹ฌ ์—ญํ• ์€ ์—”์ง„ ์„ ํƒ๊ณผ ํ”„๋ก์‹œ๋‹ค. ์ดˆ์ ์€ ์—”์ง„ ์‹ ํ˜ธ์— ๋ฐ˜์‘ํ•˜๋˜ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ผ์šฐํŒ… ์ •์ฑ…์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ณผ์ •์— ์žˆ๋‹ค.
  2. 2:44
    ์ถ”๋ก  ๋ผ์šฐํŒ…์ด ํŠน๋ณ„ํ•œ ์ด์œ  ์ถ”๋ก  ๋ผ์šฐํŒ…์€ TTF(TTFT), token throughput(TBOT), ๊ฑด๊ฐ• ์ƒํƒœ, ํ™œ์šฉ๋„ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„ ์‹ ํ˜ธ์™€ KV cache ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ™์€ ๋Œ€ํ™”์˜ ํ›„์† ์š”์ฒญ์„ ๊ฐ™์€ ์—”์ง„์— ๋ณด๋‚ด๋ฉด ์žฌ๊ณ„์‚ฐ์„ ์ค„์—ฌ ์ง€์—ฐ๊ณผ ๋น„์šฉ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์–ด, ๋‹จ์ˆœํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ๋ณด๋‹ค ํ›จ์”ฌ ๋ณตํ•ฉ์ ์ธ ๋ฌธ์ œ๋‹ค.
  3. 3:41
    ์ดˆ๊ธฐ ๋ฐฉ์‹: ๊ฐ€์ค‘ ์ผ๊ด€ ํ•ด์‹ฑ ์ดˆ๊ธฐ์—๋Š” ๋ชจ๋“  ์—”์ง„์ด ํ•ญ์ƒ ํ›„๋ณด๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์ „์ œ ์•„๋ž˜, ๊ฐ€๋Šฅํ•œ ์—”์ง„ ์ง‘ํ•ฉ์—์„œ weighted consistent hashing์œผ๋กœ ๋ชฉ์ ์ง€๋ฅผ ๊ณจ๋ž๋‹ค. ๋ชจ๋ธ๋ณ„ ์ œ์•ฝ, ์ปดํ“จํŠธ ์ œ์•ฝ, ๋ฐ์ดํ„ฐ ๋ ˆ์ง€๋˜์‹œ ์ œ์•ฝ์„ ๋ฐ˜์˜ํ•˜๋Š” ํ˜„์‹ค์ ์ธ ์ถœ๋ฐœ์ ์ด์—ˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ ๊ฐ€์ค‘์น˜๊ฐ€ ๋ฌด์—‡์— ์˜ํ•ด ์ •ํ•ด์ง€๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ๋‹ค.
  4. 4:23
    ๋น„๋ก€ ์ œ์–ด๊ธฐ๋กœ ๋งŒ๋“  ๊ฐ€์ค‘์น˜ ์—”์ง„์ด ๋ณด๊ณ ํ•˜๋Š” ์‹ ํ˜ธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ‰ํ™œํ™”ํ•ด ์„ฑ๋Šฅ ์ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์ „์ฒด ํ‰๊ท ๊ณผ ๋น„๊ตํ•ด ์—”์ง„๋ณ„ weight๋ฅผ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋‚ด๋ฆฌ๋Š” ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‹ ํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ๋ผ์šฐํŒ… ๊ฒฐ์ •์— ๋…น์—ฌ ์ž๋™ ๊ท ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ํŠน์ • ๊ฒฐ์ •์˜ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ํ•œ ์š”์†Œ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ์š”์†Œ๊ฐ€ ํ”๋“ค๋ฆฌ๋Š” trade-off๊ฐ€ ์ปธ๋‹ค.
  5. 6:57
    ์บ์‹œ๋ฅผ ๊นจ๋œจ๋ฆฌ๋Š” ์ง„๋™ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์˜ฎ๊ธฐ๋ฉด ์—”์ง„์ด ํ•œ๋™์•ˆ ํ•œ์‚ฐํ•ด์ง€๊ณ , ๊ทธ ์‹ ํ˜ธ๊ฐ€ ๋‹ค์‹œ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ˜์˜๋˜๋ฉด์„œ ํŠธ๋ž˜ํ”ฝ์ด ๋˜๋Œ์•„์˜ค๋Š” ์ง„๋™์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์™•๋ณต์€ KV cache ํ™œ์šฉ์„ ๊นจ๋œจ๋ ค ํšจ์œจ๊ณผ ์ง€์—ฐ์„ ์•…ํ™”์‹œํ‚ค๋ฏ€๋กœ, ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ์„ค๊ณ„ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ฒผ๋‹ค.
  6. 7:38
    ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ, ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ, ๊ทธ๋ฆฌ๊ณ  ์ „์—ญ ๊ด€์  ๋‹จ์ผ CPU ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋กœ์ปฌ ์‹œ์•ผ๋กœ๋Š” ์—”์ง„๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜๋“œ์›จ์–ด, ๊ฑด๊ฐ• ์ƒํƒœ, ๊ฑฐ๋ฆฌ, ์บ์‹œ ์ƒํ™ฉ์„ ๊ฐ€์ง„๋‹ค๋Š” ์ ์„ ์ถฉ๋ถ„ํžˆ ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†๋‹ค. ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ™์€ ์—”์ง„๋งŒ ์„ ํƒํ•˜๋ฉด ๊ณผ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ, ์ „์—ญ ๊ด€์ ์„ ๊ฐ€์ง„ control plane์ด ์ตœ์ ์˜ ๋ผ์šฐํŒ…์„ ๊ณ„์‚ฐํ•˜๊ณ  data plane์ด ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  7. 9:18
    ์„ธ ๊ฐ€์ง€ ๊ฒฝ๋กœ: ์š”์ฒญ, ์‹ ํ˜ธ, ๋ผ์šฐํŒ… ๊ฐ€์ค‘์น˜ ์š”์ฒญ ๊ฒฝ๋กœ๋Š” CPU ํด๋Ÿฌ์Šคํ„ฐ์˜ data plane์ด ๋กœ์ปฌ routing state๋ฅผ ๋ณด๊ณ  ์ฆ‰์‹œ ์—”์ง„์„ ์„ ํƒํ•˜๋Š” ๋™๊ธฐ์‹ ๊ฒฝ๋กœ๋‹ค. ์‹ ํ˜ธ ๊ฒฝ๋กœ๋Š” TTFT, TBOT, ready replica ์ˆ˜, engine health ๋“ฑ์„ ์ง€์† ์ˆ˜์ง‘ํ•ด control plane๊ณผ data plane ๋ชจ๋‘์— ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ , ๋ผ์šฐํŒ… ๊ฐ€์ค‘์น˜ ๊ฒฝ๋กœ๋Š” control plane์ด ์ตœ์ ํ™” ๊ฒฐ๊ณผ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  data plane์ด ์ด๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ pullํ•ด ๋ฐ˜์˜ํ•œ๋‹ค.
  8. 12:03
    ์™œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—”์ง„์ด ์•„๋‹Œ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—”์ง„๋งŒ ๊ณ ์ง‘ํ•˜๋ฉด ์ง€์—ญ๋ณ„ ์ˆ˜์š”์™€ GPU ์šฉ๋Ÿ‰์˜ ๋ถˆ๊ท ํ˜•์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ฐ€๊นŒ์šด ์—”์ง„์ด ์ด๋ฏธ ํฌํ™”๋œ ๊ฒฝ์šฐ์—๋Š” ์กฐ๊ธˆ ๋” ๋จผ ์—”์ง„์ด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์„ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ์ „์ฒด ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ์ค„์—ฌ ๋” ๋น ๋ฅธ end-to-end ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  9. 13:28
    ์ตœ์ ํ™”๊ธฐ ๋‚ด๋ถ€ ์ตœ์ ํ™”๊ธฐ๋Š” ๊ฐ CPU ํด๋Ÿฌ์Šคํ„ฐ์˜ ์š”์ฒญ๋Ÿ‰, ์—”์ง„๋ณ„ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ๊ฐ€์šฉ ์šฉ๋Ÿ‰๊ณผ ๊ฑด๊ฐ• ์ƒํƒœ, ๊ทธ๋ฆฌ๊ณ  ๋ถ€ํ•˜์— ๋”ฐ๋ฅธ TTFTยทTBOT ์ง€์—ฐ ํ”„๋กœํŒŒ์ผ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ routing weights๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๋ชฉํ‘œ๋Š” ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์˜ ๊ธฐ๋Œ€ end-to-end latency๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๋ชจ๋“  ์ˆ˜์š”๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์šฉ๋Ÿ‰์„ ๋„˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ€์ค‘์น˜๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์ œ์•ฝ๋„ ํ•จ๊ป˜ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.
  10. 15:38
    ํŒจ๋„ํ‹ฐ, ์žฌ์‹œ๋„ ์˜ˆ์‚ฐ, ๊ทธ๋ฆฌ๊ณ  ๋ถ€ํ•˜ ์ฐจ๋‹จ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋…ธ๋“œ ์žฅ์• , GPU ์—ดํ™”, ๋„คํŠธ์›Œํฌ ์ด์ƒ์ด ์ƒ๊ธฐ๋ฏ€๋กœ, ์ด์ƒ ์ง•ํ›„๊ฐ€ ์žˆ๋Š” ์—”์ง„์˜ weight๋ฅผ ๋‚ฎ์ถฐ ์šฐํšŒํ•˜๊ณ  ํšŒ๋ณต์ด๋‚˜ ๊ต์ฒด์˜ ์‹œ๊ฐ„์„ ๋ฒŒ์–ด์ค€๋‹ค. ์žฌ์‹œ๋Š” ์œ ์šฉํ•˜์ง€๋งŒ ๊ณผ๋ถ€ํ•˜ ์ƒํ™ฉ์—์„œ๋Š” retry storm์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด ๋™์ ์ธ ์˜ˆ์‚ฐ์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ์ˆ˜์š”๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” ์ผ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์˜๋„์ ์œผ๋กœ shedํ•ด์„œ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์šฐ์•„ํ•˜๊ฒŒ degraded ์ƒํƒœ๋กœ ๋ฒ„ํ‹ฐ๊ฒŒ ๋งŒ๋“ ๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ์‹ค์‹œ๊ฐ„ ์ง€ํ‘œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ผ์šฐํŒ…์— ๋ฐ˜์˜ํ•˜๊ธฐ๋ณด๋‹ค, ์ „์—ญ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ณ„๋„ ์ œ์–ด๋ฉด์—์„œ ๊ฐ€์ค‘์น˜๋กœ ๋ฐ”๊พธ๋ฉด ์„ค๋ช… ๊ฐ€๋Šฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ•จ๊ป˜ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์บ์‹œ๊ฐ€ ์ค‘์š”ํ•œ ์ถ”๋ก  ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹จ์ˆœํ•œ ๊ทผ์ ‘์„ฑ๋ณด๋‹ค cache locality์™€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์˜ ๊ท ํ˜•์ด ์ค‘์š”ํ•˜๋ฉฐ, ๋ผ์šฐํŒ… ์ง„๋™์„ ์ค„์ด๋Š” ์žฅ์น˜๊ฐ€ ์„ฑ๋Šฅ์— ์ง์ ‘์ ์ด๋‹ค.
  • ์žฌ์‹œ๋„์™€ ๋ถ€ํ•˜ ์ฐจ๋‹จ์€ ์‹คํŒจ ๋Œ€์‘ ์ˆ˜๋‹จ์ด์ง€๋งŒ, ๊ณผ๋ถ€ํ•˜ ๊ตฌ๊ฐ„์—์„œ๋Š” ์˜คํžˆ๋ ค ์žฅ์• ๋ฅผ ์ฆํญ์‹œํ‚ค๋ฏ€๋กœ ๋™์  budget๊ณผ graceful degradation ์ „๋žต์ด ํ•„์ˆ˜๋‹ค.